Saturday, January 23, 2010

Junk Or Repair?

I have serveral Princeton monitors, including two VL-1919 monitors on my main LINUX development box.

The power supplies on these monitors do not age gracefully, and I was a little irritated when both of my VL-1919 started to flake out within weeks of each other.

To my surprise, there is someone who repairs these power supplies: go to eBay and search for "resurrectek" - they do a variety of repairs for a fixed rate.

For $29 each I now have two happy monitors instead of $100+ for two new tubes plus the ewaste from my old displays.

Back to work...

Sunday, January 17, 2010

Mellow Panda and the BC-780-XLT

The Uniden BC-780-XLT is a oldie but goodie as radios go. Perform a Google search and you will see there is a lot of love for the 780. Thanks to eBay, I have a several of these radios and they are a lot of fun w/a computer. My only complaint would be the poor image rejection, especially the 2nd harmonic above the FM broadcast band.

The 780 is too old for USB and uses a DB-9, which might be a problem since many new computers only have USB ports. I have had good luck w/the TRENDnet TU-S9 USB to RS-232 converter (also works w/my Icom PCR-1000). If you are connecting your 780 to Mellow Panda via USB, you can get the port assignment via dmesg (it will look something like "/dev/ttyUSB1"). This is the value you want for pandad.conf

On the 780 itself, jack up the serial speed to 19.2K (all the way up). This also needs to be reflected in pandad.conf

Bearcat commands follow a request/response cycle in that the computer issues a command/request and the radio responds. All commands/requests will generate a response from the radio like "OK" or "ERR" or a request specific response. If you issue a command using Mellow Panda and do not see a response, there is a connectivity problem.

Note: the 780 will not respond to remote commands if the menu tree is displayed. Press the "menu" key to back out. Of course the RMT flag should also be visible on the display.

There are several sources of information on the Bearcat Uniden command set. Most of the commands make sense, especially if you are familiar w/using the radio.

Mellow Panda tries hard to make your radio accessible: you can exercise the radio by running pandad in the foreground or you can use the panda client. For example, the "SI" command will return system information such as the radio model and version.

For pandad in foreground: ./pandad -x panda://device/raw/bc780.a/SI
For panda client: ./panda -r bc780.a -k raw/SI
Response looks like: SI BC780XLT,0000000000,103

The real fun starts when you need to string commands together to complete a task. Not everything you want to do has an explicit command. Happily, Mellow Panda makes it easy to experiment and I will provide examples of common 780 tasks.

Note:several of these examples are already available as bash scripts in the Mellow Panda demo directory.

Store a frequency and then assign a alphanumeric tag (visible in the radio display)
./panda -r radio_name -k "raw/PM005 01220000"
./panda -r radio_name -k "raw/TA C 005 Flight Watch"


Define channel 5 as the priority channel
./panda -r radio_name -k "raw/PC A004"

Monitor a Motorola Type-2/800 trunk system using only the control channel
./panda -r radio_name -k "raw/PM051 08541875"
./panda -r radio_name -k "raw/KEY13H"
./panda -r radio_name -k "raw/TCN B P1"
./panda -r radio_name -k "raw/KEY00"
./panda -r radio_name -k "raw/KEY13"

Monitor a Motorola Type-2/800 trunk system by defining all associated frequencies
./panda -r radio_name -k "raw/KEY11"
./panda -r radio_name -k "raw/KEY02 3"
./panda -r radio_name -k "raw/KEY02 2"
./panda -r radio_name -k "raw/KEY02 1"
./panda -r radio_name -k "raw/KEY02 1"
./panda -r radio_name -k "raw/KEY11"
./panda -r radio_name -k "raw/KEY11"
./panda -r radio_name -k "raw/KEY11"
./panda -r radio_name -k "raw/PM051 08541875"
./panda -r radio_name -k "raw/KEY13H"
--and more frequencies--

./panda -r radio_name -k "raw/SB B"

./panda -r radio_name -k "raw/KEY00"

./panda -r radio_name -k "raw/KEY13"

Saturday, January 16, 2010

Project Panda

I have released Mellow Panda on SourceForge.

Mellow Panda is a collection of applications which control radio receivers ("scanners") from LINUX via their RS-232/USB interfaces.

Mellow Panda deploys as a daemon (pandad) and specialized clients. pandad is a generic gateway which exposes a TCP stream socket to accept client requests which are relayed to the radios via RS-232/USB. The response returns via the reciprocal path.

pandad is generic and does not interpret the radio commands. Each radio model potentially has a different command set and this specialized knowledge is provided by the client. pandad can simultaneously support multiple radios, each a different model. I routinely drive a Icom PCR-1000, BC-780-XLT and a PRO-2052 all using the same instance of pandad (but each w/a dedicated client).

