In Friday's explainer, I gave a 10,000-meter view of the application and its basic components. Today I'm going to show you the software's basic features; I'll go deeper on some of them in later posts.
(Since I'm actively developing this software, some of the details that follow could change, so they're accurate only as of the date of this post.)
The most obvious feature is that you can read blog posts. You're doing it now, in fact. If you just landed on https://www.thedailyparker.com, you're seeing this post in the reverse-chronological feed, which shows you posts from the past 7 days. If you went to the permalink https://www.thedailyparker.com/2026/01/17/how-all-this-works-what-the-blog-engine-does, you're seeing the single post page. You might also see any comments that people have left.
Before you can see the post, I have to write it on the edit post page, which looks like this:

The edit post page has a bunch of features that give me precise control over what you see:
- An indication that the post is a draft next to controls that allow me to save and pin the post
- The title, used to build the permalink
- Tags, which provide a quick way to find posts related to a common topic
- The body text, which is what you're reading
- A preview button, which generates the HTML that you see, so that I can make sure I'm formatting everything correctly
- An author box, pre-populated with the name of whoever is editing if it's a new post
- The project selector, which I'll get into later
- The encoding selector, which defaults to Markdown for new posts but also has settings for HTML (any post before January 2026) and plain text
- A control to set the start date of the post, which allows me to post something in the future (like this post)
- Location controls, to populate the little globe icon you see in the header above
- A selector to open or close comments, which defaults to closing them after 60 days
- Checkboxes that determine whether the post is published and whether the editor auto-saves what I'm working on
- Buttons to save, publish or re-publish, view, or delete the post
- A readout of the metadata about the post, including its permalink, unique ID, owner (the person who created it), and last modified time and editor
- A separate history tab, showing all the changes to the post's metadata (but not to the post text, for reasons I'll get into later)
As you can see above, all these controls are just stacked on one big page. I've put the most frequently used controls at the top and the less-frequently used at the bottom, and a lot of them start off with default values that don't change very often.
Other major features of the UI include:
- Full-text search, which will find any word or set of words in any post
- User profiles, which you can set up if you log in using a Microsoft account (including Outlook, XBox, etc.)
- Administrative tools that let me read the event log, audit log, diagnostic information, the user list, and the project list
Plus a couple of features that you won't necessarily see:
- A flexible permissions architecture, which I will discuss in depth later on
- reCAPTCHA verification for comments
It's a lot, I know! And I'm constantly developing more features, one of which I plan to deploy on Monday.
Let me know in the comments which features you want to know more about.
Pinned posts
- About this Blog (v5.0) (12 hours)
- Brews and Choos project (3 weeks)
- Chicago sunrises, 2026 (3 weeks)
- Inner Drive Technology's computer history (1 year)
- Logical fallacies (6 years)
- Other people's writing (5 years)
- Parker Braverman, 2006-2020 (5 years)
- Style sheet (6 months)
- Where I get my corn-pone (1 year)
Waiting for a plumber and a build
CopyrightEconomicsImmigrationMilitary policyPolicePoliticsSecurityTransport policyTrumpUS PoliticsVenezuelaWorkWorld Politics
I have a list of 6 or 7 short plumbing tasks that I hope will take less than an hour, which is 1/8th the time window the plumbing service provided for the plumber's arrival. We all know how that goes. And at my real job, I'm coordinating a bunch of processes for a biweekly release that, so far, is pretty boring—just how we like it.
Meanwhile, the rest of the world persists in not boring anyone:
- In a moment that should make all patriotic Americans vomit from embarrassment and which Paul Krugman called "the inanity of evil," exiled Venezuelan opposition leader María Corina Machado presented the OAFPOTUS with her Nobel medal, which he promptly stuck in his mouth while making happy little squealy noises. No report yet on whether he actually peed his pants or just drooled onto them.
- The US has admitted it obtained a directed-energy weapon that could cause brain injuries similar to the so-called "Havana Syndrome," despite years of Pentagon denials that such a thing could exist.
- Local public transport officials have drawn up plans for a long-overdue regional transit police force. One hopes they will have the authority to stop people smoking, pissing, and shitting on CTA trains. It's a little thing, I know, but it's important to some of us.
- Bruce Schneier looks back on Aaron Swartz's JSTOR dump and subsequent suicide, arguing that private hoarding of taxpayer-funded knowledge abetted by pro-corporate public policies has gotten worse since then.
- Jeff Maurer nails it: "In Fairness, “Reconstitute ICE So That Internal Border Enforcement Can Be Done in a Professional Manner by an Agency That Has the Public’s Trust” Is a Bad Slogan."
Finally, a story on NPR this morning had me yelling at my radio. The Heritage Foundation, who in saner times brought us Romney-slash-Obamacare, now fret about "what happens to a nation when its citizens largely stop having children and eschew marriage," as a section of their latest report has it. The report argues that marriage is the foundation of society, and therefore the government should make marriage more attractive. Nowhere do they argue for things that could make having children more attractive, like free day care, free pre-school and pre-K, free lunches in primary schools, and free health care for kids under 10. Or, you know, immigration, which has been proven to increase the population of every country that has tried it.
It's almost as if Heritage is raising the alarm over declining birth rates but not being particularly honest about whose birthrate they mean. Not to mention, the policies they do propose also create incentives for women to leave the workforce and return to the idyllic lifestyle they led in the 1950s and 1960s.
Is it possible that the organization that brought us Project 2025 and all the wonderous things we've experienced over past year has some other agenda? Hmm.
In my last post about the Daily Parker's new blog engine, I explained why I built this and what it's for. This post will give you an overview of the app's basic structure; that is, the physical building blocks that make the blog happen.
When you point your browser at https://www.thedailyparker.com, the request goes to the front door of a Microsoft Azure App Service, which runs on a server in Microsoft's US East data center, located outside the tiny town of Boydton, Va, on the Virginia-North Carolina border about halfway between Richmond, Va., and Raleigh, N.C. I put this app there because lots of Inner Drive apps live there, including Weather Now.
Once the request hits the server, it goes to a Microsoft Blazor WebAssembly application called InnerDrive.Journal.UI, which sends and receives messages to a stack of other components:
- A Microsoft Cosmos DB NoSQL database that stores all of the blog posts as fully-indexed JSON documents.
- Multiple Microsoft Azure Tables, which are high-speed flat structures that store simple rows of data with only two indices. The tables store information that needs to be written and read very quickly but doesn't have a lot of overhead. The blog engine uses tables for:
- Audit logs
- Event logs
- Indexes
- Comments
- Tags
- An Azure Key Vault that stores keys and secrets, so that the source code never does. For example, to read from the database, the application needs the database's secret connection information, so it knows where to look and what password to use. That "connection string" goes in Key Vault.
- Microsoft Azure Blob storage to keep the photos and other files that you see.
Unlike Weather Now, the Daily Parker runs entirely in a single Blazor WebAssembly app. Weather Now uses two: a user interface app, which shows all the data, and a separate API, which stores and processes all the data. That makes it easy for Weather Now to serve its data to other apps. But the way I expect people will use the blog engine is entirely different, so I chose the simpler, one-app approach.
That doesn't mean everything is stuffed into one big executable file, though. The application architecture of the blog splits responsibilities into a collection of small-ish assemblies:
- Core contains the most basic components that every other part of the system uses, like the definitions for
PrivacyandAccuracy. - Data defines how the application uses the database and other data structures like indexes. The basic abstraction for the app, the
Event, lives here, as do the definitions forFactoryandRepository, which represent different ways of dealing with certain kinds of data. - Blog holds the bits that are specific to blogs and not generally used by other kinds of events. The
BlogPostclass lives here, as does theBlogPostFactory; both of those things extend their Data counterparts (EventandEventFactory). - Services orchestrates how those other parts interact with each other. For example, the
BlogServicehas a method to find a blog post by its ID. That code in turn calls theEventFactory.Findmethod to get the post, but then it calls a several other pieces of code to determine if the person trying to find the post has permission to see it, as well as code to log information to the event log (things that the software does) and the audit log (things that the user does). - UI uses Services to generate the pages that you see in your browser.
All of this currently runs on .NET 10 and was written in the C# language. Plus, there are a bunch of 3rd-party components, including the Inner Drive Extensible Architecture™ (which I also wrote) that do specific tasks, like time zone calculations and translating the Markdown I'm typing right now into the HTML you see in your browser.
Over the next few weeks, I'll go into much more detail about all of this. But my next post will be about the features I developed for this new blog engine, and why I think they're cool.
This is the first in a series of posts I've planned to explain what the Daily Parker blog engine actually is, how it works, and what's coming. I'll start with the most basic question: what the heck is a blog engine and why did I write one from scratch?
Simply put, a blog engine is software that handles all the plumbing for a blog. Substack is a blog, and it runs on a blog engine. WordPress is also a blog engine.
The Daily Parker has existed in some form or another since July 1997 and as something identifiable as a blog since May 1998. When I started posting things online, I manually edited HTML files and copied them to my company's web server. Version 1.0 of an identifiable blog engine read posts from an Access database and served them up using a scripting language called Active Server Pages. (The Wayback Machine's earliest capture of the braverman.org proto-blog was on 8 October 1999.)
I started calling this a "blog" when I deployed, with some frustration, a DasBlog site to my own web server in November 2005. That was version 3.0; I rolled out version 4.0 almost exactly 10 years later, this time running on BlogEngine.NET, which I forked (split off my own version) from the open source version available back then.
That's the context. Now the rationale.
Between DasBlog and BlogEngine.NET, I've had to make do with other people's design choices and coding styles, requiring hours of digging through code to make even simple changes. I could never get either of them to do everything I wanted, nor could I make them even work sometimes. You have no idea how many times I had to reboot BlogEngine.NET because its synchronous architecture got bogged down and crashed. The magic number was around 200 simultaneous users, whereupon the blog engine would spend so much time trying to handle its request queue that it could never get to new requests.
I finally got so sick of it that I decided to build the first iteration of a journaling application as a blog engine. It had to work, be easy to change, and provide at least the basic features people expect on blogs:
- Reverse-chronological browsing of posts
- WYSIWYG editing in both Markdown and HTML
- Tags for classifying posts
- Comments with approvals
- An attractive, modern look and feel
- Works on mobile devices and tablets
- Basic permissions to restrict who can post and what posts anonymous users can see
- Sign-on using external accounts, like Microsoft and Google
It also had to work in the modern software-development universe:
- The latest version of .NET with a clear update strategy
- The latest database architecture (NoSQL and JSON)
- Modern DevOps tools, especially continuous deployment
- Integration with the existing Inner Drive Technology stack
So, welcome to the public face of the Inner Drive Journal! At this writing, it's just the minimum-viable product, but the JIRA backlog is long and very cool. But because of how I designed and built it, it's easy to change, and the roadmap is pretty clear to me. And I'm proud of my work so far.
Next time: basic site architecture.
Even though I wrote this thing, the new editor interface is so radically different from the old one that it will take getting used to. Also, the new blog engine uses Markdown instead of HTML, which makes writing quicker with a lot less formatting.
And because I wrote it to the simplest standard of good software that I know ("it does what it's supposed to and it's easy to change"), if when I find something clunky, I file a bug on Jira and then I fix it.
If only we could apply the rule to the current administration, which does not do what it's supposed to, and is not easy to change:
- Yesterday, some flunky in Health & Human Services cut $2 billion—basically all the funding—from 2,000 substance-abuse and mental health programs, and quietly restored fundng this morning.
- Amanda Nelson says we should stop thinking about ICE as the American Gestapo because, really, it's more like the slave patrols of the antebellum South.
- Paul Krugman credits the impatience and incompetence of the OAFPOTUS and his droogs with giving us the best chance to resist authoritarianism in the US.
Also, today is the 25th birthday of Wikipedia. The free online encyclopedia has a special birthday mode that will remain available through mid-February. Today is also the 45th anniversary of Hill Street Blues, which you should watch if you haven't already seen it. I think it holds up, as a snapshot of life in 1980s Chicago.
I woke this morning to the sound of snow and ice slamming into my bedroom window when this cold front came through:

