Weekly event at Futurice where developers from all our offices in Finland, Sweden, Norway, Germany and UK are sharing their experience with various frameworks, languages, techniques, services and projects.
Having your website's TLS/SSL certificate expire is not a good thing. Sometimes you might not pay enough attention and could miss a renewal deadline causing a lot of trouble for yourself and your users. It's even worse if you have a lot of websites to manage as a hobby or in a professional setting. Jae Lo Presti had a similar challenge. In this short TechWeeklies session, Jae takes you through the different solutions she considered, and why she decided to create her own solution in the end. The talk also includes a walkthrough of Jae's fast and easy-to-deploy solution using vanilla Python that works correctly for the requirement. Presenter: Jae Lo Presti works as a software developer in Helsinki and is an active open-source contributor in her spare time.
Having your website's TLS/SSL certificate expire is not a good thing. Sometimes you might not pay enough attention and could miss a renewal deadline causing a lot of trouble for yourself and your users. It's even worse if you have a lot of websites to manage as a hobby or in a professional setting. Jae Lo Presti had a similar challenge. In this short TechWeeklies session, Jae takes you through the different solutions she considered, and why she decided to create her own solution in the end. The talk also includes a walkthrough of Jae's fast and easy-to-deploy solution using vanilla Python that works correctly for the requirement. Presenter: Jae Lo Presti works as a software developer in Helsinki and is an active open-source contributor in her spare time.
Property-based testing is for people who do not like to write unit tests. Instead of providing examples, you provide a fact that should hold true for any possible input, and let the test framework, fast-check in this case, generate random inputs for you. In this live demo session, Jan shows how to use this for even more complex UI testing with a TodoMVC that uses React Hooks. Presenter: Jan van Brügge
Property-based testing is for people who do not like to write unit tests. Instead of providing examples, you provide a fact that should hold true for any possible input, and let the test framework, fast-check in this case, generate random inputs for you. In this live demo session, Jan shows how to use this for even more complex UI testing with a TodoMVC that uses React Hooks. Presenter: Jan van Brügge
Many developers are interested in Security. Yet, they often seem to struggle to get security efforts into their product roadmaps. With security and development silos still very much present in the organisations, where do we start? Worry no more! Luisa Emme has 3 tips for you that she shares in this talk, with some stories and anecdotes from her past experiences. They have not only proven effective in introducing Developer-Driven Security in agile teams, but also been successful in influencing a DevSec culture in medium sized organisations. Presenter: Luisa Emme
Many developers are interested in Security. Yet, they often seem to struggle to get security efforts into their product roadmaps. With security and development silos still very much present in the organisations, where do we start? Worry no more! Luisa Emme has 3 tips for you that she shares in this talk, with some stories and anecdotes from her past experiences. They have not only proven effective in introducing Developer-Driven Security in agile teams, but also been successful in influencing a DevSec culture in medium sized organisations. Presenter: Luisa Emme
While many languages support laziness in some form, be it by explicit data types or generators, it is not one of the best understood features. In this live coding session, Jan shows you how to solve FizzBuzz using laziness and without any "x divides y" checks – first using Haskell, which is lazy by default, and then we will adapt the solution to work in other languages. Presenter: Jan van Brügge
While many languages support laziness in some form, be it by explicit data types or generators, it is not one of the best understood features. In this live coding session, Jan shows you how to solve FizzBuzz using laziness and without any "x divides y" checks – first using Haskell, which is lazy by default, and then we will adapt the solution to work in other languages. Presenter: Jan van Brügge
Juha-Matti Santala's (Juhis) personal website was built with Eleventy. And over time, he has added functionality and workflow improvements with Ghost Headless CMS and serverless Netlify Functions. It's as messy as real-life side-projects come and in this session he shares the details of the techstack, flow, and observations from using these different tools together to build a fast static website with an enjoyable blog-writing experience. Presenter: Juha-Matti Santala
Juha-Matti Santala's (Juhis) personal website was built with Eleventy. And over time, he has added functionality and workflow improvements with Ghost Headless CMS and serverless Netlify Functions. It's as messy as real-life side-projects come and in this session he shares the details of the techstack, flow, and observations from using these different tools together to build a fast static website with an enjoyable blog-writing experience. Presenter: Juha-Matti Santala
The modern de facto solution to identity management is OpenID Connect. OIDC and OAuth2 come with their own problems though. The intention of this session is to look at some of the problems these frameworks bring, to look at some alternatives to OpenID for identity in your applications and what kinds of cases they might be applicable in. Presenter: Mikael Viitaniemi
The modern de facto solution to identity management is OpenID Connect. OIDC and OAuth2 come with their own problems though. The intention of this session is to look at some of the problems these frameworks bring, to look at some alternatives to OpenID for identity in your applications and what kinds of cases they might be applicable in. Presenter: Mikael Viitaniemi
Many programming languages have collected a variety of features or idioms over the years. For example, Python has List comprehensions. JavaScript and Kotlin have Optional chaining. Both JavaScript and Rust have async/await. In GO, it is normal to check if err != nil among others. But if you take a step back, the fact is that all those features are the same thing! This is the power of fundamental abstractions. Presenter: Jan van Brügge
Many programming languages have collected a variety of features or idioms over the years. For example, Python has List comprehensions. JavaScript and Kotlin have Optional chaining. Both JavaScript and Rust have async/await. In GO, it is normal to check if err != nil among others. But if you take a step back, the fact is that all those features are the same thing! This is the power of fundamental abstractions. Presenter: Jan van Brügge
Lessons Learned from moving futuLog to Okta In 2020, we built futuLog, an internal tool to help us manage the office usage during the pandemic. With futuLog, employees can book a slot at the office to make sure they'll have space with the pandemic restrictions. We decided early on that eventually we want to open source futuLog. But making something open source takes more than just changing the repository to public. What use would futuLog be to others if it required Futurice infrastructure to actually run? For instance, to build futuLog quickly we used playswarm, an internal environment that takes care of authentication and hosting. While the hosting part is easy, having single sign on for all Futurice employees is not. So as a step towards open sourcing it, Jan spent the last month implementing and debugging the OpenID connect protocol that allows futuLog to talk to Okta and similar identity services directly. This talk is a collection of lessons learned in the journey that took Jan from knowing nothing about OpenID, to deploying it to production. Presenter: Jan van Brügge
Lessons Learned from moving futuLog to Okta In 2020, we built futuLog, an internal tool to help us manage the office usage during the pandemic. With futuLog, employees can book a slot at the office to make sure they'll have space with the pandemic restrictions. We decided early on that eventually we want to open source futuLog. But making something open source takes more than just changing the repository to public. What use would futuLog be to others if it required Futurice infrastructure to actually run? For instance, to build futuLog quickly we used playswarm, an internal environment that takes care of authentication and hosting. While the hosting part is easy, having single sign on for all Futurice employees is not. So as a step towards open sourcing it, Jan spent the last month implementing and debugging the OpenID connect protocol that allows futuLog to talk to Okta and similar identity services directly. This talk is a collection of lessons learned in the journey that took Jan from knowing nothing about OpenID, to deploying it to production. Presenter: Jan van Brügge
Serverless has become the buzzword of the recent years. Most people think of Lambda when hearing Serverless. But Lambdas are literally just a tiny part in that field. Who would have thought that a tiny function goes big and become a crucial part of Software Development! This talk reveals what you are capable of while using AWS Lambda, the Serverless Compute Service of Amazon. We will determine some architectural approaches such as Microservices, Monolith, or ETL/ELT, and try to answer whether you can do Machine Learning with Lambdas. Presenter: John Nguyen
Serverless has become the buzzword of the recent years. Most people think of Lambda when hearing Serverless. But Lambdas are literally just a tiny part in that field. Who would have thought that a tiny function goes big and become a crucial part of Software Development! This talk reveals what you are capable of while using AWS Lambda, the Serverless Compute Service of Amazon. We will determine some architectural approaches such as Microservices, Monolith, or ETL/ELT, and try to answer whether you can do Machine Learning with Lambdas. Presenter: John Nguyen
"Parse, don't validate" is an approach to modeling data such that it is impossible to construct without verifying the integrity of the data first. Thus when using such data, one can be sure that it is already in the correct shape and no further validation is necessary. In short, this approach makes it explicit where your data gets refined. This blog by Alexis King uses examples in Haskell, mostly because the language has a short and concise syntax. To show that such an approach works in any other language too (albeit with a bit more boilerplate approach), Jan will also demonstrate it in Java. Presenter: Jan van Brügge
"Parse, don't validate" is an approach to modeling data such that it is impossible to construct without verifying the integrity of the data first. Thus when using such data, one can be sure that it is already in the correct shape and no further validation is necessary. In short, this approach makes it explicit where your data gets refined. This blog by Alexis King uses examples in Haskell, mostly because the language has a short and concise syntax. To show that such an approach works in any other language too (albeit with a bit more boilerplate approach), Jan will also demonstrate it in Java. Presenter: Jan van Brügge
In this edition of Tech Weeklies, Olavi shares his learnings from creating and maintaining a Sailfish OS app for tracking working hours, called Working Hours Tracker. It was a project he started in 2014 and has been developing and maintaining it ever since. The most recent version of the app was released in February 2021. At the time of starting this project, Olavi had been studying for a few years, and had little real world experience in software projects. As we all know, most of the learning happens at work or when doing some side projects. His limited experience and knowledge led to some of the interesting mistakes made during the project. This talk covers some of those mistakes and the lessons he learned from them. Presenter: Olavi Haapala
In this edition of Tech Weeklies, Olavi shares his learnings from creating and maintaining a Sailfish OS app for tracking working hours, called Working Hours Tracker. It was a project he started in 2014 and has been developing and maintaining it ever since. The most recent version of the app was released in February 2021. At the time of starting this project, Olavi had been studying for a few years, and had little real world experience in software projects. As we all know, most of the learning happens at work or when doing some side projects. His limited experience and knowledge led to some of the interesting mistakes made during the project. This talk covers some of those mistakes and the lessons he learned from them. Presenter: Olavi Haapala
The creator of Node.js, Ryan Dahl, released a new shiny runtime for Javascript and TypeScript in 2018 called Deno. Release 1.0 finally came out in 2020, and eager developers flocked to use Deno in production. Or did they? In this TechWeeklies talk, Minna briefly introduces the features and design aims of Deno. Then she addresses the obligatory question "how does it compare to Node?". The talk also includes a live coding demo to showcase how easy it is to use Deno for your daily ad-hoc scripting needs. Presenter: Minna Niemi
The creator of Node.js, Ryan Dahl, released a new shiny runtime for Javascript and TypeScript in 2018 called Deno. Release 1.0 finally came out in 2020, and eager developers flocked to use Deno in production. Or did they? In this TechWeeklies talk, Minna briefly introduces the features and design aims of Deno. Then she addresses the obligatory question "how does it compare to Node?". The talk also includes a live coding demo to showcase how easy it is to use Deno for your daily ad-hoc scripting needs. Presenter: Minna Niemi
Getting a modern JS project from git to running in a terminal takes ages. There is the installation of dependencies, running the server, running the bundler, maybe a type-checker, the CSS pipeline. There are watchers watching watchers, and the whole thing makes both my head and your computer's fans spin. The setup is yet more complex once you start adding multiple projects in one codebase, when you think of Server-Side Rendering and so on. This delay has a real impact on people being able to contribute to the codebase, especially when it comes to iterative UI work. Trying to make things faster in the current (by some definition) model hits diminishing returns, and takes active time and budget to do right. For example, over three years Fotis has reworked his current project's pipeline four times, and while it was faster each time, it still can be a challenge! In this talk, Fotis tries a different approach. He will give you a brief tour of modern tools that rethink how dependencies are bundled in development, and the very real gains that they offer. Presenter: Fotis Papadogeorgopoulos
Getting a modern JS project from git to running in a terminal takes ages. There is the installation of dependencies, running the server, running the bundler, maybe a type-checker, the CSS pipeline. There are watchers watching watchers, and the whole thing makes both my head and your computer's fans spin. The setup is yet more complex once you start adding multiple projects in one codebase, when you think of Server-Side Rendering and so on. This delay has a real impact on people being able to contribute to the codebase, especially when it comes to iterative UI work. Trying to make things faster in the current (by some definition) model hits diminishing returns, and takes active time and budget to do right. For example, over three years Fotis has reworked his current project's pipeline four times, and while it was faster each time, it still can be a challenge! In this talk, Fotis tries a different approach. He will give you a brief tour of modern tools that rethink how dependencies are bundled in development, and the very real gains that they offer. Presenter: Fotis Papadogeorgopoulos
Some people suffer physically when they encounter something like parallax scrolling or horizontally scrolling text. It can cause them nausea, dizziness, or other symptoms that can last for hours. These people can turn the "reduce motion" settings ON from the system level. As a developer, you have tools to respect that setting. In this talk, Eevis discusses why motion can trigger the symptoms mentioned above and what kind of animations can be problematic (this can be surprising for some!). She also shows you how to respect the user’s settings with the prefers-reduced-motion media feature. Presenter: Eeva-Jonna Panula
Some people suffer physically when they encounter something like parallax scrolling or horizontally scrolling text. It can cause them nausea, dizziness, or other symptoms that can last for hours. These people can turn the "reduce motion" settings ON from the system level. As a developer, you have tools to respect that setting. In this talk, Eevis discusses why motion can trigger the symptoms mentioned above and what kind of animations can be problematic (this can be surprising for some!). She also shows you how to respect the user’s settings with the prefers-reduced-motion media feature. Presenter: Eeva-Jonna Panula
Error Boundary is a React component that catches JavaScript errors anywhere in their child component tree, which enables graceful handling of runtime errors and offers a way to recover from them. The way it is used makes it important to have it well-tested. In this talk, Layla talks about what error boundaries are and why they are a valuable tool in your React toolbox. She also builds you an example of how to test those error boundaries with React Testing Library using Test-Driven Development. Presenter: Layla Ouyang
Error Boundary is a React component that catches JavaScript errors anywhere in their child component tree, which enables graceful handling of runtime errors and offers a way to recover from them. The way it is used makes it important to have it well-tested. In this talk, Layla talks about what error boundaries are and why they are a valuable tool in your React toolbox. She also builds you an example of how to test those error boundaries with React Testing Library using Test-Driven Development. Presenter: Layla Ouyang
User-defined stylesheets allow users to make customizations to websites with CSS to better accommodate their needs and preferences. For example, users can add back removed focus styles or redefine how sticky elements behave on different zoom levels to help make sites more accessible, when they are otherwise less so. In this talk, Fotis walks you through how to create and use user-styles and showcases an example of his own user-styles written for Duolingo's website. Presenter: Fotis Papadogeorgopoulos
User-defined stylesheets allow users to make customizations to websites with CSS to better accommodate their needs and preferences. For example, users can add back removed focus styles or redefine how sticky elements behave on different zoom levels to help make sites more accessible, when they are otherwise less so. In this talk, Fotis walks you through how to create and use user-styles and showcases an example of his own user-styles written for Duolingo's website. Presenter: Fotis Papadogeorgopoulos
Observablehq.com is where you can create, collaborate, and learn with data — all in the browser. Observable increases data exploration and visualization by opening up the toolset, the skills, and the access to empower a diverse user community. Tom is an Observable Ambassador and will give a whirlwind tour of the platform, including what features are useful for non-dataviz applications. Observablehq is built from the ground up around reactivity and thus offers the tightest development loop in the business. Furthermore, it pushes literate programming to the next level with the addition of interactivity. All-in-all, it's a new development paradigm with potential for significant productivity boosts. Presenter: Tom Larkworthy
Observablehq.com is where you can create, collaborate, and learn with data — all in the browser. Observable increases data exploration and visualization by opening up the toolset, the skills, and the access to empower a diverse user community. Tom is an Observable Ambassador and will give a whirlwind tour of the platform, including what features are useful for non-dataviz applications. Observablehq is built from the ground up around reactivity and thus offers the tightest development loop in the business. Furthermore, it pushes literate programming to the next level with the addition of interactivity. All-in-all, it's a new development paradigm with potential for significant productivity boosts. Presenter: Tom Larkworthy
Progressive Web Apps or PWAs are web applications that offer native-like functionality for mobile devices. Coined in 2015, PWAs share a few traits with modern web development like responsiveness, linkable and safe but add their own unique aspects with connectivity independence and re-engageability. In this talk, Graham walks you through what PWAs are and how they are made. He also talks about the pros and cons you can weigh when you're making a decision between a native app and a PWA. Presenter: Graham Daw
Progressive Web Apps or PWAs are web applications that offer native-like functionality for mobile devices. Coined in 2015, PWAs share a few traits with modern web development like responsiveness, linkable and safe but add their own unique aspects with connectivity independence and re-engageability. In this talk, Graham walks you through what PWAs are and how they are made. He also talks about the pros and cons you can weigh when you're making a decision between a native app and a PWA. Presenter: Graham Daw
When Juhis started blogging in 2013, he used to look up to other bloggers as authorities and definite experts on their fields. This led to a lot of "I don't know enough to write about this", "Someone has written this better already" and "I don't have anything to say" thoughts that self-censored a lot of his potential blog posts. More recently, he's taken a different approach with blogs and talks: learning in public. By documenting his own learning journey and experimentations and sharing what he has learned about software development, he has ended up in a lot of great discussions with fellow developers. These discussions have further helped him become better at writing software. In this talk, Juhis highlights how he approaches learning in public, shares inspirational moments of improvement with community and hopes to inspire you to start learning in public. Presenter: Juha-Matti Santala (Juhis)
When Juhis started blogging in 2013, he used to look up to other bloggers as authorities and definite experts on their fields. This led to a lot of "I don't know enough to write about this", "Someone has written this better already" and "I don't have anything to say" thoughts that self-censored a lot of his potential blog posts. More recently, he's taken a different approach with blogs and talks: learning in public. By documenting his own learning journey and experimentations and sharing what he has learned about software development, he has ended up in a lot of great discussions with fellow developers. These discussions have further helped him become better at writing software. In this talk, Juhis highlights how he approaches learning in public, shares inspirational moments of improvement with community and hopes to inspire you to start learning in public. Presenter: Juha-Matti Santala (Juhis)
In programming, everything is a trade-off. This first session of our Programming Language Theory series highlights how various languages differ from each other on multiple axes like programming paradigms, memory management etc. — and what kind of tradeoffs are made while designing programming languages. Presenter: Jan van Brügge
In programming, everything is a trade-off. This first session of our Programming Language Theory series highlights how various languages differ from each other on multiple axes like programming paradigms, memory management etc. — and what kind of tradeoffs are made while designing programming languages. Presenter: Jan van Brügge
"Hey Alexa, when does the tram 3 to Meilahti leave?" Kha Nguyen built an application combining Amazon Alexa's voice assistant with Helsinki Regional Transport Authority's (HSL) data API to build functionality to know when specific buses and trams leave from near his home. As you know, Amazon Alexa is a virtual assistant that can be programmed to make your life easier. Kha explains how Alexa works behind the scenes and how to use its interfaces to run custom Javascript code based on different voice commands and intents. After this talk, you'll know the basics of building custom Alexa commands.
"Hey Alexa, when does the tram 3 to Meilahti leave?" Kha Nguyen built an application combining Amazon Alexa's voice assistant with Helsinki Regional Transport Authority's (HSL) data API to build functionality to know when specific buses and trams leave from near his home. As you know, Amazon Alexa is a virtual assistant that can be programmed to make your life easier. Kha explains how Alexa works behind the scenes and how to use its interfaces to run custom Javascript code based on different voice commands and intents. After this talk, you'll know the basics of building custom Alexa commands.
Many projects these days do not use a traditional backend any more, but have moved their logic to FaaS (Function as a Service) like AWS Lambda. The core idea is that you don’t have to manage a server, and instead you just upload code and it will be executed on some event. Normally AWS only supports Nodejs, Python and a few more languages for this service. But with custom runtimes, we can deploy any language! This Tech Weeklies episode shows you how to write a stateless service (in our case a telegram bot) in Haskell and deploy it to AWS Lambda with Terraform. Presenter: Jan van Brügge
Many projects these days do not use a traditional backend any more, but have moved their logic to FaaS (Function as a Service) like AWS Lambda. The core idea is that you don’t have to manage a server, and instead you just upload code and it will be executed on some event. Normally AWS only supports Nodejs, Python and a few more languages for this service. But with custom runtimes, we can deploy any language! This Tech Weeklies episode shows you how to write a stateless service (in our case a telegram bot) in Haskell and deploy it to AWS Lambda with Terraform. Presenter: Jan van Brügge
If you have worked with GraphQL and React, you’ve probably used Apollo Client as the GraphQL client library. For those who aren't familiar with it, Apollo Client is a comprehensive GraphQL client library providing features for state management, caching, and data management in the frontend. In July 2020, version 3.0 was released, and it brought some new features, especially to state management. This talk introduces some of these features. Presenter: Eeva-Jonna Panula
If you have worked with GraphQL and React, you’ve probably used Apollo Client as the GraphQL client library. For those who aren't familiar with it, Apollo Client is a comprehensive GraphQL client library providing features for state management, caching, and data management in the frontend. In July 2020, version 3.0 was released, and it brought some new features, especially to state management. This talk introduces some of these features. Presenter: Eeva-Jonna Panula
In our last episode we talked about using a stream library. You understand a concept better if you implement it yourself. So we will build our own small streaming library in this live coding session. Presenter: Jan van Brügge
In our last episode we talked about using a stream library. You understand a concept better if you implement it yourself. So we will build our own small streaming library in this live coding session. Watch the video. Presenter: Jan van Brügge
Streams are a handy tool to structure your application with asynchronous execution in mind. The core idea is to model the dataflow as a stream where at runtime data can be emitted at any time. In this talk we will first go over the basic usage of streams, then build our own small RxJS with that to see what the differences between hot and cold streams are. Presenter: Jan van Brügge
Streams are a handy tool to structure your application with asynchronous execution in mind. The core idea is to model the dataflow as a stream where at runtime data can be emitted at any time. In this talk we will first go over the basic usage of streams, then build our own small RxJS with that to see what the differences between hot and cold streams are. Presenter: Jan van Brügge
Hacktoberfest is a month-long celebration of Open Source. The idea behind it is simple - create a minimum of 4 pull requests to open source repositories that are participating in the event. If you accomplish that goal, you get to choose a tee or plant trees. This year was my second time participating, and I ended up being an (accidental) maintainer of an open-source repository. In this talk, I will introduce you to Hacktoberfest, and tell the story of Hacktoberfest 2020 from my perspective and share some learnings from this experience. Presenter: Eeva-Jonna Panula, Developer