Links All the Way Down

In the never ending battle between my browser tabs, I am undoubtedly a looser.  I suppose the ideal way to deescalate this situation would be to have a bi-weekly link dump as part of my regular organizational process and maybe that is something I should seriously consider.  At the very least it would help organize these tabs more chronologically then they currently are.

The themes for this dump are common; DevOps, Linux system scripting (primarily in bash), and Android automation.  If that doesn’t clue someone into what I’ve been working on the last couple weeks then nothing can.

Bash Command Line

SSH & System Tools

DevOps & Services

Android Dev Tips

Tutorials & Projects

 

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

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

All I see are tabs

Cloud:

  • BitTorrent Sync – Multiple source file syncing using bit torrent client.  Thank of it as headless Dropbox.
  • Own Cloud – Open Source personnel cloud solution. Includes things like data, music, contacts, calendar and can even be used by multiple clients. Even set it up on your own server.
  • SparkleShare – Dropbox like functionality on Linux, Mac, and Windows systems. Includes versioning as well.
  • Gmail Forwarder –  Correctly configure gmail when using your own smtp settings, domain, and email forwarder.
  • Github For Everything – Using Github to manage everything in your company; from your hiring process to your internal documentation.
  • Using Gnu StowStow is a open source tool for managing your dotfiles in a universal way across multiple machines.  This also simplifies the process of using a version control system to track your dotfile history.
  • Git-Annex – Headless, versions, unlimited, decentralized file syncronization for Unix systems.  Based on Git and includes a mobile app.  Possibly the best replacement for Dropbox available anywhere.

App Dev

  • Apple App Distribution – All 100 freggin pages of it.  Includes beta testing and is almost like developing software back in the 90’s.
  • Android App Distribution – Eight pages and you can even using Google Groups to manage your beta test groups.  Includes automatic updates.
  • Ruby Rack nginx – Very clean, very simple example of setting up a Ruby Rack nginx configuration.
  • Source Code Comments – A list of the most humorous source code comments people have read.
  • Testing Code, Simply – I love this post.  Best simplification of how/why TDD should be used.  The examples can even be modified to allow testing of things like Bash or VBA.

Bash & SSH

  • More cool bash commands and shortcuts.
  • Need a web server, how about a single line of bash.
    while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; cat index.html; } | nc -l 8080; done
  • Resetting an unresponsive SSH session.
    newline ~.
  • Setting up SSH to use shared concurrent connections.  Came from a tutorial on speeding up Git, but useful everywhere.
  • More SSH Awesomeness – This was how I learned ssh-copy-id.  Lots of other amazing advice.
  • Improve SSH Key Security – Things to do AFTER you have placed a passphrase on your SSH keys.  You have done, at least, that?  Right??
  • Passing SSH commands in git clone – Stackoverflow reponse on how to configure .ssh/config options for specific hosts.  They, in tern, get picked up by git.

Go

  • Go Tutorial Exercises – I have really enjoyed GO lately.  C language power with a language actually built for multi-core processors in a network connected world.
  • Effective Go FAQ – Some really great tutorials and information for developers trying out a new language.
  • Hermans Go – Project Euler solutions written in Go.  Great example code for learning algorithms in Go.

Vim

  • Nouns & Version – Understanding the basic structure of how VIM works.
  • Colons are Bad – How to stop using colon commands in VIM.
  • YADR – Sample dot files, vimrc, git support and other useful vim tools.
  • Vim Bookmarks – How to use and manage bookmarks in Vim.
  • Yankstack – A plugin to give kill ring capabilities to the Vim.
  • Block Shift – Visual block shifting in Vim.  Tab and un-tabbing, spacing, and block selections are all covered.
  • Vim Adventures – Learn Vim while playing a video game.
  • Awesome Vimrc – That is the name its developer gave it, not mine.  Still, it is a pretty cool, VERY clean vimrc file that has a lot of good examples in it.  Also can be found on github.

Misc

  • Programming Books – List of freely available programming books.
  • Effing Package Manager – Create rpm, deb package building directly from gems and bundler.
  • View your Axciom Data – Axciom is one of the largest data brokers of personnel information on the planet.  This website allows you to see the data that Axciom has on you.  The downside?  They get to keep the data you have to submit to see the data they already have.
  • Large Distributed System – Advice from people who build Google.
  • Faynmen Lectures on Physics – Everything you have ever wanted to know about almost everything that we think we know.
  • Nginx Secure Configuration – Setting up and securing nginx with ssl.
  • Debugging Broken postinst on Debian – Basically the postinst file gets installed anyway, so you just need to edit it on the semi-installed machine and then run it again… until it is fixed.
  • Bruce Schneier’s Sept 2013 Cryptogram –  Read this if you want a better explanation of why you should be VERY VERY afraid of what the NSA and large internet companies are doing.  Some articles are very technical but others are surprisingly approachable to the lay person.

