CoffeeScript 2.0 Released

CoffeeScript

CoffeeScript just made v2.0 available and there’s a lot included in this release that has been in development since the beginning of 2017. I think the best way to sum of the changes is the following from the announcement:

This new release of the CoffeeScript language and compiler aims to bring CoffeeScript into the modern JavaScript era, closing gaps in compatibility with JavaScript while preserving the clean syntax that is CoffeeScript’s hallmark.

I think support for the following is a nice addition, especially since most devs have been using them for a while now in vanilla JS:

  • Modules: import/export
  • Classes: class Animal
  • Async functions: await someFunction()
  • Bound/arrow functions: =>
  • Function default parameters: (options = {}) ->
  • Function splat/rest parameters: (items...) ->
  • Destructuring, for both arrays and objects: [first, second] = items{length} = items
  • Object rest/spread properties: {options..., force: yes}{force, otherOptions...} = options
  • Interpolated strings/template literals (JS backticked strings): "Hello, #{user}!"
  • Tagged template literals: html"<strong>coffee</strong>"
  • JavaScript’s for…of is now available as CoffeeScript’s for…from (we already had a for…of): for n from generatorFunction()

Release notes can be found here and the official release on GitHub can be found here.

Startup with Google

Google

Google has a new resource for anyone wanting to start a startup and it’s called Startup with Google. It targets founders and ranges from technical topics to best practices and even helps connect founders with accelerators and local events. Most of the resources focus on promoting Google services such as Android, Google Play, Google Analytics, Google Cloud, G Suite, AdWords, TensorFlow, etc. This is truly a pitch for startups to jump on the Google train and leverage as many Google services as possible. For some startups, this will make sense, but everyone should evaluate their needs before deciding to dive head first.

I like what Google is trying to do here. While it is self-promotion, it acts as a guide for startups. It would be nice to see this evolve and potentially include a logged-in experience for startups to register and be connected with organizations or other professionals. Right now, it’s basically a pretty collection of links. But, as Google states:

You’re out in front, we’ve got your back

Automattic and React Break Up: WordPress.com Remains Only Child

Automattic

Matt Mullenweg wrote a blog post explaining Automattic’s decision to halt development on their Gutenberg project that was meant to integrate React into WordPress. The main issue at hand is Facebook’s patent clause that is included with React and has been added to the Apache Software Foundation’s (ASF) list of disallowed licenses. From the ASF:

The Facebook BSD+Patents license includes a specification of a PATENTS file that passes along risk to downstream consumers of our software imbalanced in favor of the licensor, not the licensee, thereby violating our Apache legal policy of being a universal donor. The terms of Facebook BSD+Patents license are not a subset of those found in the ALv2, and they cannot be sublicensed as ALv2.

This is a shame for multiple reasons and I’m not completely faulting Facebook but this does ruin the spirit of open source when the decision to avoid a certain open source library isn’t driven by the quality/support of a library and is driven by legalese and potential lawsuits in the future. Ultimately, this doesn’t prevent me from continuing to use React (I’ll be amazed if anything I build gets me sued/allows me to sue someone) but I’m sure some organizations will now have to weigh the risks. I feel like everyone has a similar goal, so I’m hopeful that after some time, lots of meetings with lawyers, everyone will agree to something that matches the spirit of open source.

Yarn 1.0 Released

Yarn

The Facebook team has released Yarn 1.0 which is pretty impressive considering it was initially launched 11 months ago. The stats are pretty impressive with 175K projects on GitHub using Yarn. There’s also some new features with Yarn 1.0 such as Workspaces, auto-merging of lockfiles, selective version resolutions and a bunch of other fixes and improvements. Also happy to see in the “What’s next?” section a focus on improving the package release process, package security and committing to following semver.

Get a $50 Gift Card for $41 from Amazon

Update: Sorry everyone, this deal is official dead. It was only valid on 2/22.

Amazon is offering a discount on purchases $50 and greater using promotional code “BIGTHANKS” at checkout. If you’re not too sure what to get, gift cards are a great way to get the savings now and apply it later. Unfortunately, this will not work on an Amazon giftcards or a Prime membership. Some good options are Starbucks, Banana Republic, Whole Foods…


