Articles

Retour vers le futur: Pages Web côté serveur avec Kotlin (Pt. 1)

Dans cette série, nous allons apprendre à créer des pages web côté serveur avec Kotlin. Vous découvrirez comment créer des applications web modernes et performantes. Prêt à voyager dans le futur ? Allons-y !

Le développement Web a subi de nombreux changements depuis que l’Internet est devenu populaire dans les années 1990 :

L’architecture du développement web a connu une variété de changements depuis que l’internet est devenu populaire dans les années 1990 :

Tout d’abord, il y a eu les pages HTML les plus basiques, complètement statiques, sans aucune dynamique. Plus tard, des technologies telles que l’interface commune de passerelle (Common Gateway Interface) ont permis de générer le code HTML d’une page de manière programmatique. Puis sont arrivés des moteurs de modèles tels que JavaServer Pages (maintenant Jakarta Server Pages), ASP.NET et Thymeleaf, qui ont permis aux développeurs de travailler avec des fichiers de modèles principalement « ressemblant à HTML » avec du code de programmation intermélangé.

Ensuite, des frameworks de « script côté client » basés sur Javascript tels qu’Angular, React et Vue sont apparus, ce qui a transformé le développement web en deux disciplines distinctes : le développement « backend » qui contenait le code traditionnel du serveur web et de la logique métier, ainsi que le développement « front-end » (en utilisant les frameworks ci-dessus) qui se concentrait sur la visualisation d’un site web et recevait des données du backend.

Cependant, cela ne signifie pas que les tendances de développement ne progressent que dans une seule direction et jamais en arrière. Par exemple, les bases de données NoSQL telles que MongoDB ont rapidement gagné en popularité en grande partie en raison de leur capacité à contenir des données non structurées par rapport aux bases de données SQL traditionnelles telles que PostgreSQL et MySQL, mais ces dernières ont également évolué et peuvent maintenant contenir des données non structurées via les types de données JSONB et JSON, respectivement. De même, de nouveaux frameworks Javascript tels que Next.js commencent à offrir des options pour le rendu côté serveur en plus de leurs capacités de rendu côté client traditionnelles. De nouveau, les moteurs de modèles côté serveur comme Thymeleaf ont également continué à évoluer, Thymeleaf lançant une nouvelle version du framework le mois dernier.

Source de l’article sur DZONE

Verrouillage pessimiste et optimiste avec MySQL, jOOQ et Kotlin.

Découvrez comment MySQL, jOOQ et Kotlin peuvent être utilisés pour mettre en œuvre des verrouillages pessimistes et optimistes !

Gérer l’accès concurrent à des données partagées peut être un défi, mais en utilisant la bonne stratégie de verrouillage, vous pouvez vous assurer que vos applications fonctionnent correctement et éviter les conflits qui pourraient entraîner une corruption des données ou des résultats incohérents.

Dans cet article, nous explorerons comment mettre en œuvre le verrouillage pessimiste et optimiste à l’aide de Kotlin, Ktor et jOOQ et fournirons des exemples pratiques pour vous aider à comprendre quand utiliser chaque approche.

Gérer l’accès concurrent à des données partagées peut être un défi, mais en utilisant la bonne stratégie de verrouillage, vous pouvez vous assurer que vos applications fonctionnent correctement et éviter les conflits qui pourraient entraîner une corruption de données ou des résultats incohérents. Dans cet article, nous explorerons comment implémenter le verrouillage pessimiste et optimiste en utilisant Kotlin, Ktor et jOOQ et fournirons des exemples pratiques pour vous aider à comprendre quand utiliser chaque approche.

Le verrouillage pessimiste est une stratégie de verrouillage qui bloque les données partagées lorsqu’un thread tente d’y accéder. Cela signifie que tout autre thread qui tente d’accéder aux mêmes données sera bloqué jusqu’à ce que le premier thread ait terminé son traitement. Cette approche est utile lorsque vous souhaitez éviter tout conflit entre les threads et garantir que les données restent cohérentes.

Pour implémenter le verrouillage pessimiste avec Kotlin, Ktor et jOOQ, vous pouvez créer une méthode qui prend en charge le verrouillage des données partagées. Dans cette méthode, vous pouvez utiliser la classe jOOQ Lock pour verrouiller les données partagées et la classe Ktor Transaction pour gérer la transaction. Une fois que les données sont verrouillées, vous pouvez effectuer des opérations sur les données partagées sans craindre de conflit entre les threads. Lorsque vous avez terminé, vous pouvez déverrouiller les données et terminer la transaction.

Le verrouillage optimiste est une stratégie de verrouillage qui ne bloque pas les données partagées lorsqu’un thread tente d’y accéder. Au lieu de cela, il compare les données partagées avec une version antérieure pour s’assurer qu’elles n’ont pas été modifiées par un autre thread pendant que le thread courant y accède. Si les données ont été modifiées, le thread courant est bloqué jusqu’à ce que les données soient mises à jour. Cette approche est utile lorsque vous souhaitez minimiser le temps de verrouillage et éviter les conflits entre les threads.

