lastminute.com logo

Technology

Archive

React Universe 2024

fabrizio_duroni
fabrizio duroni
sam_campisi
sam campisi

Let's dive into the talks from React Universe 2024 that stood out to us the most and share the key insights we gained. From innovative debugging tools to cross-platform development strategies, we’ll walk you through what we found valuable and how it’s shaping our approach to React and React Native development.

Tech Radar As a Collaboration Tool

rabbani_kajamohideen
rabbani kajamohideen

A tech radar is a visual and strategic tool used by organizations to assess and communicate the status and future direction of various technologies, frameworks, tools, and platforms.

Ease your Android widgets development with help of Jetpack

alejandro_weichandt
alejandro weichandt
omar_shatani
omar shatani

Quick introduction of related Jetpack libraries which will help on your Android widget's development

SwiftUI and the Text concatenations super powers

fabrizio_duroni
fabrizio duroni
marco_de_lucchi
marco de lucchi

Do you need a way to compose beautiful text with images and custom font like you are used with Attributed String. The Text component has everything we need to create some sort of 'attributed text' directly in SwiftUI. Let's go!!!

A Monorepo Experiment: reuniting a JVM-based codebase

luigi_noto
luigi noto

Continuing the Monorepo exploration series, we’ll see in action a real-life example of a monorepo for JVM-based languages, implemented with Maven, that runs in continuous integration. The experiment of reuniting a codebase of ~700K lines of code from many projects and shared libraries, into a single repository.

Exploring the Monorepo

luigi_noto
luigi noto

Monorepo has become quite popular in Javascript world, and yet not fully explored for JVM-based development. The lack of tools and practical examples slow down its adoption in everyday software projects. In this series of articles, we’ll try to uncover the full potential of a monorepo with Java and Maven.

Introducing Android widgets in our React Native application

alejandro_weichandt
alejandro weichandt
omar_shatani
omar shatani

Learn how to setup a react native project to enable Android native widgets

How living documentation and user stories acceptance tests can bring project documentation benefits?

thiago_nascimento_figueiredo
thiago nascimento figueiredo

In the software development community, it is a known fact that keeping documentation up to date according to the project requirements is something that needs team discipline. In different scenarios, it is possible to take advantage of a TDD/BDD approach and CI/CD pipeline artifacts to reach the goal of keeping software documentation according to the project deliverables.

How to be more in control of my product?

luca_mor
luca mor

AKA: how try not to ruin the day of customers!

Sharing data between a React Native App and a native iOS Widget

fabrizio_duroni
fabrizio duroni
marco_de_lucchi
marco de lucchi

Learn how to display real-time information on an iOS Widget by leveraging data from a React Native app.

Evolution of a high-performance system: from synchronous to seamless scalability

giuseppe_pinto
giuseppe pinto

This article discusses the transformation of a synchronous process in the context of lastminute.com's customer journey for travel planning. The existing system was complex and resource-intensive due to its all-in-one nature, causing scaling and deployment challenges. The article presents the evolved system that separates responsibilities into microservices using message-driven communication.

Lambda Integration with MSK and KrakenD

otto_abreu
otto abreu

API Gateways can be a simple way to expose asynchronous communication without revealing too many details about it but, is not always an easy task to implement. In this post, I explore a way to expose Kafka topics in a well-known API Gateway (KrakenD) while circumventing multiple limitations.

Post Mortem: the Destruction of the Pink Star

michele_gasperi
michele gasperi
giulia_luppi
giulia luppi

Have you ever wondered if ITSM processes existed in the Pink Wars universe? We did, and we imagined the Post Mortem after the destruction of the Pink Star.

Where could I start if I want to improve my code?

luca_mor
luca mor

To me, it is not an easy question, especially when working with less experienced developers. There are so many thoughts and considerations I want to share with them! Too many, actually, to be shared all together. So...what should I focus on in the beginning? Here is my personal reflection after many years spent writing, reviewing, discussing and re-writing code.

Hotel Data Deduplication

tiziano_antico
tiziano antico

