2008
07.23

It’s been two weeks since I wrote anything and three weeks since I posted my pace charts. I’m getting lazier by the week when it comes to writing a training log entry. I’m working on something to simplify my workload, but it’s rather foreign to me, so there’s a steep learning curve.

Anyways, the weeks have been getting hotter by the day. I’ve been comparing the tempuratures registered by my car’s thermometer when I get in after riding in the vanpool and it went from the low 90’s to the upper 90’s, and now it’s been breaking over 100oF everyday. The heat is getting oppressive. After about a mile, every step is sweat dripping agony. I worked hard to maintain my pace under ever increasing distances but it’s growing harder and harder to even move.

I read and interesting article on NY Times about how people in the north have been dealing with the heat and it’s rather comical. Of particular note is the following quote:

On June 7, over 4,000 women ran the New York Mini 10-K race in Central Park. When the race began at 9 a.m., it was 71 degrees and the humidity was 78 percent. The winning time, 32 minutes 43 seconds, by Hilda Kibet, was the slowest in a decade.

“From the beginning, my legs were not really moving,” Ms. Kibet told The New York Times.

That same day in similar weather and humidity, in Cambridge, Md., nearly 1,400 athletes raced in the Eagle Man Half Ironman — a 1.2-mile swim, a 56-mile bike ride, and a 13.1-mile run. Among them was Amy Roth, 32, the director of corporate partnerships at the Whitney Museum in Manhattan. She had trained hard, but the run, in particular, was difficult in the intense heat.

“I felt like I was dragging along but I couldn’t move any faster,” Ms. Roth said.

Still, she ran at a mile pace of 8:07.

“There were very fast people, very good athletes, who were walking, who just couldn’t do it,” she said.

Afterward, some posted comments, agonizing over their sluggish times, on Slowtwitch.com. “You could see the neuroses: ‘Oh, my God, am I getting slower? What does this mean?’ ” Ms. Roth said.

The next day, 190 professional cyclists started the Philadelphia International Championship, a 156-mile race. It was 79 degrees at 9 a.m. start, and 94 degrees when the last cyclist finished in mid-afternoon. About half of the competitors dropped out. The winning time, 6:14:47, by Matti Breschel of Team CSC, based in the Netherlands, was nearly a half hour slower than last year’s time, when it was cooler and drier.

I can’t help but say these people are a) ill-prepared for a possible weather scenario, in the summer, and b) are just whining and looking for an excuse. Don’t get me wrong, when your body runs hotter than you’re used to, it can be grueling to do much of anything, much less run a race. This seems to be an egregious case, especially the 10K-ers, of pinning the blame on heat and not poor training.

I also fiddled with the Garmin on 30 June 2008 by accidentally deleting a lap while a workout was in progress. This results in the workout being stopped. Doing this twice means I ended up with three GPX files that needed merging. GPSBabel and was more than happy to solve this problem for me (still had to remove the track divisions so they were all part of one track point collection).

Anyways, I ran the annual Too Hot Too Handle 5K again this year. It’s the third time so far with my previous times being 31:06 and 27:51. This year I obviously had a late start in preparation, what with the qualification exam and all. I have been working real hard to not run and hide from the heat and learn to thrive in it; I was sure I’d be ready this year.

Sunshine and I headed out a little early so she could get some coffee while I picked up some batteries for the camera. About half-way to the venue, I realized I had left my bib on the dining table and we didn’t have enough time to turn around and pick it up. I figured I couldn’t possibly be the first person to forget a bib, so we forged ahead. I was right; they had a form to fill out. It actually worked out for the best because I was able to go to the end of the chip table, where there was no one trying to get the chip of such a high bib number, and snag my chip replacement in a hurry.

They decided to line up the 15K crowd with the rest of us 5K-ers, which meant there was surely going to be a strange split at about 1.5 miles. I wanted to try and push myself the best I could to beat last year’s time but I realized that might not happen with the mere 2 months of training. I was right again; about a mile into an 8:30 pace, I was huffing and puffing. My legs were stiff and my chest was already tired.

