3D sound USB sound card In part 1 of this series, I took an Asus router and loaded openwrt onto it. I added an LCD display and connected it to the serial port on the router board. At this point, I have a low-power, small form factor computer that I can customize to my heart’s content. As far as I/O, the computer still has its original wifi antenna, 5 wired LAN interfaces, a serial port and a USB port. My USB sound adapter still hasn’t arrived from Hong Kong, so I’m going to work on another piece of the puzzle.

Buffalo LinkStation Duo The first thing I did after joining this device to my wifi network was telnet in and change my password. Now the project that I’ve been following up to this point is mainly to be used for playing internet radio stations as I understand it. My wifi radio is going to be used for that too, but also for playing selections from my own music library. I plan to get one of these Buffalo 1TB Linkstation NAS devices and put all my media on it and leave it down in the basement. I’ve read that you can really customize these devices, but all I need to do is add an ssh server to it. Then I can mount the whole filesystem to a folder on my wifi radio and have access to a full terabyte of storage space.

Continue reading »

OpenWRT wifi radio + LCD I’ve been inspired by Jeff Keyzer to build a wifi radio. I’ve wanted for a long time to build a wifi radio to play internet radio and music from an arbitrary remote filesystem. The low cost of the platform he chose, the WL-520gu which I picked up for $35 shipped and is now even cheaper made the barrier to entry much lower than I had thought. So I bought one and tore out the guts as soon as it arrived.

mightyOhm has a good series of blog entries for doing almost exactly what I want to do. I skipped the first bit about hooking up a terminal because I don’t have a TTL-USB device lying around and flashed the router with openwrt. As I found out, TTL is not RS-232. You can’t just connect an RS-232 cable to your PC and solder the other end to the serial pins on your router. I do have a TTL LCD panel that I picked up last year on eBay (I’ve been planning to build a device like this for some time). Modern Device has these 20x4 character blue LCDs with a TTL serial interface for around $30. Jeff built his own, but he’s also an electrical engineer.

Continue reading »

fresnobee.com home page search engine drop down When working on a newspaper website, it’s common practice to receive design requirements from some unknown authority. An email will just end up in your inbox with a note such as, “Our yahoo contract requires the word ‘search’ to be capitalized in the phrase ‘Web Search powered by Yahoo! SEARCH’ which must appear in the search bar with the name Yahoo! in bold red font. Things like this have become so common that my first instinct is always along the lines of “how can I get out of that”, or “is there a loophole?”. There are so many requirements that they leave pages looking like a cluttered mess, just like every newspaper web site out there.

That’s when we have to get creative and try to find elements that we’re actually allowed to touch, and arrange them so the pages still look as clean as possible. A perfect example is this drop-down search selection tool. We have three main types of search on fresnobee.com. I won’t get into why we have to have three different search types in this post, but I will say that the reasons are not good ones.

Users on our site have to be able to select which search tool they’re going to use before they hit the search button. In the past we’ve used a regular XHTML select element which renders into a regular drop-down select menu in the search bar. A user would click the drop down to select the search type, then enter search terms and finally click the search button (or hit the ENTER key). This is exactly what’s done at one of our affiliate papers, the Bellingham Herlad. That approach takes up precious space in the search bar which could otherwise be left clean and blank in my opinion, or filled with more junk in someone else’s opinion. Another similarly bad approach can be found at the Miami Herald. Either way it’s a waste of space because a user doesn’t need to select a search option if that user is not using the search function.

Continue reading »

I was looking at the bottomless pit of badly-written and malformed javascript that loads on fresnobee.com the other day and noticed a peculiar filename loading multiple times (of-course) in our advertisements: DocumentDotWrite.js. Since I loathe the overuse of document.write on our site, it piqued my interest. I had to see what on earth could be in this ridiculously named script.

function DocumentDotWrite(s){document.write(s);}

It didn’t take long to figure out what this does, but I still haven’t figured out the why. Why in the world would anyone need this? Is it one component of a basic abstraction pattern for different implementations of document.write? It’s certainly not easier to type DocumentDotWrite so it couldn’t be a shorthand. This is where context comes into play. The script tag itself is written by a document.write call which is contained within an iframe which is written by a call to document.write which is loaded by another remote script whose tag is written with a call to… take a wild guess.

Continue reading »

Omniture smart car With my head buried in the daily grind of newspaper web development, I missed a very interesting twist in the story of Omniture, the stats tracking software we all love to hate.

I haven’t been in the field long enough to know exactly how Omniture did this, but somehow the company became the premier stats tracking provider for online journalism. It must be that Omniture has an amazing sales team. The Omniture situation seems to follow the pattern of things we pay a lot for when we could get a similar or even better service for free.

Recently I made an attempt to get some very simple data out of Omniture in a format that could drive a top read stories module on our homepage. The SiteCatalyst software gave me all kinds of options for downloading a file such as Microsoft Word, Excel or even CSV format. I can even automate the delivery of those files to an email address of my choice. But I wanted to set up a pull system so I could have more control and that just wasn’t going to be easy. I was nearly done with a Zend_Http_Client script to navigate the bizarre waters of SiteCatalyst v14 by following a maze of HTTP redirects, looking through REGEXing through javascript for strange tokens and submitting just the right request for the CSV report I wanted when I discovered through an acquaintance that Omniture has recently released an API.

It looks like they’ve seen the error of their ways and they’re finally trying to reach out to the development community. They’ve even put up this developer community which happens to run on drupal if I’m not mistaken. On first glance it seems like they actually do have a small community started and a nice little SOAP API. It’ll have to wait until after the December 9th launch of fresnobee.com. While this doesn’t make amends for years of pain, at least I don’t equate omniture with the devil anymore.

Continue reading »