Developers and FOSS

With the exceptions that I have noted in previous posts, I
endeavor to use only software that is free as in freedom. Even in
the course of my day job as a web developer, I use an entirely
FOSS software stack for development. When it comes time to test
what I have written, I break out non-free web browsers, but only
to ensure that the end users don’t suffer. While this assuredly
enables the continued propagation of non-free software, it is a
decision that is made by my employer and thus out of my control.

The office in which I work is an “open floor plan” – such a layout
has many advantages. In my opinion, the greatest advantage is the
ability to very easily collaborate with my fellow developers. This
collaboration is also the cause of almost all of my workplace
consternation; Invariably, when I start “talking shop” with one of
my fellow developers, or having them look at some code on my
machine, the questions about my web browser choice, editor choice,
and choices of other programs start. The editor question is
generally the easiest to field, but as soon as I mention why I use
Icecat as my primary browser, my fellow developers’ brains turn
off and their mocking ensues. I am not trying to show that I am a
victim here. I am just astounded that people who make their living
coding cannot see the value of free software. One of my co-workers
in particular seems oblivious to the fact that the code he works
with everyday in only possible because the authors of the
underlaying libraries saw the value in free software and released
their libraries as such.

It is the developers who have the skill-set to appreciate the
technical merits of free software. A developer can look at the
code and recognize the beauty of the collective thought that went
into the codebase. A developer can look at the code and recognize
ugly parts and make those parts beautiful. A developer has the
power to ensure that the code he creates in free as in freedom and
respects the rights of his users and his fellow developers. And
yet, it is developers who hold back the growth of free
software. We do this by agreeing to make non-free software (this
is something that I have done, and continue to do in my day
job). We do this by using free software and not helping to fix
bugs that we find in it. We do this by questioning other’s use of
free software. We do this by allowing ourselves to use non-free
software and implicitly give our consent for the continued
development of non-free software.

In an effort to make sure that I am no longer a developer who is
holding back the growth of free software, I have resolved to help
fix bugs that I find in the free software that I use. To that end,
I have become a contributor the Icecat[0] and LibreJS[1] projects. I
have also resolved to make sure that I do not question others’ choices
of which free software programs they use; I will make sure that I only
question their use of non-free software and take steps to ensure that
the resulting conversation is a positive learning experience for
them. I have also resolved to be even more harsh in removing the use
of non-free software from my use. The other step that I have resolved
to take is to actively work to make as much of the code that I produce
for my day job free software and work in enact a philosophical change
in my team’s view of free software. Without a doubt, this last
resolution will be the hardest.

I ask other developers to critically examine the software that
they use and create, and resolve to work for the growth of free
software instead of against it.


Owning Devices

Own (adjective) – Belonging to oneself or itself – usually used
following a possessive case or possessive adjective “cooked my own

The definition of “own” above is the crux of my rant here. I own
very few electronics; a laptop, a wristwatch, a coffeepot. I am
owned by many many electronics; a cellphone, a car, a tv, a
thermostat, a dishwasher, a washing machine, a clothes dryer – the
list goes on.

I feel that meager list of three items not because I purchased
them, but solely because I have the knowledge and ability to
change any aspect of those devices that I desire.

I didn’t like the operating system that came with my laptop, so I
installed my own (linux). I didn’t like kernel that came with the
linux distro that I chose, so I built and installed my own. I
didn’t like the default theme for my window manager, so I made my
own. My laptop is completely customized to be exactly how I want
it. Let me say that another way – my laptop is completely under my
absolute control. I don’t have to have a corporation tell me that
I am allowed to install a particular program (ie the Mac App
store), I am not limited to only programs that use a particular
graphics library (Cocoa, QT, whatever Windows uses), etc. This
complete control and customization makes me more productive than
any other singular thing.

With my cellphone, I can change the ROM and change which app
responds to a particular intent. I can also change the system
kernel and boot image, but I cannot change the bootloader, the
radio firmware (also called the baseband) or swap out hardware
components that would allow me these *freedoms*.

Don’t let yourself be owned by your devices. You must work at
owning them – be it by studying the devices and the related
internals or by “voting with your dollars” and purchasing freedom
respecting hardware.

The Evolution of My Dev Setup

As with everybody, my development setup has gone through many
changes over the years and will inevitabley continue to change.