Not to disappoint, there was a redirection for the 5K route to go up a hill into the neighborhoods. Great, this was all I needed. My legs weren’t going to be able to handle a ton of hills and the first hill was brutal (as you can tell from the elevation chart). I walked it with great pride and a lack of knowledge as to whether this would be the last hill. It was and I was able to coast down for a while. I was really tired near the end of 2 miles. I had stopped to walk briefly too many times but I knew I had to just suck it up and finish strong. I finished with an official time of 28:31, just 40 seconds off last year (or about 13 seconds per mile). Not the greatest, but good considering. At least it was better than Keep Austin Weird and now I know I am catching back up to last year’s performance.

Sunshine and I enjoyed some freebees. I picked up another free Brooks shirt for being decked out in Brooks gear. I also enjoyed another beer; Stampede beer has now offered up free beer at 2 events I’ve attended and I always love to partake in free booze. We took some great pictures and I hope to get the photo publishing aspect to my site working soon.

20080630.png20080701.png20080702.png20080703.png20080705.png

20080707.png20080708.png20080709.png20080710.png20080712.png

20080714.png20080715.png20080716.png20080719.png

I just wish I could mentally push through pain like this man.

2008
07.10

I have a little gem I figured I’d share with the masses. I just ran through updating my Gentoo ~amd64 system (many many updates in the last 6 months) and found that there were still packages that had not been updated. I threw together a quick shell command to not only find all packages out of date but update them as well:

eix | grep '\[U' | perl -e '@p=<>;map{s/\[U\](.*)\n//;$i.=$1;}@p;print $i;' | xargs emerge -uD

So if you use the eix tool to greatly speedup package lookups, it’s output can be utilized to find packages that were not picked up by a recent emerge -uD world. The perl script most definately could be golfed further but I’d like to keep things readable.

2008
07.08

Last night I finally resolved a problem with the Rakudo test harness. I am fairly new to the perl development model, so I spent the last week or so gaining an understanding. I still have a plenty to learn, but I eventually learned what I needed to do to (temporarily) get changes into the parrotcode.

There is a long post on the Rakudo blog about what’s currently happening in Rakudo. I figured I’d just briefly mention a little bit more detail a few things that I had to figure out manually.

The harness is located in t/harness. The test harness builds a list of files based on the t/spectest_regression.dat. From there, it will run the t/spec/fudge script to update the tests for the Rakudo implementation (noted by the ?rakudo lines). Only after this happens are the tests run.

I found that I was not running all of the tests and the fudge script was complaining by only throwing a help message. This was happening because I had some svn locks that needed to be cleaned up. I created a patch that threw a warning and skips the test. I submitted the patch through the slick perl RT system (this tracking system is pretty amazing, it converts mailing list reports to patches and bug reports) that resolves this problem.

Lets hope this will be the first of many patches. As of last night, there were over 2100 tests being passed. This is due to the diligent work of being placed in the spectest. From here, I will try to help Auzon mark each of the skipped tests and submit RT tickets accordingly.

2008
07.05

As if straight out of the late 90s when people thought they could control the data they send you, websites across the internet still try to prevent you from saving content directly from your browser. It’s as if these website administrators and content owners just haven’t learned from the lessons of the music and movie industry (those organizations have been exemplified for poor content ownership in a digital era). This is a guide for thwarting those pethetic attempts to prevent the user from right clicking or flat out saving a website to your harddrive.

We’ve all seen it before. You’ll find a picture or movie that the site has feebly attempted to prevent you from saving. Lets first start by going over the most popular methods that websites employ to try and lock down the content they’ve already sent you.

Some of them just disable right clicking via some javascript. This is laughably simple to bypass, just check out the source; you can usually find what you’re looking for if you can read some HTML / JavaScript.

