| Subcribe via RSS

A New Frontier

March 6th, 2012 | No Comments | Tagged as: ,

Back in December 2010, I took the plunge and joined the smartphone revolution. Having a strong distaste for all that is Apple and running my online life through Google, I decided to go Android. The fact that I wanted to create apps for my phone also helped influence my decision as you need to own a Mac to write apps for the iPhone and all I have are Windows machines.

It wasn’t too long before I had a project that I wanted to appify: CyclingTrainerBuddy. This program started its life as an exercise to brush up on my C#/.NET in preparation for an interview for my first post-college job. I intended to port the application to Java, then to Android, in my free time during my second year of grad school. The timetable for my Java port was pushed ahead a little when I needed to submit a code sample for a job as a Java programmer. While I said in my interview that I intended to port the Java version of the program to Android, I have yet to do so more than a year later. My lack of enthusiasm around this is likely due to the fact that I have no practical way to mount my phone to my bike during workouts.

Fast forward to today. I’m a moderately heavy podcast listener and use Google Listen as my podcatcher. Unfortunately, Listen has been all but abandoned by Google while it was still a beta in Google Labs. It has some annoying bugs and what I consider to be a suboptimal interface. In addition, its conversion to support Ice Cream Sandwich (Android 4.0) UI paradigms was extremely lazy. This all adds up to an app that, while it is a good starting point, fails to achieve its potential.

While there are other podcatchers on the Market (or is it Play now?), most have no free trial. This gave me all the motivation that I needed to write my first Android app: Yogi. At the moment, it is nothing more than a bulleted list of features that I want to implement, but I hope to make this into something that I can offer on the Market that people will actually use. I plan to detail my journey into Android app development on this blog, so keep your eyes open for new content soon.

Aside: This blog was previously hosted by my former boss, @badger4life. He let me on his hosting free of charge with the condition that I chronicle the neat tech stuff that I run across or do in my spare time. Up to now, I never lived up to my side of the deal, even though I have not shared his hosting for a few years now. Hopefully he’ll find the content to follow interesting.

Time for some Exercise

June 19th, 2010 | No Comments | Tagged as:

Last summer I decided to try to get myself into shape since I just wasn’t enjoying my sorry attempt at running. Being in Mississippi, it was sweltering all the time, which acted as an extra deterrent in my quest to get in shape. Luckily, my aunt told me that she had an extra slot on her YMCA family membership that I could use, which I jumped at. Upon arriving at the Y, I surveyed what was available and decided that I would become friends with the exercise bike since I would not have to worry about the shocks associated with running. I spent most of the summer on that bike, slowly increasing resistance while attempting to hold myself to high RPMs. When I bid adieu to Mississippi in August to head off to grad school in Massachusetts, I stopped biking and started sitting for the next 10 months while I concentrated on school.

This summer saw me return to Mississippi for the same internship, but this time with the desire to not spend all of my time exercising staring at the same wall like I had the previous summer. My desire to lose weight was increased after putting on 10-15 pounds while in school, tipping the scales at over 200lbs for the first time in my life. Also, I’m getting married next June, and there’s no way I’m going to be fat for that day. I decided that I was going to take up cycling for real this time.

While back in Massachusetts, I had purchased a Mongoose XR-75 mountain/BMX bike from WalMart for about $100 to use for riding around with my girlfriend. It ended up being a huge waste of money. It was poorly assembled (I could hardly stop because the brakes were so loose, the handlebar was not tightly connected to the headset or to the stem, the derailers were improperly aligned, etc) and quickly developed problems, chief among them a scary knock from the bottom bracket. I wasn’t going to pay more than half the price of the bike just to get it fixed. Also, I quickly learned once I started putting some miles on the bike that the seat was extremely uncomfortable, causing pain and numbness in my groin area within 15 minutes of any serious ride. It was also geared way too low for me to use it on the road. I decided that I would take the leap and get a real road bike. And avoid WalMart for important purchases.

