PhotoAlt
May 11

Image Post

:D I type fast…129 breaks my six year record of 127wpm. Yup, I have my wpm record memorized. Useless? Possibly! Addicting? Surprisingly! Used to be, after failing to increase my speed after wasting half an hour on that test, I’d start convincing myself I needed DVORAK to go faster, but I’ve always been too lazy.

I’ve been using this typing test probably for seven or eight years now, their website hasn’t changed a bit: typera.tk

Dialogue in the Dark

We went to see Dialogue in the Dark the other day at Atlantic Station. (Or, I guess, we went to not see it, to be accurate.) They gave everyone a walking stick, and then brought us inside a room with these nifty lighted ottoman chair thingies. They gradually dimmed the light until we were in complete darkness - there were ten of us in the group going on it together.

I don’t want to give any specifics, as it could ruin the experience if you know what you’re getting yourself into, but it was definitely fun. I was kind of apprehensive going into it, because, I mean, I like being able to see! Darkness is scary! But, everyone in the group made fast friends in the dark out of necessity - we were bumping into each other all the time. It was a completely different experience just interacting with people through their voices and not being able to read their facial expressions; sometimes people’s voices gave me a different impression of them in the dark than what I was able to see in the light.

I found it interesting that once we got back to the light, we more or less immediately started acting like strangers again, despite helping and talking to each other during the exhibit. I guess it makes sense, as we all actually were strangers and we didn’t have anything in common, but I guess I was hoping we’d all made new friends together.

an about page?

I’m too lazy and impatient to go back and figure out how I edited my theme to make a custom about page look good (what? float divs left? tooooo hard) and too proud to admit that it would probably take me hours to do, if I weren’t so lazy and impatient. So instead, I’m just gonna use this post as a placeholder until I come back to it, and point my /about at this. Problem solved, formatting done by previous me. Go team.

For the time being, I like all the things that are tag-linked at the top. I don’t like that the search bar up there is useless, and I should probably remove it. After completing my MS in Mechanical Engineering last year, I’ve been working in QA with a focus on automation (read: selenium) and build management, and I’m really enjoying it. I like posting solutions to my work problems with the lofty ideals that I’m contributing to the available pool of knowledge on the internet. At the very least, I know I’ve referenced my own tech posts a few times so that was fun :).

I use this tumblr as a record of what has interested me and more recently what I’ve been learning at work. Recently I’ve started picking up rock climbing and it is way super fun and you should totally try it out. In closing, it’s past my bed time and I am going to be tired tomorrow. Bummers.

PhotoAlt
Feb 06

Image Post

hmph, no idea what the tournament this weekend was even called. It was fun though, 2-4 on the weekend with wins over UGA B and GSU B. The rookies really stepped up and played really well on Sunday, especially (surprisingly?) in zone offense sets. As usual I can pretty easily remember the points where I messed up (two red zone possessions that I as main handler couldn’t put in, numerous poor huck decision turns, one un-covered doink, bad poach D resulting in score, a couple in-cuts I could’ve stopped as a defender…it’s a long list), but there were some pretty nice moments too. 

I spent a whole point connecting with Tyler with amazing backfield handler motion. Solid resets just marching it up the field, taking wide open in cuts when they were there. I had some glorious puts, way out in front (one making Wes look like a boss with a sweet layout). I poach D’d a deep put at the full height of my vertical, just barely nicking it with my middle finger. Only one successful layout D but it was in the end zone so it counts extra :D. 

I want to work on my endurance defense and shutting my guy down completely. When I match up against a good player I can usually take away his first and sometimes second cut completely where I’m either right on his back or in position for a layout D, but I just don’t have the legs anymore to challenge the third or fourth - I usually just stop running because I’m so tired. This probably means I need to run more for endurance, despite how little fun I may find it.

SO MUCH FUN :D go tribe 

Feb 03

Text Post

#me

dat milledgeville

Heading to Milledgeville this weekend for an ultimate tourney. Hoping to be too sore to walk on Monday :)

PhotoAlt
Jan 14

Image Post

I finally went to Quickly. This is honeydew flavored liquid happiness. Apparently they’re also in the Philippines? It was one of the countries listed in the bottom. 

Jan 12

Video Post

My board is an Option 2008 Forecast ? Or something like that…I’m pretty sure they went out of business, though. Brown 2008 Union datas. DC Hertz trailmap jacket and some Session pants. I love my gear, even it it makes me look color blind :D

Selenium WebDriver, Perl, and Saucelabs.

Last year, Selenium introduced WebDriver, an automated browser program that runs the browser in the same way that a user would.  Saucelabs offers a way to test multiple browsers on multiple operating systems in parallel, completely automated, by running the Selenium software and selling time on their servers. Perl is fun. Saucelabs doesn’t have documentation for connecting to their OnDemand service using WebDriver and Perl, so I’d like to explain how to do that. 

