From the first day I started Message24 , one of my biggest worries was what happens when the platforms I depend on change their rules? what happens when they decide to enter the game and compete with their partners? I didn’t have to wait long. October 2025. Meta bans general-purpose AI assistants from the WhatsApp Business API. ChatGPT, Perplexity, anything where the AI itself is the…
One of the biggest problems my customers kept hitting on Message24 was hallucination. A shopper asks about a product that doesn’t exist; the LLM invents a price. Someone asks if an item is in stock; the LLM swears it is. Some LLMs find it really hard to say “I don’t know” (or in our case, escalate the conversation). LLMs are golden retrievers; they want to please, even if…
I use Claude Code a lot. Sometimes I kick off a task on my machine, then want to check on it from my phone while I’m out (Why let the precious tokens expire, amirite?). Here’s my setup for accessing the same Claude Code session from anywhere. The stack tmux - one session, attach from multiple devices at once zsh - nice autocomplete makes phone typing less painful Tailscale - VPN to…
Grug brain small. Claude brain also small. This collection of thoughts on using AI coding agents gathered by grug brain developer. Grug think of one thing One user story. One bug. One feature. Not ten thing. Grug brain hold one thing. Grug give Claude context Open Plan Mode. Tell Claude what want. Reference relevant files. Paste official doc for libraries/services. Screenshot if help. Grug not…
PlanetScale’s new $5 single-node PostgreSQL tier (PS-5) promises the same observability/maintenance story you get from their Vitess-backed MySQL side. I wanted to see how it feels next to the very boring Postgres instance I already pay for: a Hetzner CPX11 (2 vCPU / 2 GB RAM for €3.85) running in their eu-central region (Nuremberg). This isn’t even LAN vs internet—it’s literally local disk vs a…
While Linux does have the tree command, if you’re doing programming, you probably don’t want results in folders like node_modules , dist , etc…, so here is a useful little alias I have in my ~/.bash_aliases : 1 # tree alias that excludes common directories 2 treen () { 3 local ignore = 'node_modules|__pycache__|*.pyc|.git|.next|dist|build| 4…
Building AI agents? Here are the resources that actually taught me something useful, beyond the usual hype. If you’re tired of theoretical papers and want practical insights that work in the real world, start here. Building effective agents by Anthropic What you’ll learn : Stop overcomplicating things. The Anthropic team cuts through the noise and shows why the simplest agent often…
In the early days of computing, software was pretty much locked into specific hardware setups. Then came operating systems, providing a layer of abstraction over the hardware. However, that still didn’t quite cut it. Businesses wanted to write their apps once and have them work on all sorts of platforms. This demand gave birth to higher-level languages that brought along their own runtimes, making…
Database UDFs, or user-defined functions, are functions that are created by users to add custom functionality to a database. With UDFs, users can extend the capabilities of a database beyond its built-in functions and tailor it to their specific needs. UDFs are commonly used to perform complex calculations, manipulate data, or perform custom operations that are not natively supported by the…
One of the most boring and tedious work in wrapping native libraries in C# is writing the DllImport functions. Fortunatley, Large Language Models like ChatGPT has become powerful enough to be able to generate C# bindings from a C header file. Or at the very least, they give you a good foundation that you can tweak and improve upon. This post is part of the C# advent calendar 2022, for other…
Disclaimer: I am writing about my personal experience here. Your mileage may vary. I have been working remotely for a European company since the beginning of the year. I have been through a lot of ups and downs since then, I want to document some of the insights I learned. Working remotely among the tech community is getting more and more common right now in Iraq. I have several friends who work…
If you’re managing your own databases you’ll need to make sure you database is backed up properly. A good option is to store your backups in an S3-compatible object storage. Install s3cmd : sudo apt install s3cmd Configure it: s3cmd --configure It will ask you several questions, consult your S3 providers docs for more information. Write a bash script to create a postgresql dump and…
A <textarea> is an HTML element used to capture multiline user input. By default, it’s direction is either right to left or left to right . But what if we want each paragraph to have it’s own direction. This is very useful when the text is a mix of multiple languages. For example: Kurdish and English. I asked the quesiton on Twitter and my good friend Akam Foad came to the rescue:
When using Google as your OIDC provider you can ask for the picture claim which contains the user’s profile picture. It’s usually a url like this: https://lh3.googleusercontent.com/erjNVzk6nPUaUZuOTg2ObT12EzWWIokbuRdyuTkxRGR1nXQ5vhYk34twIt05FmaBNt7_yB3J I wanted to show the user profile in an <img> tag, but Google was responding with 403. I searched around for an answer and I stumbled…
ASP.NET Core makes writing integration tests very easy and even fun. One aspect that might be a bit tough to figure out is authentication and authorization. We might want to run integration tests under different users and different roles. To get started, let’s assume we have an endpoint like this: 1 app.MapGet( 'hi' , (HttpContext httpContext) => 2 { 3 var userId =…
This post is my annual contribution to the 2021 C# Advent Calendar . Please check out all the great posts from our wonderful community! Many systems require sending emails to notify users. And testing these notifications manually is a pain. So it’s one of the best use cases for integration testing. First, let’s create strongly typed model for our Welcome email: 1 public class Welcome 2…
Introduction Modern applications are complex and take many different forms: Web apps, mobile apps, desktop apps, CLI apps, other APIs, Bots, IoT apps, and so on. In this blog post we discuss what it takes for your API to let any app communicate with it securely via the OAuth 2.0 and OpenID Connect protocols. By utilizing these standards, you can have a single Identity Provider protecting all of…
Today, I spent an hour debugging why an http call was getting 401 as a response. I was setting the Authorization header properly and the token was valid. This was the call I was making: 1 var httpClient = new HttpClient(); 2 httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( 'Bearer' , '...' ); 3 4 var response = await httpClient.GetAsync( 'api/endpoint?parameter=true'…
In my current project, we have a console app that runs in the background and sends data to a frontend application. The app works great but sometimes it stops working and we need to press a key for it to continue. It turned out it was because of Windows Console’s Quick Mode feature. When a user clicks on the console window, it hangs the app execution to allow the user to select the text. .
Building modern APIs require a lot of things to make them reliable, observable, and scalable. In no particular order, here are some of them that help you build better APIs: Note: If you have any other points in mind, you can send me a PR here . 1. Healthchecks Healthchecks are important in making sure that we know when anything happens to our APIs. We can setup dashboards to monitor them and setup…
SQL supports wildcard search on strings using LIKE operator which accepts % and _ wildcards. The problem with LIKE is it’s not very fast if you have a lot of rows and the query is non-sargable . And in some cases you need to provide fuzzy search capabilities where the results don’t have to exactly match the query. PostgreSQL has the pg_trgm extension that solves both problems: It has…
To get a dump of a database you can use pg_dump or pg_dumpall for dumping an entire cluster. It supports 4 formats : Format Description Restore via plain Output a plain-text SQL script file (the default). psql custom Output a custom-format archive suitable for input into pg_restore. Together with the directory output format, this is the most flexible output format in that it allows manual…
Every once in a while, I have to write a script to automate a task. Maybe it’s part of a CI/CD pipeline, or it’s part of my dev workflow. My favorite language for writing scripts is PowerShell. Here is why: 1. Powershell has an object pipeline When you pass data (or pipe them) from one command to the next, the data is treated as an object, not as a string. Which means the data can have…
Note: This post is part of C# Advent Calendar 2020 . Sometimes you’ve tasks that would take too much time to do in the request-response model. For example sending multiple emails. So you have to send the emails asynchronously (i.e. in the background) and returning a response before the jobs are done. Or maybe you want to do some task periodically. For example generating a resource-intensive…
Suppose we have a folder called dependencies with this structure: - dependencies - child-folder - file.txt - file2.txt - file3.txt If you want to add the entire folder as link and preserve the directory structure, you can use this inside your .csproj file: <ItemGroup> <None Include='..\dependencies\**\*'> <Link>dependencies\%(RecursiveDir)/%(FileName)%(Extension)</Link>…
GitHub associates commits with people via email addresses. Each commit is signed with a commit and a name. So when you push a repo to GitHub, it looks for a user with that email address and associates the commit with that user. This allows some cool tricks! You can commit as your favorite programmer in your repositories! Example : In a repository, change your email address to their email address:
C# Source Generators is a C# 9 feature that lets your generate source code during build. For more information read the announcement blog post on .NET blog. NOTE: If it’s not clear, this post is satire. Don’t use any of the code or suggestions in production. Have you ever had problems with app speed? Well, the easiest way to speed up your app is to make your methods async. And the…
In a previous post we talked about getting more control over the update process in sideloaded UWP apps. And in another post we talked about setting up CI/CD pipelines for UWP apps. This time we will talk about how to create multiple update channels, i.e. alpha, beta, stable, for our UWP app. The idea is very simple, and although I am going to use Azure Blob Storage, nothing stops you from using a…
If your company is based in one of the developed countries, chances are you won’t have much of a problem. It would take a week at most to get a code signing certificate. However, If your company is based in a country like Iraq, which doesn’t have an up-to-date online-accessible list of its companies, then you are going to have a harder time. Fortunately, this guide makes the process…
In the last couple of weeks, I have been busy setting up a CI/CD pipeline for one of my side projects and getting it to run on Linux. I’ll try to write about what I have learned in the process. This will be a series of blog posts because I don’t want it to become too long. This is the first part. We will create a new ASP.NET Core application and manually run it on Linux and configure…
.NET Core apps can run on a number of operating systems. When using purely .NET libraries, deployment is a breeze. However, if you’re using a library that wraps a native (C/C++) library, then you might have come across this error message when trying to run your app on Linux: System.TypeInitializationException: The type initializer for 'DlibDotNet.NativeMethods' threw an exception. --->…
When connecting an app or website to a database, most of the time you’re querying the database and mapping the result to strongly typed objects. If you’ve been using an ORM like Enitity Framework or a Micro-ORM like Dapper, they handle the mapping of the objects and translation of the queries between C# and SQL. This article is a part of the 3rd annual C# advent calendar . The idea of…
This week we set up a CI/CD pipeline for one of our UWP apps that needs to be sideloaded because we don’t publish it through the Microsoft Store. This article was super useful in getting me started. Microsoft has made things quite easy with Azure DevOps, but there were a few things that took us a little bit of time to figure out. A little bit of context We have an enterprise UWP application…
By default when navigating a frame to a page, UWP doesn’t give you back a page instance. So the only way of passing parameters is to use the parameter parameter. But having an instance to the page can have many other benefits: For example it allows the child page to have custom events and the parent page can subscribe to them. However Frame has an event called Navigated that can help us to…
I was browsing web once when I stumbled upon an article about SkiaSharp . It’s a C# wrapper around Google’s fast 2D rending engine. I was developing desktop apps in WPF at the time and didn’t feel the need to learn a low level library like that. A few weeks later, I found myself in a project that required building a fast layout designer. First, I tried to write it purely in WPF,…
The C# yield keyword is an interesting keyword, because when you use it, you can return an IEnumerable<T> without specifying any concrete implementation explicitly. Here is a code snippet: 1 static IEnumerable< int > GetNumbers() 2 { 3 yield return 0 ; 4 yield return 1 ; 5 yield return 2 ; 6 } 7 8 static void Main( string [] args) 9 { 10 var numbers = GetNumbers(); 11 foreach ( var n in numbers)…
Note: Stefan Hausotte has ported this little experiment to F# . Recently I stumbled upon this article from Michal Strehovsky . It was a great introduction to CoreRT, it made me curious, can you write native libraries with CoreRT? and the answer was Yes! I have a little library that I want to be available for multiple languages, so I was quite interested in it. So I tried out the official sample…
Recently we wanted to enable auto-updates for an app that we were developing for a client. The app is developed in UWP and it’s sideloaded into the client’s computers. Although Microsoft has added an auto-update functionality in the 1803 build of Windows, we had a few issues with it: It was not very reliable We didn’t have much control over it beside a simple auto-update policy…
I’m Muhammad Azeez. I build apps, SDKs, distributed systems, and automate systems and workflows using AI. I have experience with: Langugages: Go, C#, TS Databases: PostgreSQL, MSSQL, and MongoDB Infra: Docker, Linux, RabbitMQ Cloud: Azure, AWS, GCP, Hetzner Get in touch Email GitHub LinkedIn X / Twitter