I had been researching bikes for a few months before I got to Mississippi as I was already unhappy with my WalMart special, so I was fairly well prepared to go shopping. After consulting with a cycling acquaintance, I visited a few bike shops in the Jackson area over the course of a few weekends to look at their lower-end models. I originally was looking at the lowest-end models of different manufacturers, such as the Trek 1.1 and the Jamis Ventura Sport. After talking with the people at the LBSs and my cycling friend, I decided to move up a price point when looking at bikes, which meant a jump from the $650-$750 range to the $850-$950 range. This resulted in me looking at the Trek 1.2 and the Specialized Allez Sport. After shopping around and getting to take a few test drives, I ended up settling on the Trek 1.2, which I bought from The Bike Rack. I ended up getting a 56cm frame since the guy at The Bike Rack said I looked too stretched out on a 58cm. I also opted for a compact dual crankset instead of a triple since I would get almost the same gear range with out the finicky shifting that seems to be inherent in triples. (I had plenty of mis-shifts on the triple on my Mongoose, so this sounded right to me.)

After I got the bike, I felt the need to “kit up” a bit so that I would be fit to ride this beast. I bought some 8-panel bike shorts and a Lazer X2M helmet while shopping for bikes since I was getting pain in my groin from the seat and just felt unsafe riding at speed without a helmet. Since I find myself motivated by trying to beat the clock, I decided to keep time while out riding. Unfortunately, all I had was my cell phone. This meant that I had to wear gym shorts over my bike shorts so that I could have a way to carry my cell phone with me on the road. Add to this a white Fruit of the Loom tshirt, and I didn’t look like I belonged on the bike. I looked next for a cycling jersey so that I could have back pockets plus a shirt that doesn’t get soaked and cling to my body. I ended up purchasing a red Craft jersey, which arrived in two weeks from the UK, which surprised me. I also bought two pairs of cycling gloves from WalMart (first the Bell Comfort Mesh gloves, then the Bell Pro-Gel gloves) to deal with the soreness I was getting in my hands from rubbing constantly on the handlebars. At the same time, I also picked up some sport sunglasses (FosterGrant Ironman) and a Schwinn bike pump (not the exact model I have).

After I got my jersey in the mail, I wanted to ditch the gym shorts and go out in normal biking regalia. This meant the cell phone went in the back pocket of the jersey. Unfortunately, this still left me with the problem of being completely unaware of my time during a ride, leaving it as a surprise at the end. I also felt a little strange not being able to watch my cadence all the time like I had been able to do on the exercise bike. I decided it was time for a bike computer. I ended up getting a Cateye Strada Cadence computer, which tracks both speed and pedal cadence. I got to enjoy installing it myself, which was kind of fun, though I wish the zip ties that hold the cables in place weren’t so visible.

The only problem that I have now is that my feet occasionally fly off the pedals if I have a rough shift or get too high of a cadence. To deal with this, I decided to get some cycling shoes, complete with cleats. This meant I needed to choose a pedal system since that could influence the shoe that I buy. I was originally considering the Shimano SPD system, which is designed for mountain bikes, but research showed that a road cleat would be more comfortable for long rides due to the larger contact surface it offers between the pedal and shoe. After reading this and talking with my cycling friend one again, I decided to go with the very different but similarly named Shimano SPD-SL pedal system, which is very similar to the Look system, but is cheaper, which is good. A little searching found a great deal for a pair of Shimano SH-R086 road shoes (with ratchet action) and SPD-SL pedals for only $125, which is at least $20 better than I could get buying the two separately. I can’t wait for them to come in the mail. After that, I’ll be cycling socks away from having a full road bike kit, with the possible exception of a second water bottle cage and water bottle.

The iPod Project: Part 2

November 16th, 2008 | No Comments | Tagged as:

Ok, so it’s been a while since I started this project. Let’s just say that my last quarter as an undergrad was a ton of work and the thesis that I churned out in a week took a month to push through to final approval. So, here I am, ready to continue the project.

I actually did this a month and a half ago, but haven’t had the time to write about it. I tried what I outlined in the first post, and, sadly, it didn’t work as planned.

The particular FireWire cable that I purchased didn’t appear to be up-to-spec since it did not have shielded twisted pairs, instead having only a single braided shield for the whole cable. In an attempt to increase the fidelity of the audio being delivered to my car stereo, I used some old stereo cable, which has each channel individually shielded, to carry the audio and the FireWire cable just to carry power to the iPod.