The Beginning
My first computer that was mine and mine alone was a IBM Thinkpad
Type-2647 from my grandfather. It had Windows XP when I got it,
but I remember that it just crawled along. This is when GNU/Linux
entered my life. I was pointed to Damn Small Linux as a way to
improve the performance, and instantly fell in love. Somewhere
around middle school I found Ubuntu and used that distro until
college (More on that later).

This laptop still powers some stuff around my house this very day,
and served as my daily driver all through middle school and high
school. This is when I started programming on a computer instead
of on my graphing calculator. I took some C++ classes at the local
university and fell in love with the ordered, rational way of
thinking through problems. I also started using Vim around this
time. I was unaware that other text editors than vi and Vim

The Dark Ages
In college, just like everybody else, I experimented. I got a
MacBook Pro as a high school graduation gift, and spent all of
college dual-booting Mac OS X and Ubuntu. In retrospect, I refer
to these years as “The Dark Ages” because I guzzled the Apple
kool-aid. I was the biggest Mac fanboy in my circle of friends. I
wrote AppleScripts for fun (One randomized my MAC Address so that
I didn’t keep getting kicked off of the university’s network for
excessive use) and expounded the virtues of XQuartz on every
street corner. During this time, my programming projects were
still in C/C++, MatLab, Maple, and Mathematica. I lived in IDE’s
and hated being in a terminal.
I was also still a Vim person during this time, although I used a
GUI version of Vim.

The Early Professional Years
Right after college, I got a job doing iOS development. Still
drunk on the Apple Kool-aid, I dove in head first. I now spent 16
hours a day in Xcode and forgot about Vim. I got an iPhone and an
iPad, and thought that my technical life was complete – all of my
devices synced together, I had a continuous user experience across
multiple devices – life was good. At the tail end of this period,
I started using GNU/Linux exclusively at home. I started with
Ubuntu (as most do) and then moved to Fedora. It was at this point
that I discovered the Free Software Foundation and their
mission. I started to see cracks in what I thought was a perfect
technological existence. I found Emacs, and never looked
back. Then I found other GNU/Linux distros that were more “freedom

The Modern Day
I started using gNewSense because of its philosophy. I had many
many pain points, but I kept using gNewSense because I wanted to
use only FOSS software. At some point the pain points were too
numerous, and I switched back to Fedora. I spent 18 months trying
various distros for 1-2 months at a time until I found something
that I liked. I tried Ubuntu, Fedora, Arch, gNewSense (again),
Parabola, and finally landed at Trisquel. Now here was a distro
for me; an active community, a philosophy that I agreed with, and
reliable/stable software that I could use for my day job (doing
web development). I used Trisquel exclusively, both at home and at
work, for ~8 months. Then again, I started to see the cracks in my
world. The community was becoming more and more poisonous –
countless email/forum threads of trolling and personal attacks. I
had technological needs that couldn’t be met by a 32bit system. I
distro-hopped once more to Arch.

Today’s Arch Setup
Today, I am using Arch Linux on my home and work machines. While I
am uneasy with using the “straight” Linux kernel due to it
containing non-free parts, I have yet to spend the time to switch
to using a libre kernel. I still make sure that I am using and
installing free-as-in-freedom software. I refer to my system as “a
free system, built upon a _mostly_ free base.” While this isn’t a
perfect solution, this setup works for me and allows me to get my
work done with minimal interference. I live inside of Emacs all
day at work; I use it for editing, irc, jabber, email, and as a
terminal emulator. I couldn’t be happier – however, I am sure that
someday I will see some cracks once more, and hop away to some
other distro and its promised wonderland.

An Update on ‘A Day Using Only FOSS’

I am writing this post a little under a month after
writing “A Day Using Only FOSS”[0].

This month has seen some substantial changes in how I use the
technology around me. For starters, I sold my Apple MacBookPro
that I was using as my daily driver for development at my day
job. I am now using the same Trisquel box for both day job
development and side project development. This has resulted in me
(seemingly) being more productive in both kinds of projects. I
attribute this productivity increase to not having to think about
where a particular config file is, and not having to recall how to
do things in different applications. I still beholden to running
Windows in a VM in order to do cross-browser testing, but I see no
entirely FOSS way around that.

