{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreierlke7gqx7xsojw7q257zq32c3yh6bmhs5i3tgg3lmeligopr4j4",
    "uri": "at://did:plc:mmiud6y33nwch7v5s4upte7h/app.bsky.feed.post/3mlm3h2saca52"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreibels3vyh7mv6i7iv5w6yw3pacxny7wqqrpstb6ibbx5o2nb55acy"
    },
    "mimeType": "image/png",
    "size": 162405
  },
  "path": "/posts/vivipara-and-languages/",
  "publishedAt": "2026-05-10T22:34:09.000Z",
  "site": "https://akselmo.dev",
  "tags": [
    "vivipara",
    "web",
    "zig",
    "go",
    "hare",
    "rust",
    "Vivipara, my smol and quick text paste service",
    "Privatebin",
    "smolweb",
    "https://paste.akselmo.dev/paste/akseli/f2c85d38-2600-4263-8ea2-a337feaeb195",
    "Thinking about programming languages for",
    "Bonus: Rust",
    "TuftySysMon",
    "Bonus: Hare",
    "Hare being stable for long time",
    "That was many words",
    "let me know!"
  ],
  "textContent": "I just spent this weekend writing my own little pastebin clone, called Vivipara. I also have bunch of thoughts about various programming languages. Read about it all in this one blogpost!\n\n## Vivipara, my smol and quick text paste service\n\nFor a while now, I have been looking for some sort of pastebin clone for myself. However, all of the ones I could find seem to be rather public: Anyone can create a paste.\n\nWhat I wanted is only _I_ can create pastes, but anyone can read them.\n\nI used Privatebin for a while, even tried self-hosting it, but it was a bit too much for my simple needs. I just need to share a backtrace occasionally. I also try to avoid javascript if at all possible, so that this can be run in any browser.\n\nSo I thought hey, I'm gonna try make my own. Why not, seems like a fun weekend project.\n\nAnd it was fun!\n\nI genuinely enjoyed thinking this project through. In the end, it turned out to be very simple and smol. Very smolweb friendly, too!\n\nYou can see a demo-paste in here: https://paste.akselmo.dev/paste/akseli/f2c85d38-2600-4263-8ea2-a337feaeb195\n\nThe creation process was not that bad. Go language was really easy for my lizard brains to understand, so I could just start creating the site. There's little technical nitty gritty to talk about, in the end this is very simple Create and Read webapp. Deletion is handled automatically by the application, if user has set the items to be deleted. Currently the files have all same deletion date, I'd like to make that file specific at some point.\n\nNo \"AI\" was used when creating Vivipara, it's all artisanal, handcrafted slop! I will avoid those tools as long as I can, since they would take the fun of the craft away from me, and make the learning process much more difficult, if not impossible.\n\nNow I was going to try to make this with Zig at first, but ended up settling with Go. Which gets me into the language thoughts..\n\n## Thinking about programming languages for\n\nAs much as I want to make ideological choices a priority, sometimes I just have to admit that the pragmatic choice prevails. In this case it was using a language that excels in the specific field (Go and web) because that was the only way I could create what i wanted in reasonable time, with reasonable effort.\n\nMy ideological side is of course not very happy on relying anything by Google.\n\nHad i more free time, I would follow those ideological choices more, I think: I would try to use a language that is very \"underdog\" and avoids anything corporate, such as Zig.\n\nZig community has very much the values I share, so my ideological side would love to join the fray and use it as much as possible. I applaud the effort that has gone into the language.\n\nAlso Zig mascots are cute lizards, of course I want to use it!\n\nBuut.. It wasn't in the cards in this time.\n\n_I also have some bonus thoughts on couple other languages, though I did not use them this time._\n\n### Zig\n\nLearning this language is very difficult for me. There are not many good examples I could find, though search engines are dreadful these days so it's possible I missed something.\n\nZig does have a HTTP server stuff in it's stdlib, but I could not find any good examples how to set up anything.\n\nAnd when I do find examples, they're always out of date and incompatible! Zig moves really fast, changing and refactoring things, so the language suddenly moves a feature to somewhere else, and I'm following a guide that is too old, so I get confused..\n\nSeems most people who like the language have been there from the start, so they know when things change and know where to go. They understand the basics of the language already, so adapting to changes is easier and easier every time.\n\nBut little ol' me? I have no idea where to even start. I can write a hello world, sure, but anything more complicated I am at loss. I thought writing this pastebin clone would be simple way to learn a language: Listen requests, serve web pages, save files. That's all it does, essentially.\n\nSo where I ended up is: I _want_ to use Zig, but I _can't_ even learn it! I mean sure, I could spend week(s) to learn it, but this was supposed to be a weekend project. Thus for my smol brains, learning Zig is not a weekend thing. Especially when things keep changing and guides are out of date often.\n\nI really hope Zig stabilizes soon enough for me to start properly learning it. I am very keen to learn it. I'd like to write a game with it. But at the moment, the effort required is too much, as I already have a dayjob with wrangling C++.\n\nAlso the Zig language server had some issues where it sometimes showed I'm doing things wrong and sometimes not.\n\n### Go\n\nGo surprised me. It was so easy to pick up and just start tinkering with. The syntax is small and concise, I can just.. Get it. Within a hour or two.\n\nIt was refreshing to work with a language that just lets you do things instead of figuring out how to do even _start_ doing things.\n\nThe documentation I could find for it was rather good, though there is a lot of \"AI\" slop sites that were annoying me and giving me false info. But mostly the official docs were good enough.\n\nEven I knew nothing, I could still create something useful for myself while learning the language. It was just that easy for me to get in the flow and just have fun writing Vivipara.\n\nI also found out that I don't really mind `if err != nil` that much, but maybe it's because I have only spent one weekend with the language, not years. :D\n\nOf course, the whole Google problem is there, so I'm not very happy about that, but this was the pragmatic choice and I'm glad I made it this time.\n\nI also think that Go will pretty much replace Python for me in my toolbelt, for the most part at least. The tooling and distribution of Go applications is thousand times better than with Python, in my opinion.\n\nSo yeah, I think I like Go, despite some of it's warts. One of my favorite languages for sure.\n\n### Bonus: Rust\n\n\"But why not Rust?\" the 🦀 in the audience asks.\n\nHonestly.. I'm bit afraid of this language and the learning curve.\n\nEvery time I've tried to use it, I get confused by the syntax. The lifetime syntax being `'` is for example something I easily just glance over. Maybe I need my eyes checked, I don't know, but that symbol is just way too easy to miss!\n\nBut I believe I can make it work for myself. I just wanted to try Go this time.\n\nI am planning to write a new driver for my TuftySysMon project. Currently it's a Python script, but I want to replace it with a Rust application.\n\nWhenever I'll tackle that, I'll let you know how it goes! I do want to learn Rust, because it's being used more and more in KDE stuff too!\n\n### Bonus: Hare\n\nI really admire the goal of Hare being stable for long time. The community behind it seems to share very much my values, and I _love_ \"boring\" languages.\n\nSadly it's not usable for me yet: I am very much dependant on language servers. I wish it wasn't like that, but let me explain.\n\nMy ADHD can be rough. I lose track of time easily. I confuse myself easily, I forget what I was doing.. Language servers help me keep my focus: They help me avoid context switching.\n\nInstead of going through documentation in another window, typing stuff in another window, I can read documentation in my editor. I can also go through all the available functions, variables etc. within the editor. For me it's very common to open a documentation, read about a Thing, then go back to editor.. And I already have forgot the name of the thing! Like, super common. Happens daily.\n\nI can jump around the code really easily, without having to search stuff (in Kate this is CTRL+Click a symbol), so I don't forget how I was going to do something.\n\nI also get distracted easily. The amount of times I open browser to read documentation but end up browsing something else is too high. And then I forget what I was doing.\n\nWhen everything is inside the editor, I do not have this issue as much.\n\nI guess one could say \"Skill issue\" and sure, but my ADHD does what it does. Rapid context switching is very much a mind killer for me.\n\nSo when Hare gets a language server implementation that is daily driveable, I'm going to use it for something. Write a small game with it. Because everything else in that language is very appealing to me. And I believe I will love it way more than Go.\n\n## That was many words\n\nHere you go, long incoherent ramble.\n\nAnyway, if you are going to self-host Vivipara, let me know!\n\nAnd yes, I moved to Sourcehut recently! I am very interested in trying the email workflow and I genuinely like how the site looks and feels like.\n\nI am still keeping my donations up for Codeberg and will likely use it for some projects. :)\n\nThat's all for this time, thanks for reading!",
  "title": "I wrote simple pastebin clone: Vivipara"
}