Using Gordon Child’s Selenium::Remote::Driver, it’s pretty straightforward to use Perl to run tests on Saucelabs using WebDriver. Get Selenium::Remote::Driver if you don’t have it (sudo CPAN install Selenium::Remote::Driver). 

#! /usr/bin/perl
use strict;
use warnings;
use Selenium::Remote::Driver;

my $desc = "perl webdriver bindings and selenium!";

my $login = "loginName";
my $apiKey = "myApiKey";
my $host = "$login:$apiKey\@ondemand.saucelabs.com";

my $driver = new Selenium::Remote::Driver(
'remote_server_addr' => $host,
'port' => "80",
'browser_name' => "firefox",
'version' => "7",
'platform' => "WINDOWS",
'extra_capabilities' => {'name' => $desc},
); $driver->get('http://www.google.com'); print $driver->get_title(); $driver->quit();

Plugin your login name and api key and that should get you up and running. The script opens FF7 on Windows 2003, gets google.com and outputs “Google” as the title of the webpage. 

For anyone using the Selenium RC WWW::Selenium bindings, things are a bit different in Selenium::Remote::Driver - namely, many of the events (clicking, getting information) are done as methods to a new Selenium::Remote::WebElement object, not the selenium driver object. It was a bit of a pain to migrate over, but I think it’s a lot cleaner now. So far, everything I did with WWW::Selenium I’ve been able to duplicate with Selenium::Remote::Driver, and in most cases it’s much simpler and more elegant :)

Using Perl’s CPAN Library Without Root

At my work I ssh into a linux box somewhere in the cloud. Since I’m not Ops, I don’t have root access on the box, but I am consistently running into situations where I need to install modules from CPAN on to the box. Without sudo, I was having a lot of trouble writing code with new functionality and not being able to utilize the CPAN library.

But, luckily, stackoverflow came to my rescue. Or, in particular, Chas Owens did, with the following simple three lines:

wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
echo
'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile

So, the first line runs a script to install App::cpanminus and local::lib. cpanm is CPAN without all the customization options, so you can just cpanm Module::Name and not worry about a thing. local::lib lets you install to non-root directories. The second line uses local::lib to tell perl where to look for the new modules, and the third line exports it to ones .bash_profile so it’s used each time we log in.

Finally, since the scripts I’m writing actually get run as root, 

use lib("~/perl5/lib/perl5");

I just have to insert that line into my script to tell perl where to look. 

tl;dr - I <3 CPAN & stackoverflow.

Nov 23

Video Post

This cover immediately puts me in COME AT ME BRO mode.

COME AT ME BRO LETS GO WE GOT THIS 

COME ON

(bonus: the “yes! oh my god” sample from the song is from a cup stacking video)

OS X Lion doesn’t always play nicely with CPAN :(

So, I am trying to set up the Net::IMAP::Simple::SSL perl module installed on my Macbook running OS X Lion 10.7. BUT ALAS apparently Apple uses a stupid deprecated version of gcc in the bloated 4.5gb Xcode, leading my sudo cpan install Net::IMAP::Simple::SSL command to fail during the installation of the EV module.

The exact error code was

t/11_signal.t …… 1/24 Argument “EV::RUN_ONCE” isn’t numeric in subroutine entry at t/11_signal.t line 48.

So, intrepid explorer that I am, I threw that into Google in hopes of stumbling on to someone else’s solution. Lucky for me, the first result was a mailing list post about my exact problem, and the first response to that post contained a link to a submitted bug at LLVM.org where the final comment contained a tiny patch to one the EV.xs file in the EV module.

I downloaded the tarball of the EV module from CPAN and did the usual:

tar -xvzf EV-4.03
cd EV-4.03
perl Makefile.PL
// says some stuff
make
// says some other stuff
make test
// says some more stuff, then breaks

As expected it was throwing the same error from before. According to the bugfix from the LLVM.org, I needed to change one and a half lines of code in EV.xs so I opened it up in Emacs and M-g g’d to line 426 on a whim. (Probably more reliable would’ve been C-s newCONSTSUB). Around there, I added in the lines

const void* civ_start = const_iv;
for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ— > civ_start; )

which replaced the old for loop above the newCONSTSUB thing. So, problems solved, thanks to the Google, no thanks to the stupid Apple Xcode gcc. Grrr…

EasyPG for Emacs on OS X, or sometimes Emacs doesn’t load the env paths you might expect

EasyPG is an Emacs package that allows you to interface with GnuPG (Gnu Privacy Guard) natively Emacs. It’s pretty handy to be able to encrypt files on your own machine for sensitive data, and the interface is largely transparent - files with the .gpg extension are automatically encrypted and decrypted for you. Nifty, eh?

According to the EmacsWiki, Easy PG is included in the more recent versions of Emacs (22+ iirc), but when I tried to save a file as .gpg, I’d get the following error in my minibuffer:

Searching for program: no such file or directory, gpg