React Native v0.40.0 Released

This is the first release with the new monthly cadence, so 0.40 is known as December 2016. The next version will be 0.41 - January 2017, and will be released at the end of the month.

Breaking Changes

iOS native headers moved

This change affects all native modules and application code on iOS that refer to react native .hfiles

After e1577df, Native code on iOS must refer to headers out of the react namespace. Previously the following would work:

#import "RCTUtils.h"

But now all headers have been moved:

#import <React/RCTUtils.h>

This means that all iOS native libraries need a major version bump for RN 0.40. We attempt to minimize changes of this magnitude, and we apologize for any inconvenience caused.

require(‘image!…’) no longer supported

Support for require('image!…'), which has been deprecated for a long time, is now removed. If you are still loading images that way in your apps, make sure to check the documentation for alternatives.

getTransformModuleOptions is removed

If you were having custom rn-cli.config.js in your app and for some reason, using getTransformModuleOptions, make sure to check @davidaurelio commit ca58e0a for details on the changes.

Android

Bugfixes

  • Fix WebView crash for links of unknown schemes (35e75c8) – @rigdern
  • Fix Overlay for Marshmallow 23+ (e335ca0) – @jpshelley
  • Stop silently failing for requires on Android (63eb4df) – @javache
  • Fix SamplingProfiler and HeapCapture for apps that lazy load react modules (d919eb7)
  • Call handleUpdateLayout even if the content didn’t change (fb23000) – @Kerumen

New features and enhancements

  • Add ability to specify main Activity in run-android (9fb520e) – @grabbou
  • Add disableExtractUI prop to TextInput on Android (1b870d2) – @rigdern
  • Add DatePicker mode configurations (eaccd7e) – @pandiaraj44
  • Enable apps to provide a custom configuration to Fresco (8b199a7) – @rigdern
  • Speed up EventEmitter emit() by ~50% (c4046d6) – @Venryx
  • Enable ad-hoc dependencies to be pre-downloaded (aac8daf) – @rigdern
  • Keep ScrollView content visible after edits (528a3c7) – @rigdern
  • Decrease cost of reflection (911c05a) – @rigdern
  • Update android gradle plugin version to 2.2.2 (3ee5c5b) – @raycohen
  • Expose Android’s includeFontPadding for Text (7b3e67d) – @benvium
  • Handle “Never Ask Again” in permissions and add requestMultiplePermissions (51efaab) – @cmcewen
  • Remove Jackson dependency (6fef014)
  • Remove REACT_HEADERS from RN BUCK file (9024998) – @javache
  • Implement onViewAppear by creating a new EventListener on ReactRootView listening for when it’s attached to a RN Instance (e06b8db) – @donyu

iOS

Bugfixes

New features and enhancements

General

Bugfixes

New features and enhancements

React Native v0.39.0 Released

React Native

Breaking changes

See this document for a complete list of breaking changes (three) and actions required.

General breaking changes

Android breaking changes

  • Move to new C-based implementation of css-layout in RN Android (d63ba47) – @astreet
  • Android: Fix inconsistency with fractional TextInput padding (aa85408) – @rigdern
  • Disable debug menu when monkey is running (9a8b5d9) – @rigdern

General bugfixes

General new features and enhancements

Android bugfixes

New Android features and enhancements

  • Expose setAllowUniversalAccessFromFileURLs in Android WebView (b6a38e8) – @locly
  • Update logging to support levels, print messages in Android logcat on assertion failures (a731a23) – @astreet
  • Proper NativeAnimated node invalidation on Android (6f5433f) – @ryangomba
  • Reduce overdraw layers by hiding cards when they are not visible (54beee2) – @rigdern
  • Expose Image’s onError event to JavaScript (e87e181) – @rigdern
  • Provide more info when image fails to load (d117f55) – @frantic

iOS bugfixes

  • Ensure notification payload is passed to completion handler (df6b8bd) – @npomfret

