The Vacuum Clap

Change means movement. Movement means friction. Only in the frictionless vacuum of a nonexistent abstract world can movement or change occur without that abrasive friction of conflict.

–Saul Alinsky

Nature and politics abhor a vacuum.  The moment a newly formed vacuity opens the resulting space is filled with the first onrush of whatever commodity is directly adjacent.   If authority is missing from a power structure it will quickly be occupied by multiple players looking to occupy that power vacuum, almost always with intense and sudden conflict.  Why, after 12 centuries of relative safety, was Rome conquered by the the Goths, the Huns, and the Vandals all within 4 decades?  It was because of the sudden void created by the absence of Rome’s ability to project power.  I call this sudden destructive collision caused by unexpected power gap the vacuum clap.

The ramifications of these vacuum claps can ripple for a long long time after the initial cause.  How many of the current geo-polical problems are a direct result of the sudden “clap” that resulted from abdication of European imperialist influence.  Notice how the resulting fallout happens regardless of the justice or morality of the cause of the vacuum!  It doesn’t matter that imperialism legitimately HAD to end; there were going to be violent ramifications resulting from the sudden change for decades (and centuries) to come.

Regulation created your income disparity.  The removal of regulation created your financial crisis.

— Author Unknown

Where this comes to play most on the intra-national scale seems to be in the area of state regulatory policy.   The creation of laws (regardless if they are good or bad) create an artificial “scaffolding” around a pattern of behaviors.  Instead of behavior progressing natural based on mutual interaction (again, good or bad) the behavior is artificial.  This is exacerbated by incentives that may come into direct conflict with the intended behaviors creating black markets, legal opportunist, and artificial ancillary effects.  The spread of the car culture is as much a product of government profit regulation in the passenger rail market as it is the government construction of the interstate system.

So artificial vacuums created by regulation are a problematic, but then imagine the problems created by removing those controls.  When the “scaffolding” is kicked out, even if the scaffolding was an objective bad thing, the result is an almost certain crash.  In the normal ebb and flow of markets, a natural equilibrium eventually takes hold*  but removing bureaucracy always creates a vacuum that markets will suddenly (and often destructively) will try to fill.

This is one reason why even bad laws are difficult to remove.  When critics say that getting rid of regulation will cause havoc, they are generally correct.  Of course, most of the time the regulation is demonstrably bad and often even counter-productive to the intended purpose.**  This brings about the worst in government.  The endlessly expanding dregs of our failed attempts at law, never to be removed because the pain of pulling off the bandage is worse than the slow pain of infection.

Questions are never indiscreet, answers sometimes are.

–Oscar Wilde

How do we shorten the time it takes for a new equilibrium after the resulting void?  My gut reaction is that the better the feedback mechanism the faster a state of balance will occur.  On the macro level this can be exceedingly difficult.  Using the imperialism example from above, notice how feedback isn’t spread equally among all the constituents.  England was more concerned with the collapse of imperialism that its colonies were, but isn’t nearly as effected by the results of that debacle.

Ultimately the best solution is to never create such voids in the first place.  In the realm of intra-national regulation it is obvious to point out that our attempts at a solution are often worse than the original symptom,  especially in the long run.  In the area of international governments the way to preempt such voids is to limit the use of force on other peoples, countries, and nations.  Power never spent will not create a vacuum.***


*In actuality the ebb and flow always continue because nothing ever stays the same and markets are always trying to innovate.  Part of the problem with laws is that they never innovate.

** How many billions of tons of CO2 have been created by regulating ethanol production?

*** My favorite definition of injustice is “Injustice is the abuse of power; force used against the unwilling.  Using power or authority to take from others their life, liberty, dignity, or the fruits of their love or their labor”

Most people are other people

For love of history.  A massive quote dump from some of the books I have been reading lately.  Hope someone else will enjoy them or, even better, enjoy the books!

How the Irish Saved Civilization by Thomas Cahill