So, I figured, cool, I guess I don’t have it installed. ‘which gpg’ and ‘locate gpg’ confirmed my suspicions, so I set out obtaining GnuPG. For OS X, there’s a pretty handy automatic installer over at MacGPG and the dmg even had an uninstaller. I ended up using homebrew (‘brew install gpg’) since that was a bit simpler.

So now here I am with a working copy of gpg, fixed up my $PATH with ‘/usr/local/bin/’ where gpg was located, and Emacs was still giving the same error! “Searching for program: no such file or directory, gpg.” I gave up a few times because I was sure I had gpg in the right paths, and everything was pointing to the right places; even opening up a shell within emacs I was able to access gpg.

As it turns out, there are some peculiarities that one might encounter when running Emacs as an application on OS X. In particular, Emacs doesn’t pick up the $PATH variable unless you tell it to, and the shell won’t read off of ~/.bashrc unless you tell it to. This apparently only occurs when running Emacs off the dock or from Spotlight or something. Since my Emacs is running from a shortcut on the dock, I finally found my solution!

Explicitly adding the path to gpg in my ~/.emacs fixed the problem as expected; joy and happiness abounded. In case you’re curious whether your exec-path has what you’re expecting, ‘C-h v exec-path’ is the command you’re looking for. And now, I can encrypt and decrypt things at will, oh boy!

(add-to-list ‘exec-path “/usr/local/bin”)

Alternatively, it seems like you can also manually set the path to gpg in the epg-gpg-program variable: (setq epg-gpg-program “/usr/local/bin/gpg”). For extra credit, I also edited /etc/profile so that the Emacs shell would pick up the proper $PATH environment too.

#/etc/profile begin
    if [ -x /usr/libexec/path_helper ]; then
        eval `/usr/libexec/path_helper -s`
        defaults write $HOME/.MacOSX/environment PATH "$PATH"
    fi
    #/etc/profile end

Using an Identity File in Emacs Tramp Mode

Emacs has a remote editing mode where you can login to a remote computer via ssh/whathaveyou, and edit the file with your local emacs instance. This is particularly awesome if the remote box doesn’t have any flavor of emacs, and instead only has vi. The mode is called Tramp

TRAMP stands for `Transparent Remote (file) Access, Multiple Protocol’. This package provides remote file editing, […] using a combination of rsh and rcp or other work-alike programs, such as ssh/scp.

It’s pretty straightforward to get Tramp installed. I followed the instructions in the manual and used cvs to checkout and update a local copy in ~/emacs/tramp, and then I added ~/emacs/tramp/lisp to my loadpath in ~/.emacs:

(add-to-list ‘load-path “~/emacs/tramp/lisp/”)
(require ‘tramp)

The problem I ran into was that I didn’t have a password for the box I wanted to ssh into. All I had was a .pem identity file. (Perhaps it’s also called an rsa key? I’m not really sure). Googling permutations of ‘emacs’, ‘tramp’, ‘permissions’, ‘identity’, ‘ssh’, ‘key’ and such was for once not providing me with a straightforward solution, but I got lucky on one search and ran into some stuff about the ~/.ssh/config file that solved the problem for me.

In ~/.ssh/config, you can specify an alias for a hostname and also specify default settings for that host, such as the username, identity file, and some other things. What’s more, Tramp will automatically pick up on these settings so if your ~/.ssh/config file has the identity file reference, Tramp will too :). My ~/.ssh/config entry looks something like:

Host ALIAS_FOR_REMOTE_BOX
   HostName REMOTE_BOX_ADDRESS
   Username DEFAULT_USERNAME
   IdentityFile PATH/TO/IDENTITY.FILE

So now, I can ssh into that box from the command line with just ssh ALIAS, or if I’m inside emacs, C-x C-f /ALIAS:/path/to/files.  Awesome :)

Current Personal Records

BW this morning: 156.8lb

Squat: 285lb for 5,5,4 (1.82xbw)
Bench: 165lb for 5,5,3 (1.05xbw)
OHP: 105lbs for 3x5 - last week (0.67xbw)
Weighted Pullups: +10lbs for 3x5
Weighted Chins: +5lbs for 3x5
Deadlift: 305lb for an ugly 1x5  - last week (1.95xbw)

There’s an ultimate tournament called Freaknik this weekend that is going to ruin all of this. I’m expecting to come back next week at around 260 on squats, 155 on bench, and 295 on deadlift. I just can’t manage to eat enough while at a tournament to prevent from losing strength, which sucks. More specifically, I just can’t manage to eat enough period. I’m at the exact same weight I was about a month ago, but my squat is up by 40lbs, bench is up by 15lbs, deadlift is up by 25lbs. I’ve been pounding protein shakes which are apparently making me stronger but not heavier. 2X BW DEADLIFT SO CLOOOOSE

The hardest part of Starting Strength for me is outside of the gym, I fail at eating enough :(

Page 1 of 3