Some of them are slightly craftier in they try to hide the source on the server. This is done through server code that generates client-side code. ASP, servlets, and JSP are the most popular forms of server code that sends the client the actual server code. This makes reading the code more difficult since this server code is usually executed on the other end and a bit tougher to get the raw client-side code. It can be done, but the Ultimate Method listed below will always thwart it.

Then there’s the top tier of cleverness: embedded flash. This is often the most challenging to work around as it basically employs both previous methods. Most Flash players lack any ability to save them by simply right clicking. That would actually make things easy since GNOME now has a prepackaged swf player. There is usually some cryptic method employed with the CGI parameters that are passed to determine which FLV to play. Unless you are very good at mentally debugging JavaScript, you’ll probably want to skip straight to the Ultimate Method below. Otherwise, I would recommend reading the source code of every externally referenced file to find the embed statement. This may be hidden in a JavaScript, server-side code (even server-side includes), or directly into any XHTML/HTML. If you can do this, I commend your abilities but laugh at your inability to think outside the box to save significant amounts of free time.

So lets get on to describing the Ultimate Method already. This technique involves primarily using Epiphany, but I believe it should work just fine with many open source browsers such as Firefox and maybe Konquerer. This demonstration is performed with Epiphany 2.22.1.1 compiled with the following use flags: python spell xulrunner.

GNOME compliant applications drop their working and cache directories under ~/.gnome2. For example, here’s what I have under my gnome2 directory:

s1n@citadel ~ $ ls -1 .gnome2
Brasero
Dia
Totem
accels
accelsgedit
backgrounds.xml
brasero.session
conglomerate
deskbar-applet
devhelp
eog
epiphany
evince
f-spot
file-roller
gcdmaster
gedit
gedit-2
gedit-metadata.xml
gedit-print-config
glade-3
glchess
gnome-alsamixer
gnome-art
gnome-dictionary
gnome-volume-control
gthumb
invest-applet
keyrings
main
nautilus-scripts
panel2.d
rhythmbox
seahorse
session
share
splash-screens.xml
stickynotes_applet
yelp
yelp.d

These are all typical GNOME applications; the one to pay attention to is ~/.gnome2/epiphany. Under this directory, it stores its working information similar to how Firefox used to (it’s been a while since I used Firefox). Of importance is the caching directory: ~/.gnome2/epiphany/mozilla/epiphany/Cache. Notice how the mozilla directory is structured like Firefox. Remember, Epiphany was designed as a lightweight Firefox clone (then known as Galeon) when Firefox was starting to get bloated (provided by the Mozilla team).

This Cache folder is where the magic happens. Every file is given a unique name, probably through something like mkstemp or through a clever hash. None of the files have the proper extensions so if you have a ton of browser cache, you will a ton of files here. I’ll discuss how to find the file you’re looking for through this haystack in a minute.

First, lets go over the basic idea and then I’ll walk you through an example. Essentially, we want to clean up this cache folder, reload any website that hosts the content you want to find, then grep through the Cache folder to find it. By cleaning the cache folder, we have less unrelated files to worry about. Once you reload the website that sends you the content, you’ll find some new cache files and it’ll be much easier to find them. We’ll also use file and the file magic database to make our lives easier. By simply doing a file * | grep filetype to find the files we’re looking for, we’ll get a listing of all possible matches.

Now, let’s follow an example: the Keep Austin Weird photo gallery posted on Austin360. I wanted to get a local copy of the images that are browsable on this page. The content owners definately spent some time trying to block people from downloading them (notice the “BUY THIS PHOTO” link) by herding visitors to pay a small fortune for each photo. Never annoy a software junkie; the owner has already sent me the files and now I just want a local copy, so we will find a way to to take them.

At first inspection, this is either a gallery script such as lightbox or flash file. Once viewing the source, you’ll see that Austin360 is managed by a few code generators, mostly by SiteCatalyst. The code is a hodgepodge of HTML, XHTML, JavaScript, and flash (at least that’s what is generated on the server side). Digging through the code leads you to a script that figures out which Flash file to load. It’s complicated by the fact that it doesn’t actually load the gallery until some more JavaScript is called to actually embed it. Playing with it reveals it becomes a pain in the butt to access the embedded object. There are browser plugins out there that might assist with this, but then if you’ve read this far, you’re probably looking for something that will allow you to access any protected content directly.

