Oh! I didn't see you there! Well... Re-Hello World!

This is my first post for what is admittedly my second "real" blogging experience. It has been about two years now since I have been posting regularly. Every time I say I will be more diligent, I don't quite follow through writing-wise. I have been working hard on the blog in the background though. This is the first sign and more is to come.

Out with the old, in with the new

The old blog had several outdated entries. Those were mostly entries about things I don't know and don't care whether they are true anymore. The remaining out of date posts were inane diversions or filler posts. You really don't need to see my babbling about Game of Thrones or my poorly formatted driver installation instructions. It was time to reduce the noise and up the signal. I want to be writing more long form piece here and have each count.

The outdated posts were removed and only a select few long posts were kept. This is a new blog that has been in the making for a couple of months now. It is powered by a new blog engine written from scratch (more on that later), so it deserves better content. The kept posts were all annotated with the following headline:

EDIT: Hello from the future! This post is part of the old blog. That means it may be deprecated. However, I deemed it valuable enough to keep around. The new blog starts here!

This allows for the image of the phoenix rising from its ashes to make any sense. If you don't see its previous life, you can't tell that it is rising again rather than simply being born. I won't edit these older posts much as they are representative milestones of the progress made.

Looking forward

I am not setting any goals yet. I want to use this space to write and tinker that is for sure. In the near future I will continue working on the infrastructure behind the blog. Then, some long form pieces will start to drop. I have been accumulating some experiences in the past years that I want to outline in written form.

Here is to honouring the past in order to better charge into the future!

EDIT: Hello from the future! This post is part of the old blog. That means it may be deprecated. However, I deemed it valuable enough to keep around. The new blog starts here!

Four years have gone by and the blog is in need of some love.

This is my yearly recap and forecap. I look at what I didn't do in the last year and what I will do in the next. It used to be very much about the blog. As time went by it has become a review of where I was and where I want to be.

Recap

The numbers for this year tell me that I should return to blogging a little more strongly.

  • 5 posts including this one.
  • 0 posts in French
  • 2 longer, essay-like posts

Last year's goals:

  • More or equivalent number of open-source contributions
  • Deepen current knowledge
  • Sustain writing efforts in English and French

More or equivalent number of open-source contributions According to GitHub I made 81 open-source contributions in the last year. By my count I contributed to 5 external projects and 4 of my own. It is not as much as many other well-known people, but I am satisfied with those numbers. I am pretty sure it's an improvement on last year - next year I will compare with this one.

I have been polishing my own projects and I have helped on the documentation for a couple projects. I even edited for myself 4 chapters of the Sublime Text Power User Book by Wes Bos.

Deepen current knowledge. I knew this goal was going to be hard to quantify. I do feel like I know more about Python and Nim than I did before. I learned how to write a lisp, a mustache parser and an Android application (coming soon!). This goal is lifelong, but I will put a double twist on it this year. That's because I wanted to read more code in the last year, but I didn't.

Sustain writing efforts in English and French. Um... yeah. Not so much, eh? Working on the blog and writing articles had positive side-effects in the past. Not having a more stringent goal to keep it up made me less rigorous than I wanted and I wasn't able to reap as much of those rewards this year. Je dois écrire plus d'articles en français par ailleurs!

Forecap

So I have work to do for the next year. I want to get significantly better, so I will have to step-up my game this year. Here are the goals:

  • Get a job
  • Read at least 2 programming-focused books and read the code of at least 2 projects
  • Make an improvement to the blog every two weeks
  • Complete 5 programming exercises per week
  • More open-source contributions

So the coming year will be about levelling-up. Some of these numbers might seem low but they are about persistence and reachability. I want to work at a sustainable pace. Keeping low numbers ensures that. Furthermore, small numbers are reachable. I am orienting my process toward constant small victories. This approach is part of that. More and more I will push to work on 'real' programming projects - whatever that means!

It has been a lacklustre year. Let's pick ourselves up and do something of our life!

EDIT: Hello from the future! This post is part of the old blog. That means it may be deprecated. However, I deemed it valuable enough to keep around. The new blog starts here!

I have rarely been more in tune with a book than I was with Zen and the Art of Motorcycle Maintenance by Robert M. Pirsig. Plot-wise it's a simple story: a dad and his son go on a motorcycle trip across the United-States. Content-wise it is a real treasure trove.

Now, this is one of those hugely popular books. The front cover of my edition says:

The provocative, profound, and deeply affecting modern classic that has inspired millions

The back adds another dollop:

One of the most important and influential books written in the past half-century [...] powerful, moving, and penetrating [...] breathtaking meditation [...] this uniquely exhilarating modern classic is both touching and transcendent, resonant with the myriad confusions of existence...

