Category Archives: Blog

New series

I’ve started a new weekly series of blog posts called Zen. I’ve spent a lifetime focusing on my work, but never really put other aspects of my life under a magnifying glass before. Hopefully I can change that, and maybe help a person or two.

I’m toying with the idea of making a video/week that showcases my work. I haven’t made the commitment yet, but here’s my first shot, and a glimpse of what that might look like.

New format coming soon

It takes too much time to keep up with long form post format I’ve maintained over the years. It’s also really boring.


Ok. Things I’m working on:

  1. New site (maybe)
  2. New posts (maybe)
  3. Atomic
  4. Probably 100 other things

Going to update in more detail with another post here shortly.

Switching Back to Evernote

I considered DokuWiki these past few weeks. However after transcribing each of my notes to DW, it was apparent how slow this would be to work with on a regular basis. The biggest pain point was not being able to easily clip articles anymore. Also, hosting a local webserver for it takes up a lot of memory and battery life

If you’re concerned with security, organization, or platform-specific issues on Evernote and considering switching to a wiki, you may want to reconsider it; using a personal web-based Wiki for anything feels disruptive.

I now have all my notes back into Evernote and used a new Stack/Notebook/Note structure to handle Evernote’s arbitrary hierarchical limitations. I keep all of my interests, dev, platform, and projects neatly in their own stacks. Nearly every child notebook has an index, general reference and TODO list. It’s a workflow that I developed in the process of moving everything back and forth.

Ultimately, refactoring all my notes helped me prune old data and refine my ideas and personal projects.

