Archive for the ‘Technology’ Category

Hello, Android

Sunday, July 13th, 2008

So, July 11, 2008, came and went. What happened on July 11? The iPhone 3G came out.

But I don’t have an iPhone. The other big thing is that the Apple iPhone App Store opened. But I don’t have a Mac, so I can’t run the emulator or create my own apps for the emulator.

So, I celebrated by creating my first Android app.

Hello, Android

This is the “Hello, World” version of an Android app running in the emulator. It was very easy to make. What made it easier for me is that Android apps are written in Java. (I am a Java developer by day.) The “Getting Started” tutorial even shows you how to use Eclipse.

I have only created the sample app so far, but it looks pretty easy for a Java developer to write an “Activity“. But, of coarse, the apps currently can only run in the emulator. But the emulator can be integrated very easily into Eclipse.

Though, it is not like having real hardware like the Apple iPhone. 🙂

Arduino ordered

Monday, May 19th, 2008

I just ordered an Arduino Diecimila from SparkFun. I am looking forward to playing with this little device.

Keeping data secure in Google App Engine

Thursday, April 10th, 2008

While going through the “Getting Started” documentation provided for Google App Engine, I noticed something interesting in the “Using the Datastore” section. The datastore included in the App Engine is not a relational database, but it has some similarities. When querying the datastore, you can use GQL, which is similar to SQL. For instance:

greetings = Greeting.gql("WHERE author = :1 ORDER BY date DESC", users.get_current_user())

Notice the parameter replacement where “:1” is replaced with the value of “users.get_current_user()“. The documentation states:

Unlike SQL, GQL queries may not contain value constants: Instead, GQL uses parameter binding for all values in queries.

As Wikipedia points out, using a parameterized statement like this GQL parameter binding is one way to mitigate an SQL injection attack. The SQL injection is mitigated because the parameter value can consistently be properly escaped within the execution of the parameter binding. I find it very interesting that Google decided, in implementing GQL, to enforce the use of parameter binding. This must have been a conscious decision to help App Engine developers to make their apps more secure. I think that this is a good decision.

Worked through the Google App Engine “Getting Started” introduction

Tuesday, April 8th, 2008

I just finished trying out the Google App EngineGetting Started” introduction. I haven’t programmed in Python for a very long time. The introduction was pretty cool.

Except for the problem with Windows in the static file CSS example. I found a discussion about the issue by Googling “App Engine InvalidAppConfigError”. They have a simple work-around to get the sample to work. But it looks like there will have to be fix in the API for the problem to be resolved.

But all in all, this is a pretty neat framework. I look forward to playing with the SDK some more.

(And being a pilot, I am a bit biased toward the App Engine logo. You can see it at the home page. It is a jet engine with wings and a vertical stabilizer. 🙂 )

My first Butterfly program… success!

Monday, April 7th, 2008

My first program, Blinky, from the “C Programming for Microcontrollers” book has been downloaded to my Butterfly ATMega169 and works. The program cycles through 8 LEDs, turning one LED on at a time. It looks like the Cylon robots (old school – or the newer Cylon Centurions from the new series) robots. (Or the original KITT from “Knight Rider”.)

I had a problem initially with downloading the “hex” file to the Butterfly. It appeared to be the serial port… ahhhh, serial ports. So, if you get the Butterfly++ Mini-Kit, you get a DB-9 female connector and some wire. The “Butterfly++ Mini-Kit Assembly Instructions”, and the book, instruct that you are to wire the DB-9 connector to certain holes on the Butterfly. The instructions indicate that you cross the transmit and receive lines from the Butterfly to the connector. Okay, all is good… so far.

It is very hard to find a serial cable now: USB rules. But I did find a USB-Serial adapter at Best Buy. One end is a USB connector and the other end is a DB-9 male connector. I installed the driver, for Windows XP, and installed the cable. It installed like a charm as “COM5”. I was able to use the terminal program provided on the CD with the book and use “COM5” and communicate with the built-in Butterfly program to set my name for the “name tag” function of the factory-programmed Butterfly.

But then when I used the provided AVR Studio to try and download the Blinky program to the Butterfly, AVR Studio couldn’t find a suitable device. Hmm. It appeared the AVR Studio provided on the book’s CD wasn’t working with the USB serial device. I even tried upgrading to the latest AVR Studio downloaded from the Atmel site. It still wouldn’t program.

