Jelle's blog

RSS

Skef: a language for developer lab notes

For years I have been carrying around a small black notebook containing all my work notes. This is all nice and dandy, but it's not very convenient. This is why I decided to move my main notetaking to the PC. There's already a big bunch of applications, systems, cloud thingamajigs that provide all kinds of note taking and categorization goodness, but it doesn't tickle my particular terminal loving fancy.

When I take notes I really don't want to deal with a lot of sub windows, having to move the mouse around and even the excellent ORG-mode feels too complicated for this - previously - simple task. It's a typical phenomenon where something simple in the flesh translates to a big collection of complex digital counter parts.

Cue Skef

That's why I decided to create a small language that allows me to take my notes in my favorite text editor, having all the neat features like tagging, todos, time tracking..etc while maintainig this simple workflow of editing just one document.

Let me give you a quick example of an entry:

[Fri Sep 02 2016 - 2016/09/02]
    This is a line of text that is just a general little untaxonomized line of
    text that will be filed under September 2nd.

    [project]
        This text is filed under "project". I will be able to run queries that
        gather all my entries filed under this tag. 
        
        [subproject]
            You can even nest projects, nifty wifty.

        [todo mow the grass]

        As you can see above here, we're able to setup todos. The basic idea is
        that you'll be able to run the Skef commandline utility that retrieves
        all todos for a project, or simply all of them in one go. It outputs
        these todos on the commandline and you'll be able to setup your favorite
        text editor in such a way that it's piped into a new editor
        buffer.

        [todo bft]
            Sometimes you'll need more space to explain what to do. You can
            create a whole lot of text under one todo if you like, but you
            probably won't, because this means a lot of things that will require
            taking your lazy bum of the couch.

        [time 4.5h pondering about mowing the grass]

        We can have entries for tracking time. Skef will be able to retrieve all
        these time entries, output them as a CSV, or on the commandline for easy
        viewing.

        [done noticed the relatively high grass length]

        After you're done with a "todo", you can simply replace "todo" with done
        and it'll be marked as done :-). You can also use "skip" or "postpone",
        but the Getting Thing's Done philosphy says you shouldn't (which we
        don't care about of course, silly busy people).

As you can see the Skef language has significate whitespace. This prevents a lot of hassle with closing blocks, and wears down your keyboard just a little bit less.

I'm already using Skef as my work journal, but I'm going to add a couple of tools to make it more useful. They will allow you to search for certain projects, get all your current todos and generate a CSV with your time entries. I also want to add VIM support so I'll get to have all the pretty colors in my fav editor :-).

Raspberry Pi 2 as my main desktop

A couple of weeks ago I started using a Raspberry Pi 2 as my main desktop. It was an experiment, suggested by some folks on the #aardvark channel at irc.aard.xyz, and to my amazement it works great. I rarely have to boot my monster PC since, saving a lot on my power bills and finding new ways of increasing my productivity by using lighter apps at the same time. In this blog post I will describe my current hardware and software setup and give some tips on overclocking this single board computer.

Hardware

The Rpi 2 is a neat little board with 1GB of Ram and a 900MHz quad core ARM Cortex A-7 CPU. It is connected to my router through the on-board ethernet port and I have attached an external 3.5" HDD case which houses a relatively slow Crucial BX 100 250GB SSD. I chose to use a 3.5" case, since it has its own power supply. Most 2.5" cases out there take their power straight from the USB port, but since the Pi hasn't got power in abundance, I thought this would be the smarter choice. Since I'm connecting the SSD through a slow USB2 port I could have also gone with a regular HDD without loss of performance, but I kind of like the silence and lower energy consumption of the SSD.

The Pi get's its juice from a 2.1 Ampere iPad adapter that came with the first iPad. I have used the shortest USB cable I could find, to make sure all the juice gets to the board without too much loss. You really want at least 2 amps to power your Pi, because you're probably attaching a bunch of USB peripherals, and you might want to overclock. You can find out that your Pi doesn't have enough power when the "rainbow square" on the top right of your screen appears.

To enable my overclocking endeavors I have bought a small copper heat-sink, and attached it to the CPU. The Pi case I got has small air holes on the top and enough room inside to accommodate the CPU heat-sink.

Overclocking

I have moderately overclocked my Pi. I used Hayden James' excellent tutorial on this subject. It appears that there's no silver bullet though, because the build quality varies from Pi to Pi, so you'll just have to test and figure out yourself. It's best to start conservatively and work your way up. A good way to maximize the load of your CPU and RAM is by installing 'stress' and running this commands:

stress -c 4 --vm-bytes $(awk '/MemFree/{printf "%d\n", $2 * 0.9;}' <
/proc/meminfo)k --vm-keep -m 1

This will stress test all your cores and RAM. While doing this you can monitor the system temperature with:

vcgencmd measure_temp

You can overclock the Pi by simply modifying /boot/config.txt. My current setup:

arm_freq=1000
sdram_freq=450
core_freq=450
over_voltage=8
force_turbo=1

This configuration will void your warranty because I have enabled force_turbo, to make sure that the scaling governor won't throttle down when the Pi is at rest. I don't mind that it throttles by default, but there's this little lag that's especially annoying when you load a web page. The governor usually throttles just after the site is loaded, making it less useful.

I managed to run the CPU at 1250MHz and both the SDRAM and core at 550, but this wasn't too stable when working on the Pi for the entire day. You don't want to overclock the RAM too much, since the chip's specification shows that it was designed to run at 400MHz. All in all I think that forcing turbo is the biggest benefit here.

With these settings my Pi runs perfectly stable and rarely gets hotter than 50°C.

Software

I installed vanilla Raspbian on my Pi using the NOOBS network installer from the main Raspberry Pi website. I quickly swapped the default desktop for xmonad, because it's a lot lighter (and I'm a big Haskell fan-girl). I realized I needed to change some of my computing habits, so I switched to Mutt for e-mail and Newsbeuter for all my RSS-feeds.