This is on the book covers, so imagine what is out there. Or don't and actually scour the internet for what people are saying! Obviously its praise is how I came to learn about it, but it also made me weary of the content. Is this another of those reality/fiction/meaning of life books that conceals self-help advice? I have read The Alchemist, The Fifth Mountain and Veronika Decides to Die already. Will this be more of the same? In brief, can it really survive the hype?

Well, the book is not what it is hyped up to be. By that I mean it is not really 'provocative', 'breathtaking' or 'exhilarating'. It is rather calmly introspective like blown wheat in a deserted plain. It is thought enriching in a way I do not think I have ever read in a book and about things that are so common to our daily lives.

Like I did previously, I will just highlight things I found interesting or things I want to make clear for myself in the present context -the book was published in the 70's. I will summarize the gumption traps section today. This is even more for me than my previous book palaver. No order, not much framing, just what I want to make clear in my head and be able to reference later. Let's start this Chautauqua.

Gumption Traps

A lot of things can get you down over the course of the day when solving problems and interacting with technology. Instead of a blanket I am too tired statement, a recognition of the reasons behind the mounting frustrations can help a lot in dealing with a world that seems increasingly technologically elusive and out of tune with us. This frustration is what Pirsig refers to as loss of gumption. Gumption is this eagerness in accomplishing things and harmony with the quality of the world. What bogs us down are gumption traps.

In this section of the book, Pirsig goes Aristotlean on us and starts building a tree of things. An illustration is good in this case.

Those traps can be split into two groups: external and internal traps. The external traps are those coming from the environment while internal traps are those mostly due to oneself.

External Traps

Again an illustration is good.

The out-of-sequence reassembly setback is when, after hours of work assembling something, you realize a key piece is missing that will require all that has been achieved to be redone. The example in the book relates to physical motorcycle maintenance but other contexts are equally as appropriate. This occurrs to me in research more often than I dare to admit. Oh, there is this paper that already covers some of that! Now I have to review everything...

To fend it off, two weapons are given: handbook and visual cues. Transcribe to a handbook the steps undertaken. This way you keep track of things and can reassemble them from a reliable source rather than from your unreliable head. I always do that when Maintaining my computer. Visual cues complement this approach. They are basically a more user-friendly handbook. Instead of collecting all the information in a single source you need to constantly switch to, you can embed it in the environment you use. Making your surroundings support your goal is quite satisfying.

Intermittent failures are a real bummer. They are the random problems of large systems. Sometimes my computer stops connecting to the local network. Then it reconnects after one or two or ten reboots. Are you testing a distributed deadlock detection algorithm? The joy of debugging! These are among the worst problems and there are two things you can do about them: wait (sometimes it will resolve itself) or take note and correlate events. Maybe an explanation can be reached over time - don't rush into it.

The final problem is definitely more on the physical side and that is the problem of bad or broken parts. Ideally to get over it, one builds a relationship with a part expert that can help out, or one looks out for price cuts and deals or finally one builds his or her own parts. It's the difference between contacting a resourceful person, checking out the alternatives or building the defective or missing entity oneself. When I am getting frustrated with a piece of software this is what I tend to do: look for help from knowledgeable sources, look for alternatives or consider doing it myself.

Internal Hang-ups

Internal hang-ups are all about your state of mind. These are the truly important ones to my mind (!). Getting a grip on those will boost your morale significantly. The picture:

Value Traps

Value traps are the most prevalent and dangerous. Watch out! They are worth another diagram.

It is eerie how prescient of the problems of our times these hang-ups from the seventies are. People don't change that much over time.

Value rigidity, I must admit, has been a curse to me. Valude rigidity is when you ascribe a value to the world before the world brings you this value. It is having set perceptions or principles or mindsets and not derogating from them in the face of their inappropriateness. I know why this defective behaviour is happening, so I will solve it this way. It still doesn't work, well maybe I haven't tried enough, or the problem is in the feedback mechanism... Never does the notion that our own values might be the issue come to us. Reassess and slow down. Let the world bring you the real underlying value. Just stare at the facts (or feelings) and let them nibble you in the directions you need.

Ego is often at the source of value rigidity but can be a problem on its own. The ego hang-up is when one starts to build an artificial persona and finds himself defending it beyond measure. It is a process of isolation from the world that gradually renders one belligerent with facts and other people. Be humble and open.

Don't go to the other side of the pendulum and fall into anxiety. Anxiety is sometimes my bête noire: it is the fear that you will do everything wrong and so you don't start anything. This is the part that is associated with impostor syndrome. Even worse is that the unnecessary fuss and nervousness embeds itself into what you are doing in the form of errors that further fuel the anxiety. This self-destructive spiral makes anxiety one of the most dangerous hang-ups.