“The ago old platonic fallacy equates knowledge with virtue.”

“The intellectual disciplines of distinction, definition, and dialectic that had once been the glory of men like Augustine were now unobtainable by readers of the dark ages.  A man no longer subordinated one thought to another with mathematical precision.  Instead he apprehended similarities, imbalances; types and paradigms; parallels and symbols.  It was a world, not of thoughts, but of images.”
“To be Irish is to know, that in the end, the world will break your heart.”
“The Irish are the only people who can not be helped by psychoanalysis.”
–attributed to Sigmund Freud

The History of the Decline and Fall of the Roman Empire, Volume II by Edward Gibbon

“When a public quarrel is envenomed by private injuries, a blow that isn’t mortal or decisive can be productive only of a short truce which allows the unsuccessful compeditent to sharpen  his arms for a new encounter.”

“…but experience has proved the distinction of active and passive courage.  The fanatic who endures without a groan the torture of the rack or the state would tremble and fly before the face of an armed enemy.”

The Reformation (The Story of Civilization, volume 6) by Will Durant

“Your emphasis on faith as against works was ruinous and led to a religions who’s coldness of heart concealed behind the piety of it’s phrases.

For a hundred years charity almost died in the centers of your victory.

You destroyed nearly all the schools we had established, and you weakened to the verge of death the universities that the Church had created and developed.

Your own leaders admit that your disruption of the faith led to a dangerous deterioration of morals both in Germany and England.

You let loose a chaos of individualism in morals, philosophy, industry, and government.

You took all the joy and beauty out of religion and filled it with demonology and terror.

You condemned the masses of mankind to damnation as ‘reprobates,’ and consoled an insolent few with the pride of ‘election’ and salvation.

You stifled the growth of art, and wherever you triumphed classical studies withered.

You expropriated Church property to give it to the state and the rich, but you left the poor poorer than before, and added contempt to misery.

You condoned usury and capitalism but deprived the workers of restful holidays a merciful church had given them.

You rejected the papacy only to exalt the state.

You gave to selfish princes the right to determine the religion of their subjects and to use religions as a sanction for their wars.

You divided nation against nation, and many a nation and city against itself.

You wrecked the international moral checks on national powers, and created a chaos of warring national states.

You denied the authority of a church founded on your own admission by the son of God but you sanctioned absolute monarchy and exulted the divine right of kings.

Unwittingly you destroyed the power of the word which is the only alternative to the power of money or the sword.

You claimed the right of private judgment, but you denied it to others as soon as you could…

Meanwhile see what your private judgment has lead too. Every man becomes a pope, and judges the doctrines of religion before he is old enough to comprehend the functions of religion in society and morals and the need of the people for a religious faith.

A kind of dis-integrative mania, unhindered by any integrative authority, throws your followers into such absurd and violent disputes that men begin to doubt all religion, and Christianity itself would be dissolved and men would be left spiritually naked in the face of death were it not that the Church stands firm amid all the fluctuations of opinion and argument…

The world is supported by four things. The learning of the wise. The Valor of the Brave. The Justice of the Great. The prayers of the good.
A supreme and unchangeable faith is a deadly enemy to the human mind.”

“Men would try again to capture the spirit of Erasmus, and the Renaissance, and renew the long slow labor of enlightenment.

“Wherever Protestantism Advanced scholarship declined.”

“For men are, by nature, unequal and can be induced to share their goods and fortunes only by a vital and common danger.”

“The communism that was set up was a war economy as, perhaps, all strict communism must be.”

“Internal liberty varies with external security and communism breaks with the tension of peace.”

“A nation is born stoic, and dies epicurean”

“Liberalism is a luxury of security and peace.”

“Science gives man ever greater powers but less significance. It gives him better tools with less purposes.  It  is silent on origins, values, and ultimate aims. It gives life and history no meaning or worth that is not canceled by time and death.”