When you start using the Pi full-time you will get a keen eye on how demanding all the processes are and one thing that will immediately jump at you is how poorly most browsers perform. This is the reason why the Raspberry Pi Foundation made modifications to Epiphany to make it a bit more snappy. But still, you would like to avoid javascript-heavy websites like youtube.com and you'll get adept at finding alternatives: Youtube-dl for downloading youtube videos for example.

I tried porting Fennec (Mozilla Mobile) to the Pi, since this ARM-browser runs great on my cheap Android tablet. However, Mozilla seems to have switched their focus for Fennec to Android, so I had to rollback 100k of Mercurial commits to get to a version that still had Linux Desktop support. Long story cut short: I couldn't get it to compile and didn't want to make it a knight's quest getting it to run. Instead I switched to using Dillo for quickly looking up things and I'm using Epiphany and Chromium for web development. Chromium suffices nicely for debugging the web apps I built for my work and after I overclocked I'm actually quite happy with its performance.

It's a bit odd that browsers don't run faster, since browsing works fine on cheap ARM-based tablets. I guess those have a lot of special ARM-optimizations, and it also helps that they are more closely tight to the GPU for displaying the latest CSS3 transforms and Javascript-based trickery. It would really be nice if someone ported the Android webview, or Fennec to the Pi, utilizing OpenGL ES directly for rendering.

Speaking of OpenGL, you will notice that some games in the default Raspbian repo run extremely slow. This is because they have been written for the regular OpenGL and need to be ported to OpenGL ES for acceleration. There are a couple projects that can help you porting, without having to overhaul the entire graphics stack. Check out Regal and GLShim if you're interested.

I'm trying to port Armagetron to the Pi, because I have a tron server daemon running on my VPS and would love to continue playing it. That aside, there's a lot of fun and play to be had on the Pi. There are many emulators available, and I recommend using Retropie to install standalone versions of the available emulators. Especially Retroarch is pretty neat.

Quake 1 to 3 also run great on the Pi, as does Dosbox, so there's more than enough out there for your leisurely Pi usage. Personally I tend to avoid the official Pi store for software, since it seems to be ridden with GPL-violating packages.

Software freedom is actually the one thing that bugs me about the Pi. Its firmware and drivers aren't all free and open source and although you can decide for yourself how long your freedom beard grows about this subject, it doesn't help the Linux and BSD support for the Pi. Personally I would love to run NetBSD on this machine, but without hardware accelerated graphics I don't see the point. If freedom is really important to you, you might want to wait for the 9 dollar chip by Next Thing Co.