New iOS features and enhancements

Hyperloop Brings React and Ruby Together

Ruby on Rails

Hyperloop is a great approach for Ruby developers who want to use React but aren’t willing to spend a lot of time learning and mastering JavaScript. I have always liked Ruby and a language so I can imagine if I spent several years working in Ruby that I wouldn’t want to have to split my time between writing Ruby on the backend and then JavaScript on the frontend. So while I won’t be using Hyperloop, I think it could be great for Ruby devs. Although, the translation from Ruby to JavaScript could be tricky and/or cause compatibility issues in the future. Looking at the Get Started guide, I do like the elegance of writing Ruby code to implement React components:

class HelloWorld < React::Component::Base
  param :time, type: Time
  render do
    p do
      span { "Hello, " }
      input(type: :text, placeholder: "Your Name Here")
      span { "! It is #{params.time}"}
    end
  end
end

every(1) do
  Element["#example"].render do
    HelloWorld(time: Time.now)
  end
end

They have a bunch of great tutorials and one of the first ones I wanted to look at was how life-cycle methods are implemented. They changed things a bit and went with before_mount, after_mount, after_udpate instead of componentWillMount, componentDidMount and componentDidUpdate. Not exactly sure why they changed the methods.

Again, interesting concept and great for existing Ruby devs.

React v15.4.0 Released

Facebook React

The React team just announced the availability of React 15.4.0 – lots of changes with the major one being the explicit separation of React and React DOM. It should be a seamless change if you’ve been using a recent release of React. There’s also some updates to profiling your app in Chrome Dev Tools. The release notes can be found on GitHub, but here are the highlights:

React

  • React package and browser build no longer “secretly” includes React DOM. (@sebmarkbage in #7164 and #7168)
  • Required PropTypes now fail with specific messages for null and undefined. (@chenglou in #7291)
  • Improved development performance by freezing children instead of copying. (@keyanzhang in #7455)

React DOM

  • Fixed occasional test failures when React DOM is used together with shallow renderer. (@goatslacker in #8097)
  • Added a warning for invalid aria- attributes. (@jessebeach in #7744)
  • Added a warning for using autofocus rather than autoFocus. (@hkal in #7694)
  • Removed an unnecessary warning about polyfilling String.prototype.split. (@nhunzaker in #7629)
  • Clarified the warning about not calling PropTypes manually. (@jedwards1211 in #7777)
  • The unstable batchedUpdates API now passes the wrapped function’s return value through. (@bgnorlov in #7444)
  • Fixed a bug with updating text in IE 8. (@mnpenner in #7832)

React Perf

  • When ReactPerf is started, you can now view the relative time spent in components as a chart in Chrome Timeline. (@gaearon in #7549)

React Test Utils

  • If you call Simulate.click() on a <input disabled onClick={foo} /> then foo will get called whereas it didn’t before. (@nhunzaker in #7642)

React Test Renderer

  • Due to packaging changes, it no longer crashes when imported together with React DOM in the same file. (@sebmarkbage in #7164 and #7168)
  • ReactTestRenderer.create() now accepts {createNodeMock: element => mock} as an optional argument so you can mock refs with snapshot testing. (@Aweary in #7649, #8261)

GoPro Recalls 2,500 Karma Drones

GoPro Karma

Not a great series of updates from GoPro, from missing revenue expectations by 23% and now issuing a recall for 2,500 Karma drones which is GoPro’s newest product which enters the drone space. From the official announcement:

GoPro is committed to providing our customers with great product experiences. To honor this commitment, we have recalled Karma until we resolve a performance issue related to a loss of power during operation. We plan to resume shipment of Karma once the issue is addressed.

It’s a scary thought to have your $800 drone suddenly lose power while in the air and just start crashing to the ground. But another interesting point is that there has only been 2,500 drones sold. I’m curious how many people decided to go with the DJI Mavic instead of the Karma. I was leaning towards the Mavic personally but the price increase was making me a little hesitant. But with this news, I’m definitely a Mavic supporter now.