So first things first, lets clear out our cache. From Epiphany, go to the Edit -> Preferences dialog. Click on the Privacy tab. Near the bottom, you will see a section titled Temporary Files. Set this to a size as high as you need or can stomach and then click on the Clear button. From this dialog, make sure at least the Temporary Files checkbox is checked, then hit the Clear button again. Close all of those windows. Below is the dialog from the 1.2 version of the application (this was just before they were assimilated into GNOME and had to adopt the same versioning scheme as GNOME).

At this point we want to reload the page. Doing so should start creating cache files. The flash animation has sent us 1 image so far (ironically, a picture of the iconic transgendered vagrant Leslie), so that should be enough to make sure we have something to work with. Lets go to that cache directory and find out what we have to work with. Remember, we’re going to use file magic to find only the files we care about as there will likely be too many unrelated files.

s1n@citadel ~/.gnome2/epiphany/mozilla/epiphany/Cache $ file *
0CEB37D0d01: Macromedia Flash data (compressed), version 7
1AC4830Fd01: ASCII C program text, with very long lines, with CRLF line terminators
944676BCd01: ASCII C program text, with very long lines, with CRLF line terminators
D7218B7Ad01: ASCII C++ program text
FCD476F3d01: JPEG image data, JFIF standard 1.01
FFA69BC3d01: ASCII C program text, with very long lines, with CRLF line terminators
_CACHE_001_: , 44.1 kHz, Stereo
_CACHE_002_: , 44.1 kHz, Stereo
_CACHE_003_: , 44.1 kHz, Stereo
_CACHE_MAP_: GEM Image data 0 x 1, 0 planes, 0 x 0 pixelsize

You may have noticed the Flash file there. Trying to open that with swfdec doesn’t produce anything useful. In fact, it does look like the Flash file we want, but there’s something with the way it’s coded such that it requires some input that’s missing from the standalone file (you’ll get an XML error if opened by doing: swfdec-player 0CEB37D0d01).

There is a single image file, and after inspection with EyeOfGNOME, we find it’s the image of Leslie. Paydirt! The images are downloaded as seperate files. Downside is we have to flip through each of them as only when they are viewed are they cached. After running through the entire slide show we have a bunch of files, mostly JPEGs, and we can begin sifting through them all. First, lets check out the file magic results on everything to see what we have to work with here:

