• Projects
  • Archive
  • Links
  • In the immortal words of Bubs Concession Stand: I shoulda done this like a million years ago.

    Tweets deleted using TweetXer

    A list of twitter accounts: oddEvanDotCom, madcrasher, _smolblog, PillTimerApp, and oddEvanProgress bar from the TweetXer script showing 3122 out of 7436 tweets deleted.Screenshot of the oddEvan account on X with the message: This account doesn't exist

    → 4:19 PM, Nov 14
  • I am CACKLING at this news. A pinnacle example of “it’s not about the money, it’s about justice.”

    The families of Sandy Hook victims agreed to a lower payout so that InfoWars—domains, socials, merch, mailing lists, etc—could be sold…

    To The Onion.

    → 10:32 AM, Nov 14
  • Getting one last Twitter archive before I purge as much as I’m able. It’s a symbolic gesture more than anything, but X is getting toxic to the point of not wanting to be associated with it at all now.

    → 2:32 PM, Nov 13
  • Sometimes it takes a few days for us to process how it went, but it puts things in perspective. In this case, an excellent essay by @gruber tying together stories about a spouse/parent dying and the election, and how, in a way, life goes on.

    → 10:24 AM, Nov 9
  • What Would Jesus Do?

    I’m thinking about what “love your enemies” means in a time like this. I think it means to show your enemies that you are not the monster they imagine you to be; you are a person with as complex and meaningful and rich a life as they have. That’s what the ideas of “turn the other cheek” and “go the extra mile” are about: shining a light on the banality of evil.

    To those that interpret these ideas as “sit there and take it,” I will remind them that Jesus chased the moneychangers out of the temple with a whip. Nonviolence is not passivity.

    To be clear: I’m not telling anyone how to act, and I’m especially not telling anyone how to feel. Not now. I’m trying to figure out how to approach a world where enough people saw fascism and voted for it. I’m curious why they would, but I don’t have a lot of patience for it.

    What I really keep thinking of is an old Tumblr post talking about how no one deserves death. Someone immediately chimes in with a group of people that do something truly horrible and eventually says they “aren’t human.” This prompts the original poster to push back (quite politely, I might add):

    denying the humanity of people who do horrible things accomplishes exactly three things:

    1. give cover to people who haven’t been caught yet by allowing them to use their humanity as “proof” of their innocence
    2. silence any criticism of societal structures and institutions that facilitate those horrible things by putting the focus on individuals who are assumed to be so uniquely monstrous that the ways it was made easy for them are irrelevant
    3. provide a shortcut to dehumanize anyone you feel like killing: simply accuse them of doing a horrible thing

    We see this with the far right’s continued broad, baseless characterization of LGBTQ+ people as… we’ll say “dangerous to children.” We saw it this summer with Vance’s repeated baseless insistence that legal Hatian immigrants were here illegally and eating people’s pets. None of these accusations are true, but it serves to paint these people as inhuman monsters. And when your opponents are inhuman, nothing is unacceptable.

    It is so, so easy to say these people are the real monsters. And yes, this behavior is monstrous and inhumane. And it is being done by humans to other humans.

    So much of what I see happening in politics right now is just reinforcement of the idea that “other” people are monsters, all in service of keeping people from the realization that their opponents are humans.

    Because sometimes—not always, but sometimes—when people see the ones they are fighting as fellow humans and not a faceless enemy, when they see their actions are having real consequences for real people… they stop.

    This is the long-term work: to get those fighting against manufactured enemies to see their fellow humans and stop. But I can’t say all this and not mention one hard truth: not everyone stops. Some people keep fighting. Maybe they prefer the intellectual comfort of a black-and-white fight. Maybe they prefer the privilege the fight affords them. Maybe they stand to gain from people fighting.

    In times like these, when one side refuses to see the humanity of the other, refuses to stop…

    Then we defend. We respect their humanity while refusing to let them deny the humanity of others. We counter their lies, neutralize their weapons, restrict their actions.

    We ask “What would Jesus do?” And then we flip the tables, grab the whip, and drive out the exploiters.

    Take care of each other; I’ll see you next time.

    → 10:57 AM, Nov 7
  • Few things bring me as much surprise joy as finding out that Bojangles has pork chop biscuits.

    → 9:19 AM, Nov 2
  • The Verge lays out in clear terms why a vote for Kamala Harris is a good one.

    → 12:30 PM, Oct 29
  • I’m tired, y’all. Again.

    → 9:31 PM, Oct 27
  • TFW you’re trying to change your email address on Indeed because Glassdoor randomly doesn’t send emails to your personal domain and you never know when a company is using it so you try to change it but something is breaking somewhere and you can’t and you have no idea why.

    → 11:19 AM, Oct 18
  • Do I think Threads is the next great social network? No. But will I be spending an inordinate amount of time there? Also no. But thanks to Micro.blog, I can now inflict myself on the Threadiverse!

    → 8:07 PM, Oct 16
    Also on Bluesky
  • With the .io domain potentially set to disappear, I’m reminded that a good chunk of my online identity is tied up in a different country code. Not sure I need to do anything about it right this moment, but it’s worth remembering…

    → 12:17 PM, Oct 14
  • Sometimes the world is awesome, and the Northern Lights make it to South Carolina.

    A purple and pink aurora in the sky framed by silhouettes of trees
    → 10:58 PM, Oct 10
  • Really appreciated this essay by Loris Cro, especially this:

    Don’t you find it infuriating when lawyers and accountants fail to clarify how their respective domains work, making them unavoidable intermediaries of systems that in theory you should be able to navigate by yourself?

    Whenever we fail to make simple things easy in software engineering, and webdev especially, we are failing society in the exact same way.

    → 3:58 PM, Oct 8
  • Anyone got any good recommendations for product roadmap tools? My budget is zero, self-hosting is ok, and I’d love an export so I don’t have to re-type everything like Productboard is making me.

    → 1:55 PM, Oct 6
  • Hey, uh, what exactly does it want me to test?!

    A screenshot of a PHPUnit test coverage report. An abstract function declaration is highlighted in red, indicating no test coverage. There is no code in the function, as it is an abstract function declaration. And before anyone asks, yes, that function is called in subclasses.
    → 4:35 PM, Oct 5
    Also on Bluesky
  • From the Ghost blog via @manton:

    One of the things we’re learning as we go is that ActivityPub is resource-intensive, and can be pretty expensive/difficult to run robustly.

    A hard requirement for Smolblog is being able to run efficiently on cheap/shared hosts. Native AP is secondary to that… 😅

    → 1:00 PM, Sep 30
    Also on Bluesky
  • I think this is the first hurricane I’ve had to properly deal with as an adult. So far we’re doing well, and we have neighbors and community helping each other.

    If I may: there’s talk of reducing/restricting publicly available weather data. I hope this event shows how bad an idea that is.

    → 12:08 PM, Sep 28
    Also on Bluesky
  • I’m sympathetic to the idea of protecting the commons from freeloaders.

    But WordPress.org blocking blogs on WP Engine from plugin updates? This feels like ego, not stewardship. And I don’t want to use MattPress.

    → 9:41 PM, Sep 25
    Also on Bluesky
  • Really appreciated this write up by @briancoords@mastodon.social that gets to the heart of my issues with Matt’s posts. (Via @salcode@phpc.social)

    → 10:48 PM, Sep 23
    Also on Bluesky
  • Matt Mullenweg recently made a post on the official WordPress blog titled WP Engine Is Not WordPress where he makes the point that WP Engine is unfairly leeching on the WordPress project.

    If WP Engine’s accusations are true, Matt should remember that Automattic Is Not WordPress either.

    → 10:39 PM, Sep 23
    Also on Bluesky
  • Well, put my iPhone 12 mini to bed last night. Was hoping Apple would go back to mini-sized phones, but alas. Lasted 3.5 years, but I didn’t think it was going to last another one, so best to upgrade now.

    But since there’s already a dedicated camera button, what should I use my action button for?

    → 10:58 AM, Sep 21
    Also on Bluesky
  • Reintroducing Smolblog

    I recently made a ~20 min. video essay about Smolblog. The video is embedded here; the transcript follows.

    Hi, neighbors; I’m Evan. For over five years now, I’ve been working on a project called Smolblog. It’s not ready to use, but it is far enough along that I need to start talking about it. So, if you’re interested, I’m going to talk about why Smolblog exists, what I’m hoping to accomplish with it, and, finally, how I’m building it. Let’s get started!

    So, I want to start off with one of the most important questions any project can ask. Really, a question every project should be asking not just at the beginning, but at every point along the way: why. Why are we doing this? Why are we doing this now? Why are we doing this and not something else? What is the problem we’re trying to solve? Is it a problem worth solving?

    I won’t name specific names, but I’m sure we can all think of some widget or tech where there never seems to be a good answer for “why?”. At best, they’re solutions in search of a problem. I don’t have money to waste on that; I certainly don’t have time to waste on that. So why Smolblog?

    In a word: Enshittification; or, in more polite terms, “platform decay.” It’s a term coined by Cory Doctorow to describe the arc of internet platforms and venture-backed startups. To explain it is a whole essay in and of itself, but to sum it up, it goes a little something like this:

    In a capitalistic system, you have producers who make products and consumers who use them. For example, a musician’s product is music, and the consumers are the fans that listen to them. And in the middle of this relationship is a platform, something to enable the relationship. It could be a coffee shop that hosts an open mic night, the social media site that lets the two interact, or the example that we’ll use: a music app. This app comes out and tells musicians they can upload their music and get paid for it, and it tells fans they can listen to their favorite artists for free. Everyone wins, right?

    Well, almost. See, the platform is operating at a loss; they’re losing money every time someone listens to a song because they have to pay the operational costs to get the song to the fan, and they have to pay the musicians for the rights to the song. The only reason the company is still running is because they have investors willing to pay this massive upfront cost in order to get everyone using the platform. Once everyone’s locked in, the decay starts as the platform now controls both supply and demand.

    It might start by the platform paying less to the musicians. Then maybe they introduce a “premium tier” to fans–it’s no longer free. They might make a “premium” service that gets musicians' music in front of more people, which means advertisements for fans. As the cycle goes on, at every step, the platform pays less to producers, gets worse for consumers, and pockets more money for itself. That’s enshittification in a nutshell.

    And this is happening to social media. This has been happening to social media. Think of how many more advertisements are in your feeds. How hard it can be to actually see the things you want to see versus what the site wants you to see. How we hear so often that they’re making things better and then they… don’t.

    Imaginary Anon on Tumblr put it well when they said:

    will people please stop walking into my house (websites that i use often) and moving all my furniture (giving them new layouts that i hate).

    And while they were talking about a reference website, I’ve seen—and felt myself—this same sentiment used to describe changes to social media websites and apps. But here’s the thing…

    We can mess with our social media profiles. We can change with the titles, paint the walls, draw on them, even put up some posters. We can make the space our own, feel a sense of ownership, but at the end of the day, this is not our beautiful house. In reality, it never was. That sense of ownership only lasts until the platform decides to start making the money they promised their investors.

    By now you might be thinking, “Okay, that sucks, but it’s just social media. Why does this matter? It’s just the internet. It’s not real life.” Here’s the thing, though: the internet is real life. What we do online matters. Who we are online matters. The things we do on the internet are real actions with real consequences because we are all real people. It’s always been easy to forget that, but it’s always been true.

    So let’s talk about who we are online, our identities. For the sake of brevity, I’ll boil this down to our names, our presentations, and our actions. In physical space, we usually have a given name and a family name. We choose our presentation with haircuts, makeup, the clothes we wear, buttons, stickers–all of that. And our actions are how we respond to whatever is around us, usually driven by whatever circumstances we happen to be in.

    In online space, our names are our platform handles, our presentation is basically our profile pic, and our actions are limited to what the platform allows, and that’s typically tied into its algorithm.

    So why Smolblog? Because online life is part of real life. Which means our online identities are an increasingly important part of our real identities. And every aspect of these identities passes through the platforms we use. Our names are subordinate to theirs, our presentation is limited to their parameters, and their algorithms reward actions that benefit them even if it’s harmful to us, because these platforms exist solely to make their owners money at our expense. That’s why.

    So now let’s talk “what”. What is Smolblog specifically going to do to help solve the problem of online identity? The short answer is: blogs. Making places on the internet that people can set up their own identities with as little influence from platforms as possible.

    But that’s kinda old news, isn’t it? We’ve had blogs since the early 2000s and they’ve never taken off like people want. When modern social media came along, everyone flocked to that because it was so much easier and more fun.

    Here’s the thing, though: blogs never went away. If I were writing a dictionary entry for blogs, I would start by calling it a system for displaying content on the internet. What makes it a blog specifically is that it displays your most recent content in reverse chronological order at a dedicated address.

    For example: WordPress, the most popular blogging engine out there. Here’s a site I haven’t updated in forever, but you can still see recent posts in reverse chronological order at a dedicated URL. Tumblr actually calls them “blogs”, and it fits: my most recent posts in reverse chronological order at a dedicated URL.

    But what about my Facebook profile? I don’t have as much here, but it does have my most recent posts in reverse chronological order at a dedicated URL. YouTube: Most recent posts in reverse chronological order at a dedicated URL. Instagram: Most recent posts in reverse chronological order at a dedicated URL. Mastodon! Bluesky! LinkedIn! Ex! Medium! Soundcloud! DeviantArt! Twitch! TikTok! SOCIAL! MEDIA! IS! JUST! BLOGGING!

    (Deep breath)

    Social media and blogging are–at the heart–just about putting content onto the internet for others to enjoy. But if that’s the case, why did social media take off when blogging… didn’t? There’s a few major factors at play, not the least of which is the rise of the smartphone. But I think social media did well at addressing two things: barriers to entry, and barriers to participation.

    Now, of the two, barriers to entry is the easier to address. What are the barriers to entry? I’m going to pick on WordPress here because it is by far the most popular way to set up a blog. And by running the open source version, you have complete control over the platform–you decide what to install and run.

    Except the process for actually installing and running WordPress is… not easy. Here’s their download page with two options: “Download and install it yourself” and “Set up with a hosting provider.” If you’re not familiar with installing and running software on a web server, if you have no idea what web hosting even is… you’re stuck. This is the single biggest barrier to entry for blogging. The good news, though, is we’ve “solved” it for a couple of decades: let people sign up for an account. This makes it easy to get started, but it also means that we cede a lot of control to the platform. We’re trying to avoid that.

    Two examples of a better approach are Laughing Squid and Micro-dot-blog. Laughing Squid is one of many web hosts that handles installing and running the open source version of WordPress but still lets you customize it. Manton Reece’s Micro-dot-blog–what I use for my blog–offers inexpensive blog hosting with built-in apps and services. Both of these are ways to set up blogs that take care of all the little technical details but still give us control. Both of these cost money, but by paying for them, we get platforms that aren’t as at risk for enshittification. So that’s barriers to entry pretty much handled.

    But what about the barriers to participation? What happens after people sign up? Take a look at the post editors for WordPress and Medium. They take up most of the screen, WordPress has some extra menus to the top and side, and they’re mostly just a blank canvas. That’s great for some instances, but let’s compare that with social media: Here’s Instagram, X, and Tumblr. These don’t take up the whole screen; they’re small and focused. Instagram I couldn’t even get to this part until I’d picked a photo! They prompt for content, and they don’t ask much. Just a picture. Just a link. Just one sentence about what’s happening. Social media understood something incredibly important: The hardest part of blogging is blogging. It’s coming up with the words to say, learning to be confident in your own voice, finding things to post about.

    In short, with blogs we have platforms that we control, but it can be a little complicated. With social media, it’s easier and more fun, but we’re subject to enshittification. So let’s take the freedom of blogging and bring in the fun of social media. Let’s take the overwhelming parts of blogging and focus them in to what we really want and need.

    But what about our communities? We’ve spent years, maybe even decades building up relationships on these platforms, whether through interactions or just following and being followed. And as a lot of us have seen over the past few years, a lot of these communities don’t survive changing platforms. So how do we keep these relationships alive?

    First, we cross-post. Social media loves to do this to get people on board, and we can use it to our advantage. We connect our blogs to our social media accounts. Then, we post to our blogs. Our blogs know what the content looks like, what each field means. And they’re able to take that information, translate it into content for other social media sites, and post it automatically. We keep our content in a place we control and syndicate it out to other sites where our communities already are.

    That takes care of the “now,” but what about the future? If everyone’s on their own blog, how do we interact with each other? For that, we have standards. The World Wide Web Consortium, or W3C, is the organization that sets standards for HTTP, HTML, and other technologies that the web needs to run. And there are new standards being developed to enable the social interactions we’re used to—such as likes, replies, or follows—but with independently-run blogs that don’t need to pass through a central platform.

    Some of these standards are newer, like ActivityPub, and others are older, like RSS. But the easiest way to explain this is a standard older than the web itself: email. If Bob has an email account at gmail-dot-com, he can still email Alice with an account at hotmail-dot-com. Or I can set up my own email server at oddevan-dot-com. Even though we’re using different servers—and probably different software on those servers—they can all speak to each other using this same standard.

    Let’s start with this foundation of open standards that gave us email and the web and podcasts, build the social interactions and tools and connections we’ve formed through social media, cross-post to our old accounts to keep our communities, and present it in an experience that lets us use our tools, not fight against them. That’s what I want to do with Smolblog.

    So let’s talk “how.” How is Smolblog going to be a better blog? How is it not going to end up like every other enshittified platform that came before it? How am I actually going to do this?

    The first part is admitting that, well… I can’t. There’s no special algorithm, no hack, that will absolutely stop enshittification. Any code in the software, any bylaws in whatever company this ends up being, all those can be changed, and there’s no way to guarantee that they won’t. And even if there was, the biggest risk here is that Smolblog just… fizzles out. We could easily get to a place where I can’t maintain Smolblog on my own, and no one else is around to pick it up.

    We can’t stop entropy… but we can certainly try. We can set things up so that when it happens, we’re ready. So here’s my plan, and it looks an awful lot like WordPress:

    The source code to Smolblog is and will be Free Software. Free as in price, but also free to run, study, modify, and distribute. Anyone that wants to can download and run the software on a web server. The only requirement is that any modifications also have to be available to anyone using it.

    For those that don’t want to download it themselves, I’ll be running a paid service at smolblog-dot-com. As much as I want it to be free, I’m not going to do that unless I can do it sustainably. It’ll be running the exact same software that’s available for download, so anyone is free to set up their own service and charge for it.

    But no matter what, any user will be able to download their data. I want to make this as simple as possible for everyone, so I’m planning on using the Blog Archive format. It’s a proposed standard that packages all of a blog’s pages, posts, images, everything in one tidy archive that can be imported to another server or uploaded as its own static website.

    All this gives protection against enshittification, but it also makes it easier to do content moderation, particularly when it comes to the hosted service. As everyone from bored teenagers to eccentric billionaires know, there are limits to free speech. It’s not just the big ones like hate speech and harassment but stupid stuff like… spam. We can set up things like word filters, flood control, account verification, but at the end of the day, sometimes we just need to wield the ban hammer.

    Now, there’s been a lot of hand wringing lately about freedom of speech and banning people. I agree that a ban is not something to be taken lightly. If we have these open platforms and encourage people to put their life’s work on them and build these audiences, it can feel like a breach of trust to then take that away. But before we get too dramatic, data portability means there’s a backup of all the content in a standard format. Free code means there’s a way to keep using the exact same Smolblog. And using open standards for interactions means that the audience doesn’t disappear, despite what people may say.

    Having this freedom in place neutralizes the debate. Instead of questioning whether certain speech should be “allowed to exist”, we have the ability to say that it’s not speech we want here. It’s freedom for users and for administrators, because they both have the chance to say “this isn’t working, it’s time to leave.”

    So we’ve talked enshittification prevention, and we’ve even talked business model a bit. But this is a software project, so let’s talk code, just for a second. I’m starting with the core domain logic, the things that are intrinsic to the app, what makes Smolblog Smolblog. Things like the content workflow, or what accounts are allowed to make changes. What’s not part of that are things like how the data is stored, handling image uploads, interfacing with other services, making sure people are who they say they are. By building a modular, adaptable system, I can swap these parts out without having to change the core. I can even build registries that can store different parts of the same type and swap them out on-the-fly.

    That flexibility extends to the Content model. It’ll have a few intrinsic details like publish date and primary author, but most of it is going to be this box we’re calling the content Type. This is the structured information that really determines what the content is: a picture and caption, an embedded video, or just 140 characters of text… that word we don’t say anymore. Each piece of content can only have one type, but there can be many extensions. These are things like tags, syndication links; things that apply to multiple–if not all–types of content.

    Once we have our complete Content object, we can push it to a channel, which is just a place to put content. It can be your website, but it can also be an account on another social media site like Tumblr or LinkedIn. It could even be a feed using an open protocol like ActivityPub. We push the content and send it on its way.

    A flexible content model with diverse channels, powered by adaptable code, protected by Free Software and Data Portability, and sustained with a business model used by multiple Open Source projects. That’s how I’m building Smolblog.

    Now, here’s the part where I really should show it to you in action… but I can’t. Not reliably. I got 95% of the way to a working product and… burnt out. This video is what I’ve been doing to get back into the project and refocus my efforts. Because I really want this to happen.

    Smolblog represents everything I want for blogs and the web. I’ve been working on this for over five years now, and I’ve been chewing on the ideas my whole career. And as more and more of our lives are lived online, it’s more and more important that we build environments that are good for us, or at least don’t actively harm us.

    Steve Jobs once called the computer a “bicycle for the mind,” a force multiplier that lets us do more than we could previously. Personally, I want to build things that let us create more, express ourselves better, put more art out into the world and let it connect us. Lofty and pretentious? Definitely. Sharp rocks at the bottom? Most likely. But I gotta try.

    Take care of each other; I’ll see you next time.

    → 11:04 AM, Sep 20
    Also on Bluesky
  • I’ve mentioned my project Smolblog more than a few times, talking about it in bits and pieces. So to get the whole pitch in one place, I made a ~20 min. video essay about why the Smolblog project exists, what I hope to accomplish, and how I’m doing it.

    → 10:26 AM, Sep 20
    Also on Bluesky
  • In today’s rabbit-trail adventure, the 11ty announcement of joining Font Awesome led to reading about Web Awesome which led to then looking up the existing UI library Shoelace, and after playing around with it I’m about ready to use it as the basis for my Svelte UI library. Not bad for a day!

    → 10:36 PM, Sep 12
    Also on Bluesky
  • Anyone want to buy an M1 MacBook? 7-core GPU, 16GB RAM, 256GB SSD, Battery is “normal.” Runs Logic, Final Cut, and Motion well. Includes original charger + cable. Asking $450 OBO + shipping.

    → 1:17 PM, Sep 11
    Also on Bluesky

Slightly uneven since 2005.

Find oddEvan on

  • Micro.blog
  • Bluesky
  • Mastodon
  • GitHub
  • Tumblr
  • YouTube
  • LinkedIn
  • Read.cv
  • TCGplayer

Projects

  • Smolblog
  • PillTimer
  • oddEvan UI
  • madcrasher
  • Other projects

Archive

Links

  • Blogroll
  • Resources
  • Fun Times

About

  • About Istoria

Colophon

Typeset in Raleway by The League of Movable Type and Satoshi by the Indian Type Foundry. Powered by Micro.blog. All your base are belong to us.

© Evan Hildreth; licensed under CC BY 4.0.