Skip to content

Instantly share code, notes, and snippets.

@AWaselnuk
Created August 20, 2016 03:49
Show Gist options
  • Save AWaselnuk/66be5eab318f8a1b34db6a383c24b279 to your computer and use it in GitHub Desktop.
Save AWaselnuk/66be5eab318f8a1b34db6a383c24b279 to your computer and use it in GitHub Desktop.
Notes from ForwardJS conf. July 29, 2016

Notes from ForwardJS conf - July 29, 2016

ForwardJS conf was a JavaScript conference held at the Regency Ballroom in San Francisco. It was my first time attending a tech conference and my first time in San Francisco and it was magical! The format was a mix of panel discussions and presentations, as well as full day workshops throughout the week.

I attended the Asynchronous programming in JavaScript workshop put on by Kyle Simpson (@getify) and it was awesome. We basically learned how to control time. I left feeling like a Tralfamadorian.

I will be writing a bit more about why I took chose that course on my blog. Below are the rough notes from talks and panel discussions:

How Your Brain is Conspiring Against You Making Good Software

A talk about cognitive biases and how they can disrupt our day to day work by Jenna Zeigen

We think we are better than we are. We also think we are worse than we are.

When we are skilled we underestimate how hard it is to do a task.

Yet another reminder for senior developers and leads to be patient and sympathetic to people just starting out. This can apply to software knowledge but also company knowledge!

We favour members of our own in-group. It is cognitively difficult to find people outside our inner circle.

We have to work extra hard to build diverse teams. Our brains make it hard for us.

We prefer the status quo.

We rely on examples that come to mind when evaluating something. For example, we are afraid of planes because we can remember examples of plane crashes but not plane successes.

This reminds me of one of my favourite books, Risk by Dan Gardner

Real-time Applications

A panel discussion with Guillermo Rauch, Aysegul Yonet, and Daniel Miller

Component based architecture could be tricky with web sockets if different components are establishing connections without knowing about each other. HTTP2 makes this easier because you would worry less about multiple connections.

This is the only thing that stood out for me but I think it's very important. The best practice these days is to compose GUIs out of highly decoupled components, but things like action cable could potentially make this very dangerous from the perspective of resource consumption.

Serverless Application Architecture

A panel discussion with Ben Sigelman and Alex Salazar.

With something like Lambda you can deploy changes to a single part of the system without the entire system being redeployed.

The downside to the Lambda approach is keeping versioning up to date between each tiny API. Deploying can become super complex.

The NoSQL hype machine did a bad job of communicating the drawbacks. This is a huge issue right now with serverless architectures and Lambda.

Anytime you have latency you can generally solve it with caching. However caching can fall apart in serverless architectures.

Performance is not ready yet in serverless architectures. It is ready in microservices. Chaining functions can causes compounding latency issues.

Async in JS is an excellent way to think about programming for the next 10 years of how systems are going to be setup. The paradigm of asynchronous will be needed for distributed systems.

Overall I felt like serverless architectures where interesting but also totally crazy sounding. It mostly seems like a maintainability nightmare.

The Web meets the Virtual and Holographic Worlds

A talk by Max Firtman

It's time to free the web from its 2d box.

Noticed this theme throughout the talk. Even within the early 3D worlds, the web is still represented on two dimensions and looks basically like it does on a laptop screen. As interaction designers, we should start thinking about other ways to present the web.

Hololens runs windows 10 within itself.

That's just neat.

The WebVR spec has a bunch of stuff including information about the room.

I had no clue their was an actual WebVR spec of any kind. This is ... magnificent!

Imagine responsive images based on distance. MIP maps would help implement this. When far away from an image we send a low Rez version but this changes as they walk closely.

Quick example: @media user-distance: far-away

How do you know viewport size in these cases?

Practical Performance Tips to Make Your Cross Platform Mobile Apps Faster

A talk by Doris Chen

You should measure your target devices on your production app.

This talk had really interesting data sets showing perf metrics from a bunch of different devices running Cordova apps. Each device had completely different profiles and tradeoffs!

Use safari mobile profiling tools for iPhone. Chrome mobile profiling tools for Android.

Use the JavaScript timing API to measure specific scenarios.

Reduce element count for performance boosting.

The example she gave was of changing a list of links from 2 elements to 1. In my opinion it was very impractical, hyper-optimized performance tuning. The main take away is that the number of nodes affects performance.

Avoid layout thrashing by doing a full read followed by a full write loop.

Batch layout operations into reads and writes

Only show the number of list items in the viewport when scrolling. This technique is called virtualization.

Use request animation frame.

Clean up event listeners for GC. Use event delegation.

Building Better Browsers

A panel discussion with Jeff Carpenter, Jen Fong-Adwent, Jon Kuperman, and Yan Zhu

Let's encrypt website for easy https. https://letsencrypt.org/

The future of ads could be just renegotiating what ads are. Currently they suck and have a huge negative performance impact.

Google contributor program lets you pay the site directly. This is one alternative to the current ad model.

Corporate backed open source projects are probably the best model we have right now.

You can see if your email has been breached at haveibeenpwned.com

I just checked and I have been pwned 3 times apparently. Fuck.

Be aware of your developer audience before pushing more and more features to the web, especially complex things. The web is making more and more native features possible but tons of developers won't bother doing what is possible. They will simply do what is easy.

Advanced Front End Debugging with Google Chrome

A practical talk by Rocco Balsamo

Check out the snippets feature for running common scripts in the console.

OH MY GOSH. AMAZING. SUCH TIME SAVED!!

Use Console.profile for perf profiling.

Wrap global functions to add tracking to them.

This was an interesting idea. You essentially monkey patch a global function and shove a console tracker inside of it in case you need to track down what is calling it. The really relevant example was tracking setInterval.

Dev tools has a command panel! Cmd-shift-p

You can have code hit breakpoint a whenever an attribute changes.

You can set XHR breakpoints

You can add console.log into the conditional breakpoint section to easily trace things without changing sourcecode.

This is a neat hack. Because console.log returns undefined, it evaluates to false. This means you can add log messages to breakpoints to trace things.

I learned so many neat tricks from this one. Thank you so much Rocco! You can see his notes here: Roccobalsamo.com/debug

Code Trade-offs: Benefits and Drawbacks of Each Decision

A panel discussion with Richard Feldman, Amy Lee, Brian Lonsdorf, Rachel Myers, and Ben Lesh. This was my favourite talk because the facilitator, Brian, asked a bunch of questions with no simple answer.

What does it feel like to read through code when there are a lot of functions?

What if programmers aren't the only ones reading your code?

Constraints are actually abstractions over constraint-less things.

Modularity is sort of a myth. Things always start to know about each other.

Integration testing is super important. Unit testing doesn't give enough. You can have 100% coverage and still break anything.

When it comes to making tough tradeoffs, we should always fall back to the user experience as the final decision maker.

That last gem was from Richard Feldman. I couldn't agree more!

Miscellaneous notes

Stroopwaffles are amazing

This is a delicious dutch treat. Definitely would eat again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment