January 30, 2020
by Federico Rampazzo
The ingredients for this succesful recipe are:
One of the benefits of being a member of Tes's Engineering Team is the training and conference budget, which I used to attend this conference. This enables us to stay in touch with the tech community and provides an opportunity to listen to new ideas. Once back home, we share the ideas we collected either through a presentation to the wider Engineering Team or a post on the blog (like the one you're reading now).
It all started with a struggle.
Pesky politicians in France were apparently messing with people more than usual and a general transportation strike was announced on the days of the conference. Going the extra mile, the dotJS organisers quickly prepared a network of replacement buses to get everyone to the conference. Maybe the past winters in London spoilt me, but I found Paris in December to be insufferably cold, so this was greatly appreciated.
On the way to the conference, we passed by massive tent cities and refugees burning tires to warm themselves up. We finally arrived at the fancy venue and entered the privileged doors of the tech world. The difference was striking.
Paris, please, get yourself together.
Several stands from different cool tech companies were present in the main hall, showcasing their products, giving demos and gadgets in exchange for developers referrals. Networking over croissants and fruit was pleasant; soon discussions started on whether React was better than Vue and on who copied who. Shortly after, we were welcomed in the theatre and the sessions started to roll in.
Tim Neutkens explained in his talk how useful frameworks can be in making developers life easier while providing performance benefits for the users.
This definitely felt like a "Why use next.js" talk, which speaks volumes of the qualities of next.js. Tim mentioned there is still room for improvements, with memory usage optimisation being something he's working on.
Eduardo San Martin Morote took us for a ride on how the vue.js router solution works, digging into the History API quirks.
Eduardo also shed light on the dark side of Open Source and the challenge of being a OSS developer who is not working for a company; Patreon apparently takes a big cut of your donations while Github/Microsoft gives 100% of the donations to the developers (and matches up to 5,000$).
Sara Vieira launched herself in an ode to simplicity.
Her message is that accessibility is down to developers and accessibility is more than being barely readable by screen readers; people without disabilities forget about things that disappear from the page, they rely on translating websites, they may not be as familiar with the internet as developers are.
Would your parents be able to use your website? Take the burden so people won't have to. Pretty code won't make your users come back, good usability will.
Some more of her tips:
A few tips from his talk:
Chris Heilmann delivered an inspiring presentation on what we as developers are focussing on and what our environment is like.
We mostly depend on abstractions, we focus on creative solutions for our pleasure and not on end users. Too busy chasing the next shiny thing to justify expensive salaries - we became the bankers of the 80s. Getting into tech is not as easy as it could be, especially at a time when automation is taking away many manual jobs. There is not enough information on how to become a developer; we have massive dependencies and we have a hostile environment.
Moreover, despite all the solutions we built for ourselves, our environment is not great. Context switching between our code editor, the website we're building, the documentation we're writing and Stack Overflow kills our workflow. We need a holistic developer tool, we could have AI powered autocomplete sourcing the best patterns from the most popular projects. We could have documentation show up in the code editor so that we can learn while coding.
Jana Beck gave an amazing presentation on data visualisation.
My main takeaways were:
Adam Bradley presented the challenge recently faced by the Ionic Framework team:
Teams use different UI frameworks, how can Ionic maintain a single codebase and compile to all the different frameworks?
The answer is Stencil, a tool which is able to compile Web Components to components usable in React, Vue.js, etc. Impressively, it also features optimisations from static analysis, dead code removal and server side rendering.
His message: you can't go wrong when picking any of the popular frameworks, but if you want your components to be widely reusable, consider using a solution like Stencil.
Igor Minar talked about Angular's goal of being an evergreen library. The browser is a relatively stable platform, while the JS libraries tend to be instable.
Igor pointed out a few techniques to improve the situation:
Phil Hawksworth made a compelling point about rethinking your architecture to have static websites as much as possible.
The main concept behind this line of thinking is "Bake, don't fry", don't waste CPU power to render dynamic pages; you should use that CPU power once to generate pages, cache them and serve them many times.
This is not only about saving energy, it's also about:
He drove his point home with a demo of a simple, scalable picture generator; the requirements were:
Evan You analysed the state of components in his talk.
Components are often implemented as classes, they accept inputs and manage lifecycle and side effects (such as callbacks called on actions); all of these are implicit contracts.
Classes have several problems:
Hooks are a move in the right direction, as they compose well.
Evan also talked in favor of types, as they help with maintainability; Vue itself is trying Typescript.
Asim Hussain advocated for more cloud usage in his talk.
Asim started by talking about all the green choices we're willing to make (making all the green parents envious, he even used cloth nappies with his son!). Why, then, are we not pursuing the green option when talking about deployment?
Idle servers consume energy, so businesses who underutilise their CPU are wasting energy. Using serverless, a centralised provider is pooling resources and can schedule the execution of your tasks in a more efficient way, hopefully getting closer to full utilisation.
If you're worried about getting a long cold start from your lambda function, Azure (where Asim works) has a flag to keep at least one hot server on (sacrificing some efficiency).
I can't help but wonder: If it's more efficient how come lambda functions are not priced as competitively as normal VMs? As one unsung hero put it: "Green is the color of money".
Charlie Gerard impressed us with the hidden potential of sound data.
She trained a Tensorflow model to recognise sound and showed us how to detect different scenarios happening based only on audio from her microphone.
I don't think I've ever seen someone brushing their teeth on stage, but that definitely helped cement the memory of it.
Bert Belder talked about Deno, the node.js killer made by creators and core contributors of node.js.
Before releasing a 1.0 version they plan to:
Apparently, fans in Japan made dinosaurs based books and illustrations about Deno.
A few thoughts after seeing this talk:
Vlad Filippov showed us the internals of WebAssembly.
WebAssembly is implemented in JS purely using Floats, Integers and Functions. There is a small interface to send data and receive data from WebAssembly, which is being worked on and improved. Ideally you would just call a C/C++ program with a
But will developers be of the same opinion once they can pick any language to code within the browsers?
Sven Sauleau recommended using WebAssembly once more.
You get better performance and you can run in the browser and in an increasingly larger pool of runtimes (Rust, Python, .NET, node.js, deno, etc).
It's also a W3C recommendation standard and it's ready to use.
A few leaving expert tips and considerations:
Vladimir Agafonkin, the author of the beloved Leaflet, gave us a performance optimisation lesson.
If you write carefully and knowing the limits of V8, you can approach native speed.
mapkeeps making allocations and throwing them away
Vladimir shared some very interesting thoughts about education, taken from his own experience:
James Long talked about offline first applications and how to make them using CRDTs.
Applications tend not to work offline, which is a huge usability fail. Unfortunately offline applications are part of a distributed system and doing syncing correctly is hard.
James implemented his syncing on top of SQLite and went through a series of syncing options with various drawbacks. He ended up with Conflict-Free Replicated Data Types, which means building your application on top of commutative idempotent data structures.
An SQLite table can be seen as a G set of LWW map, allowing developers to forget the complexity of syncing when developing their application.
This methodology has great potential for end to end encrypted applications.
Kassian Wren prepared a musical performance using node.js to light up a guitar when one note is played.
She's using a complicated setup using an Ableton fork (to support the real music) a Raspberry PI and a node.js server.
Her talk was an invite to use node.js, outside of work, for fun and art.
The solution which is being worked on by the TC39 consists of:
Daniel Ehrenberg presented how the TC39 works.
There are 4 stages through which every feature passes:
Daniel presented a few upcoming features (you can check them out in the video above), among which dynamic imports, decorators, pipeline operators and BigDecimal.
As a closing remark, Daniel spoke about the culture at TC39. They're working on creating a transparent and inclusive environment by:
I really enjoyed the conference and the quality talks - which translated to a ridiculous amount of notes!
I hope you'll be able to reap some of the good ideas reported here.