I have also stopped using my Apple iPhone4 and started using a
Samsung Galaxy S3 with the AOKP Rom. Using this phone and the
F-Droid store (along with the Google Play Store) to ensure that I
am only installing and using Free as in Freedom apps is quite
nice. There is still non-free software running on this phone
however. Namely the radio firmware stack and other bits of
firmware. I looked into the Replicant Project[1], but the S3 is not an
officially supported device and I haven’t had the time to muck about
with it.

I still am using the non-free software in my car and in my other
household appliances, but those are harder to just switch out than
an operating system. All in all, I think that I have made
significant strides in moving my technology away from non-free
software. The next step is definitely getting an entirely free
cellphone up and running as I use that device many times each
day. Look for that post in the future.


Ann Arbor Give Camp 2012

Last weekend I had the privilege of volunteering, along with about
60 other people, at Ann Arbor Give Camp[0]. Essentially, a Give Camp
is a weekend hackathon where non-profits with a technical need
(website, analytics tool, donation tracking, etc.) that they do not
have the budget for, get volunteer developers to fill that need with
some awesomely cool project. The project that I worked on was updating
the design of the website and implementing a membership directory for
a contractors association.

Give Camp is different than any other hackathon that I have ever
been too. First, you aren’t building a project just because it has
cool technical merit or because it might be a viable business. You
are building some project because some do-good organization needs
it to do more/better good works. Also, Give Camp is different in
that you are building a technical project for a group that
(probably) isn’t very technically savvy. This fact tested both my
patience when teaching our non-profit representative how to use
the new system, and my design skills. I was challenged to come up
with simpler wording on administration options, a more intuitive
layout, and a streamlined workflow for the most common use case.

Give Camp also got me out of my personal tech bubble. I was
unaware that there where people who self-identified as “.NET
Developers” – Based on the make-up of my group, they are orders of
magnitude more plentiful than I thought! That same revelation also
made me see that a person could in fact do serious development on
a windows machine. I guess that I knew that these things existed,
I just never encounter them in my days as a web developer/embedded
systems developer.

My weekend at Give Camp was an amazing experience. It felt good to
do good, and I got out of my tech bubble. I would recommend that
anybody in the Ann Arbor area volunteer at next years Give Camp,
and for those elsewhere, I would absolutely advocate that you look
for a Give Camp near you.


A Day Using Only FOSS

As a Free and Open Source Software (FOSS) ideologue, I think aboutAs a Free and Open Source Software (FOSS) ideologue, I think aboutmy implicit and explicit use of various software systems daily (ifnot hourly). I would love nothing more than to be able to not useany proprietary software or hardware in my daily existence;However, there are a myriad things that I could not do then suchas:

  • Drive my car
  • Use a cellphone
    • While there are are FOSS apps available and FOSS software   systems, almost of the firmware is proprietary (If I recall   correctly)
  • Use a microwave oven
  • Use a gas/electric oven
  • Use a washing machine
  • Use a gas/electric clothes dryer
  • Use a gas/electric hot water heater
  • Use a modern refrigerator
  • Check out a book from the public library (the barcode scanner etc.)
  • Perform my job as a web developer.
    • I need to test my code   against Safari, Chrome, and IE.
  • Use any of my guns to hunt.
    • All of them were made in a   factory using proprietary designs, equipment, machine firmware,   etc.
  • Print a digital document.

This list is clearly non-exhaustive; These ares simply the thingsthat I could think of off of the top of my head. Granted, some ofthese activities could be done using only FOSS hardware andsoftware, but I would have to build them myself – none of thesesystems/objects exist in a form where I can simply go to the storeand purchase one. And no person has enough time, or money, tobuild each of these things for themselves.
This train of thought has been running around in my head for months. I find it almost shameful that I continue to use proprietary hardware and software on a daily basis. I am disgusted with myself because while I extoll the virtues of FOSS, I turnaround and take a hot shower, or use a microwave oven – and fall into complacency with proprietary systems.
In keeping with this train of thought, I am going to try andsimplify my life so that I use a minimal amount of proprietarysystems. I am going to get rid of most of my computers and replacethem with a single, all FOSS machine. Even this set of actions isfraught with pitfalls: I will need to figure out some entirelyFOSS way to do cross-browser compatibility testing. I will need toensure that I can get this machine to connect to my employer’scrazy networking scheme (This is actually the biggest issue that Iforesee). And, I will need to make sure that I can do everythingthat I would ever need to using only this machine.
I will keep posting here with updates on how this journey goes -assuming that I can get this server migrated from Ubuntu Server toa Free OS without incident!

