I have been learning Standard ML in the past few weeks. My main resource has been the excellent book ML for the Working Programmer (2nd Edition) by Paulson. So far I’ve gotten through Chapter 9. Paulson really did an excellent job with this book, and I’ve had the a-ha! moment in my head quite a few times so far. SML seems to change the way that you think about programming and problem solving in general.
Woah? A blog post? There hasn’t been one of these in nearly two years! What does it mean? It means I’m back to writing. I’ve simply got too much on my mind to be quiet. Expect some content to come out in the next few weeks (and months). Reverse Engineering Over the past two years I’ve done of a lot of stuff. But I’ll post whatever I legally can on the internet.
In case you didn’t know, Snaps and Flatpaks are touted as the new universal application packaging formats for Linux. This post is a simple overview of my thoughts on each. Snap Currently, Canonical is pushing Snaps as the new packaging format. Snappy, the package manager is written in Python and Go. Currently, the package manager is licensed GPLv3. For snaps, interfaces look good. It reminds me of OSGi and Android’s old sandboxing system.
This summer, I interned at an undisclosed software company. Without getting too specific, here’s a basic post mortem of my experience. Things I Learned Things are designed for the lowest common denominator, especially in software. There isn’t enough documentation, and often the code is better documentation than the actual documentation. Using source annotations to generate documentation for the end user (eg JavaDoc, JsDoc) is often easier than writing the documentation by hand (this only applies to large code bases, however).
For a while, I ran this blog using Ghost. Ghost is a great blogging platform, with a great theme and developer ecosystem. I cannot laud the Ghost team enough for how well-designed the UI is (IMHO). My only issue with Ghost is how badly it hogs resources (due to the fact that it’s written in a dynamic, interpreted language). Node.js used a ton of memory on my itty-bitty VPS, and it’s sometimes it’s slow and apt to crash.
As of the time of this post, I am hosting this blog using Ghost. My only issues are that Ghost takes up a lot of memory (52 MB) on my VPS and page loads are slightly sluggish. In the search of a better platform, I realized that there’s still room for improvement in the blogging atmosphere. First, some background knowledge: A Tale of Two Systems As it stands, there are two existing ways that web blogs work.
For the past few weeks, I’ve been writing a small program to parse KeePass 2 database files (the ones that end in .kdbx) using Go. I’ve been using this blog post which details the file format but it’s still damn complicated. For example, the headers are a Type-length-value list. Note that TLV is meant for communications protocols (where bandwidth is limited), not for disk-based storage). Fair enough, I’ll deal with it.
I wrote a simple program to generate random Voronoi Diagrams in C, and I’m satisfied with how it works. Why does this matter? Well, for one you can make some pretty cool images for backgrounds. Right now, a slow, naive algorithm is used to find what color is pixel is. I plan on changing this in the future. Beneath each image is the command I used to generate the image. If you want to make your own images, download the git repo, and be sure to convert the created .ppm file into a sane format, like .png which takes up far less space.
Right now, I’m writing an IRC server, and it’s turning out to be incredibly frustrating so far. For example, one thing I’ve had trouble with is MODE commands. The documentation in RFC 1459 is barely enough to understand what’s happening, and answers on SO just leave me more confused. I can’t believe that one of the most popular protocols on the planet has so little documentation. Luckily, Hexchat has a nice Raw Log feature.
I recently watched a talk by Jacob Appelbaum about how Tor does TLS certificates, and how a bunch of users using certificates that expire in 2 hours is suspicious. So I wondered, what does the average TLS certificate look like? And since I’m a programer, I decided to go and gather some data. Thus, I wrote a tool to gather the information I wanted. “Make the data you want to see in the world.” That’s how it goes, right?