A twist to this problem is that many models have an asynchronous messaging capability, i.e. the Uniden Bearcat radios will send a message when squelch breaks or trunk id. The Icom PCR-1000 family has a "bandscan" feature which can be used to produce a spectral graph. Each active radio has a UDP socket which broadcasts all traffic generated by the radio. Clients can issue requests via the TCP socket and accept the response either via TCP or get all messages via UDP.

The panda protocol is a simple ASCII string. Even a telnet client is sufficient (I used a telnet client in the early stages for testing).

Communication via a socket has all the usual benefits, sharing a scarce resource and flexibility. Clients can be implemented using any platform or language which is convenient. The pandad distribution has a command line client implemented in C which is useful for development/test and simple scripts.

Other clients will follow as I get them ready to share. pandapy (python) is almost ready along w/pandaj (Java Swing) and pandalet (Tomcat Servlet). You are welcome to contribute additional clients to the project.

Mellow Panda is part of Project Mellow which I am releasing as time permits.

Sunday, November 8, 2009

Android Development on Sprint/HTC Hero and Ubuntu

I now have a shiny new HTC Hero from Sprint which I purchased just to experiment w/Google Android.

My primary devbox is Ubuntu Intrepid. Sprint is still on Cupcake (Android platform 1.5). Still have not figured out how to "sync" between Ubuntu and Android, but development works just fine.

The Hero connects to Ubuntu Intrepid via USB and it can be mounted as a file system.

How to use the Hero as a development target.



On the Hero, select "Settings" then "Applications"

Check the "Unknown Sources" box.

Select the "Development" option.

There are three options inside Development: "USB Debugging" "Stay awake" "Allow mock locations" - select to your taste (I enable all three).


On Ubuntu, I assume you have eclipse w/the ADT plugin.
From eclipse, navigate to the build configurations. There is a dialog entitled "Android Device Chooser" - select your Hero and then run. Your application should appear on the Hero.












How to mount your Hero as a USB drive from Ubuntu.



On your devbox, create /etc/udev/rules.d/51-android.rules


gsc@cornfed:66>pwd
/etc/udev/rules.d
gsc@cornfed:67>cat 51-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"


Connect the Hero to your devbox via USB. There should be some chatter in /var/log/messages about the new device. Something like this...


Nov 8 16:32:49 cornfed kernel: [185299.048021] usb 8-4: new high speed USB device using ehci_hcd and address 13
Nov 8 16:32:49 cornfed kernel: [185299.193667] usb 8-4: configuration #1 chosen from 1 choice
Nov 8 16:32:49 cornfed kernel: [185299.203424] scsi17 : SCSI emulation for USB Mass Storage devices
Nov 8 16:32:54 cornfed kernel: [185304.220343] scsi 17:0:0:0: Direct-Access HTC Android Phone 0100 PQ: 0 ANSI: 2
Nov 8 16:32:54 cornfed kernel: [185304.239535] sd 17:0:0:0: [sdc] Attached SCSI removable disk
Nov 8 16:32:54 cornfed kernel: [185304.239674] sd 17:0:0:0: Attached scsi generic sg3 type 0


On the Hero, pull down the status bar (i.e. push the Home symbol then touch the top of the display and drag your finger down). There should be a message saying "USB connected, select to enable". Press this. A dialog will appear warning about the mount. Select OK.

At this point you should have a freshly mounted USB filesystem. There will be more chatter in /var/log/messages (like so...)

Nov 8 16:36:44 cornfed kernel: [185533.291475] sd 17:0:0:0: [sdc] 3862528 512-byte hardware sectors (1978 MB)
Nov 8 16:36:44 cornfed kernel: [185533.294342] sd 17:0:0:0: [sdc] Write Protect is off
Nov 8 16:36:44 cornfed kernel: [185533.299343] sd 17:0:0:0: [sdc] 3862528 512-byte hardware sectors (1978 MB)
Nov 8 16:36:44 cornfed kernel: [185533.301341] sd 17:0:0:0: [sdc] Write Protect is off
Nov 8 16:36:44 cornfed kernel: [185533.302919] sdc: sdc1


Of course, df(1) will also report the filesystem


gsc@cornfed:68>df -k
Filesystem 1K-blocks Used Available Use% Mounted on
--other filesystems deleted for clarity--
/dev/sdc1 1928992 631840 1297152 33% /media/disk


At this point, you can treat this like any other mounted file system. Huzza!


gsc@cornfed:69>cd /media/disk;ls
albumthumbs DCIM HTC Sync rosie_scroll
amazonmp3 download Music Wallpaper