I did have a “real” serial port on my computer, which is a DB-9 male connector. But I couldn’t find a DB-9 M-F connector in my collection of cables. I had null modem DB-9 F-F and DB-9 M-M (null modem cables have the transmit and receive links cross-linked). Then I thought, wait! The Butterfly has a DB-9 female connection and the computer has a DB-9 male connector; just hook them together. The problem is the Butterly DB-9 female connector is connected to the Butterfly with about 2.5 inches of wire. So it took a bunch of rearranging to get the Butterfly close enough to the serial port on the computer, which is in the back of the computer. But I was able to get the Butterfly, the power supply, and the breadboard with the LEDs for the Blinky project close enough. Now, with the Butterfly directly connected to “COM1”, the AVR Studio found the device. I was able to download and program the Blinky.hex file. After successfully downloading to the Butterfly and cycling the power to the Butterfly (and moving the joystick “up”), Blinky started up and blinked the LEDs, sweeping back and forth.

So it appears that I need a DB-9 M-F “straight through” serial cable. (I have seen this type of cable referred to as an “extension” serial cable too. No wonder everyone likes USB better-it just seems to work, but it is more complex at the signal and component level.) I was able to find at Cables for Less a six foot DB-9 male to female cable for $1.89. I ordered it. With shipping the total came to $8.48. Hopefully it will come soon so that I can get the Butterfly out from behind my computer. But at least I have successfully tested the ability to program the Butterfly.

(I think that there is some way to download the hex file using avrdude instead of the AVR Studio. This may allow the USB-Serial adapter cable to work on “COM5”. But I haven’t had a chance to try that yet.)

Butterfly++ WORKS!

Saturday, April 5th, 2008

AVR ButterflyI had purchased a “Book + Butterfly + Projects Kit” from Smiley Micros some time ago. The AVR Butterfly is a demonstration board for a Atmel AVR ATmega169PV microcontroller. The package that I purchased included, in addition to the Butterfly, a book and some components in the “project kit” to execute the samples from the book. The first thing that you have to do is add a connector it the board so that you can add a serial port connection. The serial port connection is used to download code to the microcontroller. The kit includes some wires and a female DB-9 connector which you get to solder together. I did it (successfully). The kit also includes a battery pack that you get to mod to add an LED as a power indicator and some headers to solder to the Butterfly to make it easier to attach and reconfigure wires to the device.

After performing this preliminary soldering, I followed the test procedures to make sure that it works. I was able to power the Butterfly from the external battery source and download my name via the serial port to the Butterfly. (The Butterfly has a sample program that will display your name on its LCD display.)

Now that the preliminary work is done, I can try the samples from the book… (I am finally putting my EE degree to use!) and maybe write my own code. (Yeah, I do write code, like web applications, for a living. Not usually something as cool as making blinking LEDs!)

Chumby works as SlimServer (SqueezeCenter) player

Wednesday, March 26th, 2008

I was able to get my Chumby to work as a client for the SlimServer (SqueezeCenter) tonight. My Chumby was updated to client version 1.5.0 this evening. SlimServer client support has been built in to Chumby since at least client version 1.4.0. And before there was a menu interface on Chumby, there were ways that you could make the Chuby work as a SlimServer client with a USB memory device loaded with some software.

The Chumby interface is pretty straight forward. In the main Chumby panel, there is a “Music” button. You select this and are presented with a list of different music sources. If you select the “SlimServer” source, you get a menu that lets you enter the IP address of your SlimServer. After entering the IP address, you can press the “Play” button and then the “Done” button. Momentarily, you should see the Chumby show up as a client in your SlimServer web interface on your computer. You can control the playback of music on the Chumby from the SlimServer web interface via your computer. (You don’t control it from the Chumby. If you have an Asus Eee PC like me, the Eee PC make a really convenient “remote”. Though an iPhone or iPod touch would probably be even cooler; use the built in web browser and wifi as a client of the SlimServer, controlling the playback of the music on your Chumby. 🙂 ) When the music is playing, the Chumby continues to play whatever “channel” you currently have active. For instance, my main channel rotates between a digital clock and a five day weather forecast.