One thing that amazed me is that Libreoffice runs way better than Abiword. I quite expected the opposite and don't know whether this is something that's caused by my specific setup, but Libreoffice runs nice and snappy. Anyway, since my pc-swap fired up the minimizer in me, I'm considering moving all my Libreoffice templates to LaTeX instead.

Conclusion

The Pi is a nifty bit of kit and more than powerful enough to replace my desktop for most of my computing. Critics regard it as a mere toy, but it's quite powerful at that. Fine-tuning the Pi, and finding new and better apps that replace the bloated ones you were using is pretty sweet and good for your productivity. I intend to keep using the Pi for most of my work and hope to someday update it to a 8GB octacore Pi 3.

Rise of the videogame zinesters

Last week I read Anna Anthropy's Rise of the videogame zinesters and it left a big impression on me. Having read a lot of books on video games, this one is something completely different. No programmer semi-gods this time (like in Masters of Doom or Hackers), no tough stories about manly men working 100 hour weeks in crunch mode (like in Jacked). No: this book is about human beings making games, everybody, not just the prototypical hetero cis men who have dominated gamer culture for so long.

Anthropy paints a bright picture in which games are created like ezines. She makes a very good point about video games needing more diverse personal voices and you don't need to be a coder to let yours be heard. Mentioning a couple of tools you can use to make games without previous programming experience (like Twine), and talking about various examples, she convincingly attempts to liberate the art form from its prison in which men shooting men in the face is the norm.


This book appealed to me in so many ways it's hard to summarize. Triple A games and gamer culture create an ecosystem which is often weird and off-putting for queer folk like me, so Anthropy's inclusive stance is heartwarming. Creating a game yourself seems daunting, even to me, and I am nota bene a coder. Anthropy emphasizes the fact that you should just go and create, build stuff and don't worry if it sucks. The result will always be personal and that's something worthy and special in it's own right! This is such a beautiful thought I actually read the end in tears.

I still love the books on games and game developers I have on my shelves and can never get tired about reading how John Carmack and Romero did their magic with ID software, but this book resonated with me in a way I never thought possible on this subject. If you want to create games like me, or you would like to read how this art form is opening up to a wider range of voices, I really can't recommend it enough!

Herding Cats

I have just started reading Rise of the Videogame Zinesters by Anna Anthropy and while I was looking at the games she made I found this little puzzle gem in her list: Herding Cats.

Herding Cats is a top down puzzler in the style of Sokoban/Paganitzu/Adventures of Lolo with a very neat twist. Instead of pushing boxes around and blocking baddies, you have to herd cats. The mechanic is as simple as it is tricky, because the cats stick to you once you get next to their block and they will remain by your side for the entire session. Thankfully you can undo moves, and - trust me - you will need this. You can easily end up with too many sticky cats, meaning you can't get past a narrow part.

I love the way the cats' furs change color each time you reload a level and I'm quite envious of the player's pink hair. Tried to do that once, but my hair's too dark to get properly blonde for coloring.

Herding Cats is pretty neat and difficult, but (thankfully) easy enough to finish in your average coffee break. The perfect kind of game for days like these when I'm surfing a deadline's waves like I never managed to pull of in California Games.

New blog

Greetings and salutations visitor. This is my new weblog, using the brand spanking new static weblog generator HasClunk.

I actually wanted to use Hakyll, but couldn't get it setup because of the dreaded Cabal dependecy hell raining down errors on me. Usually when such a thing happens, I will just keep on twiddling till it's done, but not this time. I figured I could build my own static blog generator quickly, so I just went at it.

HasClunk supports posts, pages, categories and RSS. It's everything I need at the moment. I might add Gopher support later on, because that kind of fits the Aardvark community. Aardvark is a network of people who (mostly) met at SDF and started their own IRC server when SDF was having some downtime because of DDOS attacks. Nismorack calls us paleotechnologists and this makes sense, because most of use love to use terminals instead of desktop environments, and we're working on our own BBS. You can even visit us on Gopher.

I'm kind of a Haskell and general code geek, so much of this blog will be about those subjects. I'm also working on game ideas that I would love to see come to life, but don't hold your breath for them. In the mean time I work as a freelance medical programmer and I like playing and reading about indie games. The indie game scene is awesome and I'm a big fan of the growing diversity, gripping games out of the cold dead white masculine hands and make them rainbow colored!