I finally purchased a programmable battery charger.

I went with the Maha PowerEx MH-C9000 that I mentioned last year. Since purchasing the charger a couple weeks ago, I’ve been geeking out about batteries. I’ve labelled all of my Eneloops and started a database where I log the purchase date, capacity, and other information. I’ve put the database in git so that I can track the performance of an individual battery over time. The database is on GitHub.

Vuurwapen Blog is one of the only firearm-centric blogs that I subscribe to.

Andrew’s reviews and analysis are intelligent and refreshingly concise, particularly when some people feel the need to put out 45-minute videos in order to communicate 3 minutes of content. Unfortunately Vuurwapen Blog will no longer concern guns. Fortunately, Andrew will be writing about firearms at LuckyGunner Labs and Vuurwapen will still be around to focus on other topics.

Leaving Twitter Behind

The web has been moving more and more towards a centralized structure. Services like Twitter, Facebook, Google and Flickr are all examples of this. To me, it is a disturbing trend. It’s bad for the internet as a whole, and on a more personal level is damaging to individual liberty and freedom. Lately, I’ve been making a stronger effort to forgo these services.

During the year that I took off from blogging, I maintained a steady presence on Twitter. When I decided to relaunch my blog, I knew I wanted to integrate Twitter-like microblogging into the site somehow. Looking over my Twitter history, it was clear that I was predominately using the service for one thing: sharing links. There’s no reason that I couldn’t do that on my blog. In fact, some of the earliest web logs were simply lists of interesting links.

I rarely participate in conversations on Twitter. I find it to be a horrible medium for that. Conversations that begin with microblog posts can be handled with any blog comment software (and I think the resulting experience is much improved over what Twitter can offer). If you use Twitter to contact people and start conversations, a blog probably won’t work for you. (But there’s a great distributed social networking platform out there that you might want to look into. It’s called email.)

Initially I considered adding a new model to vellum for microposts. When I thought about what a micropost is and what I wanted to do with them, I decided that modifying vellum was unnecessary. I’ve seen some people claim that microposts don’t have titles, but I think that’s incorrect: the primary content is the title. In addition to the title, the micropost needs a place to include the URL that is being shared. Why not just put that in the post body? The URL can simply be pasted into the field, ala Twitter, or included as an anchor tag contained within a new sentence. All that I needed was to uniquely style the microposts.

I decided to place all microposts in a new micro category. Posts in that category are then styled differently. This allows the user to quickly differentiate these short microposts from the more traditional, long-form articles. It also helps to represent the relationship of the title and the rest of the post.

With this in place, I no longer had a need for Twitter, but I still wanted to feed all of my posts into the service. I know some people use Twitter as a sort of weird feed reader, and I have no problem pumping a copy of my data into centralized services. As it turns out, there are a number of services out there that will monitor a feed and post the results to services like Twitter. I started out with FeedBurner, but this seemed like overkill as I had no intention of utilizing the other FeedBurner offerings (giving up control of the namespace of your feed is another instance of the craziness associated with the move to a centralized web). After some brief experimentation, I settled on dlvr.it.

This accomplishes everything that I was looking for. All of my blog posts, micro or not, are now on my blog (fancy that). I retain ownership and control of all my data. Everything is archived and searchable. I’m not depending on some fickle, centralized service to shorten the links that I’m trying to share. People who want to follow my updates can subscribe to my feed in their feed reader of choice. My activity can still be followed in Twitter, but I don’t have any active participation in that service.

I’ve found that not attempting to restrain myself to a character limit is like a breath of fresh air. Previously I was able to share links only. There was little-to-no space left over for commentary. Now I can include my thoughts about the link being shared, whether it be a book that I’m reading or a news article that piques my interest. This is more satisfying to me, and I think results in a more meaningful experience for those who are interested in my thoughts.

Since moving to this system, I’ve only launched my Twitter client two or three times. I’ve found that I don’t miss the stream. I never followed too many people on Twitter. Many of those whom I did follow maintain some sort of blog with a feed that I subscribe to. Some don’t. That’s unfortunate, but if your online presence exists solely within a walled garden, I’m ok with not following you.

