JS Poland 2017 — Takeaways

Notes from the conference. Based on 20 hand-written pages. Strong or misleading interpretations are all on me.

Keynote — Progressive Web Apps

Christian Heilmann (video, slides, twitter)

Is it possible to build?

  • Native features — see what web can do today
  • Twitter Lite as great example of PWA (how it’s built)
  • This trend has a strong support of Google and Microsoft in their stores. Apple seems to ignore it.

Async Functions Awaiting You

Tomasz Ducin (slides, twitter)

  • async/await will be included in ES2017 (supported in all major browsers)
  • Cannot be used within nested functions
  • for-await introduces lazy evaluation on collections, it’s not yet accepted
  • TypeScript & Babel supports it already (you need native Promise, might be problem for AngularJS with $q)
  • Top-level await is a footgun 🔫.

Let the dinosaurs finally die out with a little help of a Service Work

Kacper Sokołowski (slides, demo, twitter)

Service workers…

  • Build for better offline experience
  • Acts as proxy between app and Browser Networking
  • Can easily intercept any fetch() request (example from demo)
  • Works even when user is not on website (can update resources once user goes online)
  • Still Working Draft, not well-supported.
Service worker intercepts calls to server and restores data from cache if needed

React Native — Success case study

Gabor Wnuk (slides, twitter)

Business logic reused, views remain platform-specific
  • For developers — shared codebase means one common knowledge, hot reloading improved development flow (4s vs 4min of compilation)
  • For business — 30% revenue boots, faster development
  • For users — Maintained 60fps even on weak devices, fewer crash reports (From 97% to 98%).

Ending note

Native developers are still needed. Deployments, platform-specific views and things that React Native doesn’t support. Productivity is better but not like 3 times better.

Keep your skills sharp! Developer career in rapidly changing technology world

Michał Nowak (twitter)

Uncertainty of market and ourselves

10 years ago 2007, Web Developers were using flash. You know the story. Can you predict what will happen in 2027?

Traps

  • Comfort Zone — It’s cliche, but still — everyone tends to fall into it. Think if you want to be in this project in next 2 years? If no, now it’s the best time to change.
  • Time waste — 10 years of experience, 4 positions in CV in which every includes “jQuery + WordPress”, only company name and level changes from Junior to Senior.
  • Expenses correlated with salary — Money gives you freedom and takes it back once you get used to it. Think of it if you would want to become musician someday. Avoid increasing expenses together with salary. Lowering lifestyle is not easy.

Career Compass

  • Use fun and challenges as compass of your career.
  • Don’t take that full-stack job from your boss if you’re truly back-end driven.
  • We learn most if we fall in projects that overwhelm us. It’s like we’re beginners again.

The Mobile Web Second Edition: First-Class Citizen on Your Device Now

Maxim Salnikov (slides, twitter)

As Web developers, we had multiple tries to involve in mobile world — but failed as HTML5 apps looked crappy and were unbelievably slow
  • Google plans to integrate PWA within Play Store. PWA can be also distributed within search, by links, etc.
  • There are multiple statistics showing that users aren’t eager to discover new apps often and it’s very expensive to acquire them via App Stores.
  • It lowers entrance barrier for your users to use your app — don’t have to install it, nor update every single time you fix the bug.

RxJS all things!

Simona Cotin (twitter)

Most important async components of the web:

  • Dom Events — Multiple values
  • AJAX — Single value
  • Animations — Cancellable
  • Web sockets — Multiple values.

Why and how people learn RxJS?

  • Promises are great but fit only to AJAX from the list above. We need more consistent way of handling with all those async stuff
  • Consider RxJS as Lodash, but for events.

Challenges

  • Debugging is not very convenient, you have to use special operator to print state: .do(x => console.log(x)).
  • Thinking reactive and understanding API — there is a serious learning curve, mainly because API is hard to understand and documentation is not the best possible.
  • There is much hope in RxJS 5.

DevTools Deep Dive

Alex Lakatos(video, twitter)

Angular is on Fire(base)!

Shmuela Jacobs (slides, twitter)

  • Firebase as service offers you backend solution for authentication, database (stored as JSON documents), file storage, analytic and more.
  • Lately introduced “cloud functions” which allows writing NodeJS code over things not supported in SDK, e.g. API integration, night jobs. This concept feels similar to the idea of micro-services and server-less architecture.
  • It’s heavily integrated with Angular2+, database queries return Observable.
  • You can set constraints on a database (like authentication or validation) however, you do that in strings which are kind of strange.

JWT, WTF?

Phil Nash (slides, twitter)

  • There are lots of abbreviations around the subject of JSON Web Token, but there is no special magic behind them.
  • It’s not magic string, but simply encoded JSON object with Base 64
  • It’s encoded, not encrypted. It’s easily converted into human-readable form
  • Ignore spec clause saying you should validate key using the algorithm from JWT. A client can send you “none” algorithm. Validate key with expected algorithm
  • Where should token be stored?
    Cookies are preferred, but remember to secure from CSRF. Local storage is vulnerable to XSS attacks and forces using JavaScript (and setting additional header)

--

--

JavaScript performance-solver at @Dynatrace. JavaScript trouble-maker on my own

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Piotr Lewandowski

JavaScript performance-solver at @Dynatrace. JavaScript trouble-maker on my own