”Children were now luxuries which only the poor could afford.”

“No great nation is ever conquered until it has destroyed itself.”

“The class war had turned democracy into a contest in legislative looting.”

“…eternal vigilance is the price of civilization. A nation must love peace, but keep its powder dry.”

“For barbarism is always around civilization, amid it and beneath it, ready to engulf it by arms, or mass migration, or unchecked fertility”

“Man will sacrifice anything but appetite for health.”

“Wisdom seems always a reincarnation, or echo, since it remains the same through a thousand varieties and generations of error.”

“When the myth dies, only force is free.”

“Time is the greatest vandal of them all.”

“Energy directed at a unifying will is almost the definition of genius.”

The sum of all fears

Update 5/25/2017: This is a post I started over a year ago.  In the interim Ubuntu has officially dropped the plan on a convergent desktop.  Mark Shuttleworth might argue that convergence will eventually happen but ultimately that doesn’t matter.

“In business being early, or being late, is the same thing as being wrong.”

Outstanding article over at TechRepublic discussing the lack of momentum that Ubuntu has had as of the last couple years.  The basic rundown is that the author believes that the long term goal of “the convergent desktop” is causing other less important goals to slip.

For those who haven’t heard of the convergent desktop (or simply convergence) it is the idea currently being chased by both Microsoft and Canonical (the company behind Ubuntu) whereby your phone/tablet can also be your desktop/workstation.  Sometimes this is associated with a seamless user experience that “transcends” both use cases (i.e. is the same environment on both platforms) but more often is based on some kind of modal shift when device size changes.  So for Windows 8, it become more Windows 8’y when on a phone, but feels a little more like Windows 7 when on a 22″ monitor with mouse.

Google is, of course, more concerned with turning everything into an extension of the web via Chrome and/or Android.  This means that they ultimately don’t care if it is a desktop or a phone running applications; as long as the data is stored in their cloud or provided by one of their services.  So what is Apple’s strategy concerning convergence?  Ahhh, now you get to the meat of the problem.

Apple, always laser focused on user experience, figured out a while ago that convergence SUCKS.  It really really does and here is a brief explanation why.

A great desktop experience is going to be focused on use cases where people are going to use desktop applications.  I call these users “creators” because they primarily use their computers for creative endeavors.  Think software development, editing photos, writing books, mixing music,  making spreadsheets, etc.

In this vein, the tools for creating are centered around the ability to produce new material.  Keyboards are spectacular input devices for creators.  I can type faster than I can write. Even though my ultra-book has a touchscreen, I never use it because my ten fingers are faster for creating things that a single pointing finger is.  When a fine grain control inside a two dimensional canvas is needed, a mouse is significantly better than either a touch screen or a touch pad.

A great tablet experience is going to be focused on use cases where people are not going to be creating.  I call these users “consumers”.  When using my tablet I am almost solely relegated to the role of consuming information.  Reading emails, watching Netflix, looking up receipts on Google, etc.  Consuming requires less functionality than production and added interface utilities for these edge usage cases would just take away from the user experience.

Now obviously most users spend some time during the day being both a consumer and a creator.  This is not a statement of the value of how a user uses their technology but an implicit realization that different use cases should be centered around how best to actually use their system.

It is hard to make a really functional sports car that can also be a useful pickup truck.  Trying to make one into the other generally causes you to have a tool that is good at neither.

The Measure of Who We Are

The older I get the more value I place on having timely and frequent feedback. It sounds like an insignificant thing but if you want what your doing to actually be useful it is paramount.

Never underestimate the power of an evolutionary process with a tight feedback mechanism.  –Linus Torvalds

Frequent feedback is so important because of the abundance of bad ideas that actually mask themselves as initially useful. Anyone who has done software development or design has had 100 people say “I have this million dollar idea I need you to implement.”  The reality is that most ideas are bad and seldom deal with the practicalities of reality.  Often their shortcomings are not obvious.