After I assembled all of the parts, I installed the cable in my car to test it. The audio worked great. After plugging in the adapter, I was able to hear my music out of the speakers in my car, without any noticeable distortion. I noticed rather quickly that the charging icon was not appearing on the display. To make sure that it should show up, I pulled out my USB charger and plugged it into my iPod while it was playing music. Sure enough, the charging icon showed up.

I am not sure why the iPod refuses to charge when given approximately 12V to its FireWire charging pins. I can only figure that Apple got rid of the circuitry for charging at FireWire voltages. Since I do not have an official FireWire adapter, I cannot test this theory.

So, I will attempt an M2 of the project the next time I am home, around Christmas. In this revision, I will use a USB car adapter to provide power and hook it up to the USB charging pins in the dock connector. I am hoping that I can find a place to tap into the cigarette lighter circuit in the car so that I’m not required to have the adapter plugged into the cigarette lighter at all times.

Gallery of iPod Doc Connector M1

Updated Pinouts
Pin Use
3 Right audio
4 Left audio
16 USB GND
21 Accessory selector: 1 MΩ resistor tied to ground
23 USB +5V

The iPod Project: Introduction

August 2nd, 2008 | 1 Comment | Tagged as:

I recently purchased a 5th gen 60GB iPod from Jim at coast trash. I threw Rockbox on it so that I could play my FLAC-encoded music, and to get rid of as much of the Apple as I could. (I even set up a VM just for iTunes to keep Apple crapware off of my computer.) All has been great so far, even though I have only used the iPod around my apartment.

I have this tendency to take long road trips, such as a back-and-forth between central Ohio and Jackson, Mississippi. I am too lazy (perhaps too focused on the road) to bother trying to tune in radio stations as I pass through cities, so I just listen to my music. Luckily, my 1998 Honda Accord has a 6-disc CD changer in the trunk. This is normally good enough to get me from meal to meal. However, I need to strategically pack my trunk so that the changer doesn’t get buried underneath piles of my junk. Also, I don’t carry much of my music library in CD format in my car, meaning that there is a decent bit of it that I can’t listen to in my car.

On a recent drive to my friend’s apartment, which is about an hour from campus, I decided to dig out the cassette tape adapter that I got around the same time I got my old RioVolt PSX100 and try it with my iPod. It worked nicely, but used the headphone jack, which meant that my music went through two EQs, leading to highly exaggerated bass and treble and non-existent mids. Since the settings to disable the EQ in Rockbox are buried about three levels deep in the menus, I had to stop right off the bat to fix this problem.

This gave me an idea: integrate my iPod right in to my Accord. I want to get to the point where all I have to do is plug my iPod into a dock connector and get audio and charging all at the same time, since my drives tend to be about 13 hours, longer than I expect the battery on the iPod will last.

I have done some digging to find some details on what I’ll have to do. First, I would need to build my own dock connector. Second, I will need a way to get audio into the factory-supplied Honda head unit. Lastly, I need a way to get power from my car into my iPod.

Parts Listing
Qty Item
1 Male iPod dock connector
1 Precision Interface Electornics HON98-AUX auxillary adapter
1 1 Amp fuse
2 Male phono (RCA) plugs
1 1 MΩ resistor
6 ft Firewire cable

My plan is as follows: order all of the parts, assemble the dock connector, then wait until I can go back home, which should be Labor Day weekend. At home I have the tools to disassemble my car’s dash board so that I can get to the back of the head unit. I will need to find a way to mount the Honda-to-RCA adapter since it is large enough that I don’t want it dangling. I will also need to tap into the power lines for the cigarette lighter to get my power. I want this to be as unobtrusive and unnoticible as possible, so I don’t want to occupy the cigarette lighter with an adapter. I will also need to decide where I want the dock connector to be (armrest, cup holder, dash, etc.).

I plan on using a Firewire cable as my cable harness. Firewire provides a +V cable and a ground cable capable of handling the currents required to charge the iPod over Firewire. It also provides two shielded twisted pairs of cable, which I will use for carrying the audio signal to the head unit. The shielding should help keep out any noise generated by the car. I have not decided whether to run the channels of the audio signal through the same twisted pair, or each through their own twisted pair.