I have the SlimServer running on a Wal-Mart Everex PC. I decided to try SlimServer when I learned that the Chumby could be a SlimServer client. I was quite impressed with the SlimServer. It makes it easy to play my music collection throughout the house. Up until now, though, I have used a laptop as a SlimServer client. But the Chumby as a client amps up the geek factor. 🙂

What Would Google Do? Sometimes it may be worth asking.

Tuesday, February 12th, 2008

I have seen a couple different posts pose the question, “What would Google do?” I am taking a different tact. I work for a large organization making web applications. The web applications are used by external clients, but there is a rather limited group of users. Limited as compared to an application that is designed for general use on the Internet.

So, sometimes there are challenges developing our applications. I try to use Google as inspiration for coming up with creative solutions to the challenges.

To start this column out, let’s begin with a common task: uploading data files. Assume that you have a feature that uploads a batch data file. How should the file be formatted? This is a situation where I might ask, “What would Google do?” There are a couple different data uploads that Google supports.

Google Base is a service that provides a data feed. Google Base provides a way to describe structured data that will be included in a Google search. Here is more information about the data feed.

Google Apps, Google’s hosted applications like email, word process, and spreadsheet, has a data feed for provisioning users. They call this a Provisioning API.

In upcoming posts, I plan to look deeper into both of these data uploads that Google supports to help answer the question, “What would Google do?”

Me on Christmas 2007 morning

Wednesday, January 2nd, 2008

Me opening my Asus Eee PC 4GHere is a picture of me opening my Asus Eee PC 4G.

I knew that I was getting it. Nancy wanted to get me a laptop for Christmas, since my last one died early in 2007. I had been reading about the Asus Eee PC. I showed Nancy that she could order it from She did. It arrived in October. Newegg’s return policy for laptops allows 30 days from delivery, so she had me open it and make sure that it worked. Once I verified that it worked, I had to repackage it. Nancy then whisked it away and wrapped it up.

I have been using it for a bit over a week now. I like it a lot. I am a Linux geek, so the Linux OS on the laptop is perfect for me. It is amazing small and portable. I have pretty much gotten used to the small keyboard. The “shift” key on the far right is a bit farther out than I am used to, and I keep pushing the “up” arrow key instead. The small screen is very sharp. This makes the small screen quite usable. And with the solid-state flash drive, it boots quickly.

Amazon SimpleDB announced

Saturday, December 15th, 2007

Amazon announced on Thursday (12/13/2007) this week a new service: Amazon SimpleDB. SimpleDB is a new part of the Amazon Web Service (AWS) offerings. This hosted application provides, as its name suggests, a simple database. It isn’t a relational database. It instead stores attributes-value pairs. The data values are indexed. SimpleDB has a special query language that lets you efficiently query the attribute values. SimpleDB joins the Amazon Elastic Compute Cloud (EC2) and Amazon Simple Storage Service (S3). Like these other services, SimpleDB is priced on how much you use it: so much to put items into SimpleDB, so much to read items out of SimpleDB, so much for the time to execute a query, etc.

One of the recommended practices of SimpleDB is to store the metadata in SimpleDB and the large data in S3. For instance, you could upload your FLAC encoded music library to S3. Each audio file has metadata, like an artist, album, title, track, genre, year, etc. This metadata could be entered as items within SimpleDB. Each item would also include a URL to the actual FLAC audio file stored in S3. You could then run queries against SimpleDB to find different music that matches your criteria. For instance, find all items where the “artist” is “Nerf Herder“. This would return all items, which would include the URL to the audio file, from your music collection that were performed by Nerf Herder. You could then have you audio player on your laptop play the audio, retrieving it from S3. This would allow you to access your music from anywhere and have it stored in a highly reliable system in case your CD was scratched.

I think that this could be a really neat system. Though, it does remind me more and more of the “old” mainframe systems. (Okay. I am really not that old. At Pearson where I currently work, they still use a mainframe.) I have been interested in S3 for some time, like my littles3 implementation, so I will probably keep my eye out for interesting uses of SimpleDB. I also wonder what Google will do to have something like this. I have heard rumors about Google’s “GDrive” for over a year now.

Now if I can only find some reason to justify using SimpleDB once it is available. (It is in limited beta right now.) 🙂

(Oh! My little example of “outsourcing” the storage of your music catalog from above could also be related to the book that I am currently reading, “The 4-Hour Workweek: Escape 9-5, Live Anywhere, and Join the New Rich“.)