Good ideas (aka theories) are actually pretty uncommon.  We build these perfect structures in our heads and then begin to wonder why our dreams cannot also be truth.  Once we latch onto a theory we will remain “loyal” to it and will seldom surrender it easily until external facts force us re-evaluate them.  In actuality these ideas are not even theories but beliefs, which is what a theory really is until it has been tested.  A feedback loop is really a way to force us to test something with an external reference we cannot ignore.

The single biggest problem in communication is the illusion that it has taken place. –George Bernard Shaw

One of the major changes in the structure of technology companies and their succeed has been the dissociation between a business BEING an idea, and a business trying an idea.  The new mantra in places like Silicon Valley is get actionable feedback, make a change, fail fast, and pivot.  Failing fast provides as much feedback as possible in the shortest period of time; so fewer resources are spent on bad ideas and thus increasing the likelihood of isolating good ideas.

On the macro level, the key to the effectiveness of capitalism has been the success of the market as a feedback mechanism.  Local government’s superior representation is a direct reflection of the ease at which local officials can be replaced.  The feedback loop for a City Mayor is quite a bit tighter than for the President of the United States.

Notice how, in the last example, by focusing on the feedback mechanism we can evaluate two systems that are superficially are identical but function dramatically different.  Why does progressive democracy work so well for Denmark and not for the US?  Because Denmark’s feedback loop is closer to Missouri’s than it is to the whole of the United States.

With genetic engineering, we will be able to increase the complexity of our DNA, and improve the human race. But it will be a slow process, because one will have to wait about 18 years to see the effect of changes to the genetic code. –Stephen Hawking

Feedback is so fundamental that systems that have weak or non-existent evaluation mechanisms are losing their authority overall.  We value academic disciplines by how consistent their feedback loops are.  Things like math, science, and engineering all have well defined and extensively tested methods to evaluating themselves and make corrections when shortcomings are identified.   Non-empirical disciplines like art, philosophy, and religion are suffering from the lack of reference available to the natural sciences, and their overall effectiveness is thus reflective.  Remember, at one time science and mysticism were one and the same until science formalized the scientific method, liberating itself (and humanity) from the confines of dogma.

“Science gives man ever greater powers but less significance. It gives him better tools and with less purposes. It is silent on origins, values, and ultimate aims.  It gives life and history no meaning or worth that is not canceled by time and death.”. –Will Durant

This is not to say that ideologies and theories are likely to disappear. On the contrary, as religion had demonstrated, systems that have no effective feedback loop are nearly impossible to remove entirely because there is no way to “prove” the shortcomings of their beliefs.  You cannot fail a test you’ve never taken.

Nor do I mean to suggest that systems lacking structured feedback methodologies are bad.  I strongly believe in the value of philosophy, art, and religion as part of making a full life; and I passionately love my liberal arts education.  The need for improvement isn’t an absolute and, contrary to popular belief, neither is the need for truth.  But, when the desire is to approach understanding, even if only asymptotically, there is simply no better system we know of then a quality feedback loop.

Defend Itself no Matter how Small

I have been doing large scale deployments of Raspberry Pi’s for some of my students and their class projects; and after doing… say.. two of them decided it would be easier to script the initial setup.  The process isn’t hard but I thought I would document it in case anyone else was in a similar situation.

I start by connecting the Pi’s to a network via cable (some people carry handkerchiefs, I carry switches.)  Raspbin starts with DHCP enabled and SSH configured for a default user, meaning we can use that to get the wireless configured.  Here is basically what I do in my script.

Getting Connected

Start by doing a port scan for any ssh connections on the network once the Pi is attached. For example:

nmap -T5 -n -p 22 –open –min-parallelism 200

We do this to pre-load our local arp table with IP & MAC addresses.  This will speed up the process of finding any Raspberry registered MAC addresses  (Raspberry has their own MAC range.)  You can then search for Raspberry nics’ specifically by doing:

arp -a | grep b8:27:eb

You should
SSH (or better yet copy your private key via ssh-copy-id) to the IP address(es) returned from the above command.  Make sure to change the password afterwards.  The default username and password for the SSH connection are:

Username: pi
Password: raspberry

Wireless Configuration

Plugin your wireless USB (unless you have a PI3 or later) and run the following command to see the wireless card:

iw dev

The result will be a list of physical wireless devices.  You’re looking for the entry next to Interface mostly likely something  like wlan0.   Run the iwlist command to get a list of wireless access points you can connect to.

iwlist wlan0 scanning

Specifically you’re looking for the value next to ESSID.  Find the one you want to connect to. To setup the encryption for secure wireless run the following command to add a specific network entry for your ESSID.  Replace XXXX with the ESSID name you want to connect to.

wpa_passphrase “XXXX” >> /etc/wpa_supplicant/wpa_supplicant.conf

Now type the wireless access point password and hit enter.  Finally restart the wireless interface to load the new network and get an IP address.  Replace wlan0 with the Interface name you used for scanning a couple steps above.

ifdown wlan0
ifup wlan0
ifconfig wlan0

The ifconfig is to see what your new wireless IP address is.  You can then safely disconnect the wired network cable and SSH back into the PI on the wireless nic.  The PI can safely be restarted at this point as the wireless will auto-connect on restart.

Thoughts on the Infinite

I need a pure mathematician to discuss this with me but I have been having some shower thoughts on infinite numbers and their implications.  I am not a formally trained mathematician and am almost certainly using words like “set” and “infinite” differently than would be properly used by one, but regardless I need to get these out of my head.

First, it seems logical for order sets of infinitely large things, of a defined group, that the nature of their being ordered would mean all possible patterns for that set would occur.  For example the defined group of 0, 1, 2, 3, 4, 5, 6, 7, 8, and 9 in the order of “1”, “2”, etc through infinity would always contain any possible finite “number” regardless of the patter if we assume the patter must contain those ten characters.

Second, it seems just as logical for unordered sets of infinitely large things, of a defined group, that the nature of their being unordered would mean all possible patters for that set would NOT occur.  In other words, that because such a set is ordered in a non-exhaustive way that even if the set was used infinitely it would not guarantee all possible discrete sets would be used. For example the defined group of a, b, c, d, e… through z order via “one”, “two”, etc. through infinity would not automatically contain the word “xxxzxxznnnzzz” because such word violates the rules of the English language.  So an infinite number of words would be produced but non of them would be xxxzxxznnnzzz.

The natural implication for this is that for sets that have arbitrary rules that the normal assumptions for infinite breakdown.

A totally different question also comes to mind.   For infinite numbers that (although unordered still contain all possible patters) for example pi.  Do specific patterns in these sets generally appear random (at least within the confines of their set length?)   Is their randomness generally uniform?

We are all links in a chain

Another link dump building up over time in my browser history.


  • Linux Daemon How-To
  • shunit – xUnit test framework for bash
  • bats – bash Tap test framework for bash
  • Roundup – Bug finder and unit test framework for bash
  • ttyrec – Command line recorder, and playback program. Here is the github page.


Software Development


  • Getting Things Done in 15 minutes – Nice guide to getting started with GTD.
  • Cyph – Encrypted private text and video chat.  Perfect for executive teams and foreign dignitaries.
  • Debt Supercycle vs Secular Stagnation – A generalised theory on the cause of global economic slowdowns.  This is NOT a 2 minute bullshit explanation from a politician.
  • Project Management Track – A Cousera Introduction to Project Management track I am looking at for training up some co-workers interested in pursuing a PMP.

Nethack Spoilers

After 15 years of trying to beat this game without using spoilers I have given up.  Here are some of the more useful links I have found.

My Creed