Pour implémenter le verrouillage optimiste avec Kotlin, Ktor et jOOQ, vous pouvez créer une méthode qui prend en charge le verrouillage des données partagées. Dans cette méthode, vous pouvez utiliser la classe jOOQ Lock pour récupérer la version actuelle des données partagées et la classe Ktor Transaction pour gérer la transaction. Vous pouvez ensuite comparer la version actuelle des données à la version antérieure pour s’assurer qu’elles n’ont pas été modifiées par un autre thread. Si elles ont été modifiées, vous pouvez récupérer la version mise à jour des données et continuer à traiter la transaction. Une fois que vous avez terminé, vous pouvez déverrouiller les données et terminer la transaction.

En conclusion, le choix entre le verrouillage pessimiste et optimiste dépend de votre application et de ses exigences. Si vous souhaitez éviter tout conflit entre les threads et garantir que les données restent coh

Source de l’article sur DZONE

Ktor is an asynchronous web framework written in and designed for Kotlin, leveraging coroutines and allowing you to write asynchronous code without having to manage any threads yourself.

Here is a bit more background information on Ktor. It is backed by Jetbrains, who are also the creators of Kotlin itself. Who better to make a Kotlin web framework than the people that work on the language?

Source de l’article sur DZONE

 At my company, we see a lot of SDKs and Swagger-generated clients that could throw exceptions at any time. This could be a fault in our logic, or it could be a fault with some 3rd party SDKs that have no rhyme or reason to how their exception handling works. But either way, when our customers want to fetch a Git commit history for a service, they do not want to be greeted with an error message.

We’ve seen GitHub go down during a customer demo and 3rd party integrations throwing other unexpected exceptions. Overall, it was a very discouraging experience for our customers that we had no control over.

Source de l’article sur DZONE

For decades, developers have struggled with optimizing persistence layer implementation in terms of storing business data, retrieving relevant data quickly, and — most importantly — simplifying data transaction logic regardless of programming languages.

Fortunately, this challenge triggered the invention of Java ecosystems in which developers can implement the Java Persistence API (JPA). For instance, Hibernate Object-Relational Mapper (ORM) with Panache is the standard framework for JPA implementation in the Java ecosystem.

Source de l’article sur DZONE

In a previous article, I described a way to organize low-latency products as multiple code bases which are bound together with a Maven Bill of Materials (BOM). Understandably, this requires setting up continuous integration and deployment for a large number of similar projects. Maintaining such a setup manually in the face of change while ensuring its consistency will take a lot of effort.  In this article, I will describe how the team at Chronicle Software has tackled these issues in different projects by writing code that does this for us, in the form of Kotlin DSL for TeamCity.

This guide will show how to configure the same set of CI/CD builds for multiple Maven project repositories of similar layouts programmatically, following the DRY (don’t repeat yourself) principle. Following it will require a base knowledge of git, Maven, and TeamCity but would not require knowledge of the Kotlin language, since all of the displayed code is self-explanatory.

Source de l’article sur DZONE

A lot, if not all, of data science projects, require some data visualization front-end to display the results for humans to analyze. Python seems to boast the most potent libraries, but do not lose hope if you’re a Java developer (or if you’re proficient in another language as well). In this post, I will describe how you can benefit from such a data visualization front-end without writing a single line of code.

The Use Case: Changes From Wikipedia

I infer that you are already familiar with Wikipedia. If you are not, Wikipedia is an online encyclopedia curated by the community. In their own words:

Source de l’article sur DZONE

Advanced portable applications accomplish a great deal. They convey information between various back-ends through network APIs. They store and recover information from the local database, process substantial amounts of media, and communicate with web sockets. It’s difficult to monitor all the data from various asynchronous data sources, particularly realizing that the users are used to a simple, fluid user experience.

At the beginning of Android, designers utilized the class AsyncTask from the Android system to accomplish everything outside the primary UI thread. Although async tasks did what they should, utilizing them wasn’t the most charming experience in light of all the standard code you would eventually end up writing due to adaptability issues. If you had a further developed use case (i.e., introducing information from a neighborhood data set on the UI while making an API solicitation to get the most recent information from the backend, refreshing the nearby data set, and introducing the most recent information on the UI), things would quickly spiral. You would wind up with code that is difficult to comprehend and keep up with.

Source de l’article sur DZONE

Kotlin is great: it’s more concise and expressive than Java, it allows for safer code, and offers seamless interoperability with Java. The latter allows developers to migrate their projects to Kotlin without having to rewrite the entire codebase. Such migrations are one of the reasons why we might have to work with JPA in Kotlin. Picking JPA for a fresh Kotlin application also makes sense, as it is a mature technology familiar to the developers.

There is no JPA without entities, and defining them in Kotlin comes with some caveats. Let’s look at how to avoid the common pitfalls and make the most of using Kotlin. Spoiler alert: data classes are not the best option for entity classes.

This article will be mostly focused on Hibernate as it is undoubtedly the leader among all JPA implementations.

Source de l’article sur DZONE

Developing a mobile application involves several tasks. There are only two major platforms of mobile applications- Android and iOS. Developers use kotlin and Java to build Android applications while use Objective C and Swift to develop iOS applications. The native development process offers premium performance and API integration and easy to access hardware devices and much more.

One thing you need to keep in mind while doing native app development is that it’s costly, and it depends on the number of platforms you want to cover. This means different applications from different platforms, two codebases, two separate development projects, double the expenses.

Source de l’article sur DZONE