X11 Must DIE

Unix, C, computing like it's 1980.

Month: February, 2014

minimalist design choice: pt 2


writing x programming, sans x

I have written previous about the horrors of feature creep, but there’s also another side to that coin.  What about totally valid, useful, and awesome requests?  Let’s assume you have a project that you’ve been working on for a good length of time.  It’s working, there’s no major issues, and you’ve released it into testing.  After some time, reviews from people start to come back to you.  Nobody has yelled at you for it exploding their computer, ruining everything good in the world, or even crashing with no apparent reason.  All in all, you’ve put this one down in the books as a success.

And then, it happens.  Someone comes in with a feature request.  “Hey man!  It’s great exactly like it is, but you know what would make it just that much better? <insert foobar request here>.”  The thing that makes this different than the previously discussed feature creep is that you agree with them.  You think about it, and unlike the normal user request which you’d normally respond to with “NO!  I hate you and everything about you and if you want that feature go install <similar program that does what they want already>!” they’re making a request for something that you actually think could be a good idea.  Now what?

Well, I can only speak for how I do it.  I’ll set a restriction on the project’s development.  “Sure,” I’ll say while smirking ironically at the mailing-list, bbs, irc, or whatever I’m seeing this request on…which is useless because the person on the other end can’t see the smirk, “I’ll do it, but it’s not going into the master branch unless I can meet <insanely low sloc count || extremely low resource limit || whatever your initial design consisted of>.”   Now you’ve challenged yourself to not only add something that you think is worth doing without breaking the existing functionality, but you’ve made sure that your original ideas are not being deviated from.  Making a program change is easy, but by setting these limits on yourself, you force your creative spirit to go to work so that you’re doing it in a simple and elegant manner.

While this may sound like corner-cutting, it’s actually the very opposite.  It’s like insisting that a heavy weight be lifted with only one arm.  It may not really matter that much to the end user, but it does improve your strength as a programmer/designer.  It’s been said that a smooth sea does not make a skillful sailor, but then there are those guys who do whitewater kayaking.  They pick the hard path because it’s hard.  By constantly challenging yourself to do more with less, you’re more readily able to make simple and clean changes that do what you want them to without having drastic side-effects.

I would go so far as to apply this to the user as well as the designers.  Those users who use command line over a graphical file manager are normally much more comfortable in different environments.  It’s harder to throw their “groove” off.  If someone asked how to best learn cli, I would be upfront about it:

“The fastest way to learn something new is to limit yourself to using only it.”

By not booting into your graphical environment, you’re far more likely to learn how to get along without it.  By not allowing yourself to go nuts, your programming will end up less complex.


The great disconnect


…better, but not yet perfect.

Over the past few weeks, in the midst of all of everything else going on, I’ve heard the same theme brought up a few different ways.  What it essentially comes down to is that many of us who spend a great deal of time working on, writing for, designing for, and heavily using unix-like systems don’t understand what the “average user” is doing with the computer.

I’ll admit that’s probably the case quite often.  I know that my particular usage differs even from some of the linux guys I work with.  One in particular is a KDE proponent.  We’ve had a few friendly conversations where he’ll discuss how everything I use is designed to be some “hipster/elitist/mouse-hating/unusable” setup, and in turn I’ll ask him how the translucent animating point-and-click menus actually help him get anything done.  Honestly, it’s all in good fun, and everything is said in jest.  We’ve both agreed that our workflows differ greatly, and that’s why we use what we use.

There are jokes around the office, because when someone comes across something that is very sparse on hardware, they’ll joke that I’ll be using that as my new desktop tomorrow.  Recently, having some fun with it, I took a router running an embedded OpenBSD, mounted the flash memory as writable, and created myself a user and some csh scripts on it.  I had it sitting on my desk with the hostname changed to “joe’s desktop.”


As you’d expect, when someone comes across a project that requires a very light operating system, I’m the guy they come to.  It blew my mind as one of my coworkers had an old server, and couldn’t boot it off of the CD-ROM because he only had 64-bit CDs that ran as live sessions, and was waiting for me to come in because I have a stack of them in my desk.  I did poke fun about all of the 64-bit software he would need to run off of a live CD, which is nothing.

I do realize, though, that I’m not the average user.  I am not looking for a newer shinier version of something that I already have if it works.  I’m far more concerned with the efficiency of the system while I’m using it than how comfortable it is for a stranger to use.  I have requirements, and they’re actually pretty demanding.  I want the things that I need to use to work until the hardware fails.  I don’t mind my test systems giving me issues, but I don’t want to boot up a system just to be told that I’ll need to reboot mid-project because Adobe Reader needs to update.  I don’t want to continuously reach for my mouse.  I want control.  I’m picky, sure.

I may not be the average user, and I’m okay with that.  I am disconnected from what is popular in technology.  I am also disconnected from people who take self photos while making a “duckface.”  I’m okay with this, and I have no plan to change what works for something that is modern and glittery.

It always comes in waves



New install…needs work.