Over the course of the last couple years of I have been putting more thought into some of the core beliefs I hold about things other than faith or family.  How do I see the world and how does such beliefs affect my decisions and opportunities.  Piece by piece I have been writing these down and although I am certainly NOT done, have decided it is time to actually “say” them out loud.

I believe in actions and distrust intentions.  Every man believes in the cause of his behavior even when that behavior brings about pain and suffering.  Those who created socialism believes they were bringing about an egalitarian utopia and inquisitors believed they were saving the souls of men.

Concentrated power is not rendered harmless by the good intentions of those who create it. –Milton Friedman

The evil that is in the world almost always comes of ignorance, and good intentions may do as much harm as malevolence if they lack understanding. –Albert Camus

The logical corollary to my first belief is that I believe that the ends almost never justify the means.  Partly because, I believe that there is no ultimate good that springs magically from a “necessary” string of injustices and evil.  But also because we become what we do and our actions ultimately sculpt us into the object of our behavior.

…let a prince have the credit of conquering and holding his state, the means will always be considered honest, and he will be praised by everybody because the vulgar are always taken by what a thing seems to be and by what comes of it; and in the world there are only the vulgar, for the few find a place there only when the many have no ground to rest on.  –Niccolò Machiavelli

I believe those who desire to “throw away and start from scratch” dramatically underestimates the complexity of a given problem.  Real change happens through evolution over time, through trail, through error, and through the accumulated power of experience to reinforce decisions.  Throwing away history for no reason other than frustration with having to deal with it, most often causes one to repeat it.

It’s important to remember that when you start from scratch there is absolutely no reason to believe that you are going to do a better job than you did the first time. First of all, you probably don’t even have the same programming team that worked on version one, so you don’t actually have “more experience”. You’re just going to make most of the old mistakes again, and introduce some new problems that weren’t in the original… –Joel Spolsky

I believe people are most truly defined by the parts of ourselves that we say NO to.  I don’t drink, I don’t borrow money, I almost never drive a car, and I won’t have sex until I am married, say more about a person (good or bad) than the 10,000 things everybody does or everybody wants to do. Saying yes implies we are like everyone else, that you capitulate to the will of society.  Saying no is self sacrifice and a dramatic statement of individuality.

Be who you are and say what you feel, because those who mind don’t matter, and those who matter don’t mind.  –Bernard M. Baruch

If then follows that I believe great acts take great sacrifice and the only sacrifice this is truly great is self sacrifice.  While it may sometimes be necessary to force others to sacrifice, there is never anything admirable about it.  No man should be held in esteem for giving something that he took from someone else.  Sacrifice is not sacrifice when forced upon.

A man who was completely innocent, offered himself as a sacrifice for the good of others, including his enemies, and became the ransom of the world. It was a perfect act. –Mahatma Gandhi

The really important kind of freedom involves attention, and awareness, and discipline, and effort, and being able truly to care about other people and to sacrifice for them, over and over, in myriad petty little unsexy ways, every day. –David Foster Wallace

I believe, and can categorically prove, that the free market is the greatest vehicle for eradicating poverty, hunger, and disease that has ever existed.  Nothing, no government program, no charity organization, no religious denomination has come anywhere close to the success that the free market and capitalism has at improving the corporeal lives of the human race.

Commerce [and] entrepreneurial capitalism take more people out of poverty than aid. We need Africa to become an economic powerhouse. –Bono

It is not from the benevolence of the butcher, the brewer, or the baker that we expect our dinner, but from their regard to their own interest. –Adam Smith

Thunder on the Plains

ThunderPlains 2015 is over and overall I was impressed with the quality of the presentations, the overall event, but mostly the OKC community as a whole.  Particularly as this was only the second year of this event.

The day started with a significant announcement, will hold its first meeting later this month.  Most people who know me, know that I am a small government libertarian; but I am a huge fan of local government (government is best when it is closest to the people it represents.)  This will give coders a chance to service their local community.  The first meeting will be on October 27th at 6:00 PM, check out the meetup.

