RSSAmplifier

Blog

Fresh Blurbs by Irakli Nadareishvili

freshblurbs.comRSS feed ↗549 posts

Latest posts

Tmux + Claude GenAI: Coding Nirvana

Tmux has been a developer favorite for almost two decades. And now, in the age of agentic coding, it’s having a second act. Picture your typical day with Claude. You’re running multiple projects in parallel — because coding agents don’t get tired and don’t need to “focus on one thing at a time.” For each project, you’ve got: One or more Claude sessions A few idle zsh tabs, waiting for you A…

Pytorch Crash Course in 15 Minutes: Build a Handwritten Digit Recognizer

Understanding PyTorch is one of the fundamental skills on the path of mastering modern machine learning. There are a lot of great books about it, for deep understanding, but let’s give you a tasting menu version of it - by quickly building something practical and explaining core concepts as we do it. We’re going to build something real — a program that looks at images of handwritten digits (0–9)…

Stop Treating Claude Code As a Chatbot and Let It Have Your Back!

A major productivity killer, when using coding agents, may not always be a bad prompt, it’s sometimes an agent that starts rewriting your files before you’ve even finished the requirements. We’ve all been there: you ask a clarifying question, and Claude jumps into changing code, wasting 20 plus minutes (and thousands of tokens) making unrequested changes that it will have to revert. A simple fix…

Rethinking Platform Engineering in the Age of GenAI

There’re new important consumers of your platforms and APIs - AI agents. If your platform does not provide a seamless way to guide them, you will fall short. In the past decade, building a great developer-oriented API platform like a banking core, an ML training studio, or an e-commerce suite meant obsessing over Developer Experience (DevEx) for human engineers. Clean contracts, intuitive API…

AI-Native Mindset: Breaking Old Habits is Key

The last two years have been a whirlwind. We’ve moved past the “Early Adopters” and into the “Early Majority” phase of AI. But the adoption is wildly uneven. At work, we talk about the AI Adoption Chasm. It’s the gap between building an “AI-assisted” experience versus an “AI-Native” one. The difference? AI-Assisted: building a basic GenAI chatbot or “sprinkling” LLM intelligence on a legacy…

Using Claude Sonnet in GitHub Copilot

Claude 3 is currently the leading Large Language Model (LLM), significantly outperforming popular alternatives like ChatGPT and Gemini. Equally interesting, albeit unexpected, is that Claude 3.5 Sonnet is now available as Github Copilot model , enabling developers to choose Claude 3.5 Sonnet for coding—directly in Visual Studio Code and GitHub.com Switching to Claude does require a few steps, and…

Generative AI In Financial Services

Today I had a fortune to spend some time with Mike Meriton (Co-Founder, EDM Council), Jocelyn Byrne Houle (Sr. Director of Product Management, Securiti), and Christopher J. Napoli (Head of Wealth and Asset Management, Snowflake) to discuss: The challenges of Generative AI in financial services Evaluating bias and accuracy of Generative AI models How financial services organizations are benefiting…

Building API Platforms With Scale

I’ve spent good part of last 15 years designing and building APIs for various large, complex, distributed systems. And I’ve even written couple books about it - Microservice Architecture and Microservices Up and Running Despite my many years in the API space and my clear commitment to it, the most significant lesson I’ve learned is this: APIs, in themselves, don’t matter. They are simply…

Advanced Jira Queries (JQL) For Software Delivery Mastery

Whether we like it or not, Atlassian Jira is often the tool of choice to run large software projects. It may or may not be your kind of a “pie”, but if you have to use it, it’s at least useful to understand some of the powerful capabilities it provides. Over years, I have come to sincerely appreciate Jira’s support of flexible quering of its data and ability to create powerful dashboards with the…

Switch Root Partition to SSD On Raspberry Pi

Raspberry Pi (RPi) is a truly amazing and fascinating device, considering how much power you can get from this tiny device and its amazing versatility. The default and easiest way to set up an RPi is using an SD card, that you can provision using the official Raspberry Pi Imager Unfortunately, SD cards are fairly slow in both read and write speed, especially compared to even inexpensive…

Ubuntu Developer Setup With Bare Essentials

Ubuntu Linux is a fanstastic operating system for writing wide variety of code, possibly anything that is not MacOS or iOS code. While my desktop computer is usually a Mac, I always find myself having a bunch of Ubuntu servers running for various types of coding. Whether it is a Raspberry Pi (LOVE THEM!) with 8GB of RAM, or a small but super-fast (for what it is) HP EliteDesk 800 G5, bought…

Tailscale With Mullvad VPN