To overcome this debilitating state of mind there are two things: list what you will do (again) and come to terms with making mistakes. Putting your anxiety to use in listing the things you want to do or cover is a good venting opportunity that doubles as a way to concretize nebulous fears. Also know that you will make mistakes and so you might be better off by going straight ahead rather than zigzaging around your fears. Try to do what you can and consider the mistakes as opportunities to learn and to readjust your values (see value rigidity).

The next gumption trap is boredom: you are bored and so you make mistakes. What is more interesting in this section is Pirsig's remark on the split between production welders and maintenance welders. Maintenance welders find working on the same problems boring while production welders are satisfied with it. You find this split everywhere you look in technology: project maintainer versus original author, serial entrepreneur versus long-term CEO... It is not that one is lamer than the other, but rather that prima facie boringness often times hides deeper problems that might be quite interesting if not immediately solvable. Simple contemplation of these kinds of problems may be very rewarding. Be Zen.

Finally impatience is the state of mind where your expectations are not matching the reality. Frustration at oneself and others often follows. Know that estimating things is HARD. Even if you have done it before because you have never done it after having done it the present number of times you've done it! Reduce your expectations and give yourself indefinite amount of time. This is difficult in practice but one has to try to reach that state of mind.

Truth Traps

There is only one discussed here and it is the binary truth trap. We would often like for every statement to be false or true. But ascribing this dichotomy on the world is rarely appropriate: the statements we make are too refined for that. Maybe or I don't know (or even can't know) is often the better answer. Learn to unask the question via the Zen mu expansion (see GEB for more on that). It is surprising the cognitive load this saves over the course of a day. It is also disturbing...

Psychomotor Traps

We finish with psychomotor traps -traps that block immediate mental initiation of physical movements. Those are the things that block our physical interaction with the world. Illustration please!

Insensitivity is a lack of level-appropriate feeling for what you are manipulating. This screw won't... just... come... off! <and a whole piece of plastic rips apart with it>. Understanding the chracteristics of the material used (and the reasons such characteristics are used) helps avoid these issues. Adapt to the environment a hand.

Speaking of environment at hand, the last two traps are bad environment and bad tools. If you want to do stuff and be content doing them, it pays off to have a clean, supporting environment with good tools. It may seem like a luxury but it pays off in productivity. Get to know your tools, but really get to adapt them to your usage. You will gradually reap benefits from it. This is a no-brainer and brings us back to external traps (I personally see these more as external traps myself)!

Conclusion

Thanks for sticking around so long! That rounds out some of the problems that might be getting you down as you interact with the world. The tree division of these issues is especially examplary of what I got from the book: a breaking tool to separate ideas into smaller ones. It is neat to see it used to such effectiveness.

I might cover other things at other times!

EDIT: Hello from the future! This post is part of the old blog. That means it may be deprecated. However, I deemed it valuable enough to keep around. The new blog starts here!

Free time is just terrible.

All this resource is available to you and you just don't know what to do with it. Or rather, you know too many what's to do with it. Or worse you know too many what's to do with it and you just can't be bothered by the do part. You can't be bothered because any one of them seems like it would require a mountain of effort or, and this is the zinger, because you are not even sure if the do part is the right action.

Free Time

Let's go through this step by step. Free time? I mean by that time outside of 'work' equivalent activities and outside of the basic levels of Maslow's pyramid of needs. When I was taking classes, I really didn't have much free time (it is important to stress that I still had some though, so if you are in school this could still apply to you!). The studying, the homeworks, the meetings simply eclipsed any real existence outside of school. It wasn't: go to the university and then leave the university. It was: you are a student. Once I stopped taking classes, all of a sudden I had all this free time! I could stop worrying about school once I got back home and partake in something else. Also know that one makes his or her own free time; you decide how you allocate your attention across the different things in your life. Once you work, you can even pay to get some of that time back: more efficient technology, gym at work, tv dinners, sleep less, don't wash... (ok maybe not the last few!).

Seize the day... or night

Ok, you got some free time and you are interested in programming let's say. I mean carpe diem! Time is money! Time is fleeting!

Everybody seems to be telling you to use that time to learn a new language, a new paradigm, work on your own projects and so on. The typical (and getting old) problem then is "But I don't know where to start!". It is such a known issue that the wording on many coding projects reads "Getting Started", "First steps"... The real question is where to start in the face of all these alternatives, each of which has their own "Getting Started" page. The most popular answer seems to be to find a problem you are interested in and go after it.

Yeah. Maybe.

This is where it grinds down. The problems I am interested in are most of the time quite above me or 'solved': an aesthetically pleasing window manager that integrates with Ubuntu Unity, a human and practical terminal text editor, a more intuitive git interfacer, a command-line podcast to iPod program... Finding the problems turns out to be easy. Great! It's the going after them that is hard though. Ah...

Problems

Most of these problems already have potential solutions but they never quite hit the right spot for me. They come close, but then fail the mark at the last instant sometimes. Yet I am experienced enough to know that for them to even get to that point is an incredible amount of work.