Listed is some of the presentation material, links, and references mentioned by the presenters (at least for the sessions I attended.)

Mobile Applications with JS & Iconic

So Tell Me Again Why We’re not Using Node.js

Supercharge Your Productivity with Ember.js

Building Massive Angular Apps

Your Grandparents Probably Didn’t Have Node

The Importance of Building Developer Communities

All Your Links Are Belong to Us

I have over 200 tabs open between three computers… the insanity must stop. Link dump to follow:

Software Engineering

  • Road to Continuous Delivery – Great article covering the different stages development shops go though to get to continuous delivery.  Provides a great starting checklist of what to work on while improving your software delivery process.
  • Overview of Micro Services – Micro services have become massively popular with the advent of Node.js.  Intro to the concepts are reasoning for using micro services.
  • Continuous Code Coverage with GCC, Hudson, and Googletest– Part of continuous delivery is continuous testing of your code base.
  • Trashing ChromeOS – Guide to building ATOM processor build-chain testing servers from Chromebooks.
  • Don’t Be Afraid of Functional Programming – The parts of JavaScript I actually like are its functional programming capabilities (callbacks and first class functions baby.)  OOP programmers get a little scared of things like Lisp, but they shouldn’t be.
  • Tessel – A JavaScript compatible (via Node.js) microcontroller.  Wow.. just wow.. Includes wifi built-in and shield/breakout board compatability through Node modules.

Source Code

  • DevDocs – Seriously hell yeah!  Online, simple, clean, extensive, software documentation for programming languages and libraries.  Seriously, browser pin this now!
  • Sourcegraph – Search tens of thousands of code examples.
  • Explainshell – Type some bash in, it explains what it is and what it does.  Think man pages for the internet age.
  • LibCurl API Reference – Using Curls powerful web functionality inside of C.


  • Smart Tabs – Tabs in the leading spaces, spaces for everything else.  The way GOD intended code to be structured!
  • 76 Vim Shortcuts – Some of these I already knew, but like all things Vim… there is always more to learn.
  • Mapping Standard Shortcuts – Things like Ctrl + c for copy.  I don’t actually remap my Vim shortcuts to match but I like the article because it explains what those shortcuts are used for by default.
  • Cheat Sheet – My current favorite Vim cheat sheet.  Simple and easy to search for things… and NO ads.
  • Vim-Adventures – Learn Vim shortcuts while playing an online game.
  • Exuberant CTags – You need more jumping around in your code.  Make it easy to swtich between headers, declarations, and usage locations in your projects.

C Programming

  • JANSSON – JSON in C.  Seriously freaking awesome!
  • Ncurses Programming in C – Another Linux Documentation Project about programming.  Ncurses is a command line interface for gcc.
  • Coding Unit, C Tutorial – Great introduction to C programming.  Simple examples and be sure to check out the comments below each section.
  • TutorialsPoint, The C – Another introductory guide to C development.  Better as a reference guide that the one from Coding Unit.
  • TDD in C – Love test driven development (not so much behavior driven development.) Simply way to due it in C without external dependencies.  Here is a list of tools if you do want to use external libraries for TDD.
  • Beginners Guide to Linkers – When compiling doesn’t kill you, the linker will.
  • Going from C to Go – I really like Go, but am currently doing a fairly serious C project.  Just in case I ever want to port it.