Monday, November 2, 2009

Apple iPhone Tech Talks World Tour - San Jose

I was lucky enough to get an invitation for the iPhone Tech Talks held in San Jose on 29 October, 2009. The talks were held at the Hyatt in Santa Clara (off Great America Parkway). South bay is a 3 hour drive for me and with the Oakland Bay Bridge closure it might take even longer. I considered staying home to keep working on my next iPhone app. Attending was hanging by a thread, but I wanted to see the show and meet other iPhone developers. In the end, I went and I'm glad I did.

Registration opened promptly at 0800. The registration lady really does ask for photo ID before issuing your badge and mandatory t-shirt. Apple put on a nice breakfast, coffee, fat pills and some fruit. 0800 is rather early for the valley and small talk was hard to drum up.

Shortly before 0900 I was in the large conference room w/Blink-182 (and similar) on the soundtrack. Apple starts promptly and the keynote was a inspiring start for the day. The overall theme: iPhone is cool and popular, write great apps, make money. I like it.

There short video promoting the iPhone and applications. Another video from the very big conglomerate why corporate IT is adopting the iPhone. The speaker had a steady stream of poster children for great apps. I rarely cruise the app store, so this was beneficial for me.

One example was "things" which features a "companion app" - i.e. there is a desktop app and a iPhone app and they share data. I have an application in development which also needs to share data between iPhone and desktop, but I didn't know this arrangement had a name.

There are 3 technical tracks available after the keynote. I stayed in the big hall for "Effective iPhone Development" parts 1 and 2. The talk was good, but I already knew most of the content. One small item I didn't know: don't prefix vars w/a underscore because Apple uses these internally and there might be a collision.

Apple provided a catered box lunch w/a sandwich, salad, etc. Not bad. By lunchtime, people were awake and ready to talk. I picked a table that contained the oldest looking people (being ancient myself) and struck up a conversation. After working from home most of the year, it was fun to meet some new people.

One distressing item: I asked everybody I met if they were able to sustain themselves by creating iPhone apps. The answer was a resounding "no". Perhaps we are all beginners and just haven't paid our dues. Perhaps there really isn't much money in the app store. Not certain, but to actually earn a living from creating iPhone applications seems to be a rare accomplishment.

After lunch I sat through the "Mastering OpenGL ES for iPhone (p1)" - probably should have just snuck out to my truck for a nap. I don't remember much about this talk. If linear algebra scares you... well... perhaps you shouldn't be doing OpenGL. Anyway, less hand wringing/intimidation and more bit twiddling would be an improvement.

Next was "Testing and Debugging Your iPhone Application" - which was disappointingly light. I did get some new information though: when you ship an app, keep the .dSym file for crash analysis (makes sense, I should have already discovered that one). Secondly, Snow Leopard (which I have yet to install) has clang which does a thorough job w/static source analysis. I resolve to upgrade to Snow Leopard as soon as I ship my next app.

Finally, "Maximizing iPhone App Performance" which was also on the light side, but still worth an hour. I probably should have attended the networking presentation instead.

Apple wrapped up the day w/a wine and cheese reception.

Wrapup: the Apple people are accessible, they take questions between sessions and there is a lab where you can bring them specific examples for consultation. The developer outreach is nice, and Apple certainly deserves praise for the effort. There is no paper and AFAIK the slides/sources are not available on the web. Take your notes and be quick.

There are videos from previous "tech talks" available on the Apple developer web site. There is a fair amount of old material, but there is enough new material to make them worth attending.

One factoid tossed out: all the attendees had published iPhone apps (in my case, a very minor application). Write that app if you want to score an invite next year.

It was an inspiring day, even if I didn't meet anybody who has struck gold on the appstore. Maybe next year...

Monday, September 7, 2009

Fresh OS X Dashboard Widget

My latest OS X Dashboard Widget was made available today.

I have an iPhone application which is almost ready for submission. The dashboard widget is meant to be a free sample (and a subset of) of the iPhone application.

I'll have more to say about this once Apple releases the application to the iPhone store.

The Apple Dashcode tool greatly eases widget creation. It wasn't difficult to wrap the widget around my core libraries. I kept the dancing eye candy to a minimum because (after all) I prefer people to use the "for pay" application.

The Apple development tools are nice, it is easy to see why people get emotional about them.

Tuesday, September 1, 2009

Backpropagation Neural Network

I have just finished updating "backprop1" - a simple 3 layer backpropagation neural network implemented in Java. There are three demo applications, a point classifier, a XOR demo and a interactive character recognition demo.

You can obtain a copy from Source Forge