Using the pinout chart from Pinouts.ru, I have an initial pinout that I will use for the dock connector:

Pinouts
Pin Use
3 Right audio
4 Left audio
19 Firewire +12V
20 Firewire +12V
21 Accessory selector: 1 MΩ resistor tied to ground
29 Firewire GND
30 Firewire GND

This should be a fun project. I will do my best to keep you updated on my progress and provide pictures of what I’m doing. If all goes as planned, this should be done before I go back to school after Labor Day weekend. If not, I should still have it done before my next drive down to Mississippi in October. I guess the radio and my CDs will have to do until then.

EDIT: I forgot to include the accessory indicator resistor in the pin out chart.

Link (And Video) Dump

July 29th, 2008 | No Comments | Tagged as:

It’s time for me to clean up some of the tabs that I have open in Firefox, which means that you get to see what was in them

Facebook Reinvents the Wheel

July 24th, 2008 | No Comments | Tagged as: , ,

At the annual Facebook developers conference (they even have one?), it was announced that Facebook would add support for an OpenID-like service, called Connect, that would allow Facebook users to use their logins to login to websites such as Digg and Six Apart. The key phrase here is OpenID-like. This is not OpenID, nor will it likely work with it. Rather, it is a proprietary system that a small group of websites are using to share logins with eachother.

A few years ago, before OpenID was anything more that a project at Six Apart, I would have applauded these websites for putting forth the effort to share logins amongst each other. These days, however, we have OpenID, which is seeing greater adoption as time goes on. Big names are already on board with OpenID: Yahoo, MySpace (intentionally unlinked), AOL (includes AIM), Six Apart, WordPress, and Blogger, to name a few. VeriSign and MyOpenID are some of the many entities that are OpenID providers only, and add to the usefulness of the ecosystem.

Facebook and the other parties that are part of Connect are hurting the OpenID community by starting up their own, incompatible identification sharing service. There is no cost to OpenID other than the time to get it set up to work with your infrastructure. So, why are they creating their own service? Even stranger is the fact that Six Apart, the creators of OpenID, are one of the parties that is working with Facebook on this new protocol. Why is Six Apart undermining their own child? It will be interesting to see this play out.

EDIT: Just ran across another article about Connect. I guess Connect is more than just an identity provider. Still, I do not like the fact that Facebook traps all of their data inside their walls.

Apple Slows Updates to App Store

July 21st, 2008 | 1 Comment | Tagged as: , , ,

In a Wired interview with Brett Simmons, creator of the NetNewsWire application for the iPhone, it was revealed that Apple is holding back updates that Brett has made to his application for over a week, in which time he has made five maintenance releases, fixing many customer complaints. Why are the updates being held back? It ends up that Apple is testing each and every application and update that is submitted to the App Store before it is listed in the App Store.

I have two issues with this. First, if Apple is sufficiently testing these apps before they are listed, then why would they require bug fixing updates to begin with? Is Apple really gaining anything by "testing" these apps before listing them? If they are only testing to make sure that the app is not malicious, then I would expect them to show a level of trust to application developers who have a track record of submitting solid, non-malicious apps to the store. Mozilla follows a similar model with Addons.Mozilla.Org (AMO), where a trust is built up between Mozilla and a developer, eventually allowing the developer to post updates directly to AMO without the addon having to be vetted by any people at Mozilla.

Issue number two: Since all apps in the App Store are monetized, then couldn’t developers argue that Apple is hurting their income by preventing them from offering fixes for their apps? If an app gains a reputation for being buggy or slow even though a version that fixes all of that is awaiting approval from Apple, there is nothing the developer can do to regain their lost reputation and revenue. Telling the users that an update is being held up by Apple will likely get them nowhere since most App Store users are most likely not privy to the application listing process. They would most likely see this as little more than an excuse while the developer scrambles to fix their application. With Firefox, you can install an addon from any website you want, allowing a developer a completely separate channel to distribute their addon through that bypasses the vetting process on AMO. However, with the iPhone, you can only get applications through the App Store, unless you want to jailbreak your phone, leaving you with no alternate channel to distribute your application.