I am not a link bot… I hope

Once again my desktop has become to cluttered with links.  Here are some of the ones I have been using the last couple weeks.

Vim

  • Vim Cheet Sheet – A short list of useful Vim commands & short-cuts.
  • Vim copy and past commands – Setting blocks, yank, paste, cut, etc.. in vim
  • Vim word completion  – Found this more useful after binding it the completion command to the tab key (aka bash mode.)
  • Remove unwanted spaces – Because some “people” think using spaces instead of tabs is a good idea.
  • Accessing the System clipboard in Vim – Because Vim registers do not necessarily map to the OS clipboard.  The quick summary is that I would strongly recommend putting the following alias in your .bashrc if type “gvim” > /dev/null; then alias vim=”gvim -v”; fi then make sure you have gvim installed.
  • Using Vim Registers – Actually using the registered mentioned above.
  • Pasting in Visual mode – Using registers is great but not really useful if you keep having to switch back to command mode to use them.

DBus

Ruby

  • Singing with Sinatra Pt. 2 – Sinatra is a ultra simplified application server environment for Ruby.   Think Rails only about 1/10th its size.  This was the best of the tutorials I found for it.
  • Thin Server Production and static files – This little blurb was something I caught on StackOverflow and knew I would need for later as our production system is running into the same issue.
  • fpm (freggin package manager) – Tool for creating deb/rpm packages from lists of filesystem files.  Particularly useful for gem files (it even has it as an option.) I am in the process of moving over my existing ruby build scripts over to fpm.

Debian

  • Creating Meta Packages – Meta packages are simply empty deb packages that contain nothing but a list of dependancies.  This way you can create a batch of files to be installed for a given purpose (like installing KDE Desktop.)
  • equivs-control man page- Used in the creation of Meta packages
  • Binary Package building tutorial for Debian – The deb build package environment basically builds itself around have source for all software.  This is a problem for packaging non-open source programs that don’t provide a source.  This is a tutorial for how to do it.
  • Template Changes file – Debian apt repositories generally work with .changes files to actually publish their packages.  This is an example of a changes file for the package dpkg-ruby.
  • Create you own apt repository – Includes information on upload support (which uses changes files mentioned above.)
  • Creating a basic Ruby application structure – How to create you base dependencies, directory structure, and file-system layout for a base Ruby project.

Looking for Trouble

My goal in life (and this blog) is not to become a gigantic link-bot but I never seem to finish all the articles I want to save and return to… until I do. So here is the most recent reading life I have for June of 2013.