I Hope to Someday Own a Monopoly

I Hope to Someday Own a Monopoly


I started my evening today with a little light reading – the
Telecommunications Act of 1996. Previous to delving into the actual text, I
perused the Wikipedia article[1] and would like to briefly touch upon
some thoughts.

My Reason for Working
I work solely for my own gain. I really don’t care at all if what
I do helps somebody else or not; I only care if the work is
financially profitable for me or not. I do not expect any handouts
or unsolicited help from anybody, and I do not give these things
either. I do not ask for the fruits of another man’s labor, I
purchase the fruits of his labor with the fruit of my labor.

I grew up hearing the mantra “Work hard, play hard” constantly
from my father. I also always heard my father say “You are going
to work every moment of every day of your life, so you are either
going to work for your family for free, or you will work for
somebody else for pay.” I have not yet found a possible third
outcome to my days – I am either working for my family for free
around the house, or I am working for somebody else for pay.

To that end, at some point in my future, I fully intend on owning
a business that completely disrupts at least one industry. In that
business, I intend to make as much profit as possible. I use the
words “own”, “make”, and “profit” explicitly for the connotations
that they possess; “Own” is for the fact that _my_ business
will be the fruit of _my_ labor, and exist solely for _my_
benefit. “Make” is used because my business will create its worth,
instead of leeching off of the success of others as a parasite. I use
“profit” because profit alone is what will drive my business. I, and
by extension my business, will not allow anything to stand in our way;
We will overcome, sidestep, or ignore any obstacle, any person, any
law that gets in-between me and my profit. The fruit of my labor is
mine and mine alone – To do with what I, and I alone, will.

Everything that I have read where the view that monopolies are bad
is held, has used the argument that monopolies are bad because
they hurt the consumer. This belief holds that a monopoly can
charge a higher price than is fair for a good or service, and that
a monopoly no longer has to be efficient as they can directly
influence supply levels.

This is a crock of shit. If there is only one company that makes a
particular good, or provides a particular service, consumers
always have the option of “voting with their dollars.” If a good
or service is over priced, then the market is ripe for a competing
business to undercut the incumbent and disrupt the industry. If a
company no longer has any incentive to be efficient, again, the
market is ripe for a competitor to spring up and drive

All arguments for the viewpoint of monopolies being bad however
are based on the assumption that the business exists only to
provide a good or service as cheaply as possible to the consumer
base. This is simply not true; a business should exist fore the
sole purpose of squeezing every cent of profit possible out of the
consumer base. It is for exactly that reason that I strive to
somebody own a monopoly – that is where the profits are the

Jiving with the FOSS Ideals
I did struggle for some time making this belief jive with my
wholehearted belief in free-as-in-freedom software. I have found a
way to rationalize believing in completely free and unrestricted
capitalism with free software in my own mind. Using very
permissive licensing, such as the MIT or LGPL licensing, it
possible to make these two ideals mesh. A permissive licensing
scheme allows each consumer who legally obtains the good (or code,
or application, or program) in some manner to do whatever they
wish with the good that they have obtained. This extremely
permissive scheme is the exact mechanism that drives
competition. If I have a customer purchase a software library from
me, and then start re-selling modified versions, by the virtue of
making as much profit as possible, I am incentivized to make my
library better, cheaper, something in order to get consumers to
“vote with their dollars” for my product over my competitor’s. I
don’t believe that a restrictive copyleft license, such as the
GPL, allows a free market to flourish. I hold the belief that for
the reasoning outline above, such a licensing scheme stagnates the
market. I would be very interested in hearing other opinions on
this point however. You cannot learn unless your current beliefs
are challenged.

I sincerely hope that I someday earn the opportunity to practice
what I preach (running my own business). I also hope that when I
reflect on my life in my last seconds, that I can be look back
without regret and know that I always acted in line with my
ethics. I recognize the inherent selfishness in my beliefs and I
contend that nobody and nothing other than myself (and those that
I hold dear) should matter to me. These are my beliefs, and you
are welcome and encouraged to disagree with them and hold your own
beliefs. Just please do not attempt to force-feed your beliefs to
me; I will however entertain civil discussion.


Why Don’t Shipping Companies Have Better Delivery Estimates?