I am curious why more iPhone developers are not up-in-arms about this. Their reputations are being harmed and their profits decreased because Apple has chosen to lock down the App Store and not trust the developers that are helping the iPhone reach new heights. If Apple would only follow the model that is used by Mozilla on AMO, then I am sure developers and users would be much happier.

New Look

June 21st, 2008 | No Comments | Tagged as: , ,

I guess the original look for WhistlinDixie didn’t last long; two weeks by my count. I didn’t stray far in finding my new theme, though.

My original theme was Big Blue from Blog Oh! Blog, which I found in the WordPress themes directory. While it wasn’t bad looking, it never really pleased me. In fact, I kind of considered it a placeholder until I could find a better one.

Since I exhausted the WordPress themes directory, I decided to see if Blog Oh! Blog had any other free WordPress themes. To my surprise, they come out with new themes quite often, many of which are free. While browsing through their catalog, I came across a theme called Statement. It immediately appealed to me, unlike anything I saw in the WordPress theme directory. I quickly downloaded and installed it.

I noticed that some of the widgets that I was using were part of the new theme, such as the search widget, the archives widget, and the syndicate widget, so I removed them from my sidebars. I also changed the category listings on the posts to tags listings and removed the tags listings from the ends of the posts.

I then noticed that the page logo was a graphic, not text. I looked at the description for the theme, and it mentioned that the original PSD for the default logo was included with the theme. Excited, I opened up Paint.NET and opened the logo.psd, only to find that Paint.NET choked on it. I checked to make sure that I had the PSD file handler extension installed, which I did, and that it was the newest version, which it was (released over a year ago). (I don’t think it makes sense to distribute a free theme that basically depends on a costly graphics editing program.) Bummed out, I went and got out my Photoshop CS2 disks to install the trial version so that I could get the site logo fixed up. Once I got PS installed, I opened up the file, only to find that I lacked the font that the logo originally used.

At this point, I noticed that the banner was on a solid background, without gradients. This would make it very easy to roll my own graphic without needing the original for anything except color references. I grabbed the GIF version of the logo and picked the background color out of it and started up a new Paint.NET image. I decided to use the Blue Highway font since it closely matched the font originally used in the logo. A little pixel pushing later and I had a new logo.

Hope you enjoy the new look. Hopefully, this one will last a little longer than the first one.

Crashy Crashy, Not Cool

June 14th, 2008 | No Comments | Tagged as: , , ,

Starting back on the 18th of May, I started getting frequent crashes of rundll32.dll on my laptop. This corresponded with me updating a bunch of drivers on my laptop. They seemed quite random, but always seemed to happen in response to actions that I made. Today I finally got fed up with it and decided to try to fix it since the last round of Windows Updates from last Tuesday didn’t fix the issue.

I first looked at the Reliability and Performance monitor, only to see that it didn’t give me anywhere near enough information to do anything. (In case you are curious, my index dropped from 6.60 to 2.96 while I had this problem, though I have also experienced a few blue screens while trying to sleep the lappy. Stupid HP drivers.) From there, I decided to Google for the answer, and happened upon a forum posting about a similar problem. At the end of the thread, Comodore mentions that you should run the command sfc /scannow. I was not familiar with this command, so I looked at the help for it and found out that it looks at all of the files that Windows protects and replaces them with the correct Microsoft versions if they are wrong. I went ahead and ran the command (it took about 20 minutes to run). When the command completed running, it reported that it had found issues and had successfully repaired all of them. I took a look at the log file, and it looks like it had to repair a lot of files. To make sure that all bad versions would get out of memory and be replaced by the good version, I rebooted my computer.

So far, I have not received any more of these rundll32 crashes, so it looks like it worked. I’ll keep an eye on it, but it looks like this problem is fixed.

Move Complete

June 7th, 2008 | No Comments | Tagged as: , ,

About six months ago, I started becoming unhappy with Nucleus CMS, my blogging platform. First, it had no native support for tagging, which I prefer to categories. To get this functionality, I had to get a plugin, np_tags, and then manually integrate that plugin into my site’s skin. At first, this worked fine, except that you could not view the tag pages (to see all of the posts that had a specific tag). When the update to version 3.31 came out, I applied it and went on with my life. One day while I was looking at my site, I noticed that pretty much everything that did any navigation away from the from page was broken. It took me a whole evening to fix this issue, and I was still left with broken tags.

