All posts by cs

soft top resto

Not exactly an easy DIY, in fact there was a skull & crossbones kind of warning to amateurs enclosed with the packing! There were no installation instructions included with the new top but fortunately there have been some ‘gone before me‘ who’ve posted walk throughs. I was grateful for the hints and spoilers. The most challenging, apart from remembering in which order to re-assemble the interior, was self learning the fundamentals of the Rivet fastener. Another bewildering moment was a ‘fish out of water‘ visit to a (women’s) fabric shop to procure new elastic material for the frame bows.Three days into the project and the new canvas is in place and may actually keep seats dry.

runmeter export display

Runmeter is an iPhone app useful for GPS tracking outdoor exercise and as such does a fine job eclipsing some of the other variants. Runmeter features the ability to export and share your (KML,GPX,CSV) data via email or link. Although Runmeter has excellent data analysis menu choices on the iPhone itself and can recall and layout event history; the Runmeter does not have a co-branded display and summary website. However, it is possible to mirror your events and statistics on a personal remote web page. Using the Runmeter export feature you might try uploading a GPX file to Everytrail or Trailguru. I prefer to roll my own and follows is a tutorial on how it can be done.

Add a table, which mimics Runmeters CVS file column headings, to your mysql database.

CREATE TABLE raw_runmeter_data (
  Route varchar(35) NOT NULL,
  Activity varchar(10) NOT NULL,
  Start_Time datetime NOT NULL,
  Time_normal time NOT NULL,
  Time_normal_seconds smallint(6) NOT NULL,
  Time_stopped time NOT NULL,
  Time_stopped_seconds int(11) NOT NULL,
  Distance decimal(5,2) NOT NULL,
  Average_speed decimal(5,2) NOT NULL,
  Average_pace time NOT NULL,
  Average_pace_seconds int(11) NOT NULL,
  Climb int(11) NOT NULL,
  Calories int(11) NOT NULL,
  Fastest_speed decimal(5,2) NOT NULL,
  Fastest_pace time NOT NULL,
  Fastest_pace_seconds int(11) NOT NULL,
  Notes text
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

With this table constructed use PHP to retrieve your event data from the Runmeter server and store it in the mysql table. This code downloads your Runmeter CSV file and after some housekeeping, imports the data events to your mysql.

import_cvs.php
[php]
<?php

/**********************************/
/* This file is named import_cvs.php
/* As the file name implies, this code will import your data from Runmeter. You may run this file manually or better still, by setting up a cron job.
/* Edit the entry below to reflect the appropriate value i.e. your unique Runmeter export URL which should look something like this: “http://share.abvio.com/438h2 53u978cd/Runmeter-Route-All.csv”
/*********************************/
$inp = file(‘http://share.abvio.com/***********/Runmeter-Route-All.csv’);
/*********************************/
/* If you use this code, find a flaw, enhance or otherwise improve it then please let me know
/* via comment or link.
/* End Edit (nothing to do below this line)
/*********************************/

include ‘dbinfo.inc.php’; // your variable constants for database access

if (!$inp) {
echo “<p>Unable to open remote file.\n”;
exit;
}
$out = fopen(‘runmeter_clean.csv’,’w’); // a flat file which will temporaily hold your imported data
for ($i=1;$i<count($inp)-1;$i++) // step through the cvs file to leave out the first line ($i=1) and the last line of the file (count($inp)-1) because the first line is a header row and the last line has extraneous data
{
fwrite($out,$inp[$i]);
}
fclose($out);

echo “<font color=red>{$i} Runmeter events</font><br>”;

$file_handle = fopen(‘runmeter_clean.csv’,”r”);

$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(mysql_error());

// first task: let’s empty the mysql table (remove all existing recors)
mysql_query(“TRUNCATE $databasetable”);

// now insert the new recent data. Process Each Line
while (!feof($file_handle) ) {

$data = fgetcsv($file_handle);

$Route = mysql_real_escape_string($data[0]); // this function escapes out the pesky apostrophe character (and double quuotes etc.

$sql_insert = “insert into $databasetable ( Route, Activity, Start_Time, Time_normal, Time_normal_seconds, Time_stopped, Time_stopped_seconds, Distance, Average_speed, Average_pace, Average_pace_seconds, Climb, Calories, Fastest_speed, Fastest_pace, Fastest_pace_seconds, Notes)
values ( ‘$Route’, ‘$data[1]’, ‘$data[2]’, ‘$data[3]’, ‘$data[4]’, ‘$data[5]’ ,’$data[6]’ ,’$data[7]’, ‘$data[8]’, ‘$data[9]’, ‘$data[10]’ , ‘$data[11]’, ‘$data[12]’ , ‘$data[13]’, ‘$data[14]’, ‘$data[15]’, ‘$data[16]’ )”;

echo $data[0].”<br>”;

mysql_query($sql_insert);
}
fclose($file_handle);
@mysql_close($con);
?>
[/php]

Runmeter furnishes a unique and user specific download URL. Replace the URL (line #8) in import_csv.php file code above with yours. If not already familiar with the Runmeter app, review the screenshots from the app below. Start with the Routes Tab then touch Email/Export All. Next screen choose CSV File URL. (Runmeter sends your event data from your device to update your file CSV File on their server) In the third screen you are provided the discreet link which you will need for access. This URL does not normally change so you will not necessarily need to alter your php configuration above but note that current Runmeter app behavior does require you to refresh their data by doing this little procedure each time.

You can run import_csv.php as needed manually from a web browser. I created a cron job that will do this automatically. (once daily so as not to hammer the Runmeter server)

* * * * * wget -q http://www.strombotne.com/import_cvs.php > /dev/null 2>&1

With the event data in place. It is a simple task of writing some queries that will display the information in meaningful way. For example, this snippet will count the number of days run within the last 30.
[php]
<?php
include (“../dbinfo.inc.php”);
/********************************/
/* Code from http://strombotne.com/
/* The query in this file is for PHP5 only
/* If you use this code, find a flaw, enhance or otherwise improve it then please let me know
/* via comment or link.
/********************************/
$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(‘Could not connect: ‘ . mysql_error());

$dataArray=array();

//get data from database
$sql=”SELECT COUNT(*) AS Last30Days FROM $databasetable WHERE Activity = ‘run’ AND DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= Start_Time”;
$result = mysql_query($sql) or die(‘Query failed: ‘ . mysql_error());
$event_count=mysql_fetch_object($result);
$event_count=$event_count->Last30Days;

// days run will be $count_events_data from 30 == days off
$days_off = 30 – $event_count;

@mysql_close($con);
?>
[/php]

Google has an API for charting that neatly displays the query output.
[php]

<img src=”http://chart.apis.google.com/chart?cht=p3&chs=375×125&chd=t:<?php echo $event_count.’,’.$days_off.’&chl=’.$event_count.’+Days+Run|Days+Off&chtt=Last+30+Days’;?>”>
<!– uses query_count_events_last_30.php –>

[/php]

And the output looks like this:




There are additional queries and charts in the zip file, along with the complete code for this project for download here. Please share a link to YOUR Runmeter Statistics display in the comments section.

laptop vs. tablet

Conclusion: iPad wins. As an experiment the MacBook was left behind; lid closed and shutdown for an entire week. The objective was to lighten and reduce the shear number of devices and peripherals loading my computer bag. The test was to determine whether there would be withdrawal symptoms. There were none. As far as media usage is concerned the iPad holds its own. The iPad can be my new go-with device.

List of pleasant surprises: No more range anxiety. The battery in the MacBook was good for 3 hours tops. At times I would have to carry a spare battery to hot swap. The iPad can go all day on a charge. No more searching for an unused wall plug-in socket which can be scarce in older hotel rooms and many airport terminals. Easier, faster scan in the TSA line. Laptops have to come out of the bag to ride the conveyor belt. The iPad is exempt. Once on the airline, the iPad is less obtrusive. Try using a laptop within the cramped confines of a coach class seat especially after the passenger in the row forward reclines his/her seat-back. The iPad is quiet. No whirring fans and does not get hot. Boot time is instantaneous. No waiting. Nice form factor, very portable, less geeky.

Disclaimer: This post was typed on a full size keyboard and a Mac. Correct; the iPad keyboard is not useful for anything beyond a short email burst. It is a two finger hunt and peck. Don’t plan on using the device for creating Spreadsheets or anything. The iPad is designed for consumption and at that it excels.

The iPad may seem like a “tweener” but in many respects it shares the characteristics and functionality of the iPhone and the MacBook and is therefore not a necessary addition. However, after using it for extended duration I can report that the laptop has been eclipsed.

Twin Falls Idaho

The trick is to find the access to the Snake River Canyon. The view was spectacular from the rim of shear drop cliffs but the floor below beckoned so after a rambling jog on a wet rainy day I discovered a trailhead visitors center (despite the lack of signage) and began a decent. The objective? A spectacular 200′ water fall at the Perrine Coulee Creek terminus. The base of this fall is accessible by a short mud trail off of Canyon Springs Rd. The Perrine Bridge would also be a great walk / jog. Next time…

media consumption

Irrespective of trade publications or study manuals it’s been years decades since I picked up a book. This is about to change. Current media consumption consists of:

Wishing to add books, specifically eBooks, here is what I know. There are numerous books from many genres and freely available within the rules of public domain copyright. These will keep me absorbed for awhile. Use Calibre, a very full featured content and library management system to maintain and transfer books to your portable device du jour. Of several choices, I use the Stanza app on my smartphone.

For short stories / articles on the web use Instapaper. This is an excellent application which harvests almost any clip from the web which you direct it to fetch. Instapaper neatly scrapes the content including inline graphics while leaving the adverts and fluff behind. The main attraction is that your clipping is nicely formated for your eReader (e.g. iPhone, iPad, Kindle…) AND time shifted to that device for reading at your later convenience. Example: Here’s the skinny on the Iran Hitchikers from the perspective of Outside Magazine. I stumbled upon this story while browsing but not wanting to interrupt my surfing I easily snatched the journalist story (think Instapaper) for another moment and place.

Oh so little time…

Huffaker Hills

trail

I had some concern for reptiles, or rather — my bare skin legs as I traversed a narrow trail with dry summer range grass and rocks to either side (the next peak over is named Rattlesnake Mountain) A mountain bike might have provided more clearance and a sense of isolation. However, the only creature that I could spy on this hike was an occasional fast over the rocks lizard. Granville W. Huffaker, an early pioneer and homesteader in the Reno area in whose name this natural open space is preserved, likely furnished this dry grazing feed land for cattle. The beef supplied Miners at the Comstock Lode back in the day. The stone embedded unmarked trails have gentle rises with sweeping views allowing for confident navigation.

Stanley Park

I believe that the graphic designers/writers for the PC game MYST received inspiration from this place. The seawall greenway has wonderful views. The interior is laced with trails shaded with Redwoods. Stanley Park has a distinct island feel with Coal Harbour, Burrard Inlet, and English Bay on the perimeter. This is a great close-in escape from downtown Vancouver, BC.

John Christopher Strombotne

S’man visiting NYC happened upon the Ellis Island tour which led to an unexpected find. Memorialized there on a panel of the American Immigrant Wall of Honor was the name of his Great Great Grandfather. The discovery led to momentary excitement and debate here at home because previous searches of the Ellis Island/Port of New York records database had turned up null with zero matches. We know from Emigration Records that John Christopher Strombotne sailed from Trondheim, Norway arriving in Hull, UK in 1882 before making the crossing on a steam ship from Liverpool or Glasgow. Many Scandinavians arrived at Quebec or Halifax, where there were excellent rail connections from the Canadian ports to the US Mid-West where he settled. Odds were that he never visited NY. So, why is John Christopher’s name displayed on Ellis Island? It is the one place in the United States where an individual can honor his or her family heritage at a National Monument. Included at the exhibit are names representing all ethnicities, all years of arrival, all points of entry, and all modes of travel. S’man, on the scene, was able to solve this mystery. It was his Grand Aunt, Gena responsible for the tribute.

iphone stuck in recovery

With earlier iOS iterations, a manipulation of the sleep/wake and home buttons would abort iPhone recovery mode. There are plenty of helpful youTube video simplifications and mini tutorials on this subject, none of which apply to the newer (e.g. 3.1.3) devices. I spent hours sifting thru them and after attempting all combinations of holding down and sequentially releasing and reapplying buttons while counting for n seconds, I was still stuck in recovery loop with the Connect to iTunes screen. Here’s the fix:Download iRecovery iHackintosh iRecovery Package for Windows & Mac, which is a compressed RAR file. Likely you will have to download a utility app to extract from it.

To start iRecovery on a mac, simply open the command line application (Terminal), and then DRAG the iRecovery file from the location you’ve extracted it and DROP it inside the Terminal window A command line is automatically written. Now type the following:

  • Append ‘-s’ so that the command line now reads ‘irecovery -s’ “hit enter”
  • setenv auto-boot true “hit enter”
  • saveenv “hit enter”
  • /exit “hit enter”

Finally, reboot your iPhone by pressing and holding the sleep/power button and the home button until the iPhone display turns off (black). Release the buttons.

This – saved the day – procedure courtesy of Rafay on this forum was found after exhaustive trial & error Google searching and worked perfectly.

San Jose Guadalupe River

From the downtown Center for the Performing Arts to the Guadalupe River Park. This paved greenway starts in concrete jungle with freeway flyways for canopy but gradually assumes a natural original country feel toward the park area. There was some crossing on bridges back and forth confusion as the trail route flip from one side to the other before arriving at a trail detour (scheduled completion Fall 2010) due to a railroad realignment. Le skunk (pepe le pew) unabashedly crossed the path, tail raised high in defiant warning salute. As the sun gets low the downtown portion populates with street people, possible predators and idle youths some of them rough and tough looking. Suggest mid day to be safe