1. This post is based on my last experience with UPS, but I am
sure that it applies to other shipping/delivery companies as
2. I really like UPS and will continue to use them – this post is
not intended as a bash on an otherwise decent company.
3. I don’t know what kind of logistical data UPS keeps/has. Below
follows from only my own suppositions.

The data is already there
It is probably safe to assume that UPS knows exactly which
packages are on which truck, the route that each truck is to take,
and expected route start and end times. It is also probably safe
to assume that the current location of each truck is easily
discernable. If each truck is not explicitly tracked by GPS, then
by keeping track of when each package is delivered a reasonable
location can be inferred. Combine these data with traffic data
from Google and it would be fairly straight forward to give a very
precise delivery time estimate.

So why don’t they do it already?
I can see already that this might be a gray area in the Google
Maps API ToS. I see in them that there is a distinction of Google
Maps API for Business and the normal API. From what my cursory
read-through uncovered, since I can track any UPS package without
needing to login or be behind a paywall, it would seem that the
normal API could be used. If I were making this service, I would
still have a lawyer check out my reasoning. So maybe the cost of
realtime traffic data is prohibitive. The service that I am
proposing is still technologically viable because traffic data was
just icing on the cake – without it, a reasonable 10min delivery
window could still be generated.

Also, just the sheer volume of packages handled by UPS each day
might make this service very resource heavy. I will argue though
that if UPS can handle those logistics internally, it shouldn’t be
too difficult to present those logistics externally.

Or maybe there isn’t enough monetary value in this to make it

Wouldn’t this be an awesome project to work on?
I think that this would be an awesome project to work on. Every
single person that ships a package sits there at their computer
clicking and clicking the refresh button on the tracking page. If
this service was implemented, they could go the the tracking site
once and see that their package would arrive “between 9:30AM –
9:40AM Tomorrow.”
Even from a technological view this project would be amazing –
Real-time data analysis and visualization. A public facing API
could be built and then there could be smartphone apps that alert
you when the truck that your package is on is at your house (or
inadvertently delayed) so you could rest easy knowing that your
package is on its way.

Closing Note:
I would drop everything to work on this project – I mean that. If
there is a shipping/delivery company that wants to build something
like this, I would absolutely love to work on it. I could see this
service being a good threshold for a consumer shipping company to
get into time sensitive deliveries. I could also see this being a
semi-passive income site that acts as a third-party package
tracking service.

What is This ‘Sublime Text 2’ Hullaballo?

With the release of Sublime Text 2.0 here in the last few days, I
thought that now would be an appropriate time to write out my reasons
for why I won’t switch to Sublime Text.
I have a few co-workers who use Sublime Text. This means that my
exposure to ST is limited to watching people who do the same things
that I do use it; So comparing my workflow with theirs, I am
flabbergasted that they swear by ST.

When I watch these guys hack away in ST, the first cool feature that I
see is the minimap of the current file. This is a sweet feature – the
bird’s eye view of a large file can be extremely helpful at
times. However, this feature doesn’t sell me on ST. I have minimaps of
files in Emacs using minimap.el. After adding the Emacs Lisp file to
your load-path, it is three simple lines of Elisp to bind the
‘minimap-create’ and ‘minimap-kill’ to any key combo that you want.

Quick Step Next
This feature is really cool and has the potential to save you lots of
time. However, its inclusion in Sublime Text 2.0 is not the first
instance this ability existing. I can do the same thing, editing
multiple lines simultaneously, using the rectangle commands built into
Emacs (C-x r other_keys).

Everybody has their editor of choice that has the feature set that
they are looking for. My choice of editor is Emacs, and I have yet to
see a reason to leave Emacs for any other editor.

Additionally, Emacs has a terminal editor, a text-based web browser,
and an email client that come with it. I don’t have to mentally or
physically leave Emacs (or my beloved key bindings) all day – I am
sure that this increases my productivity by some non-trivial amount.


Just Picked a Whole Bouquet of Oopsie Daisies

As you can see, is experiencing some technical
difficulties right now. In the process of trying to clean up my
Linode, I accidentally nuked it completely. Luckily, all of my code
repos live on Github, and this seems a good as time as any to jump
into static bloggin with Jekyll feet first!

The ArduPhone project is still going strong too! I am in the process
of rewriting my singleton functions as classes in a library. That
being so, there is lots of changes happening in the APKeypad and
ArduPhone repos – be aware if you are hacking on them.