Scaling down to lesser problems, leads to categories of problems I oftentimes find uninteresting. I just never understood the appeal of the Euler problems for instance. Programming is a medium through which one can achieve human relevant things. Why bother go down that path if in the end your solutions will never be as good as the existing ones or if the time needed to achieve the desired level of mastery is not worth it in the grand picture of things?

If you shrink down your illusions of grandeur even more, the problems can become trivial.

So you are left with: it's too hard or it's too easy or maybe it is appropriate but you somehow feel the stigma of not doing it right or as well as others that have produced solutions to the problem. This is rock bottom, you have hit the stasis of free time. You have this free time but you feel like you won't be getting any return on your investment no matter how you allocate it.

It's time to step back.

Stepping back

Thinking hard about this and reading about related topics these past few weeks has led me to this realization. Step back. Take a deep breath. Why is this causing you so much anxiety? Why are you struggling to enjoy your free time? It is the external pressure. When others tell you to seize the day and you try to seize it for their sake, you start imposing external judgement on your actions.

Be a more dextrous typer, run your tests faster, never touch your mouse, test first, don't test first, just ship it, do it this way, that way... Noise.

This is your free time. You are not a lean company or an ultimate min/maxer (you can be if this is what you want!) All of this rhetoric above is to get more free time, no? This economic efficiency mindset may make sense in a work environment, but if you start applying it to your free time your life starts to look like work.

Use your free time as you wish. Do the projects you want, the way you want and forget about the rest. This is really nothing new. It's just the kind of thing that bears repeating once in a while. Just step back and find a way to enjoy your free time.

Maybe it is valuable to do nothing in the end. Just let your brain take a breather. Truly relax. Sleep.

Take your time.

EDIT: Hello from the future! This post is part of the old blog. That means it may be deprecated. However, I deemed it valuable enough to keep around. The new blog starts here!

What? Three years have gone by and the blog is still standing?

This is my yearly recap and forecap. I look at what I did in the past year and what I hope to be doing in the next. It used to be very much about the blog, but as time goes by it has become more general.

Recap

To the numbers!

  • 12 posts including this one.
  • 2 posts in French
  • 4 longer, essay-like posts

Last year's goals (of sorts):

  • Converge all my programming work to at most 3 languages: Python, Nimrod and something else
  • Write even more (quantitatively) essay-like posts
  • Write post not just as filler but as thoughtful endeavours
  • Select 1 or 2 side projects and stick to them all year/until completion

Converge programming efforts to at most 3 languages I really only focused on Python and Nimrod this year. All of my day to day research has been done in Python. What I noticed was that unless I seeked out external examples or decided to consciously investigate a language feature, I could easily cruise by and simply stagnate. Although I learned some things by osmosis, it seems like a more involved approach works better for me. This is how I learned about Python decorators and object-oriented design in Python (which is completely different from learning object-oriented features of Python). As for Nimrod, it has been my spare time language of choice and I count on working with it more and more. It is a better C in my mind. I didn't have time for a third language, but I do want to expand my horizons to different paradigms.

Write more essay-like posts + Write post not just as filler but as thoughtful endeavours. So the ratio of lengthy posts to short posts has improved from 1:5 to 1:3. Quantitatively, I wrote as many essay posts this year as last year. I have only been writing less! This was also the intention, so I am satisfied with this. In particular, my documentation post expressed a lot of things that were on my mind. I am also quite happy with wrapping up 'On Liberty' (see here and there). I have been writing for another outlet (but on completely different topics) so the frequency of posts have dropped. Focus is better and I will continue on a similar path. Je veux continuer à produire des articles en français par contre donc je vais devoir être plus assidu sur ce plan.

Select 1 or 2 side projects and stick to them. As I mentioned, Nimrod has been my side-language of choice this year; I primarily worked on two projects: commandeer and threedacto. I am 'a-ok' proud of my work on commandeer. It's a small domain specific language to define the expected command-line arguments and switches of a program and exit upon unsatisfactory arguments. There is still some things I want to add to the project, but it is inching closer to the kind of library I wish I had. Threedacto is just an exploration of Nimrod for a more meaty project and a way for me to learn game programming (I highly recommend Game Programming Patterns by the way!)

I have also continued making open-source contributions. I want to continually improve and this is a good way to do so. I might however try to spend some more time just reading code.

Forecap

Yes I made up that word - boom!

Forecap. noun Defn. A summary of things to come, a future recap.

The goals for the next year are the following:

  • More or equivalent number of open-source contributions
  • Deepen current knowledge
  • Sustain writing efforts in English and French

So the coming year will be more about endurance. I want to simply keep on fighting the good fight (despite upcoming changes in my routine). I also want to continue progressing more and more through real programming projects.

It has been a solid if bare-bone year. Let's just stay calm and carry on!