Morse Ringtones

I am such a geek. In order to hopefuly help me learn morse, I now have morse ringtones for most of my friends and family.

I spent some time putzing around with pulse audio on the laptop trying to record these myself, and then found http://morseringtones.com.

So I wrote a script to slurp down ringtones, I just add a name or callsign to lists.txt and run generate.sh

#!/bin/bash

for i in $(cat list.txt)
do
if [ ! -f "${i}_medium.mp3" ];then
   wget -O /dev/null "http://morseringtones.com/cgi-bin/generate_ringtone.sh?text=${i}&speed=medium&pitch=600&repeat=3" 
   wget http://morseringtones.com/working/${i}_medium.mp3
fi
done

Backing up pinboard.in

I try to be constantly aware of what things in my digital life need to be backedup. One of the things that I have NOT been backing up on a regular basis is my pinboard bookmarks.

I found a post about doing this and stuck it on my todo list.

When I finally got around to implementing the python script that was included in the post however, I found that I did not have a module installed and it was not show up in a quick 'apt-cache search pyzt', so I looked a little closer at it, and at the pinboard api and discovered that all I really needed was a single commandline:

/usr/bin/wget -O ~/Dropbox/pinboard/pinboard_backup.xml "https://api.pinboard.in/v1/posts/all?auth_token=$(cat ~/.pinboard-credentials)"

My ~/.pinboard-credentials file contains my pinboard API token from pinboard.in/setttings/password exactly as it is presented on the webpage.

So I dropped that into my crontab as a daily item, and now I will have a daily backup of my pinboard bookmarks.

For those of you that are going to point out that a single file that gets clobbered every day is not a 'real' backup, my dropbox folder is backed up to both SpiderOak and to a duplicati backup.

xmonad + x11vnc + xmodmap

I like to use vnc to connect to existing x11 sessions on my linux workstations. I have recently, since installing archlinux on my T60, found the xmonad X11 window manager.

As someone that uses screen and tmux on a daily basis, xmonad seems like a good fit. Yes, I have run ratpoison in the past, I am digging xmonad more right now.

The only problem with using the x11vnc package with my current setup is that vnc doesn't capture the windows key, and sending ctrl-esc doesn't work.

At first I thought I would just configure a second mod key for xmonad, but it only supports the one. There being more than one way to skin a cat in the linux/unix world, I turned to xmodmap. Xmodmap allows you to remap keys.

My current .xmodmap file looks like this:

remove mod1 = Alt_R
add mod4 = Alt_R

This allows me to use the right alt key as an additional modifier along with the windows key, which is mod4 by default.

Electronic Communications Privacy Act (ECPA), not all that private

A friend on G+ linked to a story on the verge about changes to the Electronic Communications Privacy Act (ECPA). The verge.com story is a summary of a longer article on CNET.com. Instead of providing more protections from warrantless digital survelience, it now offers much, much less. Please contact your senetators, let them know that we need more protection, not less. We need warrants signed by a judge, not just a subpoena.

I am at a loss as to why regulatory agencies like the FCC, FTC, National Labor Relations Board, OSHA or SEC to name a few would need access to email, twitter, facebook, google docs, etc.

Again, please contact your senators and let them know that this is a bad idea.

nanoblogger to octopress notes

It turns out that converting from nanoblogger to octopress wasn't all that difficult with a little help from my friend perl. The only hiccup that I ran into was that the title line is kind of picky. It's a really good idea to enclose the title in quotes.

This perl script will process each txt file into a markdown file that should mostly work with octopress. One of the downsides of octopress is that if there is a problem, it does not tell you which file is causing the failure.

#!/usr/bin/perl

use strict;
use warnings;
use Carp;
use English qw( -no_match_vars );
use File::Glob;

# nanoblogger filename
# 2012-03-21T04_28_49.txt

# octopress filename
# 2012-11-18-octopress-instead-of-nanoblogger.markdown

# octopress header
# ---
# layout: post
# title: "Octopress instead of nanoblogger"
# date: 2012-11-18 14:37
# comments: true
# categories: [blog, software, shell]
# ---

my @files = <*.txt>;

