React just took a quiet but deeply meaningful step forward. With the release of the React Compiler, we are entering a new phase of performance. In this new era not the developer, the compiler takes on the burden of micro-optimisation. In this blog post, I will be summarizing what has happened. For a deeper dive please check https://react.dev/learn/react-compiler. If you’ve written React for any length of time, you’ve likely to get familiarized with useMemo, useCallback, and memoization strategies. We have learned to optimize re-renders manually, scattering hooks throughout our components to avoid unnecessary updates. However the results have been complicated.…
-
-
In the world of enterprise software, some names have stayed strong for decades. C# and Java are two of those names. They shaped the way companies built applications. They gave us reliability, structure, and a deep ecosystem of tools and libraries. For a long time, they were simply the best choices for building serious systems. However, the ground of the world of software is a wobbly ground, does not stand still. We are now in an age where speed, simplicity, and flexibility matter more than ever. Cloud-native systems, containers, and microservices have changed the way we think about software. New…
-
JavaScript has come a long way since its creation. It started as a very basic language for making web pages interactive. It has become more powerful and it has been the monopoly over web development for decades. However in this blog post we won’t be talking about JavaScript’s web development capabilities. The idea of Node.js has been an unexpected step for JavaScript, because JavaScript was tightly coupled with frontend development. Yet Node.js was allowing it to run on the server. This was a game-changer for the industry. It enabled developers to use JavaScript for both frontend and backend. However, no…
-
REST APIs are everywhere. From mobile apps to web platforms, they connect the front-end and back-end in a clean and standard way. In this post, we’ll write a basic REST API using Go. It will not use any third-party packages. Only the Go standard library. We’ll simulate a database using a simple map. Go is fast, simple, and powerful. It compiles to a single binary. It starts up quickly and uses little memory. Go has strong support for concurrency, and the standard library is great for building APIs. In a microservices setup, services talk to each other. Often they use…
-
In 2021, Oracle decided to monetize Java by changing its licensing policy after JDK 17. Previously, businesses had to pay for updates and support, but with JDK 17, Oracle introduced the No-Fee Terms and Conditions (NFTC). This makes Oracle JDK free only for personal, internal business, and testing use. Redistribution is allowed as long as no fees are charged. However, NFTC does not apply if JDK 17 is obtained through other Oracle agreements like the Oracle Master Agreement. While Java seems free under NFTC, Oracle’s history of licensing changes means enterprises should be cautious. In short, Java is no longer…
-
Over the past few months even weeks, DeepSeek has emerged as an unexpected guest in the AI market. It literally redefined the AI industry and cost trillions of dollars loss in stock markets. Even though I am also interested in, I won’t focus on that side of DeepSeek today. The reason it caused such a fundamental change is that it uses significantly fewer resources than its competitors in the market. The level of optimization is so high that you can run a fully pre-trained model even on a laptop. Today, I will take you through how to run DeepSeek R1…
-
Concourse is a CI/CD tool created by a team at a company called Pivotal. Pivotal is a company known for building tools for software development. The Pivotal team wanted to solve a problem in the CI/CD world which is that many existing tools, like Jenkins, had become complicated with too many plugins. Even though having many plugins gives a flexibility and support for every kind of specific need, things can quickly get out of hand. Their goal was to create a tool that developers could use without spending too much time on setup. Therefore, Concourse was designed to be lightweight,…
-
In C#, it’s common to sprinkle your code with debugging information—like console logs that help you track down bugs. However, when you’re ready to release your application to the world, you don’t want all that extra debug code to slow things down. This is where the Conditional attribute comes into play. The Conditional attribute allows you to mark certain methods so that they’ll only be called when specific conditions are met—typically when you’re building in a debug environment. When you build your application for release, the compiler ignores these methods, as if they weren’t there at all. This helps to…
-
Recursive functions are a staple in many programmers’ toolkits. They allow us to solve complex problems by having a function call itself with a different set of parameters until a certain condition is met, known as the base case. This is an elegant way to process data structures like trees or to perform repeated operations until a condition is satisfied. However, recursion comes with its cost. Each recursive call adds a new layer to the stack (a special area in a program’s memory) that tracks where each function should return control once it completes its execution. This is known as…