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.***

Footnotes

*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”

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 172.16.0.0/24

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

  • 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.

JavaScript

Software Development

Management

  • 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.

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.

Vim

  • 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.

Cloud/Web

  • 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

SSH

  • 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.

Bash

  • 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.

Misc

  • 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.

That’s not writing at all

Cheatsheet of some of the more useful vim commands I have run into lately:

  • ci(, ci{, ci<, ci", ci' – Delete and insert into text between (, {, <, “, etc.. brackets.  Really useful for things like function arguments and quoted text.
  • ca(, ca{, ca<, etc... - Same as above but removed the "bracket" as well.
  • yi(, di{, va<, .. – Yank content between ( and ), delete content betwen { and }, select content between < and > including brackets, etc..
  • ZZ – Quick same/close, works the same as :x.
  • * – Search for word under the cursor.
  • gv – Re-select previous selection block
  • q<letter> @<same letter> – Record a macro with q (named letter) and play it back with @.

Always Remember…

The Bill of Rights is a literal and absolute document. The First
Amendment doesn’t say you have a right to speak out unless the
government has a ‘compelling interest’ in censoring the Internet. The
Second Amendment doesn’t say you have the right to keep and bear arms
until some madman plants a bomb. The Fourth Amendment doesn’t say you
have the right to be secure from search and seizure unless some FBI
agent thinks you fit the profile of a terrorist. The government has no
right to interfere with any of these freedoms under any circumstances.
–Harry Browne

Virtual Private Networking in AWS

Been doing lots of VPN setup and configuration lately, especially inside of Amazon Web Service (AWS) Virtual Private Clouds (VPCs.)  They have a built-in VPN capability using IPSec but it generally seems specifically focused on device-to-device (D2D) configurations.  Depending on the need I have turned up StrongSwan and/or OpenVPN as a solution.

OpenVPN has an advantage of being able to do SSL VPN on 443 making it look exactly like HTTPS web traffic (effectively making it unbreakable by network administrators.)  Things like proxy-servers don’t even know you are creating a VPN tunnel.  However, on Windows OpenVPN client software has to be installed to use it.

StrongSwan is a IPSec VPN option that works well with existing P2P VPN systems.  The native Windows VPN tools work out of the box with a standard StrongSwan configuration (as long as your certs have been signed by a trusted CA.)  Performance is also very good.

So far, I really really like OpenVPN as once it is configured it works everywhere, regardless of network policy or ISP limitations.  Linux Network Manager has built in support for it making is very very easy to configure clients to use it as well.  That said, for IPSec configurations needing to connect to Windows Clients; StrongSwan has been my go-to solution.

Useful links follow:

Linux StrongSwan Server

Workstation StrongSwan Setup/Install Client

OpenVPN on Ubuntu

drift toward unparalleled catastrophe

My home configuration has two Planar 20″ monitors as my primary display.  They have worked fairly well with the exception that any sudden change in input signal seems to cause them to freak out and changed their sync levels to non-standard ranges.  Resetting them is the fix but Planar is kind enough to NOT mention how to do that in any of their documentation.  So, for the benifit of mankind here is the process for resetting a Planar PL2010MW to factory default>

Unplug the monitor.  Counting from the left, there are five buttons on the bottom of the monitor (the right most being the power button.)  Press the second and fourth buttons from the left and hold them down while plugging the monitor back in.  Count to five, and release.

Other models of Planar use the second and third buttons with variations of releasing immediately after plugging in; or waiting until the main power light turns green.  In addition, if you are using some versions of Linux you may have to restart X before you see the minor in your hardware setup.