Markus Oberlehner

Blog Page 2

Test Smarter, Not Harder: Focus on Outcomes, Not Outputs

When we dive into the world of testing in programming, it's easy to get caught up in the numbers game—how many tests have we written? What's our code coverage? However, if we pause and consider the bigger picture, we realize that the true measure of success isn't the output it's the outcome...

Embracing Simplicity: The Rule of Least Power

When it comes to coding, sometimes less is more. This concept is encapsulated in The Rule of Least Power, a principle suggesting that for any given task, we should reach for the least powerful language or tool that gets the job done...

Building a Chatbot with Next.js Running LLaMA 2 Locally

LLaMA 2, a fresh Open Source language model by meta, is a powerful tool for natural language processing tasks. In this guide, we'll build a chatbot using LLaMA 2 and Next.js, the popular React framework...

Running Nuxt 3 in a Docker Container

In this article, we'll dive into the world of Nuxt 3 and Docker, exploring how they can work together to streamline our development and deployment processes. We'll walk through setting up a Nuxt 3 application in a Docker environment for production and development...

Leveraging Docker to Run CLI Tools in Languages Like Java, Ruby, and PHP Without Local Installation

We often find ourselves needing to use various command-line interface (CLI) tools written in different programming languages. Sometimes, we don't have the required programming environment set up on our local machines or may not want to install it for various reasons. Our hesitance could be due to concerns about system clutter, potential conflicts with other software, or simply wanting to maintain a clean development environment...

Beware of Leaky Abstractions When Relying on Attribute Inheritance in Vue Components

In this article, we will discuss the problems associated with attribute inheritance, also known as fallthrough attributes, in Vue components and why it might be best to avoid using them. Attribute inheritance can increase the API surface of components, making it challenging to maintain and refactor them in the future...

The Best of Both Worlds: Progressive Enhanced Hybrid Applications

In the ever-evolving landscape of web development, we have seen a shift from traditional Multi-Page Applications (MPAs) to modern Single Page Applications (SPAs), each with advantages and drawbacks. To deal with those drawbacks, frameworks embracing the principles of, what I call, Progressive Enhanced Hybrid Applications (PEHAs) emerge as a new approach that addresses the individual challenges...

Building a ChatGPT Client with Remix: Leveraging Response Streaming for a Chat-like Experience

ChatGPT has recently gained significant attention due to its powerful natural language understanding and generation capabilities. While the official ChatGPT client offers a decent UX, I wanted to create a better client as a pet project. In this article, I'll share insights on integrating OpenAI response streaming with Remix, resulting in a ChatGPT-like experience...