The wear pattern on my running shoes indicates good form.

The ball area is worn down to a far greater degree than the heel, which demonstrates that the shoes are not inhibiting my natural form.

Running Shoe Wear Pattern

Currently reading Escape the Wolf by Clint Emerson.

The book is in a similar vein as Gavin de Becker’s The Gift Of Fear (a book I strongly recommend), but with more acronyms and typos. Clint Emerson focuses on external awareness more than the internal awareness discussed by de Becker. There are some good tidbits in it, but overall I would award the book a “meh” rating.

I've had a critical opinion of soft-shells for a number of years.

While I still maintain that their versatility and environmental appropriatedness is limited, I have been coming around to their use a bit more over the past year or so. I have a pair of pants that I am quite smitten with and have been considering giving a jacket another shot. Over at Cold Thistle, Dane Burns recently completed a series comparing different soft-shell jackets and their appropriateness for climbing. Now he has published a selection of reader comments that were elicited by the reviews.

I reviewed the Hill People Gear Kit Bag on ITS Tactical.

Read the review and then go give your money to Hill People Gear.

Kit Bag: Docked

Resilient Communications with Continuous Wave Radio

Codegroup is a program written by John Walker that encodes and decodes any file into groups of five letters. For example, take an image, run it through codegroup, and this is what you get:

$ cat avatar.jpg | codegroup | head -n 4
ZZZZZ YPPNI PPOAA ABAEK EGEJE GAAAB ABAAA AABAA ABAAA APPPO
AADLE DFCEF EBFEE PFCDK YCAGH GECNG KHAGF GHCAH GDBCO DACAC
IHFHD GJGOG HCAEJ EKEHC AEKFA EFEHC AHGDG YDCCJ CMCAH BHFGB
GMGJH EHJCA DNCAD JDAAK PPNLA AEDAA ADACA CADAC ACADA DADAD

The resulting code groups lend themselves to being transmitted via low-tech, resilient means, such as continuous wave radio. The ability to do this with any file is a simple but amazingly powerful concept.

I discovered codegroup around the same time that I was learning Morse code. I decided to take advantage of codegroup and put what I was learning into practice. This led to the development of morse.py.

With codegroup, I end up with a series of ASCII characters. I wanted to be able to feed those characters into a program which would convert them to Morse. The program should display the dits and dahs, but more importantly: it should beep them out.

morse.py is a simple script which does just that. It accepts ASCII input and encodes it to International Morse Code. The Morse is printed to the screen, in case you want to key it out yourself. Johnathan Nightingale’s beep.c is used to play the beeps with the terminal bell. The length of dits, dahs, and the pauses in between are configurable, but the defaults conform to International Morse. The input can be a file, but if no file is specified the script simply reads from standard input, which allows it to be piped together with codegroup.

$ morse.py --help
usage: morse.py [-h] [-b BEEP] [-s SPEED] [-f FILE] [-q]

Convert an ASCII file to International Morse Code and play it with system
beeps.

optional arguments:
  -h, --help            show this help message and exit
  -b BEEP, --beep BEEP  The location of the program that plays the beeps. This
                        script is intended to be used with Johnathan
                        Nightingale's beep: http://www.johnath.com/beep/
  -s SPEED, --speed SPEED
                        Reduce the pauses between message characters by the
                        given amount.
  -f FILE, --file FILE  The location of the ASCII file to convert.
  -q, --quiet           Do not print the dots and dashes.

What is the application? Suppose your government has shut down your internet access. You want to send a map to an acquaintance. With these tools, you can encode the map with codegroup, pass the result to morse.py, hold your radio up to your speakers and key the mic. That’s it. Censorship bypassed.

$ cat map.pdf | codegroup | morse.py -b ~/src/beep/beep

On the receiving end, the Morse needs to be translated back to ASCII characters, which can then be decoded with codegroup. It’s a slow process, but resilient. To speed things up, the file being transmitted can be compressed before being passed to codegroup. (And if privacy is a concern, the file can also be encrypted, but that would be illegal unless you are doing so to protect life or property.)