s1n@citadel ~/.gnome2/epiphany/mozilla/epiphany/Cache $ file *
0C86DDDEd01: JPEG image data, JFIF standard 1.01
0CEB37D0d01: Macromedia Flash data (compressed), version 7
1AC4830Fd01: ASCII C program text, with very long lines, with CRLF line terminators
856ED57Dd01: JPEG image data, JFIF standard 1.01
86C5D54Dd01: JPEG image data, JFIF standard 1.01
86D2D54Dd01: JPEG image data, JFIF standard 1.01
87F5D55Dd01: JPEG image data, JFIF standard 1.01
944676BCd01: ASCII C program text, with very long lines, with CRLF line terminators
A28162E3d01: JPEG image data, JFIF standard 1.01
A29062F3d01: JPEG image data, JFIF standard 1.01
A2B26213d01: JPEG image data, JFIF standard 1.01
A2F66273d01: JPEG image data, JFIF standard 1.01
A36F6353d01: JPEG image data, JFIF standard 1.01
A37E6333d01: JPEG image data, JFIF standard 1.01
A4C56263d01: JPEG image data, JFIF standard 1.01
A57E6233d01: JPEG image data, JFIF standard 1.01
A6E76213d01: JPEG image data, JFIF standard 1.01
A6F66273d01: JPEG image data, JFIF standard 1.01
AC9063E3d01: JPEG image data, JFIF standard 1.01
C08161D3d01: JPEG image data, JFIF standard 1.01
C0A36153d01: JPEG image data, JFIF standard 1.01
C0B26133d01: JPEG image data, JFIF standard 1.01
C0C560C3d01: JPEG image data, JFIF standard 1.01
C16F6033d01: JPEG image data, JFIF standard 1.01
C17E6153d01: JPEG image data, JFIF standard 1.01
C1906003d01: JPEG image data, JFIF standard 1.01
C1A36063d01: JPEG image data, JFIF standard 1.01
C1B26013d01: JPEG image data, JFIF standard 1.01
C1D46043d01: JPEG image data, JFIF standard 1.01
C26F6143d01: JPEG image data, JFIF standard 1.01
C2906253d01: JPEG image data, JFIF standard 1.01
C2B26273d01: JPEG image data, JFIF standard 1.01
C2C561E3d01: JPEG image data, JFIF standard 1.01
C2E76123d01: JPEG image data, JFIF standard 1.01
C2F66153d01: JPEG image data, JFIF standard 1.01
C36F6D63d01: JPEG image data, JFIF standard 1.01
C37E6D03d01: JPEG image data, JFIF standard 1.01
C3906D33d01: JPEG image data, JFIF standard 1.01
C3E76113d01: JPEG image data, JFIF standard 1.01
C3F66273d01: JPEG image data, JFIF standard 1.01
C46F6683d01: JPEG image data, JFIF standard 1.01
C47E6693d01: JPEG image data, JFIF standard 1.01
C4816673d01: JPEG image data, JFIF standard 1.01
C5816733d01: JPEG image data, JFIF standard 1.01
C5906723d01: JPEG image data, JFIF standard 1.01
C5B26703d01: JPEG image data, JFIF standard 1.01
C5E76713d01: JPEG image data, JFIF standard 1.01
C66F6763d01: JPEG image data, JFIF standard 1.01
C69067B3d01: JPEG image data, JFIF standard 1.01
C6A36743d01: JPEG image data, JFIF standard 1.01
C6B26753d01: JPEG image data, JFIF standard 1.01
C6D46023d01: JPEG image data, JFIF standard 1.01
C7B26013d01: JPEG image data, JFIF standard 1.01
C7C567B3d01: JPEG image data, JFIF standard 1.01
CC7E62A3d01: JPEG image data, JFIF standard 1.01
CCD46D13d01: JPEG image data, JFIF standard 1.01
CD7E6DC3d01: JPEG image data, JFIF standard 1.01
CD8163F3d01: JPEG image data, JFIF standard 1.01
CD906303d01: JPEG image data, JFIF standard 1.01
CDB263D3d01: JPEG image data, JFIF standard 1.01
CDF662C3d01: JPEG image data, JFIF standard 1.01
D06F6433d01: JPEG image data, JFIF standard 1.01
D0906013d01: JPEG image data, JFIF standard 1.01
D0A361D3d01: JPEG image data, JFIF standard 1.01
D0D46133d01: JPEG image data, JFIF standard 1.01
D1D46753d01: JPEG image data, JFIF standard 1.01
D1F664C3d01: JPEG image data, JFIF standard 1.01
D26F6743d01: JPEG image data, JFIF standard 1.01
D27E6723d01: JPEG image data, JFIF standard 1.01
D2A36773d01: JPEG image data, JFIF standard 1.01
D3C56623d01: JPEG image data, JFIF standard 1.01
D46F6403d01: JPEG image data, JFIF standard 1.01
D4C56413d01: JPEG image data, JFIF standard 1.01
D4D46453d01: JPEG image data, JFIF standard 1.01
D5D46423d01: JPEG image data, JFIF standard 1.01
D6E764A3d01: JPEG image data, JFIF standard 1.01
D7218B7Ad01: ASCII C++ program text
DC6F67B3d01: JPEG image data, JFIF standard 1.01
DC816203d01: JPEG image data, JFIF standard 1.01
DC906DA3d01: JPEG image data, JFIF standard 1.01
DCB262F3d01: JPEG image data, JFIF standard 1.01
DCC56313d01: JPEG image data, JFIF standard 1.01
DCD462A3d01: JPEG image data, JFIF standard 1.01
DCF663F3d01: JPEG image data, JFIF standard 1.01
DDF667C3d01: JPEG image data, JFIF standard 1.01
E46F7423d01: JPEG image data, JFIF standard 1.01
F06F6FC3d01: JPEG image data, JFIF standard 1.01
F0A37743d01: JPEG image data, JFIF standard 1.01
F0F66E63d01: JPEG image data, JFIF standard 1.01
F1906ED3d01: JPEG image data, JFIF standard 1.01
F1A36E33d01: JPEG image data, JFIF standard 1.01
F26F7733d01: JPEG image data, JFIF standard 1.01
F2817743d01: JPEG image data, JFIF standard 1.01
F2907723d01: JPEG image data, JFIF standard 1.01
F2B27773d01: JPEG image data, JFIF standard 1.01
F36F7623d01: JPEG image data, JFIF standard 1.01
F3907633d01: JPEG image data, JFIF standard 1.01
F3A37663d01: JPEG image data, JFIF standard 1.01
F3B27653d01: JPEG image data, JFIF standard 1.01
F3C577F3d01: JPEG image data, JFIF standard 1.01
F3D47673d01: JPEG image data, JFIF standard 1.01
F3E77713d01: JPEG image data, JFIF standard 1.01
F3F67703d01: JPEG image data, JFIF standard 1.01
F46F6143d01: JPEG image data, JFIF standard 1.01
F4907683d01: JPEG image data, JFIF standard 1.01
F4A37793d01: JPEG image data, JFIF standard 1.01
F4B27633d01: JPEG image data, JFIF standard 1.01
F4D47733d01: JPEG image data, JFIF standard 1.01
F4E76E33d01: JPEG image data, JFIF standard 1.01
F5816193d01: JPEG image data, JFIF standard 1.01
F5906013d01: JPEG image data, JFIF standard 1.01
F5B26173d01: JPEG image data, JFIF standard 1.01
F66F6F63d01: JPEG image data, JFIF standard 1.01
F67E6F73d01: JPEG image data, JFIF standard 1.01
F6816F33d01: JPEG image data, JFIF standard 1.01
F6906F13d01: JPEG image data, JFIF standard 1.01
F6B26F23d01: JPEG image data, JFIF standard 1.01
F6C56073d01: JPEG image data, JFIF standard 1.01
F6E76033d01: JPEG image data, JFIF standard 1.01
F6F66013d01: JPEG image data, JFIF standard 1.01
F7A36E33d01: JPEG image data, JFIF standard 1.01
F7C56F43d01: JPEG image data, JFIF standard 1.01
F7D46FA3d01: JPEG image data, JFIF standard 1.01
F7F66F53d01: JPEG image data, JFIF standard 1.01
FC907593d01: JPEG image data, JFIF standard 1.01
FCA37613d01: JPEG image data, JFIF standard 1.01
FCB27583d01: JPEG image data, JFIF standard 1.01
FCD476F3d01: JPEG image data, JFIF standard 1.01
FCF676E3d01: JPEG image data, JFIF standard 1.01
FFA69BC3d01: ASCII C program text, with very long lines, with CRLF line terminators
_CACHE_001_: , 44.1 kHz, Stereo
_CACHE_002_: , 44.1 kHz, Stereo
_CACHE_003_: , 44.1 kHz, Stereo
_CACHE_MAP_: GEM Image data 0 x 1, 0 planes, 0 x 0 pixelsize