Other Technology

  • Build Your Own Google TV using Linux, Nodejs, Socket.io, Linux, and a RaspberryPi
  • arkOS your own personnel home cloud (without the NSA) on a $35 RaspberryPi.
  • TTYtter a command line based twitter client for Unix.  Can be run in disconnected mode (for a stand alone twitter “bot”), has some initial support for libnotify, and can even be scripted.
  • Using Git to backup $HOME One developers experience using Git as a home directory backup, tracking, and versioning system.  I am working on the same idea right now.
  • Configuring Keyboard Layouts on a per keyboard basis.  Particularly useful when F*$*(#NG Apple decides to move the Alt and Cmd keys from their 30 year old locations… but all your USB keyboards use the default locations.

Start-ups and Business

  • Startup Advice 95 pieces of advice Sam Altman has heard about creating, managing, and developing a startup.

Software Development

  • Shortcut Training Interval Training for learning keyboard short-cuts.  Including Vim & Emacs
  • Github Pre-commit hooks StackOverflow topic discussing setting up and testing pre-commit hooks on Githubs JSON API.  Github actually has a pretty decent into into some of their other hooks as well, see Post-Receive Hooks and Testing webhooks
  • Complex Responsive webapps more of a personnel anecdote than a tutorial but has some really good information on building responsive websites… after the fact.
  • Introducing Foreman Start-up manager for multi executable webapps.  Specifically in Ruby

Debian Linux

  • mini-dinstall On-line man page for mini-dinstall.
  • dh_install StackOverflow explanation of setting up a simple direct copy install rule for deb packages.  Particularly useful for web deployment packages.
  • gem2deb Github project page for gem2deb software.  Helps in created deb packages from Ruby gems also check out the Debian Ruby Packaging Team Wiki.
  • deb package building Debian.net forum post covering package building.  Some useful tips from here.  Honestly, RPMs are still my preferred method for building software packages.
  • debchange manpage debchange is probably the simplest way to create changelog entries in Debian.  Changelog formatting (a requirement to build packages) is a seriously painful process without this.
  • Debian Maintenance Guide This is chapter 4 that specifically covers debian directory file requirements when building deb packages.  Chapter 6 covers building, the Mentors FAQ  and Package FAQ have some good information as well.
  • Debian Admin Handbook Particularly this chapter (15.3) covers setting up an APT package repository using mini-dinstall.
  • Using dput with mini-dinstall A quick tutorial on using these two systems together.
  • dpkg cheatsheet Because I didn’t know how to do rpm -qi and rpm -qa in dpkg.
  • Debian Ruby Packaging Team Info includes tools, tips, standards, and links to information about packaging Ruby gems on Debian.

I’ve been things and seen places

Link dump for May 2012. Some of these have been sitting on a browser tab for months and simply needed to be moved for posterity.

Time Management & Business Development

  • Momentum is a hell of a drug An amazing article by Zack Shapiro that points to the fact that success builds on success.
  • 26 Time Management Hacks Time management is one of the other major subjects I have been studying as I grow my own business. There are a couple good ideas in this slideshow, and a bunch of retread.
  • Spending Time Efficiently Ideas about how to better spend the time you are wasting. However, already remember that the time you ENJOY wasting is NOT wasting time!
  • Rainy Day Ideas for Growing Your Business Some suggestions on things to help grow your business when you find some extra time on your hands.
  • The $5 Guerrilla User Test Hallway usability tests are the basis for much design methodology for new tech startups. This is an improvement on that idea when you are needing to bring your testing to the next “level.”
  • Productivity Hacks for Startup Dads Some nice tips on being productive, a father, and a business founder… all at the same time.
  • The Power of Habit Adding to my already unfinishable reading list. Change your habits to change your life.
  • The Rands Test Evaluate how well your company communicates between management and their creators.

Technology

  • Building Handbrake on Fedora 18 I was going to write this tutorial myself, but then I found somebody already had. If you backup your DVD collection, Handbrake is the easiest of all the tools you can use.
  • The Fish Shell An interesting replacement for the Bourne Again Shell.
  • GitLab.org The software that I am in the process of replacing my old Git repository manamgement with.
  • Linux Web Media Players Quick overview on setting up Netflix, Hulu, and Amazon to use on a Linux Media Player (for example XMBC or LinuxMCE.)
  • Video Screencasting with Vokoscreen Screencasting tool for Linux. Currently in Beta.
  • Building a SIP/Raspberry Pi Phone Using Twilio, Asterisk, FreePBX, and the Obihai OBi100. The extendability options are endless (how many thousands of businesses run Linux based FreePBX/Asterisk without even knowing it.)
  • Shell Helpers Copy and paste from your command line directly to Klipper on KDE!

Application Development

  • ownCloud OpenSource Dropbox replacement that can be hosted on your own hardware. Includes a plugin interface that dramatically extends the functionality.
  • Big O Complexity A cheat sheet for search algorithm time complexity.
  • Statistical Formulas for Programmers Because to many developers think Excel SUM is sufficient for data reporting.
  • The RESTful CookBook It is scary how much of my development time is mixed between REST and JSON. This is a pretty good “Cookbook” style web document on REST implementation recipes.
  • GruntJS Task Stager Setup your build staging pipeline with a Node.js task runner. Helps with things like minifying, compiling CoffeeScript, and unit testing.
  • Pure, Responsive CSS Fairly new CSS framework for responsive web design.
  • Git Tips Git tips that can keep you from getting fired. Things like setting up git hooks and file level ignore. CHECK OUT THE COMMENTS, some of the tips are even better than the article.

Other Stuff

  • The Perfect Mojito I have never been a fan of Mojitos but we had the mint and decided to try one from scratch. WOW… Just WOW! They are amazing when you don’t use one of the store bought mixes… and good rum!

If the line is good

Found a couple links to articles that discuss Linux usage across a number of different markets.  Just citing the authors:

All of the above noted, Linux desktop usage still hovers around 1-3%