I finally decided that enough was enough and that I would switch to another blogging platform. My two primary options were WordPress and Drupal. I knew that both of them could work due to their popularity and wide-spread use. My primary criterion then became ease-of-migration from Nucleus. After a little reading, I discovered that, to move my content into Drupal, I would not only be on my own, but also have to learn Drupal’s API since direct database manipulation is not supported and is known to break things. Since I wanted to do this conversion quickly, I opted to go with WordPress.

I started out by getting a skin that I liked (Big Blue 0.1 by Bob) and installing some useful plugins. I then did a little tweaking to the plugins to get their widgets to mesh with the skin. Then the real work started.

Getting my data from Nucleus to WordPress ended up being more difficult that I initially expected. Being a programmer, I have done database work before, so I knew SQL relatively well. I figured I would just need to write a few INSERTs and that would be it. I started by diagramming the relevant parts of each schema and figuring out how I would map one schema into the other. For the posts and comments tables, this was a straightforward transformation, requiring a single INSERT for each, as well as an UPDATE for the posts table. Then came the tags.

In np_tags, the tags for all of the posts are stored in the nucleus_plug_tag table. Instead of doing the sensible thing and putting a tag in each row and allowing a post to be referenced by multiple rows, each post had exactly one row in the table with its tags stored like /tag1/,/tag2/,/tag3/. This was a pain in the butt to break apart using only SQL. I ended up having to write a couple of stored procedures (in MySQL, where I have no experience, instead of T-SQL, where I have had some fun in the past) to break the tags into something manageable in SQL. I finally got all of my data migrated last night, two weeks after I started. (Note, I was not able to work on it last weekend since I went home for my brother’s high school graduation.)

It did not take me long to upload the new data to my blog so that I could look at it in all of it’s glory. I discovered rather quickly that WordPress was doing some strange stuff to the contents of my posts. Whenever I post videos on the blog, I try to format the HTML so that I don’t have to scroll my text editor horizontally, typically leaving me with markup that looks something like:

<object
		width="400"
		height="315">
	<param
			name="video"
			value="something">
	</param>
	<embed 
			width="400"
			height="315"
			video="something">
	</embed>
</object>

This was then transformed by WordPress into:

<object<br />
		width="400"<br />
		height="315">
	<param<br />
			name="video"<br />
			value="something">
	</param>
	<embed <br />
			width="400"<br />
			height="315"<br />
			video="something">
	</embed>
</object>

which of course does not get rendered correctly by any browser. To fix this, I simply had to go and remove the line breaks from within the HTML tags and the problem was solved.

My next thing to fix was to redirect any requests for my RSS feed or the post pages to their new locations. The RSS feed was taken care of rather quickly using Apache’s mod_alias and RedirectPermanent. The posts were harder since I had to use Apache’s mod_rewrite. It took me about 45 minutes of fussing to get a rule that would work. The biggest problem that I ran into using mod_rewrite was how it acts differently between the http.conf file, where I am used to using it, and a .htaccess file, where I had to use it.

Today, I decided to host my feeds through FeedBurner so I can finally get some stats on my RSS feed. To do this, I used the FeedSmith plugin. After I set up my feeds with FeedBurner, I tried to view my RSS feed to make sure that it was being redirected to FeedBurner correctly. Sadly, this was not the case. While my comments feed was being redirected successfully, the same could not be said for my main feed. After trolling through the source for a bit, I gave up and just wrote a mod-alias redirect to redirect requests from the incorrectly functioning http://whistlindixie.us/feed/ URL to the correctly functioning http://whistlindixie.us/feed/rss2.

I also did a little source hacking this morning to tweak the calendar a bit to my liking (take up the full width of the column, attach a class to TDs with links in them) so that I can apply similar styles to it like I did with the calendar in my Nucleus blog. I am also going to work on the tag cloud to get it to display some different tags (right not it only displays the first so-many tags) and to get it to scale the font size properly.

So far, I am liking WordPress, and I hope that by using Akismet and ReCaptcha that I won’t have to spend lots of time moderating my comments queue like Chris does. Let’s hope things keep going well.