You’re probably thinking that I could have skipped showing you that, but I think it’s important to note the file types that we’re working with. In this case, we have nothing but JPEGs, so this will make life much easier. In fact, we can sift through things very quickly. We’ll need a quick script to help us rename the files to have an extension an image browser will recognize:

$ file * | grep -i jpeg | perl -e '@lines = ; `mkdir examine`; for(@lines){ ($file, $junk) = split/:/; print "Filename: $file\n"; `mv $file "examine/$file.jpeg"`;}'

Note we’re just filtering out JPEG files because the previous file magic check revealed they were all JPEGs. If you are looking for other file types, such as PNG, GIF, MOV, and etc, make sure to use the appropriate grep string (that matches something in the file magic string as returned from above) and the appropriate file extension in the mv call in the perl script. This will give us a directory called examine. From here, we have all the content we wanted to download! Just sift through the files with something like gThumb or eog:

$ eog ./examine/

or

$ gThumb ./examine/

Now we have all of the content that the authors wanted to prevent us from downloading. The problem with trying to prevent a user from saving a file when the file clearly has to be sent to their computer is like giving someone access to your house without unlocking your door or giving them a key: it cannot be done easily.

Now you have all the tools you need to thwart useless internet protection schemes. This technique will most likely work with Firefox and all Mozilla derived browsers. I’m guessing even the new Ephiphany that uses WebKit will still allow for this. I’ve downloaded many race photos from photographers that try outsmarting me by disabling the file menu, right clicks, [AJ]SP server side hacks, and so many other futile techniques. This technique works with pretty much all files and filetypes. Some of the larger media formats, such as movies and tarballs end up in /tmp, so that requires a bit more digging, but the Ultimate Method can be applied in a similar fashion.