Tailscale is a wonderful, modern mesh VPN solution. Generally speaking, you don’t need another VPN when using Tailscale. Even for tasks like bypassing geo-blocking, you can use their Exit Node feature, as long as you have a node in the country that you want to pretend to be in. But you may not always have that option. Which means for such use-cases, you may need to use generic VPN service, but you…

Fixing Missing Ethernet On Raspberry Pi With Ubuntu

Raspberry Pi is an amazing piece of hardware that is absolute joy for all kinds of tech projects, from setting up IoT controllers, to building local Kubernetes cluster, to just using it as an affordable Unix Desktop. However, there seems to be a problem with Ethernet (wired internet) connection, at least with some configurations. My setup is Raspberry Pi 4 Model B, with both WiFi and Ethernet…

Testing In Prod vs. Unit Tests

A lot has been written about the merits of testing complex systems in production. My favorite is the now-famous presentation: Yes, I Test in Production (And So Do You) by Charity Majors . The main premise of which is that it’s impossible to recreate live (production)-system conditions in pre-production, so pre-production testing is always flawed and we end-up having to test quite a lot once system…

Installing Docker Toolkit On Ubuntu

Since Docker runs natively on Linux, it is usually much easier to install than on Mac or Windows machines. There are, however some quirks and details to be aware of. We cover couple of those in the following blog post. What is the easiest way to get Docker on Ubuntu? Docker is available in apt repos, and is thus fairly easy to install on Ubuntu. However, if you use apt for the installation, you…

Gunicorn's Start/Stop Script

Flask is a very popular framework that is widely used to create APIs in Python. Gunicorn is a WSGI HTTP Server that many use to launch their Python/Flask programs behind a web server. In production use, you are probably launching gunicorn in a daemon-ized mode, with multiple worker threads. Unfortunately, gunicorn does not have an easy way to stop those worker threads later. Below is a start/stop…

Working in VS Code on iPad

About a year ago I blogged about how to turn iPad Pro into a capable coding machine with the help of a remote linux server. Since then several things have happened: New version of iPad Pros were released with the amazing Magic Keyboard that is easier to type on, has trackpad and back-lighting, making iPads way nicer for prolonged, serious work. Apple has started limiting background applications to…

Docker and Kubernetes On Mac/Windows with Multipass

When Docker4Mac and Docker4Windows came out they were truly revolutionary: bringing the cutting-edge power of Docker to everyday desktop environments most people use. Eventually they started supporting Kubernetes as well and it looked like the world could not be more perfect for a backend web developer, especially those dubbing into microservices. In reality, the day-to-day experience of using…

Turning iPad Pro Into a Serious Coding Machine

There is a lot to love about the current iPad Pro - super-fast CPU, beautiful screen, a keyboard that doesn’t need to be charged separately, long battery life and wide selection of apps. Using iPad Pro as an everyday computing device is very tempting, but can it replace substitute your laptop if you are doing some serious coding? For me “serious” coding involves writing containerized microservices…

Fun with Python List Comprehensions and Generators

Python is an incredibly expressive language. It’s also extremely fun to code in, once you get hang of its idiomatic ways of succinctly expressing complex expressions. One of my favorite tricks, in Python, is using list comprehensions for things that you would be writing long, boring loops for, in more primitive languages. Let’s consider some fun examples. For most of the code samples, further in…

Recommended Visual Studio Extensions

Visual Studio Code has become an indispensable tool for my daily coding. Largely due to its great performance, design and productivity, but also partly because of the collection of great extensions you can find. As a side note, it’s also fairly easy to write new VS Code extensions if you don’t find what you are looking for, and I may be guilty of having done that, as well. But that aside today I…

Twitter Passwords 'Leak' - A Speculative Explanation

Yesterday, most Twitter users got a scary notice that their password could have been compromised and the company was asking them to change the password as a precaution: This sparked a wide range of emotions on social media (shocker!), significant number of users being mad at the company and some even questioning the skills of Twitter’s engineering team… Let me state some strong personal opinions:…

Serverless Is a Wrong Name. Fight it with FIRE