Cassie enjoyed this a lot more than I did:

The forecast predicts that the snow will stop in a couple of hours, and it doesn't look like we're going to get too much of it. Yay.
I'm David Braverman, this is my blog, and Cassie is my 7½-year-old mutt. I last updated this About... page in March 2021. Quite a lot has changed since then, most notably I wrote a whole new blog engine. (More on that in a moment.)

About the blog
The Daily Parker is about:
- Cassie, whom I adopted on 16 March 2021. (The blog is named after my previous dog, Parker, whom I adopted in 2006 and who died in 2020.)
- Politics. I'm a moderate-lefty by international standards, which makes me a radical left-winger in today's United States. And I'm looking forward to the day, whether 20 January 2029 or earlier, when we can start repairing all the damage caused by this rogue administration.
- The weather. I've operated a weather website for more than 27 years. That site deals with raw data and objective observations. Many weather posts also touch politics, given the political implications of addressing climate change, especially given the OAFPOTUS's hostility to science.
- Chicago (the greatest city in North America), and sometimes London, San Francisco, and the rest of the world.
- Photography. I took tens of thousands of photos as a kid, then drifted away from making art until early 2011 when I finally got the first digital camera I've ever had whose photos were as good as film. That got me reading more, practicing more, and throwing more photos on the blog. In my initial burst of enthusiasm I posted a photo every day. That frequency is incompatible with having a life, so I don't update this category very often.
I also write a lot of software, and will occasionally post about technology as well. I've got more than 45 years experience writing the stuff, 30 as a professional. I own Inner Drive Technology, a microscopic software development company in Chicago, which has some interesting packages available on NuGet. I see a lot of code, and since I often get called in to projects in crisis, I see a lot of bad code, some of which may appear here.
I strive to write about these and other things with fluency and concision. "Fast, good, cheap: pick two" applies to writing as much as to any other creative process (cf: software). I hope to find an appropriate balance between the three, as streams of consciousness and literacy have always struggled against each other since the first time someone put chisel to tablet 5,500 years ago.
Finally, given that I started this blog almost 23 years ago, it has old and crappy examples of my writing and of my opinions. I have evolved quite a bit. Author John Scalzi put it perfectly: the guy I was in 1998, the guy I am now, and the guy I'll be in 2036 are three different people.
About the blog engine
Now let's talk about the software the blog runs on. In 2016, I had an idea for software that would allow users to put together a timeline of events. The software needed to have seriously strong privacy protections, because I envisioned it as something people could use as a personal journal, or as a way to organize a legal case, or as a cache of sources and notes for a journalist.
I started writing the software in 2020, but put it aside until I had a burst of inspiration about a year ago. From that point I made slow but steady progress, until the BlogEngine.NET platform that The Daily Parker had run on since 2015 basically wouldn't run anymore without frequent reboots and cursing. That got me thinking, wouldn't the minimum viable product for a timeline application be, in fact, a blog engine?
Over the next few days and weeks, I'll have a series of technical posts about how I developed it and how it works. Check back on this post for links, or just watch them come up on the new posts page. You can also bookmark the Release Notes page.
Deeper dives
I've started a series of posts explaining how all this works and why I did it. Read in any order; more posts coming frequently:
Thanks for reading, and I hope you continue to enjoy The Daily Parker.
Yesterday got away a bit
BlogEngine.NETBlogsDogsEconomicsEducationGeneralHealthImmigrationPersonalPoliticsReligionRepublican PartySoftwareTrumpUS PoliticsWork
I feel a little chagrined today as I expect to release the new version of The Daily Parker this evening, and yesterday I failed to write even a cursory post. I blame meetings and a very long dentist appointment (I'm fine; still no cavities; but the new dentist patient intake took a while).
I also didn't have any time to read these:
- Brian Beutler outlines a workable plan for getting rid of the Schutzstaffel Immigration and Customs Enforcement permanently.
- Yascha Mounk warns that the OAFPOTUS's threats against Federal Reserve Chair Jerome Powell "violate the two democratic guardrails that matter most."
- James Fallows examines the "time of the Mad King."
- Paul Krugman reviews the first year of the OAFPOTUS's economic policies and explains why things feel a lot shittier than the official statistics might suggest.
- For the first time in over 60 years, a dog tested positive for rabies in Chicago, causing the PAWS rescue (where Cassie came from) to review their acquisition pipeline.
Finally, Education Secretary Linda McMahon probably used some A-1 to come up with her plan to eliminate public education as we know it in favor of publicly-funded religious education. I've got an A-1 amendment for her to read while she's dreaming of Christianist madrassas.
(After Dave and Bob got so excited about yesterday's post, I just had to give them more of what they came for. You're welcome.)
It turns out, several people use RSS to keep up with The Daily Parker. I hadn't planned to write an RSS feed component before launch, but as I don't want to cut them off, I've reprioritized the feature. Plus, I have a couple more things to do before I can cut over to the new production environment:
- Implement Real Simple Syndication (RSS);
- Fix a bug caused by the interaction between the HTTP context object and Azure Front Door; and
- Create a new About page.
I'll fix the bug in the next 15 minutes, but the RSS feed probably won't get done today. Cassie and I took an hour-long walk (because the weather is unusually good for January) and I just need a few hours of reading time today.
So, you'll just have to live with the anticip—
Say it!
ation.
Again: you're welcome.
I did not watch the Bears-Packers playoff game last night, but I got real-time updates from my friends and family. You can bet I'm going to watch the highlight reel this afternoon:
The Bears won this way all season and delivered yet another thriller Saturday to stay alive in the playoffs.
They rallied from a big deficit to beat the Packers 31-27 in their wild-card game at Soldier Field and advanced to host the Rams or defending champion Eagles in the divisional round. It was their first playoff victory since 2011.
They rallied from down 21-3 early, as well as trailing 27-16 in the last five minutes, on a furious charge by quarterback Caleb Williams and the offense. He put them ahead with a 25-yard pass to DJ Moore with 1:43 left, and the Bears’ defense did its job at the end of a rocky night on that side of the ball.
Ultimately, the Bears got 25 points in the 4th quarter, which is like getting four goals in the last 15 minutes of regulation play in everybody else's football. Imagine Manchester City trailing Chelsea 3-0 at 50 minutes, and then going on to win 4-3 with the last goal at 88 minutes of regulation. Not penalty kicks; an actual goal.
Cassie and I are talking an hour-long walk before lunch so I don't have time to watch just now. But this afternoon, while I'm cutting over to the new Daily Parker, I'm going to watch the 4th quarter. Because, wow.
Copyright ©2026 Inner Drive Technology. Donate!