Updates all across the board

  1. The response to Atomic is amazing. I am nervous to send my first update to all the people who have signed up. Some of you left very wonderful notes and I starred each of those in gmail of these as a reminder of why I am doing this project. Thank you.I would like to announce that the software is stable and running on Windows, Linux, and even Mac! So I will be releasing a Mac version as well, which you may prefer over the existing Jive client.My absolute highest priority with Atomic is reliability: no crashes, no loss of tasks, no annoying bugs, bullet-proof business logic. Secondly is feature set. Unsurprisingly, visuals come in last place for the pre-release and it looks hideous right now. I’m waiting to finish both the auto-update and some of the skinning before I announce a pre-release version to the wonderful people who signed up already.This will be a free product, but if you are interested in accelerating development I would graciously accept donations (Verified PayPal: And just like any crowdfunded project there are rewards: over $1 gets a credit in the about section on the site and app, anything over $10 gets a link to your site, and $250 gets your organization a special sponsorship link with logo and all. You can contact me for details. If I can offset just $8,000 of dev costs in donations I will even open the Github repository and make this Task Manager a fully Open Source project!
  2. I’m about to reorganize the site to make it more obvious which projects are in development and which were released.
  3. I have a copy of Christian Grobmeier’s book now, the Zen Programmer (a big congrats and thank you to the author!), so I plan on taking a deeper look on the philosophy behind his original blog post. I’ve skimmed through it briefly and the effort and polished editing is very obvious. His book is based on the post I previously responded to the other day.

This next point cannot fit in a list item but I am running into relentless dependency issues on my open source Flight Simulator project. Such a time sink. I have spent so much time writing build scripts and refactoring chunks of C++ code in order to make flexible cross-platform builds. And guess what—these builds don’t even work on Windows or Mac! They actually never did, but I didn’t notice because I was only working in Linux at the time.

Just to give you the scale of the project, it took me more time to write out a long post on the Cubespheres than it did to actually implement them in Irrlicht. But it took over 26 times the number of commits, plus more hours to learn the intricacies of various graphical engines, write dynamic build scripts to accommodate and statically link them (using premake) just to find that gcc would fail to compile them on different machines. This undermines the whole point of what I was trying to do. So I’m not including external libs in my FOSS projects anymore, with the exception of External Vessel Dynamics Simulator (EVDS) as this is integral for the physics simulations and has never given me any problems on any build.

The former problems are probably related to the large number of dependencies and platform-dependent code from statically linking everything, so given the new direction I will likely I will switch back to OGRE since it has better shader and other baked-in features that I would have to arduously recreate in Irrlicht.


I took a look at Open Morrowind years ago and it seems like the project has come a quite a far way. If you’re a big fan of The Elder Scrolls 3: Morrowind, this is pretty neat: a group of coders recreated the entire game engine. Their goal is to make it work on Windows, Mac and Linux, and to make it better looking than the original. If you still have your Morrowind data files you might want to check it out.

The big change since I last looked at it, though? They changed from D to C++. All the dependencies (listed on the FAQ page) are also platform-independent and are very tolerant to unusual and low-end hardware. I would love to see if this compiles and runs well for the Beagleboard or Raspberry Pi. Maybe something even smaller, like my Nokia N900 phone which runs Maemo (a full Linux-based operating system.)

Re: The 10 rules of a Zen programmer

My response is to the original post found here: The 10 rules of a Zen programmer.

Some preface. I’m a big fan of reading. On  slow days I can get through around 250 news articles, scientific journals, white papers and blog posts. Some of them deal with space, AI, technology, and algorithms, surrealist fantasy or humor, or pieces about lifestyle and workflow. I’m very careful to first cultivate articles that grab my interests. Today for instance, I read about positive results in the quantum superposition of very large particles that are subjected to the dual-slit experiment. I also read an extremely down-to-earth article that solidified what I knew about Fourier transforms. I try to keep the signal-to-noise ratio as high as I can. But even so, a lot of signal eventually turns to noise, and I get particularly excited when my jaded eyes come across one piece that sticks out above the rest.

I am not going to comment on each rule the author Christian Grobmeier touches on, who already does a great job expressing in the article. You should read his article first. Just like the title suggests it is tailored loosely towards programming and Zen Buddhism (of which Grobmeier practices,) however the author does not mandate or imply you have to be a programmer or spiritual for these rules to apply to your life. I would recommend the reading regardless of your beliefs, occupation or skill set.

Just as a disclaimer: I know next to nothing about Zen outside of what was mentioned in this article, so forgive me if I make improper assertions. I am also using bullets because these points do not actually correlate with the enumerated rules that Grobmeier lists in the article; I am just collecting and commenting on themes I have noticed throughout. Here goes:

  • If it’s worth doing, it’s worth doing right. Christian didn’t use these words, but he expounds upon this dad-like maxim with several additional concepts. Firstly, he explains that if your job detracts from your life—and that is to say if you have a job that you dread and gives you no opportunity to grow, and you are also one of privilege that can find a new job that has more positive qualities—you may just want to consider finding a new job. At the same time, when you are tasked with something you hate, try not make a scene over it. “[Zen monks] have stuff to do like cleaning the toilets. Or working in the garden. Or as a Tenzo, they cook.” The key part is in the next sentence: “They do it with all the care they can get. Whatever they do, they do it without suffering and they are (or should be) happy, because every second, even the second where they are cleaning toilets, is a second of their life.” Even the simplest of jobs done with great care. That is a great theme.
  • Focus, intent. If you need to work, work. If you need to sleep, sleep. Both are important, and you should never mix the two. Don’t work 12 hours and then go back to work 6 hours later on little sleep. If you are falling asleep at your job you might want to go home and rest. When you are working, though: focus. Working for you may entail constant interruptions from phones, chat messages, notifications. This is not focus. Focus with a deep passion like it’s your first day of your new job. Focus on one task as if what you are doing is your magnum opus. Focus like what you’re doing is more important than checking your Instagram feed.
  • Death of the ego. This is a common theme in some theological and meditative practices. By meditating you increase your awareness of the direct interconnectedness of everything. You become more empathetic, and less selfish. This isn’t just some new-age trend. Meditation is healthy for you. We’re finding it might even make you less of an asshole. Western culture can be very competitive rather than collaborative, so maybe try to work meditation into your routine. Fierce competition in society is very poignant and evocative of some of the culture today. It is important to note that peaceful cooperation usually tends to lead to a higher rate of success and lower stress all around. (Aside: I know I have another article supporting this but cannot find it at the moment, sorry.)
  • Awareness. Every word you say and action you take has a consequence. Someone who is especially aware can carefully craft their work in a way that is artful and strikingly beautiful. Act on this awareness by doing everything with care, as I mentioned earlier.
  • Flow. Situations change. People lose their jobs, people are born, people die. You are not excluded. Accept it as part of the flow, and be less concerned and caught up about the transient. Especially things that you cannot control. This does not mean “do not mourn” or “do not be sad”, but be more accepting of the highs and lows (and the possibilities of future highs and lows) of day-to-day, year-to-year life.

One last point that I’ve extrapolated from this article: be aware of the beauty and sacredness around you. Grobmeier expresses this in a charming way, first briefly flirting with Nihilism and then bringing you right back to the serenity of Zen:

“You live alone and you’ll die alone. World goes on, even without you.”

“A flower is beauty. But it’s just a beauty (sic) flower – nothing more. There is nothing special around it. You are a human who can program. Maybe you are good. There is nothing special around you. You are of the same kind as I am or all the others on this planet.”

“After (hopefully) a long time you will die and everything you have created will be lost. Even pyramids get lost, after a long time. Do you know the names of the people who build up a pyramid? And if you do, is it important that you know? It’s not. Pyramids are there, or not. Nothing special.”

“Don’t be too sad when the winter comes and don’t be too happy when spring comes back. It is just a flow.”

The exact opposite of the rat race. The antithesis of leaving a legacy, of being the top person in your field or being famous. Grobmeier accepts the flow, the inevitability of life and death. But Grobmeier is ok with it. That sounds pretty Zen.

Edit: Moments after posting this I found several other comments debating the use of the word Zen and some of the concepts discussed within the article. So take this post as a derivative of the original and understand that I am not interested in arguing the semantics. As with anything your encounter take it all with a grain of salt.

Also, drastically and absolutely adhering to any life philosophy comes with its own set of exceptions and caveats (no one actually does that, do they?)  So I found the original article both positive and inspiring and that is why I wanted to share it—even if others will continue to debate the accuracy of details on the internet it does not discredit the original work at all, in my mind. Cull the good from it. Cheers.

QuadSphere Post Correction

I would like to make a correction. In my post about the Quadrilateralized Spherical Cube, the method I described is a cube-mapped spheroid, and has nothing to do with QLSC. I had not yet implemented the projection methods described by Dr. Ken Chan et al.

QLSC is an equal-area projection algorithm where one can, just as an example, choose a point on the cube mesh and get the geodetic coordinates. My scheme of mapping a texture to a cube was called a quadsphere, and the texturing method is referred to as cube mapping.

More information can be found in this StackExchange post.

Sneak Peek at This Month’s Engineering Project

This is a project I’m working on that will control a 300V, 9A, 3-phase (AC) hand-wrapped motor:

I started this out of necessity since it can be a cheap interim replacement for a car. I’m estimating that the nearly 4 horsepower motor should reach speeds of 30 mph when climbing the hilly area I live in.

Wiring schematics and video demonstrations to come.

As soon as the interface is complete I will be headed out to the scrap yards to see if there are any permanent magnets and wrapping wire I can salvage. While I’m down there I will be trying to find something for the Jet Engine project as well.

Maintaining a Personal or Project Journal in Linux

Linux Journal

Lately I spend most of my time in a Linux terminal. One of Linux’s strong points is that you will always have a way of writing at hand no matter what. Just open up a terminal and type “vim” (or your own editor of choice) and you can type anything, save it and quit. The text you save can be a script, some code, a to-do list, a phone order for Chinese food–whatever you decide.

Late last year I decided to store a day-to-day account of what’s going on in my life and how I feel. It’s given me a lot of insight already and it’s a great way to remember when stuff happened. I originally started this in Google docs, however after a certain length Google docs can become extremely slow. Hell, Google docs is slow all the time. I realized that splitting the files up would be necessary. I wasn’t ready to do that with Google docs because it would make them impossible to search and sort through. I opened up a terminal and made a series of nested folders.

I started with a journal folder in my home directory. Then I added 4-digit year, then 2-digit month. Days were then simple text files stored under each month folder. It looks like this:


Note that nothing would really stop you from putting these text files all in a single folder or grouping them all by year, etc. It’s up to you to organize them how you like. I recommend that you keep the date format, though (YYYY-MM-DD) because alphabetical sorting of the files would then be the same as chronological sorting.

The flexibility of this system means that you can create a new entry just by opening up a text editor to the day:

vim ~/journal/2013/04/25

You just write what you need in there and save.

Some Tricks

You can do this for more than just a personal journal. You can use it to chronicle a project you’re working on, keeping a dieting journal, or using it as an hour tracking or work log.

Want to read all of your entries from a particular month?

cat ~/journal/2013/04/* | less

My advice is to use short, succinct sentences, and limit to one sentence per line. Use your words to describe a situation, your feelings, your progress, and your hopes. Don’t limit yourself and be honest because this is for you. Using this brief method will help you describe something quick and easily without turning something into a piece of prose. It will also make it more searchable using grep.

Keep writing quickly for as long as you want, and in the order that it comes to you. You may also group segments of thoughts by inserting an extra new line between paragraphs.


I spent $56 on groceries today
It made me go over budget
Upsetting, but hopefully I have enough of a buffer to make it work

This project at work is carrying on way too long
The reason why is because the project manager missed a detail in the quote
I’m usually the one who gets blamed for it
Not today

While keeping track of details like this is good, a better example would involve a little more depth, introspection, and feeling. Something beyond what you would share on a blog. You will be amazed at how many things you lose track of on a daily basis.

Here’s an added bonus. I wrote a Python script that will compile all your journal entries from every year, month, and day into a single HTML file. It assumes you’re using the same folder and file structure that I do (~/journal/YYYY/MM/DD). Just drop it into your journal directory and run it to create a fully searchable, no-frills HTML file. Load it up in Lynx to search or scan through your entries by typing:

lynx index.html

Also note that it has FTP support in case this is being used to generate project logs. It’s commented out by default, but I use it to keep track of the VTL flight computer software that I’m working on. I even created a simple cron job that compiles and uploads my progress every night.

Here’s the script: