diff --git a/design/blog.fig b/design/blog.fig new file mode 100644 index 000000000..d23e919d2 Binary files /dev/null and b/design/blog.fig differ diff --git a/src/data/posts/the-last-jsconf-in-budapest.md b/src/data/posts/the-last-jsconf-in-budapest.md new file mode 100644 index 000000000..705a00b28 --- /dev/null +++ b/src/data/posts/the-last-jsconf-in-budapest.md @@ -0,0 +1,444 @@ +# The last JSConf in Budapest + +I had the pleasure and the honor to attend the JSConf for Eastern-Middle Europe - [JSConf Budapest](https://jsconfbp.com/) which took place in the beautiful [Urania National Movie Theatre](https://urania-nf.hu/en) in the city center of Budapest, Hungary on 27th and 28th of June, 2024. + +JSConf Budapest is one of the many events which happen all over the world. This one aims to be the JavaScript Conference for Eastern-Middle Europe, an area so diverse in culture, people and views. It is a strictly nonprofit, open-sourced and community driven conference for the community of JavaScript, with the purpose to build and educate about new technologies, ideas and culture. You can see more on the [about page](https://jsconfbp.com/about-us). + +Sadly, the organizers announced that due to lack of financial sponsorship, this was the last event from the JSConf series to ever happen in the gorgeous city of Budapest. + +This year's event had a unique agenda and seasoned speakers as well as incredible and energetic MCs. + +The MCs were [Anjana Vakil](https://x.com/AnjanaVakil) and [Tejas Kumar](https://x.com/TejasKumar_) and both of them made sure to provide us - the audience - with great portions of energy and fun. + +Below I will provide some more details about all talks with a small summary and quick links to resources or descriptions. + +This document lists my remarks on all talks during both days of the conference. While I try to keep my opinion on each talk to myself and be as objective as I can, you will notice that sometimes I express my thoughts and state whether a particular idea is useful or not. + +## First day (June 27th, 2024) + +### "What's Coming Next to JavaScript?" by [Nicolò Ribaudo](https://x.com/nicoloribaudo) + +Nicolò is part of [TC39](https://tc39.es/) - the group which specifies the JavaScript language. He is also maintaining one of the most popular packages on NPM - [Babel](https://babeljs.io/). + +This was the opening talk of the conference and was about the upcoming features in the [ES2024](https://www.w3schools.com/js/js_2024.asp) and ES2025 versions of the EcmaScript language. It was special because at the time he gave the talk, the committee also accepted and approved the new ES2024 version of EcmaScript. + +Nicolò started by explaining what is TC39 and how the JavaScript language gets updated, he told us about all of the stages a proposal goes until it is becomes an integral part of the language specification. + +After showing us what are the new features of the language he also provided us with a sneak peak of the next year's proposals - ES2025. + +### "Building Empathy and Accessible Apps" by [Isabela Moreira](https://x.com/isabelacmor) + +Isabela is a software engineer at Microsoft and her talk was focused on accessibility, inclusion and empathy. + +She told us that 15% (around 1B) of the world population has some disability so we should think about that when we design and build applications - all user interfaces should be inclusive and built for all people. + +She gave us some ideas on what tools to use in order to react at least AA conformance with [WCAG](https://www.w3.org/WAI/standards-guidelines/wcag/) (AAA would be best): + +- [Figma's colorblind plugin](https://www.figma.com/community/plugin/733343906244951586/color-blind) +- [https://www.whocanuse.com/](https://www.whocanuse.com/) - a tool that brings attention and understanding to how color contrast can affect different people with visual impairments. +- The browser devtools provide great details about contrast ratio +- [Designing Accessible Color Systems](https://stripe.com/blog/accessible-color-systems) - an article by Stripe +- Following the semantic coding conventions (e.g. don't use a `
` if you need to bind a click handler, rather use a ``) +- Testing + - Manual testing - we just need to make sure that our applications can be used by people who use assistive technology such as keyboards, mice, screen readers, etc + - Semi automated - [Accessibility Insights](https://accessibilityinsights.io/) extension or Playwright + Ace Core (or Axe React) + +### "Hear! Hear! An Accessibility Tale from a Hearing-Impaired Senior Software Engineer" by [Ante Tomić](https://x.com/antetmc2) + +Ante is a fellow from the Balkans - he is originally from Zagreb, Croatia. He is a senior software engineer at InfoBip. + +His talk was again focused on accessibility and inclusion but this time it was specifically targeted at people with hearing loss. + +According to his research, 1 in 8 people in USA has hearing loss with similar number in the UK - 1 in 10. + +Ante raised a question during his talk - "Should we consider supporting hearing impairment in our apps?" and throughout it he actually explained why the answer is "Yes". + +Hearing impairment is unique to everyone, it’s not a matter of volume only. There is [an interesting tool](https://bit.ly/hearing-loss-simulator) which can be used to simulate different types of hearing loss. + +At the company where Ante works, they created an AI-powered app for speech impairment - [Whispp](https://bit.ly/infobip-whispp). + +In terms of web development, Ante gave us some tips on how to build accessible and inclusive applications for people with hearing loss: + +- we should add captions to videos (similar to how Meet, YouTube or MS Teams does it) - +- we should use icons, small content and better separation and structure of our web apps content + +Here are some resources which Ante used for his talk: + +- [https://audio-accessibility.com](https://audio-accessibility.com) +- [https://accessibility.blog.gov.uk](https://accessibility.blog.gov.uk) + +### "Decoding Perplexing TypeScript" by [Daria Caraway](https://x.com/dariacaraway) + +Daria is a senior software engineer at Netflix and she occasionally speaks at conferences and events but is not very active on social media. + +She showed us an interactive reverse-engineering game which aims to teach us TypeScript by slowly diving into its typing system and exploring the built-in types. + +It is hard to explain the game contents but the actual game is available on her [GitHub profile](https://github.com/darcar31/slides/blob/main/2024/JSConfBudapest/DecodingPerplexingTypescript-JSConfBDP.pdf) so feel free to jump in and learn. + +I have to admit that I actually learned something from this talk and apparently I am not the only one as Tejas (one of the MCs) was also amazed by it [in his tweet](https://x.com/TejasKumar_/status/1806274356865065152). + +Apparently `-?` in TypeScript mapped types removed optionality: + +```ts +type Thing = { + [key: string]-?: string +} +``` + +### "Safeguarding Web Applications Against Token Theft: Fortifying Security and Trust in Web Browsers" by [Shikhar Kapoor](https://x.com/kapoorshikhar) + +Shikhar's talk was focused on web security. He started by explaining the oAuth flow and what a Bearer token is. + +He explained that there are several different types of attacks: + +- Replay attack - DPoP proof is unique for each request but it can be stolen so the validity of the token can be reduced in order to mitigate this issue and possible attack +- Token Pre-Generation attack - for example extension which generates DPoP proofs ahead of time and use them later +- Key extraction attack - Gain control over CDN and modify JS to make the private key extractable - SRI (subresource integrity) to protect the resource + +Then Shikhar listed the current problems which authenticating on the web has: + +- Man-in-the-middle +- Pass-the-cookie + +The talk continued about the [Proof-of-possession IETF RFC](https://oauth.net/2/dpop/) and explained how we can use it in order to secure our authentication tokens by using the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) to generate asymmetric key pair (particularly the `generateKey` method and its `extractable` argument) and creating of a [JWT proof (DPoP header)](https://docs.use.id/docs/creating-a-dpop-proof-header). + +### "Oh No I'm Stuck! A Guide to Detangling a Complex Codebase" by [Toluwanimi Ajewole](https://x.com/tolu_ajewole) + +Toluwanimi is a software developer at N26 - a digital bank from Berlin, Germany. She has several years of experience with frontend technologies such as VueJS and ReactJS. + +Her talk was focused on how a new joiner can find their way in a complex, tangled codebase - she was onboarded in the complex ReactJS codebase of the N26 application as a frontend developer with VueJS background. She gave tips on how such onboarding can be made easy and less stressful. + +The ideas she shared are the following: + +- team members collaboration should be one of the most important aspects +- usage of tools such as [AppMap](https://appmap.io/) or its [VSCode extension](https://appmap.io/product/appmap-in-the-code-editor) +- we should map out as much as we can see on the filesystem or in the UI +- we should write and maintain documentation + +Toluwanimi's talk was inspired by the [Thinking in systems book](https://www.amazon.com/Thinking-Systems-Donella-H-Meadows/dp/1603580557) by Donella Meadows. + +### "The Actor Model, Behind the Scenes" by [David Khourshid](https://x.com/DavidKPiano) + +David works at [Stately](https://stately.ai/) and also works on [XState](https://xstate.js.org/). + +He's been talking about state machines for years and his talk was about the [Actor Model](https://en.wikipedia.org/wiki/Actor_model). He also explained what's the relation between [Actor Model and state machines](https://stately.ai/docs/actor-model#:~:text=The%20actor%20model%20allows%20developers,XState%2C%20it%20becomes%20an%20actor.) + +There is [an interesting blog post](https://stately.ai/blog/what-is-the-actor-model) about how Actor model applies and can be used in programming. + +### "Don't Use JS for That: Moving Features to CSS and HTML" by [Kilian Valkhof](https://kilianvalkhof.com/) + +Kilian is working on a new, dev-oriented web browser which is called [Polypane](https://polypane.app) - it is built with web technologies using the Electron framework. + +I am fond of CSS and think that whatever can be done with HTML and CSS should not be done with JavaScript and this should be one of the rules of the frontend developer. + +Fortunately, Kilian's talk was exactly about this and I have to say that it was my favorite. + +His talk was full of fun stuff so I will try to sum them up below: + +- Custom switches using `` and its checked state - [here](https://dev.to/karandeveloper/how-to-create-a-custom-toggle-switch-using-css-4pmi) is an example of how this can be achieved. It is important to note that there is a `switch` attribute to the `` but unfortunately (at the time of writing) it is only supported in Safari. Hopefully it will be adopted by the rest of the evergreen browsers. +- Using of `` element for autocomplete widgets instead of complex and large JavaScript libraries - [here](https://www.sitepoint.com/html5-datalist-autocomplete/) is an example. +- Secure and native color picker using `` - since it is built into the browser, it can pick color from anywhere on the page, including the browser dev tools - [here](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/color) is a link to MDN which explain everything you might need to know. +- In-page transitions using: + - the [`scroll-behavior: smooth`](https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior) CSS declaration + - the [`Element.scrollIntoView()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView) with its `behavior` option set to `smooth` + - the `window.scrollTo()` method with its `behavior` option set to `smooth` + - the [`:target`](https://developer.mozilla.org/en-US/docs/Web/CSS/:target) CSS pseudo class when scrolling to sections + - the [`scroll-margin-top`](https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-margin-top) CSS property if our header is fixed to the top of the browser +- Pure HTML accordion/collapsible widgets using the `