Discover how incremental design and fast feedback cycles have played a crucial role in the evolution of the hotel deduplication feature, leading to enhanced customer experience and increase in productivity of the internal quality teams.

A Pink Flamingo @ WWDC23

marco_de_lucchi
marco de lucchi

I was lucky enough to be invited by Apple to attend the event in person and represent our App team. Here are all my thoughts about the most-watched event in the tech industry, live from Apple Park.

Migrating and evolving services in production

staff
staff

We talk about how we evolve and replace services in production, without breaking anything!

Event Sourcing - A Light Introduction

paolo_banfi
paolo banfi

Event Sourcing is not one of the most well known pattern in software engineering, but it has a lot of potential uses and areas of application. In this blog post I'd like to explain what is event sourcing, why it matters and why it naturally fits CQRS architectural pattern so nicely, together with an explanation of the various building blocks used.

Impacts of contract tests in our microservice architecture

staff
staff

We learned how to implement contract test for any kind of messages exchanged in a microservices' architecture, now let's see the impacts and why it sped up our development process

Widget iOS: how to fix the image bundling problem

fabrizio_duroni
fabrizio duroni
marco_de_lucchi
marco de lucchi

Discover how we had a long day debugging WidgetKit problems with images.

Use SwiftUI Path and Shape to render your svg files: a practical example

fabrizio_duroni
fabrizio duroni
marco_de_lucchi
marco de lucchi

Let's have some fun with SwiftUI by drawing an inspiration title component leveraging Path and Shape.

Widget for our iOS app using SwiftUI: the Technical Implementation

fabrizio_duroni
fabrizio duroni
marco_de_lucchi
marco de lucchi

Join us in the Widget creation journey from drawing the UI, creating the timeline, calling the API and adapting the response, setup and reading the user configuration, and finally invoking the React Native app to display the search results.

Create a widget for our iOS app using SwiftUI

fabrizio_duroni
fabrizio duroni
marco_de_lucchi
marco de lucchi

During the last three months, we worked on a new side project for our mobile app and here is how it went.

A/B testing at lastminute.com

alessandro_rozza
alessandro rozza

At lastminute.com we aim to provide a website that gives the best possible customer experience. We are therefore always trying to find ways to improve our website and the algorithms that drive it.

Clean Code: Primitive obsession smell

staff
staff

We talk about how creating tiny classes, rather than using raw strings or ints, can lead to a better design

Create a microfrontend app using module federation and dynamic configuration

fabrizio_duroni
fabrizio duroni
alex_stabile
alex stabile

We are used to the term microservice in the backend world. Is there a way to achieve the same architectural indipendence in the frontend world? Let's see how it is possible to create a microfrontend app by leveraging Webpack 5 module federation with a widget-based custom remote configuration.

Measuring Visual Congruence and Brand-Influencer Matching with Deep Learning

alessandro_rozza
alessandro rozza

Our approach for using deep learning techniques to find ways to match brands with influencers based on their Instagram posts

A custom module for Jackson object mapper using Java Service Provider

fabrizio_duroni
fabrizio duroni
alex_stabile
alex stabile

Sometimes you have custom Jackson object mapper imported from external modules/libraries. How can you customize their serialization/deserialization? Let's go to discover the power of Java Service Provider Interface.

Bottom-up opportunities, self-directed learning, and external expertise

raffaella_rossini
raffaella rossini

This is the last blog post of our small series about the Learning and Development landscape for tech people at lastminute.com. We are going to explore the learning opportunities emerging bottom-up from our people, as well as the way in which we leverage external resources and expertise.

Informal knowledge sharing: Crash Courses and LM Talks

raffaella_rossini
raffaella rossini

In addition to live internal training, we have other, more informal formats to share knowledge within the Company: Crash Courses and LM Talks.

Live, interactive training: Continuous Learning programme and Coding Dojo

raffaella_rossini
raffaella rossini

At lastminute.com we are lucky enough to have among our colleagues people who are very good at their job, and also care about supporting the professional growth of others. Thanks to them, we pulled together what we call the “Continuous Learning” programme. Keep reading to find out more.