Terminal/Serial Programming

  • Terminos – C serial interface library for GCC.  The link is to the manpage with function examples.
  • Serial Programming – The Linux Documentation Project examples for serial programming in C.  Also look at the debugging section.
  • QTSerialPort – The Qt Library for Serial port communications.  Qt is easily the best C++ code library in existence.  While most people think of Qt only when coding GUI applications; its libraries are extensive enough to use for ANY application… even from the command line.
  • Stackoverflow Serial Examples in C – Couple good examples and they got me some of my first working C Serial code.
  • RS-232 Library – Works on both Linux and Windows.
  • Serial Programming in Linux – Wikibooks book style tutorial on serial programming in Linux.  Here is the specific section on Terminos.
  • WiringPi – Serial programming interface on the RaspberryPi.  Very nice if you are using the Pi breakout pins.
  • Serial Example – Another quick example by tty1.


  • aws – The Amazon Web Service command line tool.  One of the better reference pages I have seen on it.
  • Web Graphs & Visualization – 30 tools for web based data visualization. Both Sas and Open Source tools listed.
  • Let’s Make a Bubble Map – Thematic mapping.  Includes a link to a D3 tutorial for creating bubble map.s
  • Camlistore – A personnel, decentralized, non-heiarchy based storage system that can be synced between cloud, phone, computer, and anything you can think of.
  • JSON Form Editor – Similar to a project I did myself a while back.  Automatically create forms based on simple JSON structures.  Makes it easy to to AJAX requests to build, populate, and check forms.

Cyber Security


  • Rsync & SSH – Combining two of the most powerful software utilities in existence to make backups.
  • StormSSH – I actually created a series of bash scripts to do SSH bookmarking.  Storm improves on this idea by directly editing your ssh config file with the stored entries. Wish there wasn’t a Python dependency.
  • SSH Kung Fu – Great tutorial covering some of the many of the one-off capabilities of SSH like remote folder mounting, port forwarding, and connection sharing.
  • Simplify With SSH Config – Good overview of some SSH configuration and setup options.  Plays well along side the SSH Kung Fu link above.
  • Autocomplete Hostnames – Process your hosts file under /etc/ as well as your config files for autocomplete.  I used my hosts file as a blacklist so this doesn’t work as well for me but the information was useful for the SSH bookmark system I made.
  • Commandline Fu SSH Autocomplete – A few ways to populate the autocomplete functionality for SSH.


  • Better Bash – Simple suggestions on making better bash scripts.
  • Command Tips & Tricks — Nice overview of some tip using Bash, Vim, networking, and general command line productivity.
  • Tmux Cheatsheet – If you know what tmux or screen are… then this is pretty helpful.  Otherwise you need to find out what tmux is.
  • Defensive Bash Programming – More and better ways to organize your bash programs.
  • BashGuide – Better bash than the Gnu Bash guide… or at least some people say so.  Evidently it has fewer “bugs” in its code examples.

Linux Bluetooth

  • Bluetooth on Fedora – A number of Bluetooth devices need re-pairing (or at least a user to be logged into the system) before they will connect after restart.  This is particularly frustrating for Bluetooth mice and keyboards.  Following the advice by the selected answer (as root0 solved the problem for me.  This one was annoying and hard to find out.
  • ThinkPad Compact Bluetooth Keyboard – Cannot wait until this keyboard driver is put in the mainline kernel so I don’t have to build it every time.  This keyboard allows me to use the same keyboard when using my Carbon X1 or when at my desk.


  • Clark DuVall – I don’t know who the guy it, but he has the most freaking amazing website I have ever seen!  Command-line junkie heaven.
  • Bluetooth Deadbolt – Something to keep my from having to carry another key?  Plus it lights up!
  • LibreOffice & Google Docs – Open, edit, and save/upload Google Docs directly in Open/Libre Office.  Also has support for WebDAV.
  • Switching from Photoshop to Gimp –  List of modifications to make the Gimp feel more natural for Photoshop users.
  • Industrial Strength Bubbles – Make person sized bubbles that last for several minutes.  I know what the kids and I are doing this weekend.
  • Open Energy Monitoring – Open source automation and energy monitoring.
  • Free your Android – As in Freedom, not beer.  Useful list of Free Software version of popular software on Android.
  • Shortcut Foo – Tutorials for quickly learning misc programming environment shortcuts.