It’s been some time since my last post. I’ve lost track of time and I wanted to be constant with these posts, more or less as a self-accountability mechanism. Here’s what I remember doing during the last two weeks, starting with the fourth week:
I’ve been struggling to make “real progress” with what it’s supposed to be my main project. I feel I haven’t got to that “flow” zone in which I make sustainable and constant progress. Monday was Labor Day in the States and I decided to rest. On Tuesday I took some time for my C project and I got to test the COBS encoding and decoding in two different processes. There are still more tests to do, and some things to clean up. That project is very small but I would like to close it by giving it some final touches.
On Wednesday and Thursday I continued with my raft implementation. I’m trying to setup some tests, specially for the failure cases. There are various kind of failures I’m interested in testing: complete node failures and disconnects or network partitions between nodes. I found that Akka provides a multi node testkit which should help me with that. I’m still trying to make the tests work, but so far that testkit looks very powerful.
On Thursday I attended Lisa’s talk on how to read code. It was focused on reading open source libraries code. This reminded me that sometimes you need to swim through a lot of abstraction in a library to find the specific piece of code you are interested in, which sometimes means, for example, to look for the implementations of abstract classes.
Also attended Emily’s workshop on p5.js. p5 may be seen as a JavaScript port of Processing. It can be used to write generative art. It has a very simple API. One of my favorites examples of what you can do with it it’s this piece by Emily.
And finally my favorite talks:
- BF REPL: Ivan live coded a REPL for Brainfuck in exactly 5 minutes, which is an amazing feat.
- Word embeddings: Once again a presentation by Harold. This one was about vector representations of words (I think this is related to word2vec). This is useful because the words vectors preserve some of the words relations. For example:
closestVector( ( vector("man") - vector("king") ) + vector("woman") ) == vector("queen")
That is: word analogies can be modeled as vector translations!
About last week:
I decided to change to something completely different. I started to write a Scheme interpreter by following this tutorial. By the way: I don’t recommend that tutorial unless you know some Haskell beforehand. It assumes you know a good deal of things about Haskell and spends little or no time explaining concepts. So far I’ve learned about existential types and how to make useful test helpers based on the suggestion of another recurser (for example). Unlike the raft project I can advance very quickly with this. I hope to finish it next week and maybe do some additional things afterwards like supporting macros or a more interactive REPL.
I also want to learn about operating systems. I was trying to follow the intermezzos tutorial but I got stuck at some point trying to use a forked version of rust’s libcore (I don’t remember all the details of the specific issue). So I decided to follow this other tutorial in the same vein and now I can print to the screen using rust. All these tutorials also assume you should know some things beforehand. I haven’t wrapped my head around pagination so I’m trying to read about it. I know I can continue to do the things that the tutorial says but I want to understand better some of the details.