Happy thieving.

2008
07.03

I didn’t get to posting the previous pace chart logs, so I’m lumping the last 2 weeks into a single post here. Yes, I know it’s already Wednesday. Yes, I know I’m getting lazier and lazier. In all fairness, Sunshine had 2 exams last weekend, so I picked up the slack around the house so she wouldn’t have to do any of the chores.

I blatently ignored the PA’s recommendation to not run with the fresh stitch. I did take off the following day and skipped the interval run, but I figured I’d give the extended interval a try and see if I would pop the stitch. Everything was fine, so I continued throughout the week at a slightly slower pace than usual.

That weekend I went to meet a new potential running partner but he had to bail on me. I ran a really good 7 miles at a decent clip (compared to recent performance). I usually don’t have trouble with irritable bowels or weak bladders. In fact, I rarely ever suffer while I run other than being constantly out of breath. Well, that weekend, I suffered a miserable 7 miles. I woke up with an upset stomach (maybe Mexican food wasn’t a good idea), downed some Pepto and hoped for the best. The best never happened. I wanted to vomit every step of the way, but I couldn’t. That must be what hell is like, perpetually on the verge of relief. I sucked it up around 3 miles when a woman passed me. I told myself I just wanted the agony to end but I suspect my ego had something to do with it.

Last week’s runs were tough. The heat is starting to pick up just as my distance is starting to amount to something substantial. I’m starting to suffer from cotton mouth and my sweat is evaporating before I finish. The temperature is near the low 90’s when I usually head out and I think it’s starting to climb upwards.

Speaking of temperature, I ran the Keep Austin Weird 5K last weekend. I mentioned the idea to my brother and he leaped at the idea. When I tried to bail out, my Mom dropped a guilt bomb on me. I signed up and decided to drive down by myself (Sunshine had exams). By time I got down there, he had picked up the packet and went out to buy some running clothes. Apparently, he had been getting very excited at the idea of running the event with me, which was ironic because we fought like cats and dogs as kids.

Needless to say, the event lives up to its name. All of the oddballs come out of the woodwork. The costume contest is usually a big draw and the live music afterwards is usually a pleasure. Unfortunately for me, this was the first 5K I’ve done all year, especially after the hiatus, and it was not a good confidence building race. I should’ve known better when the event started at 6 PM.

According to weather.com, the event took place in about 100o F heat. That made things very difficult. Around 1.1 miles, I started suffering. The first water stop wasn’t until 1.6 miles, if you discount the icecream at 0.8 miles, and there was no shade. It was excrutiating and I didn’t appear to be the only person suffering. Everyone who wasn’t in a costume looked like Death Warmed Over. I think I was starting to overheat near the end because I stopped sweating and started getting cold chills. I wasn’t alone; I passed at least one person that needed EMS attention. The heat was too intense; I will probably costume it next year.