It's FriYAY! It's time for deep work and/or learning and development

raffaella_rossini
raffaella rossini

At lastminute.com we are experimenting with our working hours to support in a structural way learning, development, productivity, and wellbeing. Our Friday is now called FriYAY!, and in this first blog post of a short series I’ll tell you about it.

Blockchain Dapp and Modern Software Engineering

fabio_fiorella
fabio fiorella

Block'n'poll a complete example of a full stack web application interacting with Algorand Blockchain

Contract testing asynchronous messaging with Pact and MockK

fabrizio_duroni
fabrizio duroni
felice_giovinazzo
felice giovinazzo

In the last weeks I worked with my colleague Felice Giovinazzo on a new feature for the refund process. Let’s see how we used pact to test a message-based interaction between two microservices with Pact

Content Hub: How we made NoSQL relational

paweł_suchy
paweł suchy

lastminute.com is moving many of its services to Amazon Web Services. Let's see what challenges related to the data migration itself may arise during this process, based on the case of the Content Hub application.

Performance Testing Tools: Gatling vs Jmeter

luca_gazzola
luca gazzola
pratap_kambaladinne
pratap kambaladinne
cristina_noval
cristina noval
matteo_orru
matteo orru
alvaro_garcia_real
alvaro garcia real

When it comes to performance testing, which one should you pick between Jmeter and Gatling? And Why?

Set up a quick GUI in maven project

staff
staff

How do you set up a GUI module in maven project? Let's find out in this post!!

A Domain Driven Design dictionary for newbies

fabrizio_duroni
fabrizio duroni

In the last months, I started to hear a lot of stuff about Domain Driven Design. What is DDD? What does it try to solve? This is a post for all the newbies (like me) that are searching for a definition of what DDD is, which are its main parts and what is its main goal.

Remote Working - More Than One Year On...

mike_lines
mike lines

Someone was asking me about my thoughts on Remote Working after 2020, and after the quite peculiar year we had both from a personal and professional perspective, I had so many I decided to write them down and share them!

The power of functional interfaces in test

staff
staff

How to use functional interfaces to mock behaviours in tests without implementing classes

Unit testing in Kotlin with JUnit 5 and MockK

fabrizio_duroni
fabrizio duroni

I recently discovered MockK, a mocking library created for Kotlin. Let's see how it is possible to write modern unit tests with MockK + JUnit 5.

Pair programming tips and tricks

fabrizio_giovannetti
fabrizio giovannetti

Pair programming is a well-known XP technique that is not difficult to implement. But as usual with a new approach, it's easy to start but not so easy to start well. I would like to share with you my experience of pair programming while hoping to give you some useful advice.

How to live in a pure world

staff
staff

Make side effects pure

A matter of purity

staff
staff

What are pure functions? Why should you even care?

Checked vs unchecked exception (with FP glasses)

staff
staff

The dark side of Unchecked Exceptions

Foundations of a Performing Team

raffaella_rossini
raffaella rossini
daniela_pavesi
daniela pavesi

What defines a good team? The "Foundations of a Performing Team" is our shared answer to that question, co-created by our people. A shared map towards excellence.

How to: enable Hermes JavaScript engine in your React Native app

fabrizio_duroni
fabrizio duroni
francesco_bonfadelli
francesco bonfadelli
marco_de_lucchi
marco de lucchi

React native 0.60.4 has a new cool feature for Android: a new JavaScript engine called Hermes. Let's see how you can turn it on in your React Native application to get all its benefits.

Why is CSS-in-JS no-nonsense?

staff
staff

One may agree or disagree with that question but CSS-in-JS is becoming a more popular solution to handle styles for components in code. See how to use it and what is wrong and good in it.

React Native: Native Modules and UIViewController communication on iOS

fabrizio_duroni
fabrizio duroni

Leverage the power of NSNotificationCenter to implement communication between React Native Native modules (aka bridges) and your native code on iOS