Ever since the rise of the AWS Lambda, software engineers have been fascinated by the premise of “just writing code” and not having to worry about the execution or scaling of said code. Since then, the term “serverless” has been coined to describe the new class of solutions. We now have similar implementations from other major providers (Azure functions, Google Cloud Functions, IBM Cloud Functions…

Installing and Running Kubernetes Locally On a MacOS Sierra

Kubernetes is probably the most popular container-orchestration system, currently. It was originally developed and eventually open-sourced by Google. Kubernetes competes with the likes of Swarm , DC/OS and AWS’s ECS . Kubernetes is a complex ecosystem of various software components that is actually quite non-trivial to put together. It can be a great way of orchestrating containers (e.g. Docker…

Inspecting Docker Volumes on a Mac/Windows the Easy Way

Please note: the described process should be virtually identical for the Docker for Windows users, but I unfortunately don’t own a Windows and can’t test it. Any comments would be greatly appreciated, if somebody wants to try this approach on a Windows. Docker for Mac is a great way of using Docker on a modern Mac that gives you fully functional Docker environment, in a very easy way. It is not a…

Using JWTs and OAuth2 to Secure APIs and Microservices

Disclaimer In this post we specifically discuss usage of JSON Web Tokens (JWT, pronounced “jot”) with OAuth2. JWTs can certainly be used without OAuth2, by utilizing any other authentication method (e.g. Basic Auth over HTTPS), but in this opinionated post we assume OAuth2 is usually a preferred method for performing API client authentication and are mostly interested in how using JWT can improve…

Microservices and Message Queues

While discussing Microservices best practices, questions about message queues comes up often. Specifically, a question I have been asked many times is whether it is OK for multiple microservices to access a shared message queue. This is a fair and important question. In general, sharing data by multiple microservices decreases independent deployability of those microservices and is therefore a bad…

Microservices: Rule of Twos

In a recent post we discussed how Microservice Architecture is fundamentally all about avoiding need for coordination and that all of its other often-cited principles are essentially derivatives of this fundamental goal. One such important, Microservices principle is: avoiding shared libraries and binary coupling . If you haven’t already, you should watch Ben Christensen’s wonderful talk on the…

Microservices Are All About Avoiding Coordination Cost

One of the core themes of the Microservice Architecture book my co-authors and I published with O’Reilly recently is: “Speed and Safety at Scale”. Whether you work in a large enterprise or are trying to grow a tiny startup, speed to market is equally crucial. We all operate in a global, highly competitive, digital market and race to success is fierce for organizations of all sizes. Where things…

Cultural Elements of Microservices: Service Ownership

One of the core tenets of the Microservice Architecture, quoted in the now-classic Lewis and Fowler list, is the principle of: Products not Projects. In brief, this principle explains that “a team should own a product over its full lifetime”, where by ‘product’ we imply an individual microservice. It’s a great principle that promotes number of important messages, such as: development team taking…

Microservice User Interfaces?

Every so often I get asked a tough question that goes something like: “so, you are going to break up all your ‘backend’ into services but your front-end is still going to be a huge monolith?”. It’s a fair question. Fair enough that it deserves a short post to address it. The main thing to keep in mind, when thinking of UI in the context of modern architecture, is that we live in a mobile-first,…

Docker for Microservices Survival Guide

Building your First Containers Installing basic Docker tool-set is quite trivial on most platforms. On reasonably new versions of major Linux distributions you can add a repository provided by Docker.com and install Docker in one command from there on. “Reasonably new” means: distributions the kernels of which support LXC . Since MS Windows and Mac OS-X obviously do not have Linux kernels, in…

Git Utilities - Files That Will Be Pushed and Feature Branch Creation

It’s trivial in Git to see what files haven’t yet been added or have changes that haven’t been committed yet ( git status ). However, once you commit the changes – there’s no easy command to see all the files that would be pushed to the remote repository if you ran “git push”… or: there wasn’t one, until now. The small bash function below does exactly that: shows all the files that are commited…

Great Sublime Text Color Schemes for Javascript Development

One of the really great features of Sublime Text editor is that it allows setting syntax-specific color schemes – meaning: you can have a different syntax highlighting colors for your Markdown files as opposed to your Javascript files etc. You can do this, by opening a file of the corresponding type in Sublime and then from the menu go to: Preferences -> “Settings More” -> “Syntax Specific - User”…

Front-End Web Development's DX Is Going Downhill

Dont’ get me wrong: I appreciate the enormous conceptual breakthroughs we’ve made, by constantly revolutionizing how we develop front-end on the web. However, it’s become impossible to ignore how much more complicated the whole environment is now. And – how negatively it affects developer experience. In an oversimplified view, this is what we have done with front-end development in the past 5…

Microservices Is No Free Lunch - But It Is Smart Nutrition

Pretty much every talk, conversation or blog post about Microservices architecture makes a point of warning its audience that this novel Architectural style, while bringing many benefits, does significantly increase operational complexity. One of the first and, probably, most cited writings on this subject is: Microservices - Not A Free Lunch! by Benjamin Wootton . It was followed by Martin…

How-to: HTTP Caching for RESTful and Hypermedia APIs

Cache headers have been an essential part of the HTTP spec from the very beginning. They have played crucial role in scaling web to the enormous size that it has today. Or, at least: the statement is true when we talk about the “human web”. Unfortunately, vast majority of APIs (the “machine web”) either completely ignore HTTP-level caching, or have implementations that are different levels of…

Optimizing Nginx Configuration for High Loads

Following is a quick guide to optimizing Nginx configuration, which should help if you expect significantly high traffic loads on your website. ATTENTION : at the time of writing this post, latest stable version of Nginx is: 1.8.0. Instructions provided here are for that version and may or may not be applicable for later versions, if you are reading this post in a far future. General Section…

PSA: Avoiding Auto-Advance Nightmare in Powerpoint

A dreadful feeling: you are in the middle of an important presentation and suddenly your slide auto-advances to the next one, without you doing anything, ruining your carefully-choreographed narrative and spoiling any storyline you were trying to relay. Worse yet: this happens on the next slide, and then the next one, and next one… leaving you feeling stupid and helpless in front of your audience.…

The Whole Truth About Embedding of Dependencies in Microservices

As the year counts-down its remaining months, we can safely assume that the 2015 will go down in the annals of software engineering as: The Year of the Rise of Microservices . Throughout 2015, it has been next to impossible to attend a tech conference or have a conversation with a person in the field, without the subject of Microservices rearing its curious head. Ironically, as much as everybody…

Creating Client-Optimized Resource Representations in APIs

One of the most important design principles for an API program is to embrace that APIs are products . It follows that successful APIs, much like products, must provide user-optimized experiences. Case in point: it is clearly inappropriate to send a mobile application large response payloads. Your API may get away with it when responding to a request from an enterprise system communicating over a…

Twitter Photo Previews: Avoiding Crops for Sharing Perfection

Twitter has been embedding photo previews in tweets for a while now. A lot of people have found creative uses for this feature. The Pixelcite tool by friends at NPR’s Visuals Team and Melody Kramer is a great example that I use often. Unfortunately, not everybody is as apt at understanding how exactly Twitter manages photo previews as the authors of Pixelcite: Chris Groskopf , Melody and Danny…

Linux: Determine Network Gateway on eth0 Interface

Easy-peasy: > route -n | grep -v " 0.0.0.0" | grep "eth0" | awk '{print $2}' | head -n 1

Code on Demand in APIs: Dumb Clients, Smart Endpoints

About a year ago I wrote a blog post about scriptable Hypermedia Clients i.e. the role of the Code on Demand hypermedia constraint - the one from the seminal Fielding dissertation. The post was hopefully OK, but much more interesting was the discussion that ensued, in the comments section, with Mike Amundsen about the future role of Code on Demand in APIs. By the end of the debate, we sortof…

Migrating Yodiz Issues to Pivotal Using CSV Import/Export

Yodiz is an integrated Scrum and bug manager that I have used for a while. For a variety of reasons, largely irrelevant to this post, I decided to move to Pivotal Tracker , instead. Hence I was faced with the necessity to migrate outstanding issues from Yodiz to Pivotal Tracker. Now, both Yodiz and Pivotal allow import/export of issues via CSV. However the two CSV formats and metadata required are…

Julia CLI on Mac OS-X

Julia is one of those “next-generation” languages that have gained a lot of spotlight. It’s a specialized language targeted at “technical computing” i.e. things you would normally do in Fortran or R. Except, as opposed to Fortran, it is a modern, dynamic language with parallelism and distributed computing support built right into its core. Thanks to Julia’s outstanding JIT compiler: it is…

Responsive Web Design or Native Mobile Apps?

I have been a fan of Responsive Web Design ever since Ethan Marcotte coined the term in his wonderful A List Apart article . So it was no surprise that the very first initiative I started championing, two days into my new job at NPR in April 2011, was: Responsive redesign of npr.org. Taking a large media website, with decades worth of content, through a major overhaul was no small deed, however.…

We Don't Need Many Hypermedia Formats

Earlier today, I had a very interesting Twitter exchange with Darrel Miller . That exchange inspired me to share some of my thoughts about media types, in the context of Hypermedia Architecture and APIs. How Many Media Types Do We Need? Before we ask that question, what we really should be asking is: why do we even need media types? Or Hypermedia architecture in APIs? We Want Hypermedia…

Various Ways Something Can Load On Startup in Mac OS-X

Many of us, Mac users, have probably found ourselves in this situation: something annoying or unnecessary starts at system load on a Mac and we want it to just stop. Unfortunately, there’re a whole bunch of ways this can happen so hunting the culprit down can be a challenge. Below you can find listed various ways something can launch on startup, in OS-X. If you know any other way: please post in…

Dark Art of APIs in Connected Cars - API Days San Francisco

Today I am going to share with you some of my extremely opinionated thoughts about APIs and the Connected Cars space. Most of my opinions come from two sources: my more recent API work with The API Academy , and my experience before that— leading tech team at a super-prominent media company in Washington, DC. This seezling hot media company, which should remain anonymous, to the best of my…