The uptick is my brother was boasting that he’d be doing 6:30 miles. Turns out he finished in about 28 minutes, a mere 1.5 minutes before me. If I had been having a good day, I could’ve beat him. This is significant to me because he’s always been the athletic one of the family and I’ve always been the family brain (shut-up, no comments). As much as he had always ragged on me for being bad at sports and overweight, it sure felt good to know that I was within reach of being better at a physical activity than my 1% body fat brother. Hopefully he’ll want to do more events in the future because I did have fun lining up with him.

Well, without further ado, here’s the bigger than usual list. Note that the 20080628 event is the race.

20080617.png20080618.png20080619.png20080621.png
20080623.png20080624.png20080625.png20080526.png20080628.png

2008
07.01

Finally Passed A Qual
Image courtesy of duchesssa

So late last week, I logged into WebCT to do my semi-weekly check to see if my qualification exam grade had been posted. It had been 6 weeks at this point, and I was starting to get tired of checking so often. I had basically spent the first month of the semester working overtime, then gradually picked up my studying time until I was basically putting in several hours a night. I sacrificed time with family and loved ones. I skipped running to stay in and study (or found I was too tired from working 10 hours, then going to class for 2 hours, and finally studying for 2 more hours). I neglected everything. I had one goal in mind, and that was to put every ounce of effort I could into getting an A in the class and passing the qualification exam. If I was going to continue flirting with the idea of pursuing a PhD, then I had to do this.

The end result was a Pass!

That’s right. Four months later, countless sleepless nights, and I finally had aquired myself 1/3rd of the requirement to advance candidacy. It may not sound like much to many of the graduate students out there, but let me explain. I am notoriously bad at taking exams; I get nervous, make silly mistakes, rush myself, spend too long on too few points, and ultimately panic when time starts running out. I am much better at putting forth the effort it takes to go from being an ABD than it I am at passing a few tests.

After being disappointed by landing 2 marginals and then being utterly crushed when the department changed policies and forced me to start all over, this was a godsend. In fact, Sunshine and I went out for a celebration and I felt no remorse eating a burger and beer at BJ’s Restuarant.

So this begs the question: what’s next? This summer, I was forced to take off due to a less than convenient schedule. I have only 1 more required course left, Analysis of Algorithms. I covered this material before as an undergraduate, but not as fast or with as high of expectations (>40 on the final probably will not qualify as an A). I’m looking at taking some electives while they are offered since they tend to be very sporadically scheduled. I’m looking at taking this course:

CS 6365 – 501 DATA/TEXT MINING COMPUT BIOLOGY
Hatzivassiloglo
Call Number: 13095

TR 7:00 p.m. – 8:15 p.m., ECSS2.412

CS 6365 Data and Text Mining for Computational Biology (3 semester hours) The course introduces data and text mining as practiced currently in the bioinformatics field. Major topics include: sequence alignment for determining similarity between proteins and genes; properties of similarities and distances; genomic, proteomic, and text databases in the real world; finding patterns (motifs) in genes and proteins; differentiating between valid patterns and noise; classification; clustering and its application to phylogenetic trees; and selected topics from text mining. Prerequisite: CS 6325. (3-0)

I lack the prereq, but that hasn’t stopped me before. I’m also looking at finding a thesis advisor, so I may start that up in the fall as well. As for the QE that I intend to take next, I think I will try the Artificial Intelligence course again in the Spring (2009), depending on what they will change with the program by that time (I’ve heard some rumors of more changes).

The main thing to remember, this test is good for 4 semesters for me, since I am a part-time Masters student (the clock stops when I’m not taking an exam). I will contact the department head soon and start planning my next step. Until then, I can rest easy knowing that a PhD at UT Dallas is still a possibility.