There’s one thing I’ve come to understand since I’ve been programming, writing configs, etc.  The “Muse” behind creative work, especially in a group setting, has no regard for tempo.  There will be weeks of nothing at all happening, and then suddenly, everyone has great ideas and improvements to be made at once.  It’s always like this, and I’ve come to enjoy the process much like I enjoy snowboarding.  You can’t control the layout of the land, but you can steer yourself down the turns and twists, and hope that the landing will be smooth.

What I will say is that the difference is really made when it’s not just you doing all of the work.  Groups work when everyone helps with the load.  I’ve been in meetings where “teamwork” is stressed over and over, but the reality is seldom like that at all.  In a good project, and almost any FOSS project that I’d be willing to participate in, the load is determined by the capacities of those involved.  It’s very “natural selection” in how work evolves and grows, as good ideas are kept and others die off, but the fact is that I’ve seen more teamwork (real teamwork, not just a buzzword) in FOSS than I’ve ever seen in a corporation.

That’s not to say that all projects work like this.  They don’t.  Still, I’ve been really lucky to have work with people that I trust to make corrections to their own work, double-check mine, and do whatever they feel is best for the project as a whole.  This is very surprising in a way, because it’s not like any of us (well, none that I personally know) are making a profit off of this.  I assume that it’s because those who are drawn to such work do so because they truly enjoy it.

Still, I’m amazing when an alpha gets pushed up, and within hours someone has tested it and has detailed information about their experiences.  HOURS?  This normally means that from the moment that it hit, someone started working with it immediately.  I have often found myself hard-pressed to get such a response from an engineering firm, who’s job it is to do what guys are doing in their own homes for free.  I’m still in awe of how well it works when it works.  Other projects I’ve worked on turn into a couple of guys doing everything.

It should be a passion that drives us to push into new frontiers.  When that passion is there, and the muse strikes, expect to be overwhelmed with just how much can happen in a short time.  Should this be the case, you have to trust those people you are working with, because too much will happen for any one person to manage on their own.

Minimalist Computing Philosophy?


An IRC and BBS buddy named Tim (aka: ratcheer, aka: randomcharacter) brought up a subject on minimalist computing.  Everyone was quick to chime in about how the idea of what this means can vary greatly from person to person.

This got me thinking a bit about how I personally make decisions about my environment, because as I’ve previously stated, I do it because I find it highly efficient and not because I have a hardware-imposed need.

I can clearly think of a recent example of something that I did that outlines my thought process very well.  While I’m working on something, I like music.  I often switch back and forth between multiple computers, so having a bit of stability in my listening is nice.  I had previously been pulling and saving playlist urls from soma.fm and opening them with moc (music on console…great program, and very useful if you have tons of music to manage.)  A friend of mine put up a nice screenshot of using mpg123 playing a stream directly.  While I knew that you could do this, it was his shot that finally made it ‘click’ that I had created an abstraction that wasn’t necessary and was slower than it needed to be.

So, I sat down and took the 5 stations that I actually listen to regularly, wrote out a very crude bash script using case/switch that would take an argument and slapped some stream urls using this format as one-liners at each switch.  I made it simpler after getting the station number I wanted wrong a couple of times, so that when I ran the script, it would list each station’s name by a number, then read my selection, and start the stream.  Using a bit of inspiration from someone else, I had now managed to remove the need for a piece of software that was consistent across all of my installs, and the new method was a better fit for what I was using it for.  I’m sure that if you have multiple directories of stored music, or are using a network drive for music storage, that this would be different.  I personally, though, am not.  I had in a very short time taken something that I do regularly and made it a faster process.

Another example that’s very fresh on my mind is something that’s incredibly simple, and is actually an added abstraction that I consider totally worth it.  I use zsh.  In my config, I have a pretty elaborate set of aliases, but a few that come immediately to mind are:

alias gcm='git commit -m'
alias gpom='git push origin master'

While this isn’t exactly complicated, consider the fact that I pushed 32 commits earlier today.  Saving around 30 keystrokes per commit in the midst of everything else can make a huge difference over the course of a project.  There are some things that are simply worth the “bloat” to me, and my personal approach to workflow is determined by what I find to work for and with me.  If doing something in a more “minimal” fashion interferes with my groove, I won’t use it.  I’m all for trying the untried, but there needs to be some kind of goal in mind to weigh both the positives and negatives of the decisions made regarding your work environment.  I personally see “minimal computing” as a constant refinement of your regular environment for the sake of simplicity in design and use.

The most minimal computing environment is one that doesn’t exist at all.

*Special credit to Pidsley for inspiring the mpg123 script idea, and all of the guys at the linuxbbq for being a constant source of refinement and creativity.

Cool Script Share: mkmnt

Sorry for the sparse updates, but I’ve been busy with both work and projects, so let’s do this.

In the words of Julius Machinebacon: “Sick and tired of manually entering the sudo mkdir /mnt/lalala && sudo mount /dev/sda13 /mnt/lalala? Then try this one, it also creates a snippet that you can paste into your fstab file.”