What Have I Learned in 12018?

This time around, I want to write the themes up front, and only get to the details of concrete activities later.

Year of Longer Cycles of Action

I laid out a number of things I’d keep an eye on in 12018, and by spring, I think I had summarized them into the “Year of Longer Cycles of Action”. Now, that’s a terrible name for a yearly theme, but it does show that I wanted to have cycles (i.e. close the action-analysis loop), and to accomplish larger creative projects before getting distracted.

I did add bullet journaling, and I think I’ve gained some techniques for keeping projects alive longer, but it didn’t live up to what I had imagined at the start of the year. Instead of switching projects every few days, I was switching every week or two.

However, as the year went on, I began to feel more like that wasn’t what was really going on. Instead, 12018 was the Year of Ownlife.

Year of Ownlife

Consider how men for generations have been blindly imitating their fathers, and have been trained according to such ways and manners as have been laid down by the dictates of their Faith.

I have lived so far a life largely without conscious choice. Though following the default path of life has luckily turned out well for me so far, I nevertheless regret my methods. It is a method that would be considered successful in Orwell’s 1984.

There was no one point where I turned this around, so no dramatic story. Instead, there were a number of ideas that I began to feel:

This year was in fact characterized by a slow attempt to wrest control of my actions from my unconscious mind. I am now better able to turn my day-to-day attention away from the things I don’t care about. This year I germinated a seed of my self, entirely separate from the lives of my parents, or the life expected of me by society. It’s not radical, but it is my ownlife, and it is the most wonderful thing to have happened to me so far.

Year of the Exponential

I want to embrace exponential growth in myself, and that means a few things.

Exponential growth starts small, and builds on past gains. That means I should be thinking small for now. However, each small project should serve as a base to build on for future projects.

When multiple entities experience exponential growth in the same environment, there can be only one. In this case, the environment is my attention, and the creatures are my ambitions. As far as getting things done, abandonment of a project for a new project is just as bad as abandonment for consumption. I need to be able to understand and work with that reality instinctually.

There are exponentials around me in the external world that, due to being exponential, will have dramatic consequences for everything else in my life. These are especially my health and my finances. The finances are the easiest to comprehend, because the exponentials are formalized in interest rates and dividends. My health is exponential in that it is fundamentally made of life, and life is exponential. If either of these start going bad, that undermines every other ability I have.

Accomplishing the “Year of the Exponential” is a multi-pronged offensive. Now that I look at them, they seem to be about sacrificing quantity for a hopefully disproportionate but ruthlessly honest increase in quality.

Operation Deathknell
I have too many projects competing for my attention. Many of them need to die to make way for any project to become meaningful. By killing a project, I mean putting it on indefinite hold, unlikely to return this year, or perhaps even in the next decade.
Operation Medicine-man
Any intellectual project must be put into use immediately—taking my own medicine. If a project of mine is too aggravating to use, then it must be iterated on until it is convenient. Otherwise, see operation Deathknell.
Operation Sunrise
It is only morning for me; basic functions are coming online, and it’s not time to rush for results. Only once I’ve tended to small but fundamental needs will I be able to get to work in earnest. To escape the metaphor, adulting projects are more important that intellectual stimulation now.

When I come back to this, I want to examine myself on the following metrics:

Sisyphus

Review Systems

Review systems largely fell out for me this year. I was overwhelmed by the work of garbage collection every week, so I transitioned to an incremental system, no more than two hours a week. However, while that took the pressure off, it means I’ve lost track of what needs to be done, despite my software checklist tracking of it.

Something that truly failed me were my monthly and seasonal reviews. They both took too much time to complete, especially with the care I needed to put into them to get them published online to my standards. Given that, I want to wrap this one up quickly1.

To get these reviews done quickly, I’m moving to more of a military debrief style of review.2 What this means to me is anserign a few, pointed questions with little room for elaboration. In particular, my list for this review is:

Garbage collection and review went poorly. It didn’t add much value, and took away time I could have used for non-meta work. That said, I have narrowed my idea of what garbage collection is, and thanks to a software checklist system, non-daily maintenance tasks seem to be more under control.

Journaling

I experimented with making two journal entries a day in the winter, with reasonable success. I dialed it back after the winter, but I am still adding entries just to get thoughts out of my head initially,. I was quite happy with the confidence boost it gave me in being able to just sit down and write about something briefly. I think it can add some pressure to me about what I find important, but it can also serve as an indulgence of obsession; I can feel good about making a journal entry working through some of the problems in a field that ends up not being particularly important to me.

In 12019, I do not want to use the journal for scratch work.

Bullet journaling, on the other hand, has worked tremendously well throughout the year. Unlike software productivity systems, it is immensely flexible: simply turn the page and write something different. Correspondingly, my particular system changed throughout the year, and I expect it to continue undergoing changes as I figure out what works better, and as my own needs change through my life. Something I like very much about it is that each page feels like a blank slate, so it makes it very easy for me to get back on it after a period of slack.

I’m starting to see my calendaring system as simply another view into the bullet journal. It is still working well, even if there are some days for which I have no data. I stuck with color-coding by categorization, though I’m not sure what data to extract from it. In particular, it seems that intellectually-stimulating work seems to be too broad; perhaps I should use multiple colors for projects so that I can better see when I switch projects. One thing I am adding is another color or shape, written at the bottom of the day which describes unintentional actions that eat my attention. This is already helping me distinguish between data-less days and poor-intentionality days.

Calendar unintentionality.

Color calendar to show when project switches happen.

Automation

Automation is not working. My to-do site is no longer being used. I didn’t notice for weeks when my Regularly app stopped sending me notifications. I’ve built two different product breakdown structure systems, but neither stuck.

I think there are two problems. Computer tools are not as immediate as physical tools, and so more easily forgotten, especially when used for small tasks. Notifications often come at inconvenient times, but that’s the only time they have to assert themselves.

Luckily, I have adapted my journal to work with reminders, and it’s mostly been active since I started. Paper is so much more flexible than software if something isn’t working quite right: simply turn the page. It also takes more awareness to copy an appointment reminder from one week to another than to wait for calendar notifications. I think that awareness is a good thing for understanding the shape of my life. It also allows me to answer scheduling questions without having to reference my external brain.

Computer Science

My activities in computer science fall into two categories: low-level hardware, and language design. This should perhaps not be very surprising, but writing it down helps remind me to think about what is actually important to me. I anticipate in 12019 that a third activity—sysadmin—will become important. I cannot support all three of these at the same time and expect to make decent progress. I have made some meaningful progress over the last year in a few places, and I hope this can help me decide where to go this year.

Reflex

Over the course of just over month, I gained competency in the basic use of reflex and functional-reactive programming more generally. This was enough to begin writing GUI apps in Haskell, as well as web apps that share Haskell code across both client and server.

All this is great, but the only projects I currently have that could take advantage of this are a suite of conlanging tools, and an EDA tool of my own design. Both are ambitious, and only exist to support other projects which I may or may not decide to continue this year. In particular, I’m certain I want to set conlanging down for the foreseeable future, and possibly for good. Building my own computer is something I might not want to get back to before 12020. Perhaps I’ll get lucky, and the state of the reflex ecosystem will also have improved by then.

Do not get distracted by conlanging.

Control my obsession with digital electronics.

Haskathon

In the fall, I found a group of fellow Haskellers that meet monthly. This has turned out very well as far as providing motivation to get work done on projects: it’s an excuse to show off. However, I have noticed that my goals in each session are wildly disconnected. That’s a symptom that I need to change something, but I also believe I can use the meetups to keep a better focus.

Commit to a goal in Haskathon that spans at least until spring, or completion.

Building Languages

This year, I grokked dependent types. This is a massive theoretical breakthrough for me that lets me thing better about programming at every level. I did this in the context of pure type systems, another area which I’m very glad to have learned, as itappears to have opened up another area to research for me to draw from.

The thing that is killing me it trying to make a “real” language. In my mind, as long as the error messages are not descriptive, a language implementation is a toy. I think that’s still a worthwhile perspective to take, but at the same time, I’m not sure where to even start looking for prior art in this field, short of taking a massive effort to read through an already-mature compiler’s source code.

I did build a regex engine that supports complements, intersections and backreferences all together. That, unfortunately, was the only project to come to a fully-working state. I made a pass at fleshing out the theory of abstract binding trees, and while I believe my research writing methods have improved greatly thanks to that exercise, I forgot to include an important class of scope that exists in real languages—local vs. global scope such as in C. The problem at this point is that the work already has a large number of nested subscripts, so I think I need to take a different approach—either finding a different theoretical angle, or treating it as a programming project rather than informal math.

Something I’ve begun working on is a redo-based build system I’ve called zedo. It is already operational, but severely incomplete, and its current application already has one practical drawback3. At the moment, I can’t say if it’s going well or not. If it works, it will give me a way to coordinate the build system for any programming projects, regardless of language, and thereby allow me to not reinvent build systems for each language I want to create. Even if I end up not focusing on languages this year, it is the basis of my blog, which will serve as an accumulation of sysadmin information for me, so I would like to get it complete.

Low-Level Computing

This is the area of computing at which I’ve been least successful. I tried another attempt at making a portable arithmetic library for C, but the problem is truly massive. I’ve also tried my hand at another low-level VM implementation, but these really aren’t working out.

Although it didn’t lead to anything concrete, I do think I’ve learned a lot about hardware design this year. My weaknesses in this are are still coordinating hand-offs between different bits of computer running at different frequencies or controllers, and specifically input/output. I’ve gained a new appreciation for the number of considerations (thermal, air filtration, structural mounting) that go into a high-performance computer design.

I still want to build my own computer, but I think for now, I’m going to have to focus on becoming a decent sysadmin.

Making

Something that has been incredibly rewarding for me has been making physical objects. I made a ink sample holster, learned to sew, and have mostly built a keyboard. I am honestly surprised by how much fun it is to make something from scratch, but also just seeing the finished product afterwards. I think making is definitely something I want to be doing with my life.

I’d like to improve my sewing skills enough to make a bag system. I want to try 3D printing, especially for cases if I end up wanting to make portable computers. I do think it’d be nice to learn how to work in acrylic. At some point, I think I’d really like to get into precision metalworking. I definitely need the help of CAD if I’m going to pull off anything more complex than what I’ve already made. Honestly, there are so many media I could work in, I could go on all day, so I’ll stop here.

Burnout

This summer, I was depressed, my wok started slipping, which led to guilt, and into a spiral from there. Admittedly, I think the original problem was more dietary than anything, but it really goes to show that I need to start recognizing the symptoms earlier so I can make changes. It reminds me of hypoxia: if you let it go to far, you can get into a situation where you are no longer able to correct for the problem.

What got me reset was going on a vacation largely away from people and into nature. Even just for three days was enough to make a difference that was visible to everyone around me. Given what happened last year, I would like to be better prepared for using my vacation time in 12019. Here’s a shortlist:

Important Things

I regret not making the effort to hang out with my friends more. Yes, a few of us played D&D for a long time there, but that really didn’t feel the same, nevermind how few people were actually involved. I’d like to reach out more to friends like Will, Lindsey, and maybe even Juanita.

It’s still important to me to find models of computation that cover a wide range of computing architectures. I want to be able to integrate these so as to achieve portability, but also to achieve precise programmer control of the hardware. I’ve worked sporadically on many tools to help me create languages that can do this, but few have built on each other, or even could be built on. Academia itself is not as important to me just at the moment, but I think it’s probably the place where I can have a career that supports this interest.

I’m still very interested in being completely full stack: from the logic gate up. I know I’ll never be an expert at this, but if I could understand the basic kinds of software a modern system uses to compute the result of a keypress, or how searching a coalescing write-back buffer is kept fast enough on a miss, then I’ll be happy. At the same time, I’ll be better able to administer my system and advise those around me. The best possible outcome would be computational self-sufficiency.


  1. esp. considering I’m weeks behind my winter solstice due date. 

  2. At least, I’m trying to: I’m not really sure of the correct style, and clearly this post is too conversational. 

  3. Right now, I’m struggling with the amount of time it takes to import certain Python modules. Ordinarily, that’s not a problem, but in this case, O(n) Python instances are being spawned, and each spends a substantial fraction of a second to import its dependencies, leading to several seconds of overhead just to build a small static site from markdown.