I used an LLM as a Web Server
I used an LLM as a web-server. My motivations for doing so are as unclear to myself as they are to you. This is just something I’d been wanting to experiment with for a while.
It’s currently live at llmasaserver.pages.dev. The code is at github.com/anasik/llm-as-a-server.
Prologue
Ever since I generated my first Gemini API key, I’ve had this crazy idea of making an LLM respond to HTTP requests while pretending to be a web-server and see how that goes.
I immediately did a dry-run by opening a new Gemini chat and giving it explicit instructions to pretend to be a static website for a predetermined persona.
It worked great, it sent me back HTML+CSS with menus, colors and well-crafted page sections. I could send requests to arbitrary pages like /about or /contact and it would play along.
Then I took it a step further and sent POST and PATCH requests to imaginary resource endpoints and it responded with successes and failures depending on how relevant the endpoint was to the site content.
It got even more real when I sent in DELETE requests followed by GET calls and sure enough, it was smart enough to not return any deleted objects.
The last test I performed was one where I told it to deny any requests that are missing a certain bearer token and just like that we had fake authorization.
Soon afterwards, however, I got a reality check as suddenly all context/memory started collapsing. The static pages changed completely in both design and content and subsequent API calls returned no data. A little probing led to Gemini apologizing to me for having a small context window and limited memory capabilities.
I didn’t view this necessarily as a setback, however, because the whole point of this experiment was to have an LLM generate responses on the fly instead of caching them. Yes, consistency was both expected and desired but determinism was never on the table. I made a note to revisit this later and moved on with my work.
Read Full PostSo You (Still) Want to Write an EF Core Provider
In 2016, Arthur Vickers wrote a post called “So you want to write an EF Core provider.” The post says right at the bottom that it’s “up-to-date as of November 11th, 2016.” It was written against EF Core 1.1, and almost none of the specific types it names still exist.
Last year, when I wanted to write a provider for Azure Database Explorer AKA Kusto, I found myself reading that post and struggling to fill in the gaps. So when I actually finished writing my provider and the introductory blog post about it, I made a note to write a spiritual successor to Arthur’s post, explaining what has changed in the last ten years. This is that post.
This post tries to follow the roadmap of the orignal post as closely as possible but it deviates where necessary to better match the natural order of implementation today. This post also highlights the differences between the original post and the current state of EF Core, so you can see what has changed and what has stayed the same but it doesn’t require you to read the original post to understand this one.
Step 1: Implement services
Implement the services
The 2016 post has you subclass one big DatabaseProviderServices class. Today, each service is its own class, registered individually. Let’s start with IDatabaseProvider, our “Hello World!” moment. This interface was mentioned in the old post but was
used very differently.
public sealed class MyProviderDatabaseProvider : IDatabaseProvider
{
public string Name => "MyProvider";
public bool IsConfigured(IDbContextOptions options)
=> options.FindExtension<MyProviderOptionsExtension>() != null;
}
How Tanenbaum (AST) and Distributed Systems Changed The World
At the time of writing, hardly anyone needs an introduction to Linux or Python or Ethernet or Android. If you, the reader, are an avid enthusiast with a computer-science degree or experience, you may be tempted to stop reading because you think you already know where this post is going. I urge you to stay because I’m certain that this post has at least one fact to teach you. And even if you already know all of the facts presented in this post, the beauty of the full picture would still not be lost on you.
Andrew Stuart Tanenbaum, more famously known by his handle, AST, is a Dutch-American ex-professor at VU Amsterdam. AST is primarily known for his work on microkernels that was immortalized in the form of MINIX, a UNIX-like operating system that he built mainly as a means for teaching by example. His book, Operating Systems: Design and Implementation, is considered legendary and a de facto standard for a comprehensive understanding of operating systems principles. What makes this book unique is that it contains an abridged version of MINIX’s code and almost a line-by-line commentary. While this was neither the first nor last book of this kind, it’s certainly the most impactful.
In 1991, Linus Torvalds, a Finnish-American student at the University of Helsinki, bought this book and received a complimentary copy of MINIX. While the book lifted him to new heights, as he writes in his autobiography, he found the OS to be incredibly frustrating and restrictive. Later that year, he went on to release Linux, a monolithic kernel designed to be paired with GNU, and the rest is history. But you probably already knew that. What you might not know is that this was neither AST’s only contribution to modern mainstream software nor his only operating system.
In 1978, Sape J. Mullender, author of Distributed Systems, a PhD student at VU at the time, supervised by AST, began what became Amoeba, a distributed OS that appears to the user as a single, centralized time-sharing system. In 1986, it became a joint venture between VU and CWI (Centrum Wiskunde & Informatica), the Dutch national research institute for mathematics and computer science. In 1987, Guido van Rossum, a research assistant at CWI, joined the Amoeba project. He felt that building system utilities in C was taking too long while the Bourne shell was too limited in its capabilities to be a viable replacement. He needed something in-between. Guido had previously worked on ABC, a failed programming language meant to dethrone BASIC. He decided to develop a new language that retained the strengths of ABC but improved on its shortcomings and thus Python was born.
But Python was hardly the only lasting byproduct of a distributed systems project. In fact, it wasn’t even the only scripting language to be credited as a byproduct of a distributed system. What’s more, Amoeba wasn’t even the only distributed system credited with contributing to the modern Python ecosystem!
Read Full PostI wrote an EF Core Provider
EF Core Database Provider for Azure Data Explorer (Kusto). GitHub
![]()
The project that I work on has a lot of data, in a lot of entities with a lot of fields, all exposed through an OData API. Naturally, that compels us to know exactly what kind of query shapes our users may be interested in and to create optimal indexes for them beforehand. However, there’s literally hundreds of fields and creating an index for every single one of them is simply not an option. Timeouts are great for protecting the database from maliciously demanding queries but they don’t offer much in the realm of user-experience. We need to allow clients to send arbitrary queries and we need them to be fast regardless of whether we’re expecting said query or not.
It was clear to me that we needed a solution and not an optimization and so I considered exploring Big Data solutions and columnar databases. Since our infrastructure is primarily Azure-based, my boss suggested that we explore Azure Data Explorer (ADX) aka Kusto. In a couple of days, ingestion was complete and a little testing showed promising performance so we decided to explore our options for integration.
Sadly, Kusto not only doesn’t have an EF Core provider package, the T-SQL support, although well-marketed, was poorly performing. It was very clear to us that this path would require a little investment. After discovering that EFCore.Snowflake, another library/database pair we considered using, is developed and maintained by one person alone, I felt motivated to take a crack at writing a database provider. I mean, how hard could it be in today’s AI powered era?
Ambition & Ingratitude
Despite my bad luck,
Being ungrateful remains my greatest sin,
And one that life never ceases to punish me for.While I’ve been unhappy for as long as I can remember,
Looking back, I always view my painful pasts
as happier versions of myself.The problem with ingratitude isn’t divine retribution.
It’s that ambition without gratitude can be destructive.
You can’t save what you don’t value.But then, don’t ambition and ingratitude go hand in hand?
After all, you can’t escape what you continue to value.
Third time's the charm
Also check out:
It’s no secret that now I’m a contributor to open-source and that the fruit of my Pull Requests is being distributed by none other than Microsoft themselves. Earlier this year, I posted twice about bug fixes I’d made to Microsoft.AspNetCore.Odata, and I’m pleased to inform you that as of today, I have achieved a hat trick.
I must admit though, that this bug was a lot subtler and less detrimental to the primary function of the library. In fact, viewing strictly by the OData standard, it cannot be called a bug at all. However, the library offers a feature or two that deviates from the standard. And it was one of those features that was broken.
The OData specification defines dollar-prefixed query options e.g. $top, $skip, whereas the Microsoft.AspNetCore.Odata library generously offers a configuration flag, enabled by default too, called EnableNoDollarQueryOptions that allows you to use non-dollar-prefixed query options like ?top=10&skip=10 instead of $top=10&$skip=10.
Until Dawn - Movie Review
After the overwhelming success of my penultimate movie review, and the rabbit hole I went down that ultimately led to an audience with the director of the movie himself, I couldn’t refuse my wife when she asked me if we could go to the cinema again. However, I had one condition: that we would only go to see a low-budget cheap horror movie that I could come back and write about. She said she wouldn’t have it any other way herself.
Of course, it’s evident that she chose poorly but I didn’t realize that until much later. When she showed me the google card for the movie, I took a quick glance at the name, thumbnail and cast and incorrectly assumed that it was a good match.
Read Full PostI interviewed Sasha Sibley, a Filmmaker
This post is the last (for now) in a series of posts about Sasha Sibley and his works. If you’re curious, here’s the order they appeared in:
On 26th February 2025, I interviewed Sasha Sibley, the talented 27 year-old filmmaker from Los Angeles who made his feature-film debut in 2021 with “The Box” and his theatrical debut in 2024 with “The Painted.” The story of how and why this came to happen is scattered across the other 3 blogposts but in short: after watching “The Painted” at a local cinema, blogging about it and then failing to create a Wikipedia article for it, and learning that it was produced, directed, and written by someone who was about my age, I decided to reach out to him and be one of the first to ask him the real questions. I emailed him, we set up a call and the rest will one day be history.
Tell me about yourself. Where did you grow up?
I grew up in the DC area, Maryland, Rockville, but I always just say DC. Just kind of simple, suburban life. My parents were divorced, and I jumped around a bit between their houses, but didn’t move around too much.
How did you get into filmmaking?
I always had the interest or the itch to do movies for whatever reason. I just really loved movies. My dad showed me a lot of rated movies when I was a kid; rated action movies like The Matrix etc.., which my mom was never happy about, but they were just the coolest things I’d ever seen, and I wanted to emulate that somehow. My dad had this tape video camera and I just started, filming stuff. This was early 2000s.
When I was 10-12 I started getting my friends together and we started making movies and putting them on YouTube to maybe get 56 views or something. So, that was my childhood. And then I wanted to pursue it professionally so I kept building to the extent that I tried to apply to film festivals. I was set on moving to Hollywood, so I only applied to colleges in LA and ended up getting into LMU — which was a great experience, a great film school. I went there for four years and did a dual degree in screenwriting and production. I learned a lot.
I had an award-winning short film (The Painted) and nobody cared because it was the pandemic. I made The Box. I don’t like to talk about it as much. It’s not that great.
I watched it today. It was great.
Thank you. I think there were a lot of (production) limitations on that film. I made it in college and, the script was one thing and what I shot was another and then I had to edit it and it kind of found its final form in the editing room which was not what I had originally written.
If you read the script, you’d be like, “Whoa, this had very different things going on.” But so many things I was just like okay we can’t shoot this. We can’t do that. There was supposed to be more going on in the box that he’s in. It’s funny because now with AI and all this stuff, maybe some of those weird ideas I had could have been realized.
About that: What are your thoughts on the latest advancements in AI within your industry, and how do you plan to leverage them?
You can’t ignore it. It’s definitely taking over. I am already playing with some of these tools. All the VFX that I had to do for The Painted, I learned myself. I had to do Houdini and Maya. I’ve always used After Effects, so that was easy. I’ve been using that since I was a kid. But some of the 3D software, was a trip. I took a couple classes and there’s some real, geniuses that work in visual effects. I don’t claim to be one of them, but I had to learn. I was like, All right, I’m gonna focus on fluid simulations and try to get decent at that so I can do some of the effects in the painted. because it’s like the low budget mentality.
I think you’re pretty good at the editing part. I would assume that you edited the short film yourself but hired professionals for the feature-film?
No, I still edited the feature as well.
From the sound of it, you never wanted to be an actor. Why did you rule out acting so early on?
Read Full PostWhy did Anders Hejlsberg choose Go for Typescript instead of C# or Rust?
Ever since Anders Hejlsberg made the announcement for Project Corsa, aka Strada, aka typescript-go, there’s been a lot of unrest surrounding their decision to use Go.
On one hand, we have the Rust fans demanding to know why Rust wasn’t chosen for this, considering the popularity of Rust as the de facto modern low-level language.
The dev lead of Typescript, Ryan Cavanaugh himself, took to Reddit to address the first question1. He said, and I quote:
“In the end we had two options - do a complete from-scrach rewrite in Rust, which could take years and yield an incompatible version of TypeScript that no one could actually use, or just do a port in Go and get something usable in a year or so and have something that’s extremely compatible in terms of semantics and extremely competitive in terms of performance.”
On the other hand we have the C# community asking the real questions: Why did the lead architect of C# sit by such a decision? This one, was answered by Anders Hejlsberg himself in an interview with Michigan TypeScript2:
“C# was considered but Go is definitely the lowest-level language we can get to and still have automatic garbage-collection […] C# is byte-code first and while it has some AOT, it’s not available on all platforms and it doesn’t have decades of hardening and wasn’t engineered that way to begin with. Go has a little more expressiveness when it comes to data-structures and inline structs. Our JS codebase is written in a highly functional style with very few classes which is also a characteristic of Go […] we would have had to switch to an OOP paradigm to switch to C# […] ultimately that was the path of least resistance.”
The Box (2021) - Movie Review
This post is the third in a series of posts about Sasha Sibley and his works. If you’re curious, here’s the order they appeared in:
This is neither my first nor last post concerning Sasha Sibley, the aspiring filmmaker from Los Angeles, scarcely older than myself, whom I recently had the pleasure of interviewing after being fortunate enough to watch his second feature film, The Painted (2024), at a local cinema. Right after getting home from said cinema, I’d discovered Sasha’s first feature film: The Box.
In his response to my initial email, Sasha had, matter-of-factly, described it as “ULB” (stands, obviously, for ultra-low-budget) and that he’d made it while he was still in college. Naturally, that had made me all the more excited to watch it. I had already seen the trailer and loved it. It was intriguing, sufficiently cryptic, and deceptive, conveying just the right amount of information and leaving the viewer wanting more. It was well-edited and had aroused my curiosity. No complaints there.
The movie lived up to the expectations. It employed some interesting storytelling devices. It started off with a junior actor, Tyler, at an audition that you almost immediately begin to care for. Interestingly, there’s also a narrator whose purpose or identity is never directly revealed. There’s parallel narratives. You follow the actor through some ups and downs, but mainly downs, leading up to his first big break. You sympathize with his loneliness, and you feel his frustration as he struggles to pay rent. You watch him giving it his all and you root for him.
You also watch him constantly have this recurring white torture dream that’s not only clearly symbolic of the high life awaiting him in his ideal future but also quite literally the script of the movie he’s trying to get cast in. This connection was left mostly unexplained. My best guess is that it just represented that like most actors who make it big, Tyler finally found a script that read like it was literally written for him and him alone. Later on, this idea is solidified, when the director of the movie turns out to be a guy he met in one iteration of his recurring dream and they both have a moment, over the phone, where they feel as if they’ve met each other before and the director exclaims that Tyler isn’t just a perfect candidate for the movie but the only guy he wants to make the movie with.
We also see an older, bearded, version of him talking to a therapist about the dream. This narrative seems mostly unnecessary and didn’t appear much except for at the very start of the movie and the very end. I think the only purpose it really served was to show us that Tyler eventually makes it big. I think by the end we see Tyler embracing his “white torture” lifestyle and maybe the purpose of the therapist sequence is just to show us that his struggles didn’t immediately end when he got his big break. They just shifted from being financial in nature to psychological.
The ending was a little underwhelming, but it was also perfect. I don’t think I wanted it any other way. Nothing ridiculous or unexpected happens, no big reveal. In the same mellow tone that the movie maintained throughout, we realize that Tyler finally got what he wanted and we’re happy for him. It’s implied that he’s famous but possibly only moderately. It’s clear that he has fans and following but he may not necessarily be a sensation.
What I loved about the movie was how perfectly paced it was. It wasn’t shot in real-time, yet it brilliantly captured the slow, deliberate hand of time—the way life unfolds gradually, almost imperceptibly, until you suddenly realize how far you’ve come. The things that were left unexplained suddenly didn’t even matter to me anymore, almost as if it was symbolic of how life doesn’t always give you clear answers, yet you move forward anyway.
It’s not often that you traverse backward through a filmmaker’s career and find yourself even more impressed, but Sasha Sibley has managed to achieve that. This is in no way a jab at his recent and equally brilliant production, but rather a testament to the strength of his earlier work. His past films don’t feel like mere stepping stones toward mastery—they already showcase a level of skill, storytelling, and vision that many directors spend years trying to refine. Watching his trajectory, it’s clear that his evolution isn’t about reinvention, but about sharpening what was already exceptional. His consistency as a filmmaker is just as impressive as his growth.