for my $file ( @files ) {
    my ( $date, $time, $body, $title );

    if ( $file =~ m{([0-9-]+)T(\d{2}_\d{2})\S+[.]txt}xms ) {
        ( $date, $time ) = ( $1, $2 );
        $time =~ s{_}{:}g;
    }

    open my $input, '<', $file or croak qq{ERROR: $OS_ERROR};

    my $text_string = do { local $/; <$input> };
    my @text_array = split( /\n/, $text_string );

    close $input or croak qq{ERROR: $OS_ERROR};

    for my $line ( @text_array ) {
        if ( $line =~ m{TITLE: \s+ ([\S\s]+)}xms ) {
            $title = $1;
        }
    }

    if ( $text_string =~ m{BODY:\n(.*)END-----}xms ) {
        $body = $1;
    }

    if ( defined $date and defined $time and defined $body ) {
        my $file_title = $title;
        $file_title =~ s{\s+}{_}g;
        $file_title =~ s{[:]+}{_}g;
        $file_title =~ s{[,'".!;&?]}{}g;
        $file_title = lc( $file_title );

        my $filename = qq{$date-$file_title.markdown};
        print qq{$filename\n};
        open my $output, '>', $filename or croak qq{ERROR: $OS_ERROR};
        print {$output} qq{---\n};
        print {$output} qq{layout: post\n};
        print {$output} qq{title: $title\n};
        print {$output} qq{date: $date $time\n};
        print {$output} qq{comments: true\n};
        print {$output} qq{categories: \n};
        print {$output} qq{---\n};
        print {$output} qq{$body\n};
        close $output or croak qq{ERROR: $OS_ERROR};
    }
}

EverQuest - Project 1999

Some friends that I used to play EQ with, and then played WoW with, told me about Project 1999. So I went and poked around at it.

It is awesome.

The goal is to get as close to EverQuest in 1999 as possible. Two expansions, Kunark and Velious. That's it.

Since Velious was my favorite expansion of the game, this looks like it could be lots and lots of fun.

Some additional files that are not required but can be usefull are at http://p99.yourfirefly.com/

While Velious was my favorite expansion, I really liked the models that came with Luclin. So, here is how to turn them on for Project1999: Enable Luclin models

I also kind of like being able to tweak the UI a little. Thankfully, someone got Vert UI working. This and SARS back in the day were my two go to UI mods while I was still playing.

I have recreated some of my favorite characters here, this should be fun.

Drastor, wood elf druid  
Daoga, ogre warrior  
Frezick, gnome necromancer  
Wiggon, dwarf priest

back to my roots

This past Tuesday I picked up a Lenovo T60 from UW SWAP it was kind of an impulse buy, but it also fills a desire for an intentionally lower end laptop to run PC-BSD or Debian on.

I named the "new" laptop trorbok, which is norweigen for "Think Book", at least according to Google translate.

I dropped PC-BSD 9.0 on it right away, and discovered that on the T60 it doesn't apparently handle suspending. So, along comes Debian to the rescue. Suspend and resume works.

At first I was using Gnome, as that is what I have been using for the last several years on my laptop. Then I remembered ratpoison.

So after a little bit of futzing to get xterm to behave, it's been a while since I used anything besides putty ( on Windows ) or gnome-terminal.

After using the trorbok for only a couple of days I realize how much more I like the keyboard on it than the keyboard on my macbook ( which is running Ubuntu 12.04 LTS ). The "chicklet" keyboard just doesn't "feel" right to me. But then my first keyboards were on a Commodore64 and a Toshiba T1100+. I still have an old style mechanical switch keyboard that I am seriously thinking of sticking back on the desktop in my office/hamshack/workshop.

package file invalid error fix

From androidforums.com

I finally ran across a fix for the package file invalid that seems to have worked. I had tried clearing the cache and dalvik cache multiple times with no success.

I installed sshdroid, and already had superuser installed.

I then sshed into my phone ( cool, right? ) and did the following:

/system/etc/init.d # mount -o remount,rw,noatime /system
/system/etc/init.d # mv 01mvdalvik /mnt/sdcard/01mvdalvik.old

Went back into the phone settings, cleared the cache, rebooted into recovery, cleared the cache and the dalvik cache. Reboot, voila, I can install things again. But I think I need to move the 01mvdalvik back to /etc/init.d.

But I also see that there is a new version of Harmonia for my Optimus V, so I may just go down that road.

updates to gnupg key

It's been a few years since I actively worked with Jesse Trucks & Cyberius' Networks, and it's been on my todo list, kind of, for a while to get around to updating my gnupg key to reflect this. So this morning, I finally did.

It should be updated on the key servers, but in case they are lagging a little, here is the export and a link.


pub   1024D/B4649435 2005-06-30
   Key fingerprint = 4563 465A C240 A183 F849  09EE 202E 9CE2 B464 9435
uid                  Matt Okeson-Harlow <matt@technomage.net>
uid                  Matt Okeson-Harlow <mharlow@grephead.com>
sub   2048g/C982B115 2005-06-30

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.10 (GNU/Linux)

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
NwgMrA/Hk/g6JXTWf4II2cjJ
=6XSG
-----END PGP PUBLIC KEY BLOCK-----