Comonads for booking correlation

emanuele_colombo
emanuele colombo

How can category theory and typeclasses help us in our daily job? Let's see an example of real world usage for the Applicative and Comonad typeclasses.

Event Storming Experience

rabbani_kajamohideen
rabbani kajamohideen

The biggest challenge on adapting to Domain Driven Design is to change the mindset of people in their design thinking and bring everyone to the same page. Here we are sharing our own experience on how we tackled these challenges with the powerful Event Storming workshop

Themify your (S)CSS Modules

staff
staff

Personalise your application with shiny themes combining CSS Modules and Bootstrap SASS

Using Gradle Kotlin DSL with junit 5

staff
staff

Gradle 5 has been out for a while now and with that we finally got the ability to write our Gradle scripts in Kotlin. How can I migrate my JUnit-enabled Gradle scripts to Kotlin Gradle DSL?

Measuring KPIs of Continuous Delivery on Jenkins

staff
staff

Recording Four Key Metrics and beyond to track our way down to effective software delivery: this is the story of how we enriched our visibility inside pipelines execution steps to improve our CI/CD architecture.

Modular functional programming with Kotlin

emanuele_colombo
emanuele colombo

Functional programming in Kotlin could be very easy on the small, but how we can build a real-world application, splitting the code in some indipendent components and make them easily testable? Let's see a possible approach in order to solve this problem.

React Native: there is a debug for that!

fabrizio_duroni
fabrizio duroni

Learn how to leverage the power of RCTBundleURLProvider to build, run and debug on an iOS device from Xcode

Heimdall: a Cloudflare monitoring tool

massimo_vailati
massimo vailati

Heimdall, all-seeing and all-hearing.

Ingress-Nginx bug makes a comeback

staff
staff

A three years old bug in Kubernetes' Ingress-Nginx makes a comeback in an even more subtle form...

Chasing a Kubernetes connection reset issue

staff
staff

When working with open source the help from the community can come in many ways, from a post on the Kubernetes blog we found a solution to a problem that we were not able to address.

Refactor your data class and you'll sleep like a baby

staff
staff

How to refactor code coupled with a data class?

Distributed authorization in Microservices with Spring

staff
staff

How can you centralize your user in a distributed world?

Refactoring: a real case of a nested if structure transformed into a chain of responsibility

francesco_bonfadelli
francesco bonfadelli

It seemed a normal day of work when one of our managers called a meeting to inform us of a very urgent feature that should be put in production within 2 days.

First time as speakers. Here's how we prepared

fabrizio_duroni
fabrizio duroni

We got the opportunity for the first time to be on the other side of a talk: we were the speakers. We share how we prepared for our talk about React, React Native and Typescript.

You can run your Design Sprint in 2 days. For real.

fabrizio_duroni
fabrizio duroni

We gathered in a wonderful location to design our next feature. We ran our personal Design Sprint with a strong time constraint, here's how it went.

Eat Your Own Dog Food: distribute a beta version of your iOS app

fabrizio_duroni
fabrizio duroni

Read how we managed to distribute a beta version of our iOS app using an Apple Enterprise Developer Program and GitHub Pages.

React Native + Typescript, love at first sight. Setup in an existing app.

fabrizio_duroni
fabrizio duroni

You can run your React Native integration with Typescript in a couple of minutes in an existing app. Just read our example.

Clean Code: data structures vs objects and the law of Demeter

fabrizio_duroni
fabrizio duroni

Ever wondered about the differences between data structures and objects? Let's analyze them with the help of the Law of Demeter.

Android Studio vs Xcode vs AppCode: a brief comparison about coding speed

fabrizio_duroni
fabrizio duroni
francesco_bonfadelli
francesco bonfadelli

Being able to write code faster is a non-plus-ultra in every kind of software development. We made a comparison, take a look at our results.

Clean Code: meaningful names

fabrizio_duroni
fabrizio duroni

Naming things is one of the most difficult part of our job, still it is one of the more effective way to communicate the intention of a piece of code. Take a look to a real example.