JVM BloggersJVM Bloggers aggregated feed. You can customize your rss results by using parameters `limit` and 'excludedAuthors` (comma delimited names) parameters. Example: http://jvm-bloggers.com/pl/rss?limit=5&excludedAuthors=Tomasz Dziurko Adam WarskiJVM Bloggers2024-03-19T04:03:54Z2024-03-19T04:03:54ZJava 22 i najlepsza zmiana: współbieżne zbieracze w strumieniachPiotr Przybyłqy82aay2024-03-18T14:00:00Z2024-03-18T14:00:00Z<p>Java 22 zostanie wydana jutro. W tej wersji jest wiele super rzeczy. Podejrzewam, że korzystanie z wywołań rodzimych/zewnętrznych w projekcie Panama sprawi, że życie wielu osób stanie się łatwiejsze, jak również trwające zmiany we współbieżności, szablonach napisów i wreszcie możliwość wywołania czegoś przed <code>super</code>. Super! Jednak jest jedna rzecz, która podejrzewam stanie się moim (prawie) ukrytym bohaterem Javy 22. Ludziska, przedstawiam wam <code>Gatherers.mapConcurrent</code>!</p>
<h3 id="strumienie-są-bohaterem-javy-8-ale-nie-w-świecie-równoległym">Strumienie są bohaterem Javy 8 (ale nie w świecie równoległym)</h3>
<p>Java 8 była dużym kamieniem milowym w rewolucji Javy w swoim czasie. Pamiętam atmosferę po stosunkowo niewielkim wydaniu Javy 7, wersja 8 była NAPRAWDĘ WIELKA. Wprowadzenie lambd pozwoliło Stream API na istnienie w Javie 8 (bez krwawiących oczu, oczywiście). Moim zdaniem skierowało to Javę w stronę deklaratywnego i funkcyjnego sposobu myślenia o przetwarzaniu danych: zamiast pętli z pośrednimi wywołaniami i pakowania wyników w pojedynczy obiekt, mogliśmy wreszcie wyrazić intencję w bardziej deklaratywny sposób.</p>
<p>API strumieni miało moim zdaniem co najmniej dwie większe wady w momencie wprowadzenia, skutecznie uniemożliwiając jego użycie w wielu krytycznych scenariuszach przetwarzania danych.</p>
<h4 id="rozszerzaj-ale-tylko-raz">Rozszerzaj, ale tylko raz</h4>
<p>W bardzo uproszczony sposób cykl życia strumienia można było streścić w ten sposób:</p>
<ul>
<li>utworzenie strumienia</li>
<li>szereg operacji pośrednich, takich jak <code>filter</code>, <code>map</code> lub <code>flatMap</code> (lub <code>peek</code>, ale to było tylko do debugowania, prawda? PRAWDA???)</li>
<li>pojedyncze wywołanie, aby zebrać wyniki.</li>
</ul>
<p>Zacznijmy od końca: kolektory (ang. <em>collectors</em>). Jeśli nie byliśmy zadowoleni z prostego <code>joining</code>, <code>reduce</code> czy podobnych, można było sięgnąć po jeszcze prostsze <code>toList</code> (od Javy 16, jeśli dobrze pamiętam), lub <code>teeing</code> (od Javy 12), jeśli trzeba było przekazać obiekty do dwóch lub więcej kolektorów. Lub jeśli istniały naprawdę wymyślne potrzeby, można było ujawnić wszystkie mroczne moce, które zdobyliśmy na “Wprowadzeniu do SQLa” i skomponować kolektory za pomocą <code>mapping</code>, <code>filtering</code>, <code>groupingBy</code>, <code>partitioningBy</code>, <code>collectingAndThen</code>, itp., itp.</p>
<p>Jeśli to ciągle nie wystarczało, mogliśmy napisać swój własny kolektor. I to pierwsze ograniczenie: to było, o ile mi wiadomo, jedyne miejsce rozszerzeń w StreamAPI. Jeśli potrzebowaliśmy czegoś specjalnego, musieliśmy albo wprowadzić dziwne struktury danych pośrednich do obsługi tego w operacjach pośrednich (szukaj “ciekawych” przykładów w <a href="https://openjdk.org/jeps/461">JEP 461</a>), albo de facto odkładać to do fazy zbierania. Co było dość dziwne, ponieważ niweczyło to cały cel wyrażania kroków przetwarzania danych za pomocą operacji pośrednich przed krokiem kolekcji. Lub mogliśmy to zrobić w pętli, w dobrym, starym stylu imperatywnym.</p>
<h4 id="gdzie-są-moje-rdzenie">Gdzie są moje rdzenie?</h4>
<p>Masz więc 8 rdzeni w swoim komputerze. I, powiedzmy, 64 elementy w swoim strumieniu. Zatem dochodzisz do wniosku, że ustawienie strumienia jako <code>.parallel()</code> może sprawić, że cała operacja na strumieniu będzie w niektórych przypadkach około 8 razy szybsza. Nawet zweryfikowałeś/aś to w <code>jshell</code>, i tak, 8 razy szybsza, więc szybko kopiuj-wklej w wielu miejscach, i możemy <code>git push --force</code> ;-)</p>
<p>A potem wszyscy odkryliśmy, że (prawie) wszystkie wątki w strumieniach równoległych pochodzą z tej samego puli. A co gorsza, że są blokowane przez IO. (A tutaj pomijamy całą historię stosu reaktywnego i świętych wojen między reakcjonistami a wyznawcami wątków wirtualnych. Dziś nie mam nastroju na świętą wojnę, przepraszam.)</p>
<p>Z tych i innych powodów w przeszłości zwykliśmy przełączać się na stos reaktywny, aby mieć nieblokujące przetwar...Piotr Przybył2024-03-18T14:00:00ZPrzepisujemy moduł w systemie. Odc. 5. Twórz język, nie słownikMichał Bartyzel3hMejf42024-03-17T06:00:00Z2024-03-17T06:00:00Z<p>This is post 5 of 5 in the series “Przepisujemy moduł w systemie” Przepisujemy moduł w systemie odc. 1 Przepisujemy moduł w systemie odc. 2 Przepisujemy moduł w systemie odc. 3 Przepisujemy moduł w systemie. Odc. 4.: porządkowanie Przepisujemy moduł w systemie. Odc. 5. Twórz język, nie słownik Przypominam, że prowadzisz warsztat Event Storming i […]</p>
<p>Artykuł <a href="https://www.michalbartyzel.pl/przepisujemy-modul-w-systemie-odc-5-tworz-jezyk-nie-slownik/">Przepisujemy moduł w systemie. Odc. 5. Twórz język, nie słownik</a> pochodzi z serwisu <a href="https://www.michalbartyzel.pl">IT spotyka klienta</a>.</p>Michał Bartyzel2024-03-17T06:00:00ZJava Development with Odo on Podman, Kubernetes and OpenShiftPiotr MińkowskiFlXAh9h2024-03-15T10:11:57Z2024-03-15T10:11:57Z<p>In this article, you will learn how to develop and deploy Java apps on Podman, Kubernetes, and OpenShift with odo. Odo is a fast and iterative CLI tool for developers who want to write, build, and deploy applications on Kubernetes-native environments. Thanks to odo you can focus on the most important aspect of programming – […]</p>
<p>The post <a href="https://piotrminkowski.com/2024/03/15/java-development-with-odo-on-podman-kubernetes-and-openshift/">Java Development with Odo on Podman, Kubernetes and OpenShift</a> appeared first on <a href="https://piotrminkowski.com">Piotr's TechBlog</a>.</p>Piotr Mińkowski2024-03-15T10:11:57ZLink Dump #130Sebastian Malaca06aDyn42024-03-15T09:00:00Z2024-03-15T09:00:00ZSebastian Malaca2024-03-15T09:00:00Z216. W kierunku blokujących strumieni - Adam WarskiWrocław JUGSIgrSdJ2024-03-14T17:00:44Z2024-03-14T17:00:44ZWrocław JUG2024-03-14T17:00:44Z216. Mikrousługi w praktyce: sukcesy i porażki - Rafał MaciakWrocław JUGScV5yZg2024-03-14T17:00:20Z2024-03-14T17:00:20ZWrocław JUG2024-03-14T17:00:20ZImplementing cloud VPN solution using AWS, Linux and WireGuardScalaCIXZRmT92024-03-14T16:55:09Z2024-03-14T16:55:09Z<p>What is a VPN, and why is it important? A Virtual Private Network, or VPN in short, is a tunnel which handles all the internet data sent and received between Point A (typically an end-user) and Point B (application, server, or another end-user). This is done with security and privacy in mind, because it effectively […]</p>
<p>The post <a href="https://scalac.io/blog/implementing-cloud-vpn-solution-using-aws-linux-and-wireguard/">Implementing cloud VPN solution using AWS, Linux and WireGuard</a> appeared first on <a href="https://scalac.io">Scalac - Software Development Company - Akka, Kafka, Spark, ZIO</a>.</p>ScalaC2024-03-14T16:55:09ZMonica McGuigan - My Scala StorySoftwareMillklQ2zwI2024-03-14T16:30:00Z2024-03-14T16:30:00Z<img alt="" src="https://softwaremill.com/images/k/m/o/6/y/kmo6ym5oqfki3he-eec27cfb.jpg?g-b993ddb9" />
<p>Scala experts share their Scala Stories to celebrate the 20th anniversary of Scala in 2024. Meet Monica McGuigan, and follow her on <a href="https://www.linkedin.com/in/monica-mcguigan/">LinkedIn</a>.</p>
<h2>How did you first get introduced to Scala, and what did you think about it?</h2>
<p>I started properly learning Scala in 2022 when I joined my current team for my first developer job out of university. My experience in software before this was C#, C++, and some front-end technologies. So, switching to the world of functional programming was <em>not</em> without its challenges.</p>
<p>Initially, I found the learning curve pretty steep; there was a huge amount to understand and a lot of confusing concepts to take on board pretty quickly. Slowly but surely, I started to get my head around writing Scala code, and haven’t looked back since!</p>
<h2>How has Scala influenced your approach to solving programming problems?</h2>
<p>I would say the main influence on how I problem-solve would have to be Scalas’ type system. Being able to rely on it so consistently, in my experience, has been great. For example, when you’re pattern matching, you know with its exhaustivity that you are covering all bases. This is in stark contrast to my front-end experience in JavaScript, where you just had to hope what you were writing was correct, and you’d find out at runtime whether or not that's true. Having compile-time confidence in your code is far more enjoyable.</p>
<p>Learning Scala has been my first interaction with FP, so I can definitely see where the influence of this paradigm on how I write code comes from. It feels very natural to decompose problems into discrete functions you chain together, with an emphasis on what the input and output types are. </p>
<p>I also like how Scala isn’t strictly a pure functional language, and when you need to use imperative techniques, it’s flexible enough to allow you to, e.g., using local mutability when it makes the most sense to do so. </p>
<h2>What is your favourite programming meme?</h2>
<p><img title="Zrzut%20ekranu%202024-03-14%20o%2016.27.35" alt="Zrzut%20ekranu%202024-03-14%20o%2016.27.35" src="/user/pages/blog/132.monica-mcguigan-my-scala-story/Zrzut%20ekranu%202024-03-14%20o%2016.27.35.png?g-b993ddb9"></p>
<h4><a href="https://9gag.com">Image source</a></h4>
<p>I mean, this really says it all...</p>
<h2>What are your go-to tools and libraries when working as a software developer?</h2>
<p>For development, I use IntelliJ with SBT. </p>
<p>Something so simple yet so helpful that I’ve come to rely on are the context actions. The two I use the most are the <em>type hints</em> and the <em>collection inspections</em>.</p>
<p>Specifically, when I’m working with chaining lots of functions together, getting type hints helps to keep me sane and focused on the problem. Then, I find it incredibly helpful getting suggestions for writing more readable and idiomatic code from the collection inspections, especially as I’m refactoring code that is a little messy from the process of being written. </p>
<p>And then for libraries, my team mostly uses the Typelevel ecosystem: including Cats, Cats-Effect and Http4s.</p>
<h2>How has the Scala community impacted your programming journey? Any standout interactions or support stories to share?</h2>
<p>The impact of the Scala community on my learning journey so far cannot be overstated. From the very first few...</p>SoftwareMill2024-03-14T16:30:00ZWhite House recommends using memory-secure languages, including Java - JVM Weekly vol. 75VivedtZRcCom2024-03-14T14:01:21Z2024-03-14T14:01:21ZToday we have security themes native to the US, a continuation (and probably already a summary) of the 1BRC theme and an interesting case from Netflix.Vived2024-03-14T14:01:21ZGeeCON Prague 2023: Bogomil Shopov - Where Did All the Fun Go?GeeCON0TTRQem2024-03-14T10:52:33Z2024-03-14T10:52:33ZGeeCON2024-03-14T10:52:33ZGeeCON Prague 2023: Tannaz N. Roshandel - Machine Intelligence With Humans in MindGeeCONZfTSRK92024-03-14T10:52:11Z2024-03-14T10:52:11ZGeeCON2024-03-14T10:52:11ZGeeCON Prague 2023: Markus Kett - High Performance Java Cloud Native AppsGeeCONNdG4zjV2024-03-14T10:51:57Z2024-03-14T10:51:57ZGeeCON2024-03-14T10:51:57ZPrzyjdź na SpHERe.it Conference stacjonarnie lub onlineBulldogJobQ1RAaV32024-03-13T13:50:00Z2024-03-13T13:50:00Z<p>Zapisz się na konferencję organizowaną przez Sphere.it, która odbędzie się stacjonarnie oraz w sieci już 15 marca 2024.</p><p/>Już 15 marca sphere.it, dynamiczna platforma dedykowana wspieraniu rozwoju, wspólnoty i różnorodności w branży technologicznej, zaprasza na tegoroczną odsłonę konferencji o kobietach w branży Tech/IT (nie tylko) dla kobiet. Będzie to wydarzenie o zasięgu globalnym, któremu mamy okazję partnerować.</p><p/>SpHERe.it Conference to nie tylko jednorazowe wydarzenie; to celebracja, apel do działania oraz zobowiązanie do promowania różnorodności w sektorze technologicznym. Planowane na 15 marca 2024 roku wydarzenie odbędzie się w formie hybrydowej, zarówno stacjonarnie w Krakowie, jak i online - dostępne w streamingu live.</p><p/>Dołącz w sieci lub na miejscu w Krakowie po inspirujące prelekcje, warsztaty, sesje mentoringowe i networking. Zarezerwuj swoje miejsce wśród różnorodnej społeczności, obejmującej profesjonalistki branżowe, liderki, oraz przedsiębiorczynie z Polski i Europy i nieco bardziej egzotycznych zakątków świata.</p><p><a href="https://bulldogjob.pl/readme/przyjdz-na-sphere-it-conference-stacjonarnie-lub-online" target="_blank">Czytaj dalej</a></p>BulldogJob2024-03-13T13:50:00ZJak zadbać o komfort i produktywność w pracy programisty? Wybierz odpowiedni ekosystem sprzętówJustJoinITm06d48p2024-03-13T10:26:14Z2024-03-13T10:26:14Z<p>Przez ostatnie kilka tygodni miałam przyjemność testować produkty z serii MX od Logitech (zestaw mysz, klawiatura oraz najnowszy model kamery). Czy poleciłabym je programistom? Zdecydowanie tak. Zobaczcie dlaczego. Mysz, klawiatura i dobrej jakości kamera — to elementy biurka (prawie) każdego programisty. Istotne są zwłaszcza te dwa pierwsze, dlatego ważne jest, by były maksymalnie ergonomiczne, funkcjonalne […]</p>
<p>Artykuł <a href="https://geek.justjoin.it/mx-wybierz-odpowiedni-ekosystem-sprzetow/">Jak zadbać o komfort i produktywność w pracy programisty? Wybierz odpowiedni ekosystem sprzętów</a> pochodzi z serwisu <a href="https://geek.justjoin.it">Just Geek IT</a>.</p>JustJoinIT2024-03-13T10:26:14Z215. Wojownicy, bardowie, druidzi i czarodzieje w IT - jak z nimi rozmawiać? - Paweł ZajączkowskiWrocław JUG30pR1LS2024-03-12T17:00:22Z2024-03-12T17:00:22ZWrocław JUG2024-03-12T17:00:22ZLinux 6.8 - nowe funkcje i ulepszenia w jądrzeBulldogJobmzHmobl2024-03-12T15:30:00Z2024-03-12T15:30:00Z<p>Sprawdź, co nowego w najświeższej wersji Linuxa 6.8. </p><p/>Premiera najnowszej wersji jądra Linuxa 6.8 nie przynosi tak wielkich zmian, jak poprzednie aktualizacje, ale warto się nią zainteresować. Przyjrzeliśmy się kilku kluczowym nowościom tego wydania.</p><p/>Linus Torvalds wskazuje na nowy sterownik Intel Xe DRM jako jedną z głównych nowinek w jądrze Linux 6.8, na razie tylko eksperymentalnie. Nowa wersja sprawia też, że procesory z rodziny Meteor Lake osiągają docelową częstotliwość taktowania. Obsługa układów AMD Zen 5 również została poprawiona. Ponadto, wprowadzono wsparcie dla nadchodzących procesorów od Intel, AMD oraz Qualcomm.</p><p/>W ramach kolejnych poprawek minimalizowane jest ryzyko awarii związanych z pamięcią dzięki zmianom w podsystemie zswap oraz wybranych systemach plików. Problemy z łącznością w laptopach opartych na procesorach AMD Ryzen 7000 zostały wyeliminowane, a ulepszenia związane z obsługą sieci przyczyniają się do zwiększenia wydajności protokołu TCP nawet o 40% w przypadku wielu połączeń.</p><p><a href="https://bulldogjob.pl/readme/nowe-funkcje-i-ulepszenia-w-jadrze-linuxa-6-8" target="_blank">Czytaj dalej</a></p>BulldogJob2024-03-12T15:30:00ZHandling errors in direct-style ScalaSoftwareMilllsLc6ld2024-03-12T13:49:00Z2024-03-12T13:49:00Z<img alt="" src="https://softwaremill.com/images/f/p/6/v/u/fp6vujc95wigvso-adf0549c.jpg?g-b993ddb9" />
<p>Error handling is the cornerstone of any library that orchestrates the execution of user-provided code. That's also the case in <a href="https://github.com/softwaremill/ox">ox</a>, a library for safe direct-style concurrency and resiliency for Scala on the JVM.</p>
<p><img title="oxen3" alt="oxen3" src="/user/pages/blog/131.handling-errors-in-direct-style-scala/oxen3.webp?g-b993ddb9"></p>
<p>Many of ox's features are centered around error handling: <a href="https://ox.softwaremill.com/latest/fork-join.html">structured concurrency</a>, <a href="https://ox.softwaremill.com/latest/retries.html">retries</a>, error propagation in <a href="https://ox.softwaremill.com/latest/channels/index.html">channels</a>. However, so far the primary error signaling mechanism in ox were exceptions. In Scala, all exceptions are unchecked. That's due to the <a href="https://stackoverflow.com/questions/613954/the-case-against-checked-exceptions">many reasons</a> why Java's checked exceptions are considered a failed feature of the language.</p>
<p>However, while having only unchecked exceptions alleviates some of the problems of their checked flavor, it also makes a dent in the otherwise type-safe nature of Scala codebases.</p>
<p>Let's first explore different ways in which we might represent errors and then examine, how such representations are supported in ox.</p>
<h2>Errors as values</h2>
<p>To rectify the dent in type-safety that we mentioned, it's often recommended to represent errors differently: as values. When using such a representation, the type of the error is part of each method's signature, allowing for more precision, compile-time safety, and better documentation. A primary example of such an approach is <a href="https://zio.dev/">ZIO</a>, where each computation description is parameterized by the type of error it might encounter. However, ZIO uses monadic composition to define programs and requires an entirely different programming style—something the direct style approach tries to avoid.</p>
<p>Still, we can represent errors as values when using direct style. It's worth noting that exceptions are still possible when an error is represented as a value. Hence, we need to make a distinction as to which errors should use which mechanism. I think the approach ZIO took: exceptions are used to signal "defects" in code (<strong>bugs</strong>), is quite sensible. On the other hand, any of the "expected" errors should be represented by values.</p>
<p>Of course, this is not a universal recipe, and it's quite possible that you'll need to adjust these definitions for your use case. However, it's worth specifying upfront what kind of error-handling mechanisms should be used and when. To distinguish bugs from the "expected" errors, represented as values, we'll use the term <strong>application errors</strong> going forward.</p>
<blockquote>
<p>Most I/O libraries, especially Java ones, use exceptions to signal all kinds of errors—both the "expected" ones and bugs. Thus, it might be necessary to create utilities or use library wrappers that convert such exceptions to an as-a-value representation. Moreover, an unexpected error at one level might be an expected error at another, so we'll also need utilities to convert between the two representations.</p>
</blockquote>
<h2>Picking a representation</h2>
<p>Now that we have the basic terminology set up, we need some specific mechanisms to represent errors as values. One approach is to make the <a href="https://theiterators.github.io/sealed-monad/">error states members of the data types</a> returned by your "business" functions. After all, since we are dealing with "expected errors", the business logic should handle the error states and the successful states. This might become hard when cross-cutting concerns are at play since we...</p>SoftwareMill2024-03-12T13:49:00ZNiektórzy myślą, że Scrum Master jest „od gier i zabaw”. To mitJustJoinITSEZpfz52024-03-12T08:23:16Z2024-03-12T08:23:16Z<p>Z czego wynika krytyka Scrum Masterów? Zdaniem Dawida Chudka, który od 1.5 roku pracuje w tym zawodzie, między innymi z rozczarowania organizacji, które oczekiwały, że Scrum będzie odpowiedzią na wszystkie ich problemy. – Jednakże Scrum nie jest i nigdy nie będzie uniwersalnym rozwiązaniem – uważa Dawid. Rozmawiamy z nim m.in. o tym, jakie są najważniejsze […]</p>
<p>Artykuł <a href="https://geek.justjoin.it/scrum-master-wywiad-dawid-chudek/">Niektórzy myślą, że Scrum Master jest „od gier i zabaw”. To mit</a> pochodzi z serwisu <a href="https://geek.justjoin.it">Just Geek IT</a>.</p>JustJoinIT2024-03-12T08:23:16ZBig Picture Event Storming - finding the gapsSoftwareMillFpDJNd72024-03-11T13:55:00Z2024-03-11T13:55:00Z<img alt="" src="https://softwaremill.com/images/i/k/d/0/j/ikd0jahs1cwjf8b-6526a694.jpg?g-b993ddb9" />
<p>In my latest <a href="https://softwaremill.com/big-picture-event-storming-mastering-chaos/">article</a> of the series about our Domain-Driven Design show-case project, which you can read more about <a href="https://softwaremill.com/domain-driven-design-a-softwaremill-way/">here</a>, I covered our kickoff session of Big Picture Event Storming. Quick recap: we started with a chaotic exploration, which was a brain dump of relevant domain events from everyone involved. After that, we got down to organizing chaos by sorting out the events, removing duplicates, and fine-tuning them.</p>
<p>We wrapped the session with the events ordered in chronological order. We also pointed out a hot spot that highlighted the things we were not sure about. Additionally, we used some yellow sticky notes for the crucial bits we didn’t want to forget.</p>
<p>As a bonus, we pinpointed the initial sub-processes happening within the main devices inventory process. Those were highlighted, and we gave them temporary names. Here’s a snapshot of what our Miro board looked like when we were done:</p>
<p><a href="https://miro.com/app/board/uXjVNniG9SM=/?share_link_id=570114911830"><img title="miro 1" alt="miro 1" src="/user/pages/blog/130.big-picture-event-storming-finding-the-gaps/miro%201.png?g-b993ddb9"></a></p>
<h4>Picture 1. Miro board after the timeline enforcement phase, <a href="https://miro.com/app/board/uXjVNniG9SM=/?share_link_id=570114911830"><strong>CLICK to preview on Miro</strong></a></h4>
<p>That looks pretty clear. But even with everything in order and the board looking sharp, we were aware that there could still be some gaps or inconsistencies hidden in our earlier modeling. Fortunately, Big Picture Event Storming helps identify such gaps or inconsistencies by providing two techniques - <em>explicit walk-through</em> and <em>reverse narrative</em>. Awareness of things we don’t know is often valuable knowledge for the stakeholders, especially when they didn’t know about it before.</p>
<p>In this post, I will dive into how we tackled the second part of our workshop. I'll share the techniques we used to ensure we had a complete picture of the process. But first, let’s start with some theory on the approaches to finding the gaps in the event flow.</p>
<h2><strong>Explicit walk-through</strong></h2>
<p>The explicit walk-through technique is one approach of the Event Storming workshop that checks if the model is both accurate and complete. It involves a detailed review of the entire event sequence laid out during the workshop. It lets everyone involved check each part of the process together. This way, we can spot inconsistencies, unnecessary parts, or anything missing. It makes sure we all understand the business process.</p>
<p>During this, the facilitator might ask someone to start telling the story based on the events, following their order in time. This role of storyteller can be passed around to keep everyone engaged.</p>
<p>To effectively validate the process steps and identify potential gaps or inconsistencies, it’s crucial to ask the right questions while going through the events. Though the facilitator usually starts this, participants often see its value and start asking questions, too. The common, useful questions which help to find potential missing elements are:</p>
<ul>
<li>Why did this event happen?</li>
<li>Is there any other reason for this event to happen?</li>
<li>How does this event affect the system's state?</li>
<li>What could happen between this event and the one before it?</li>
<li>What follows this event?</li>
<li>How does this event affect the business?</li>
<li>Is it possible that this event will not happen? If yes,...</li></ul>SoftwareMill2024-03-11T13:55:00ZGleam - wszystko, co musisz wiedzieć o nowym języku programowaniaBulldogJobekbv00B2024-03-11T11:12:00Z2024-03-11T11:12:00Z<p>Poznaj nowy język programowania Gleam, ideę jego stworzenia i sprawdź, czym się wyróżnia oraz jakie są jego słabe strony.</p><p/>Została wydana pierwsza stabilna wersja języka programowania Gleam i to dobra okazja, żeby zobaczyć, o co w ogóle tu chodzi. Sprawdźmy, czy Gleam ma potencjał na wygospodarowanie sobie niszy na rynku.</p><p/>Założenia Gleama są proste - jest to funkcyjny język, który oferuje solidny system typów, dzięki czemu ma sprawdzić się w tworzeniu i utrzymywaniu aplikacji o wysokiej jakości.</p><p/>Ma mieć zastosowanie głównie na backendzie aplikacji webowych, czy do obsługi baz danych, dzięki niskim opóźnieniom i wysokiej współbieżności. Działa na maszynie wirtualnej Erlanga, więc nic dziwnego, że kwestie związane z siecią są jego mocną stroną.</p><p><a href="https://bulldogjob.pl/readme/gleam-wszystko-co-musisz-wiedziec-o-nowym-jezyku-programowania" target="_blank">Czytaj dalej</a></p>BulldogJob2024-03-11T11:12:00ZOd programisty do przedsiębiorcy. Wywiad z Kacprem KaczmarkiemJustJoinITO7653IA2024-03-11T08:40:00Z2024-03-11T08:40:00Z<p>Kacper Kaczmarek dość szybko doszedł do etapu seniora, a to dzięki jego zaangażowaniu w rozwój i ciągłe podnoszenie kompetencji. Od zawsze jednak chciał pracować nad swoimi produktami, dlatego zdecydował się na stopniowe zmniejszanie liczby godzin u pracodawcy. W ten sposób zadbał o stabilność finansową, a gdy poczuł, że biznes idzie dobrze, porzucił pracę programisty. Które z doświadczeń z […]</p>
<p>Artykuł <a href="https://geek.justjoin.it/od-programisty-do-przedsiebiorcy/">Od programisty do przedsiębiorcy. Wywiad z Kacprem Kaczmarkiem</a> pochodzi z serwisu <a href="https://geek.justjoin.it">Just Geek IT</a>.</p>JustJoinIT2024-03-11T08:40:00ZJak podnieść jakości życia zawodowego poprzez zmianę codziennych nawyków?SiigzUBEpS2024-03-11T04:00:00Z2024-03-11T04:00:00Z<p><img width="733" height="456" src="https://sii.pl/blog/wp-content/uploads/2024/03/Jak-podniesc-jakosci-zycia-zawodowego-poprzez-zmiane-codziennych-nawykow-1.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Jak podnieść jakości życia zawodowego poprzez zmianę codziennych nawyków?" decoding="async" srcset="https://sii.pl/blog/wp-content/uploads/2024/03/Jak-podniesc-jakosci-zycia-zawodowego-poprzez-zmiane-codziennych-nawykow-1.jpg 733w, https://sii.pl/blog/wp-content/uploads/2024/03/Jak-podniesc-jakosci-zycia-zawodowego-poprzez-zmiane-codziennych-nawykow-1-300x187.jpg 300w" sizes="(max-width: 733px) 100vw, 733px" title="" /></p><p>Często zastanawiamy się, w jaki sposób ludzie zajmujący wysokie stanowiska doszli do miejsca, w którym się znajdują. Co miało wpływ … <a class="continued-btn" href="https://sii.pl/blog/jak-podniesc-jakosci-zycia-zawodowego-poprzez-zmiane-codziennych-nawykow/">Continued</a></p>
<p>The post <a href="https://sii.pl/blog/jak-podniesc-jakosci-zycia-zawodowego-poprzez-zmiane-codziennych-nawykow/">Jak podnieść jakości życia zawodowego poprzez zmianę codziennych nawyków?</a> first appeared on <a href="https://sii.pl/blog">blogersii</a>.</p>Sii2024-03-11T04:00:00ZTransforming Legacy Projects to Microservices: Expert Guidance for SuccessIteratorsOPSCKPo2024-03-08T16:47:49Z2024-03-08T16:47:49Z<p>Picture this: You’re navigating the vast landscape of software development, and you find yourself face-to-face with the challenge of legacy projects. It’s a familiar story for many businesses…</p>
The post <a href="https://www.iteratorshq.com/blog/transforming-legacy-projects-to-microservices-expert-guidance-for-success/">How Microservices Can Help You Upgrade and Maintain Legacy Projects</a> first appeared on <a href="https://www.iteratorshq.com">Iterators</a>.Iterators2024-03-08T16:47:49ZZainab Ali - My Scala StorySoftwareMillDaS7dn72024-03-08T11:33:00Z2024-03-08T11:33:00Z<img alt="" src="https://softwaremill.com/images/d/l/a/c/i/dlaciuynilekt4d-a72a189b.jpg?g-b993ddb9" />
<p>Another wonderful guest in our My Scala Story series is <a href="https://www.linkedin.com/in/zainab-ali-fp/">Zainab Ali</a>. She is a functional programmer, educator, open source contributor and organizer of the London Scala User Group. She is a maintainer of fs2 and the original author of its reactive streams component. For the past five years, she’s helped developers master the art of functional programming in Scala. </p>
<h2>How did you first get introduced to Scala, and what did you think about it?</h2>
<p>Believe it or not, I used to be an object-oriented Java developer. I took a break from my first job to write a game engine and picked Scala for a new start.</p>
<p>Initially, I thought it was pretty daunting. I'd been coding in Java, and only Java, up to that point, and good Java code always looked the same. Scala brought so many different ways of expressing things, not just in its syntax but in its programming paradigms. My code was difficult to understand, but I could suddenly solve many more problems than otherwise.</p>
<p>It opened my eyes to new ways of thinking and understanding code. Looking back on it, the biggest challenge was not so much Scala as leaving my comfort zone and learning a second programming language. Since then, I've happily dived into more languages than I can count and am much better at it.</p>
<h2>Tell us about a moment when you realized, "Aha! Scala is awesome!" What Scala's features and capabilities made you feel that way?</h2>
<p>I first encountered fs2 while writing game engines and hunting for a functional mechanism to represent animations. I had already been dazzled by type-level programming with shapeless and functional programming with cats, but it was fs2 that got me hooked. It surpassed anything I had ever encountered for expressing iterative computations, both in Scala and beyond. It still holds its ground as the most powerful stream processing library and one I'm proud to be a maintainer of now</p>
<p>Over the years, I've dipped my toes into many languages. But the thing that keeps drawing me back to Scala is its flourishing ecosystem and innovative community.</p>
<h2>What is your favourite programming meme?</h2>
<p>It’s a bit cynical, but I always love to share this XKCD comic: </p>
<p><img title="meme" alt="meme" src="/user/pages/blog/129.zainab-ali-my-scala-story/meme.png?g-b993ddb9"></p>
<h4><a href="https://xkcd.com/2347/">source</a></h4>
<h2>How has the Scala community impacted your programming journey? Any standout interactions or support stories to share?</h2>
<p>The Scala community was my first experience of open source.</p>
<p>It was a slow awakening. At first, I realized that the libraries I used were free for me to explore, that I could raise issues and discuss them; and then that I could contribute back and fix things myself, and thus improve the ecosystem for everyone else.</p>
<p>I was always a bit shy on online forums, but I went in person to one of the Typelevel Hack the Tower days. I spent the entire day with a small group of Scala open source contributors, discussing cats and the delights and challenges of functional programming. I learned so much through those conversations, sharing problems,...</p>SoftwareMill2024-03-08T11:33:00ZDeterminanty Poka-Yoke jako metody zapobiegania defektom w informatyceSiiHchPFMf2024-03-08T04:00:00Z2024-03-08T04:00:00Z<p><img width="733" height="456" src="https://sii.pl/blog/wp-content/uploads/2024/03/Determinanty-Poka-Yoke-jako-metody-zapobiegania-defektom-w-informatyce.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Determinanty Poka-Yoke jako metody zapobiegania defektom w informatyce" decoding="async" srcset="https://sii.pl/blog/wp-content/uploads/2024/03/Determinanty-Poka-Yoke-jako-metody-zapobiegania-defektom-w-informatyce.jpg 733w, https://sii.pl/blog/wp-content/uploads/2024/03/Determinanty-Poka-Yoke-jako-metody-zapobiegania-defektom-w-informatyce-300x187.jpg 300w" sizes="(max-width: 733px) 100vw, 733px" title="" /></p><p>Poka-Yoke, wywodzący się z japońskich praktyk zarządzania, stanowi skuteczne rozwiązanie w zapobieganiu błędom poprzez eliminację najczęstszych źródeł i rozpoznawanie podstawowych … <a class="continued-btn" href="https://sii.pl/blog/determinanty-poka-yoke-jako-metody-zapobiegania-defektom-w-informatyce/">Continued</a></p>
<p>The post <a href="https://sii.pl/blog/determinanty-poka-yoke-jako-metody-zapobiegania-defektom-w-informatyce/">Determinanty Poka-Yoke jako metody zapobiegania defektom w informatyce</a> first appeared on <a href="https://sii.pl/blog">blogersii</a>.</p>Sii2024-03-08T04:00:00ZWednesday Links - Edition 2024-03-06ViacomCBS0btsqrg2024-03-06T00:00:00Z2024-03-06T00:00:00ZRandom Newsletter (8 min)🔢 https://www.javaspecialists.eu/archive/Issue315-Random-Newsletter.htmlViacomCBS2024-03-06T00:00:00ZPassword Manager Menadżer hasełTomasz Woliński9mEsjMl2024-03-14T12:07:03Z2024-03-14T12:07:03Z<p><img width="1024" height="576" src="https://stormit.pl/wp-content/uploads/49-1024x576.png" class="attachment-large size-large wp-post-image" alt="" style="float:left; margin:0 15px 15px 0;" decoding="async" srcset="https://stormit.pl/wp-content/uploads/49-1024x576.png 1024w, https://stormit.pl/wp-content/uploads/49-300x169.png 300w, https://stormit.pl/wp-content/uploads/49-768x432.png 768w, https://stormit.pl/wp-content/uploads/49-390x219.png 390w, https://stormit.pl/wp-content/uploads/49-1140x641.png 1140w, https://stormit.pl/wp-content/uploads/49.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" />Witaj w erze cyfrowej, gdzie hasło to nie tylko sposób na zabezpieczenie Twojej skrzynki pocztowej, ale brama do całego uniwersum danych osobowych. W dzisiejszym świecie każdy serwis, każda aplikacja prosi nas o kolejne hasło. Jak więc nie zgubić się w tym labiryncie cyfrowych zamków? Sekretem jest menadżer haseł (ang. Password Manager), narzędzie, które nie tylko ułatwi życie, ale i znacząco podniesie Twoje bezpieczeństwo w sieci. Password Manager – wprowadzenie Z tego materiału dowiesz się: Czym jest menadżer haseł? Dlaczego menadżer haseł jest istotny? Jakie…</p>
<p>Artykuł <a href="https://stormit.pl/password-manager/">Password Manager ⭐⭐⭐⭐⭐⭐ Menadżer haseł</a> pochodzi z serwisu <a href="https://stormit.pl">StormIT.pl 👽 👾 🤖</a>.</p>Tomasz Woliński2024-03-14T12:07:03ZPłatna wyszukiwarka? Czy świat stanął na głowie? Kagi vs GoogleMaciej Waksmański6jEFcSS2024-03-14T10:59:47Z2024-03-14T10:59:47Z<p>Dawno, dawno temu… czy ktoś z was pamięta jeszcze co było przed wyszukiwarką Google? Czy w ogole sobie może wyobrazić, że Google to nie pierwsza wyszukiwarka i że przed nią były między innymi Yahoo czy AltaVista? Aktualnie, oprócz Google są jeszcze Bing czy DuckDuckGo i wszystkie te wyszukiwarki łączy jedna rzecz: są „darmowe”. Kagi.com chce […]</p>
<p>Artykuł <a href="https://devreview.pl/platna-wyszukiwarka-czy-swiat-stanal-na-glowie-kagi-vs-google/">Płatna wyszukiwarka? Czy świat stanął na głowie? Kagi vs Google</a> pochodzi z serwisu <a href="https://devreview.pl">DevReview.pl</a>.</p>Maciej Waksmański2024-03-14T10:59:47ZJekyll i Buddy, czyli mój sposób na publikowanie treści na blogaCezary SaneckiWNjDdDD2024-03-13T23:00:00Z2024-03-13T23:00:00ZKiedyś wspomniałem o tym, że przeszedłem z platformy Wordpress na Jekyll. I do dziś uważam, że to był dobry wybór! Głównie z tego powodu, że teraz wszystko mogę robić z pozycji edytora tekstu. Przy pomocy Markdown piszę tekst, potem robię commita i tyle! Nie musze odpalać żadnej przeglądarki jak to...Cezary Sanecki2024-03-13T23:00:00ZTworzenie projektu w oparciu o legendarne library-by-exampleCezary SaneckiOLBywiY2024-03-12T23:00:00Z2024-03-12T23:00:00ZJest to kolejny wpis z serii dotykowanej konkursowi 100commitów. Na ten moment muszę przyznać, że cel dotyczący refaktoryzacji, jaki chciałem osiągnąć, oddalił się. Wychodzę z założenia, że techniki refaktoryzacyjne jednak lepiej się ćwiczy na cudzych projektach. Wtedy musimy odnaleźć wymagania biznesowe zaszyte w kodzie. Natomiast jak piszemy coś własnego i...Cezary Sanecki2024-03-12T23:00:00ZSytuacja na rynku IT: Perspektywa Java DeveloperaSoftwareSkillggYZohJ2024-03-12T20:33:42Z2024-03-12T20:33:42Z<p>W obliczu zmian gospodarczych i technologicznych, rynek IT oferuje wyzwania i możliwości dla Java Developerów, podkreślając znaczenie ciągłego rozwijania umiejętności technicznych i miękkich. Sztuczna inteligencja i adaptacyjność stają się kluczowe w kontekście dynamicznie zmieniających się wymagań rynkowych. Przyszłość w IT zależeć będzie od gotowości do nauki i innowacji, co umożliwi Java Developerom utrzymanie konkurencyjności.</p>
<p>Artykuł <a href="https://softwareskill.pl/sytuacja-na-rynku-it-perspektywa-java-developera">Sytuacja na rynku IT: Perspektywa Java Developera</a> pochodzi z serwisu <a href="https://softwareskill.pl">SoftwareSkill.pl</a>.</p>SoftwareSkill2024-03-12T20:33:42ZHandsOnArchitects celebrates its first anniversaryHands-on Software ArchitectsuAmnbAH2024-03-12T00:00:00Z2024-03-12T00:00:00ZAs HandsOnArchitects marks its first anniversary, we're excited to revisit our top-performing blog posts that have resonated with our…Hands-on Software Architects2024-03-12T00:00:00ZKafka Offset with Spring BootPiotr MińkowskiuPdqeeL2024-03-11T13:09:59Z2024-03-11T13:09:59Z<p>In this article, you will learn how to manage Kafka consumer offset with Spring Boot and Spring Kafka. An inspiration for preparing this article was the feedback I received after publishing the post describing concurrency with Kafka and Spring Boot. You were asking me questions related not only to concurrency but also to the consumer […]</p>
<p>The post <a href="https://piotrminkowski.com/2024/03/11/kafka-offset-with-spring-boot/">Kafka Offset with Spring Boot</a> appeared first on <a href="https://piotrminkowski.com">Piotr's TechBlog</a>.</p>Piotr Mińkowski2024-03-11T13:09:59ZPrzepisujemy moduł w systemie. Odc. 4: porządkowanieMichał BartyzelhXnoyfM2024-03-11T12:01:52Z2024-03-11T12:01:52Z<p>This is post 4 of 5 in the series “Przepisujemy moduł w systemie” Przepisujemy moduł w systemie odc. 1 Przepisujemy moduł w systemie odc. 2 Przepisujemy moduł w systemie odc. 3 Przepisujemy moduł w systemie. Odc. 4.: porządkowanie Przepisujemy moduł w systemie. Odc. 5. Twórz język, nie słownik Ostatni artykuł z tej serii zostawił Cię […]</p>
<p>Artykuł <a href="https://www.michalbartyzel.pl/przepisujemy-modul-w-systemie-odc-4-porzadkowanie/">Przepisujemy moduł w systemie. Odc. 4.: porządkowanie</a> pochodzi z serwisu <a href="https://www.michalbartyzel.pl">IT spotyka klienta</a>.</p>Michał Bartyzel2024-03-11T12:01:52ZTesty integracyjne w Spock dla Spring Boot 3Cezary SaneckiIvG5jPJ2024-03-08T23:00:00Z2024-03-08T23:00:00ZJeśli planujesz korzystać ze Spock, aby pisać testy integracyjne w Spring Boot 3 (w moim przypadku 3.2.2) to mam dla Ciebie ostrzeżenie. Jeśli w swoim narzędziu budowania będziesz miał wpis: 1 2 3 4 5 6 <dependency> <groupId>org.spockframework</groupId> <artifactId>spock-spring</artifactId> <version>2.3-groovy-4.0</version> <scope>test</scope> </dependency> To niestety twój test, podobny do tego niżej,...Cezary Sanecki2024-03-08T23:00:00ZLink Dump #129Sebastian MalacabpbF8cY2024-03-08T09:00:00Z2024-03-08T09:00:00ZSebastian Malaca2024-03-08T09:00:00ZBuilding application with AI: from concept to prototype.ScalaCxMQbeiq2024-03-07T15:59:07Z2024-03-07T15:59:07Z<p>Introduction – Artificial Intelligence in Application Development When a few years ago the technological world was taken over by the blockchain trend, I must admit that I didn’t hop on that train. I couldn’t see the real value that this technology could bring to someone designing application interfaces. However, when the general public got to […]</p>
<p>The post <a href="https://scalac.io/blog/building-application-with-ai-from-concept-to-prototype/">Building application with AI: from concept to prototype.</a> appeared first on <a href="https://scalac.io">Scalac - Software Development Company - Akka, Kafka, Spark, ZIO</a>.</p>ScalaC2024-03-07T15:59:07ZCode Reflection ️ Triton: Further improvements to GPU programming in Java - JVM Weekly vol. 74VivedFTuaHwS2024-03-07T14:01:28Z2024-03-07T14:01:28ZToday we return to text form, with new JEPs, Code Reflection and a mega interesting Release Radar.Vived2024-03-07T14:01:28ZJDK 22 in a nutshellSoftwareMillNHGXQRU2024-03-07T13:43:00Z2024-03-07T13:43:00Z<img alt="" src="https://softwaremill.com/images/e/y/6/k/m/ey6km0tlgiaknfn-5902cfe2.jpg?g-b993ddb9" />
<p>With the regular cadence of Java releases, developers eagerly anticipate each new version for the enhancements and features it brings. As the next iteration, Java 22, prepares for release on 19th March, it's time to dive into the improvements and updates that await. From performance enhancements to streamlined APIs, let's explore what Java 22 has in store for developers.</p>
<h2>Stable Features</h2>
<p>This section focuses on the features that are now fully integrated into Java 22, enhancing the platform without requiring any special activation.</p>
<h3><a href="https://openjdk.org/jeps/423">JEP 423: Region Pinning for G1</a></h3>
<p>Is an enhancement to the G1 garbage collector, primarily aiming to allow garbage collection during active JNI regions. It addresses the issue of G1's inability to pin arbitrary regions during minor collections, a capability already present in major collections. By implementing this feature, G1 can effectively manage JNI critical regions without disabling GC, pinning regions containing critical objects while allowing garbage collection in unpinned areas. This enhancement will effectively prevent thread stalling and eliminate potential latency related to it.</p>
<h3><a href="https://openjdk.org/jeps/454">JEP 454: Foreign Function & Memory API</a></h3>
<p>Improvement introduces an API for Java to efficiently interact with foreign functions and memory, i.e., code and data outside the Java Virtual Machine (JVM). This API aims to replace the existing Java Native Interface (JNI) with a more concise and safer approach. Key features include the ability to invoke foreign functions and access foreign memory with performance comparable to JNI or better, broad platform support, and a focus on safety to prevent common bugs like use-after-free errors.</p>
<h3><a href="https://openjdk.org/jeps/456">JEP 456: Unnamed Variables & Patterns</a></h3>
<p>Enhancement Java with unnamed variables and patterns, indicated by the underscore <code>_</code>, optimizes cases where unused variable declarations or nested patterns are involved. This streamlines the language, aligning it with common practices in other programming languages. This refinement boosts developer experience and code clarity, making Java more intuitive and concise in handling redundant naming.</p>
<h3><a href="https://openjdk.org/jeps/458">JEP 458 Launch Multi-File Source-Code Programs</a></h3>
<p>This represents a further development from "<a href="https://openjdk.org/jeps/330">JEP 330: Launch Single-File Source-Code Programs</a>," which eliminated the explicit compilation step for single-file programs. This advancement facilitated a more fluid development process, particularly valuable during the prototyping phase. Now, this capability has been expanded to multi-file Java source code programs, further easing the transition from small-scale to larger, more complex programs.</p>
<h2>Second Preview</h2>
<p>In this update, we revisit features from earlier Java versions now in their second preview phase, aimed at gathering further feedback. Preview features in Java are not activated by default. To enable these features, you must explicitly include the <code>--enable-preview</code> flag when running your Java application. </p>
<h3><a href="https://openjdk.org/jeps/464">JEP 464: Scoped Values</a> and <a href="https://openjdk.org/jeps/462">JEP 462: Structured Concurrency </a></h3>
<p>There were no updates in these enhancements, as their specifications say:</p>
<blockquote>
<p><em>We here propose to re-preview the API in JDK 22, without change, in order to gain additional experience and feedback.</em></p>
</blockquote>
<p>For more information about these improvements, you can check our <a href="https://softwaremill.com/structured-concurrency-and-scoped-values-in-java/">blog article</a>.</p>
<p><a href="https://softwaremill.com/structured-concurrency-and-scoped-va...SoftwareMill2024-03-07T13:43:00ZModularyzacja i testy architekturyDetektywi IT1xLN5or2024-03-07T06:40:00Z2024-03-07T06:40:00ZModularyzacja w projektach stanowi jedną z kluczowych technik, które pozwalają na zachowanie czytelności, skalowalności oraz łatwości w utrzymaniu kodu. Wraz z rozwojem projektów, zwłaszcza tych o większym zakresie, staje się ona ważnym elementem zapewniającym porządek i przejrzystośći w strukturze kodu. Jednakże, wraz z rozwojem projektu, gdy wprowadzane są kolejne zmiany, a programiści przychodzą i odchodzą, łatwo zapomnieć o początkowych założeniach architektury. Z pomocą przychodzą testy automatyczne. Tylko co testować i jak je zrobić? Bez solidnych testów nie jesteśmy w stanie upewnić się, że nasza struktura modułowa spełnia założenia, które sobie postawiliśmy.Detektywi IT2024-03-07T06:40:00ZNastawienie na rozwój – sekret efektywności zwinnych zespołów ITSiilLsvnok2024-03-07T04:00:00Z2024-03-07T04:00:00Z<p><img width="733" height="456" src="https://sii.pl/blog/wp-content/uploads/2024/03/Nastawienie-na-rozwoj-–-sekret-efektywnosci-zwinnych-zespolow-IT.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Nastawienie na rozwój – sekret efektywności zwinnych zespołów IT" decoding="async" srcset="https://sii.pl/blog/wp-content/uploads/2024/03/Nastawienie-na-rozwoj-–-sekret-efektywnosci-zwinnych-zespolow-IT.jpg 733w, https://sii.pl/blog/wp-content/uploads/2024/03/Nastawienie-na-rozwoj-–-sekret-efektywnosci-zwinnych-zespolow-IT-300x187.jpg 300w" sizes="(max-width: 733px) 100vw, 733px" title="" /></p><p>W dzisiejszym świecie technologii, w którym innowacje i zmiany są na porządku dziennym, elastyczność umysłu oraz ciągły rozwój mają kluczowy … <a class="continued-btn" href="https://sii.pl/blog/nastawienie-na-rozwoj-sekret-efektywnosci-zwinnych-zespolow-it/">Continued</a></p>
<p>The post <a href="https://sii.pl/blog/nastawienie-na-rozwoj-sekret-efektywnosci-zwinnych-zespolow-it/">Nastawienie na rozwój – sekret efektywności zwinnych zespołów IT</a> first appeared on <a href="https://sii.pl/blog">blogersii</a>.</p>Sii2024-03-07T04:00:00ZThriving Remotely: My Journey with SoftwareMillSoftwareMillISfUBxS2024-03-06T15:12:00Z2024-03-06T15:12:00Z<img alt="" src="https://softwaremill.com/images/7/c/x/b/e/7cxbeolirtov9jv-43eb0fea.jpg?g-b993ddb9" />
<p>I had never been fully convinced about remote work. It just didn't feel right. It was hard to imagine how to become truly involved and immersed in the company's day-to-day operations. I wanted my contributions to be relevant and meaningful, not just to check tasks off a list. </p>
<p>As a software architect, I wanted to stay close to the business to unleash my potential. I needed a feeling of belonging somewhere, of being part of something much bigger than myself. A remote position seemed rather hollow and hard to find satisfying to me.</p>
<p>Today, I want to share my thoughts and insights on how I feel and what I learned during the last 18 months of working fully remotely. I am sharing this because it exemplifies how remote cooperation should look, and I hope to inspire some readers to adopt some solutions and, more importantly, the mindset.</p>
<p><img title="growth" alt="growth" src="/user/pages/blog/127.thriving-remotely-my-journey-with-softwaremill/growth.jpeg?g-b993ddb9"></p>
<h1>Decision</h1>
<p>I fell in love with functional programming, and while searching more and more about it, I ended up on SoftwareMill's blog increasingly often. The company was apparent and visible in the Scala ecosystem, which I was interested in back then. However, despite its strong Scala reputation, Scala is one of many technologies the company uses to build its solutions.</p>
<p>So, the desire to become part of it began by becoming aware of what they are doing, how they approach it, and who works there. I learned much about the company's mindset and approach to solving challenging problems. SoftwareMill contributes to projects that add something to the world, engaging in challenging and complex fields like the health sector, fintech, or telecom. The company does not participate in anything harmful, like gambling, for example. Such distinction is important to me, so I took my chances and decided to join SoftwareMill.</p>
<p>SoftwareMill is entirely open and happy to chat. There was (and still is) a public <a href="http://sml.io/ask-me-anything" target="_blank">Ask Me Anything</a> Slack channel where you can ask any question without bothering with any formal communication. I was convinced at that stage.</p>
<h1>Hiring</h1>
<p>The recruitment process clearly shows the extensive effort SoftwareMill puts into hiring the right people. Initially, I was asked to fill out a short form with five simple questions. The next step was an informal, roughly 1-hour long conversation with Sylwia, a wonderful person responsible for HR, among other duties. The goal was to meet and chat to see if we could more or less get along. This was an enjoyable experience for me. Then, I was asked to implement a simple technical task in Scala, which was fun to do. I was expected to spend just a few hours demonstrating my thought process, design skills, and problem-solving approach. Shortly after, they responded with thorough code reviews and feedback. I was ready for a technical interview, which was the next step in the process. The technical interview lasted about 2 hours and included two other engineers. The atmosphere was relaxed, and I quickly felt comfortable there, which allowed me to grasp what working with them...</p>SoftwareMill2024-03-06T15:12:00ZUnlocking Kafka's Potential: Tackling Tail Latency with eBPFAllegro TechWA2xX1Z2024-03-05T23:00:00Z2024-03-05T23:00:00Z<p>At <a href="https://allegro.tech">Allegro</a>, we use <a href="https://kafka.apache.org/">Kafka</a> as a backbone for asynchronous communication between microservices. With up to
300k messages published and 1M messages consumed every second, it is a key part of our infrastructure. A few months ago, in our main Kafka cluster, we noticed
the following discrepancy: while median response times for <a href="https://developer.confluent.io/courses/architecture/broker/#inside-the-apache-kafka-broker:~:text=Client%20requests%20fall%20into%20two%20categories%3A%20produce%20requests%20and%20fetch%20requests.%20A%20produce%20request%20is%20requesting%20that%20a%20batch%20of%20data%20be%20written%20to%20a%20specified%20topic.%20A%20fetch%20request%20is%20requesting%20data%20from%20Kafka%20topics.">produce requests</a>
were in single-digit milliseconds, the tail latency was much worse. Namely, the
p99 latency was up to 1 second, and the p999 latency was up to 3 seconds. This was unacceptable for a new project that we were about to start, so we
decided to look into this issue. In this blog post, we would like to describe our journey — how we used Kafka protocol sniffing and eBPF to identify and remove
the performance bottleneck.</p>
<p><img src="/img/articles/2024-03-06-kafka-performance-analysis/kafka-performance-analysis.png" alt="Kafka Produce Latency" /></p>
<h2 id="the-need-for-tracing">The Need for Tracing</h2>
<p>Kafka brokers <a href="https://docs.confluent.io/platform/current/kafka/monitoring.html#localtimems">expose various metrics</a>. From them, we were able to tell that
produce requests were slow for high percentiles, but we couldn’t identify the cause. System metrics were also not showing anything alarming.</p>
<p>To pinpoint the underlying problem, we decided to trace individual requests. By analyzing components of Kafka involved in handling produce requests,
we aimed to uncover the source of the latency spikes. One way of doing that would be to fork Kafka, implement instrumentation, and deploy our custom version
to the cluster. However, this would be very time-consuming and invasive. We decided to try an alternative approach.</p>
<p>The first thing we did was finding <em>arrival</em> and <em>end</em> times for every Kafka produce request.</p>
<table>
<thead>
<tr>
<th style="text-align: center"> </th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center"><img src="/img/articles/2024-03-06-kafka-performance-analysis/request_timeline1.png" alt="Timeline of Kafka produce request" /></td>
</tr>
<tr>
<td style="text-align: center"><em>Timeline of a produce request. Arrival and end times define the boundaries of the request. The components of Kafka involved in handling the request and their latencies are unknown.</em></td>
</tr>
</tbody>
</table>
<p>Kafka uses a binary protocol over TCP to send requests from producers (and consumers) to brokers. We started by capturing the network traffic on a selected
broker using <a href="https://www.tcpdump.org/">tcpdump</a>. Then we wrote a tool for analyzing the captured packets, which enabled us to list all the request and response
times. In the output, we saw a confirmation of what we already knew — there were many slow produce requests taking over a second to complete. What’s more we
were able to see request metadata — <em>topic name</em>, <em>partition ID</em> and <em>message ID</em> (our internal identifier included in Kafka headers):</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ARRIVAL TIME END TIME LATENCY(ms) MESSAGE_ID TOPIC PARTITION
12:11:36.521 12:11:37.060 538 371409548 topicA 2
12:11:36.519 12:11:37.060 540 375783615 topicB 18
12:11:36.519 12:11:37.060 540 375783615 topicB 18
12:11:36.555 12:11:37.061 505 371409578 topicC 7
12:11:36.587 12:11:37.061 473 375783728 topicD 16
12:11:36.690 12:11:37.061 370 375783907 topicB 18
</code></pre></div></div>
<p>With...Allegro Tech2024-03-05T23:00:00ZZmęczenie, perfekcjonizm, niechęć do pracy — łatwo przeoczyć pierwsze objawy wypaleniaJustJoinIT5UATZ0V2024-03-05T10:06:51Z2024-03-05T10:06:51Z<p>Co ma wspólnego wypalenie zawodowe z perfekcjonizmem? Jakie sygnały powinny nas zaalarmować o tym, że jesteśmy wypaleni? I jak sobie z tym radzić? Rozmawiamy o tym z Alkiem Kowalem, frontend developerem, który zmierzył się z problemem wypalenia zawodowego. Jego historia może być inspiracją dla Was. Cześć! Opowiedz, proszę, o swoich doświadczeniach dotyczących wypalenia zawodowego. Wspomniałeś […]</p>
<p>Artykuł <a href="https://geek.justjoin.it/wypalenie-zawodowe-wywiad/">Zmęczenie, perfekcjonizm, niechęć do pracy — łatwo przeoczyć pierwsze objawy wypalenia</a> pochodzi z serwisu <a href="https://geek.justjoin.it">Just Geek IT</a>.</p>JustJoinIT2024-03-05T10:06:51Z82. O architekturze makro front-endu Atlassiana z Bartoszem Cytrowskim prowadzi Tomasz DucinBetter Software DesigndpIe5mb2024-03-05T00:00:00Z2024-03-05T00:00:00Z<p>Tworzenie oprogramowania nie sprowadza się jedynie do backendu, natomiast tematyka architektury front-endu do tej pory była w zasadzie zupełnie nieobecna w Better Software Design. Do tej pory, ponieważ dzisiejszy odcinek otwiera nowy rozdział w podkaście i tego rodzaju zagadnienia będą się co jakiś czas pojawiać. A rozmowy na takie właśnie tematy prowadzić będzie najlepszy znami mi architekt front-endu, Tomasz Ducin.</p><p>Tak, tak, nie jest to przejęzyczenie. Przy dzisiejszym poziomie złożoności technik i narzędzi, po prostu nie można znać się na wszystkim. Dlatego mam dużą satysfakcję z tego, że Tomek będzie gościł w Better Software Design w nowej roli, dostarczając wiedzę z najwyższej front-endowej półki. Pozostaje zacząć nowy etap z przysłowioego "wysokiego C" i bardzo interesującym tematem.</p><p>Gościem specjalnym dzisiejszego odcinka jest Bartosz Cytrowski, Senior Software Engineer w Atlassianie. Jeśli chcesz się dowiedzieć, jak wygląda architektura makro front-endu w Atlassianie i Jira Cloud, czy jak pracuje się w tak ogromnym i popularnym ekosystemie, to ten odcinek jest właśnie dla Ciebie!</p><p>W tym odcinku usłyszysz między innymi o:</p><ul><li>czym jest monorepo, jego zaletach i wadach, a także o tym jak pracuje się z nim w Atlassianie,</li><li>narzędziach wykorzystywanych do rozwoju systemu o takiej skali jak Jira Cloud,</li><li>sposobie pracy w systemie, w którym pojawia się ponad 1000 pull-requestów dziennie,</li><li>kontrolowaniu zależności pomiędzy modułami,</li><li>stosowaniu feature flags i bezpiecznym wprowadzaniu zmian dotykających wielu zespołów,</li><li>testowaniu zmian, dog-foodingu i bezpiecznym wdrażaniu nowych wersji.</li></ul><p>Zapraszam!</p>Better Software Design2024-03-05T00:00:00ZWydajność w aplikacjach React – jak sprostać wyzwaniom?SiiTQoogBh2024-03-04T04:00:00Z2024-03-04T04:00:00Z<p><img width="733" height="456" src="https://sii.pl/blog/wp-content/uploads/2024/02/Wydajnosc-w-aplikacjach-React-–-jak-sprostac-wyzwaniom.jpg" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Wydajność w aplikacjach React – jak sprostać wyzwaniom" decoding="async" srcset="https://sii.pl/blog/wp-content/uploads/2024/02/Wydajnosc-w-aplikacjach-React-–-jak-sprostac-wyzwaniom.jpg 733w, https://sii.pl/blog/wp-content/uploads/2024/02/Wydajnosc-w-aplikacjach-React-–-jak-sprostac-wyzwaniom-300x187.jpg 300w" sizes="(max-width: 733px) 100vw, 733px" title="" /></p><p>W dobie wszechobecnych stron i aplikacji wydajność stała się kluczowym elementem, który zapewnia użytkownikowi doskonałe doświadczenie korzystania z systemu. React … <a class="continued-btn" href="https://sii.pl/blog/wydajnosc-w-aplikacjach-react-jak-sprostac-wyzwaniom/">Continued</a></p>
<p>The post <a href="https://sii.pl/blog/wydajnosc-w-aplikacjach-react-jak-sprostac-wyzwaniom/">Wydajność w aplikacjach React – jak sprostać wyzwaniom?</a> first appeared on <a href="https://sii.pl/blog">blogersii</a>.</p>Sii2024-03-04T04:00:00ZProgramista jest jak sportowiec. Jego codziennością jest podnoszenie sobie poprzeczkiJustJoinITlS118x62024-03-04T03:25:00Z2024-03-04T03:25:00Z<p>Lubię porównywać karierę programisty do kariery sportowca. Dlaczego? W obu przypadkach kluczowa jest pasja. Bez niej trudno o wytrwałość i zaangażowanie, które są niezbędne do osiągnięcia sukcesu. Zarówno programista, jak i sportowiec muszą być również zdeterminowani, aby pokonywać przeszkody i stale się rozwijać. Praca programisty to zdecydowanie więcej niż 8 godzin dziennie spędzone przed ekranem […]</p>
<p>Artykuł <a href="https://geek.justjoin.it/programista-jest-jak-sportowiec/">Programista jest jak sportowiec. Jego codziennością jest podnoszenie sobie poprzeczki</a> pochodzi z serwisu <a href="https://geek.justjoin.it">Just Geek IT</a>.</p>JustJoinIT2024-03-04T03:25:00ZRetrospekcje odzwierciedlają zaangażowanie zespołu. Wywiad z Pawłem UrbanemJustJoinITqUgFc9v2024-03-01T04:48:00Z2024-03-01T04:48:00Z<p>– Musimy pamiętać, że sukces retro, to wdrożenie wyciągniętych wniosków w życie i umiejętne używanie ich w kolejnych etapach/projektach – powiedział nam Paweł Urban, Project Manager w Sente. Rozmawialiśmy z nim o roli PM-a, ale też o tym, z jakimi wyzwaniami mierzy się na co dzień. Analizę sukcesów i porażek w projekcie, czyli retrospekcje nazywasz […]</p>
<p>Artykuł <a href="https://geek.justjoin.it/retrospekcje-odzwierciedlaja-zaangazowanie-zespolu/">Retrospekcje odzwierciedlają zaangażowanie zespołu. Wywiad z Pawłem Urbanem</a> pochodzi z serwisu <a href="https://geek.justjoin.it">Just Geek IT</a>.</p>JustJoinIT2024-03-01T04:48:00Z"Video Killed the Newsletter Star" or overflow of video content - JVM Weekly vol. 73VivedfSIxsHy2024-02-29T14:00:49Z2024-02-29T14:00:49ZThis time, the edition will be entirely about video... well, almost entirely.Vived2024-02-29T14:00:49ZBenchmarking Tapir: Part 2SoftwareMillIrAP70g2024-02-29T11:13:08Z2024-02-29T11:13:08Z<img alt="" src="https://softwaremill.com/images/v/i/k/s/g/viksg3qz6kryx4s-e07d8fbf.jpg?g-b993ddb9" />
<h1>Introduction</h1>
<p>In <a href="https://softwaremill.com/benchmarking-tapir-part-1/">the previous part</a>, I analyzed how a combination of Tapir+low-level server handles high load of HTTP requests in comparison with using unwrapped, “vanilla” servers directly. It allowed us to identify a few bottlenecks, as well as confirm Tapir’s low overhead in many cases. In this part, I’ll run some of these tests with a profiler to analyze how Tapir affects CPU usage, I’ll also check how much additional memory it consumes. Finally, I’ll test WebSockets in http4s, pekko-http and Vert.X backends, analyzing latency distribution.</p>
<h3>Reflections on part 1</h3>
<p>After getting feedback from the first series of tests, as well as preparing this second part, I gathered some insights:</p>
<ul>
<li>Performance tests can fall prey to the <a href="https://medium.com/@siddontang/the-coordinated-omission-problem-in-the-benchmark-tools-5d9abef79279">Coordinated Omission Problem</a>, which can be mitigated by ensuring a high number of concurrent users. When running part 2, I also checked Gatling’s reports showing throughput distribution over time, confirming no such omissions.</li>
<li>Measuring latency using Gatling gives us percentiles up to p99, but some important issues may be spotted only on higher percentiles. I added a <a href="https://github.com/HdrHistogram/HdrHistogram">High Dynamic Range histogram</a> which collects up to 99.9999% in our tests, and used it exclusively for WebSocket tests. Latency comparison wasn’t a part of our previous analysis, but it will probably be revisited in the future with this more precise tool.</li>
</ul>
<h1>Profiling</h1>
<h2>Testing Methodology</h2>
<p>I tested the same backends as in the previous part: http4s, Pekko-http, Play, Vert.X, and Netty. The last two are additionally divided into sub-flavors: Future-based and Cats-effect-based implementation. I ran the following test for each backend:</p>
<ul>
<li>A simple GET request (<code>SimpleGet</code>)</li>
<li>A simple GET request to /path127 (<code>SimpleGetMultiRoute</code>)</li>
<li>A POST request with a small byte array body (256B) (<code>PostBytes</code>)</li>
<li>A POST request with a large byte array body (5MB) (<code>PostLongBytes</code>)</li>
</ul>
<p>The SimpleGetMulti test is a special scenario, which sends a <code>GET /path127</code> request to a server with 128 endpoints named /path0 /path1, …, /path127. Part 1 has revealed that routing to such a “distant” endpoint may be pretty expensive for some backends, while Tapir corrects for this cost by optimizing with its unique path pre-matching mechanism.</p>
<p>All scenarios run on 128 concurrent users for 30 seconds, preceded by 5 seconds of a warm-up execution, the results of which are not considered.<br>
Tests were executed on a Linux PC with AMD Ryzen 9 5950X (32) @3.4GHz, 64GB RAM, using JDK 21, Scala 2.13 (forced by Gatling), sbt 1.9.8.<br>
For profiling, I’m using IntelliJ IDEA with a built-in Async Profiler, additionally reading memory consumption from generated jfr snapshots using Java Mission Control.</p>
<p>Let’s now analyze the results for the mentioned tests and servers.</p>
<h2>http4s: SimpleGet, SimpleGetMultiRoute</h2>
<p>Vanilla http4s shows CPU reaching 50%, with frequent drops to 15-20%.<br>
<img alt="cpu-vanilla-get" src="/user/pages/blog/benchmarking-tapir-part-2/cpu-vanilla-get.png?g-b993ddb9"><br>
Memory usage reaches 900MB in both cases.</p>
<h3>tapir-http4s</h3>
<p>CPU usage looks similar, although a bit lower, with smaller drops in the SimpleGetMultiRoute test, which isn’t very relevant.<br>
<img alt="cpu-tapir-get" src="/user/pages/blog/benchmarking-tapir-part-2/cpu-tapir-get.png?g-b993ddb9"><br>
Memory usage stays on the same level, occasionally rising to 1GB.</p>
<p><strong>Analyzing Flamegrap...SoftwareMill2024-02-29T11:13:08Z