[19 Feb 2010] My first project involves serving up
4 pages for a
Camera Controller/Intervalometer. The Duemilanove was getting a little tight on both Flash and
RAM space. I could probably fit *most* of the app in the 30K of the Duemilanove but the 126K of the Mega is sooo much nicer. Also I
was having odd problems (with strings) that seemed to disappear when I moved up to the Mega. AsyncLabs is offering
V2 of the WiShield
on their website with 16 Mbit of storage for web pages.[20 Feb 2010] I'm getting reasonable performance on the camera controller app by using AJAX programming
techniques (ie. minimize the interaction with the
server by using javscript in the browser to manage the GUI and then just exchange small asynchronous messages with the
server. Keeping the message size within a single packet - about 300 bytes in the current configuration - helps).
And hopefully I will also have the manifest-based browser page caching (when I get the
outbound links to work from cached pages). The power usage should be a lot less using the Arduino
vs the Gumstix. For one thing,
the WiFi module on the WiShield is a lot cooler (probably sacrificing performance).
The size and performance also seem acceptible.

[19 Feb 2010] I am using the WiShield 1.0 on the Arduino Mega.
I followed the instructions
(links above) to bend and jumper pins 2 and 10-13; and changed spi.h.
The suggestion about leaving the pins unbent and using "pinMode(n, INPUT)" didn't
seem to work for me.[21 Feb 2010] Ordered a WiShield 2.0. It should arrive on Wednesday. I should be able to
fit my Camera Controller app on it with the Duemilanove, reducing the size a little and getting rid of the 5 extra jumper
wires.[25 Feb 2010] The WiShield 2.0 arrived. The WiFi worked fine serving up a HelloWorld webpage to
my iPod. For the new dataflash chip, I tried this AT45DB161D dataflash library
and it seemed to work OK when using Pin 10 (ie. switching the jumper on the WiShield to Pin 10 and leaving the
"#define SLAVESELECT 10" as it was in at45db161d.h). But the Asynclabs docs say that you can't use the WiFi
together with the dataflash when using Pin 10. You have to use Pin 7 for Slave Select. This resulted in the code
spinning in the spi_transfer() routine at the "while(!(SPSR & (1 << SPIF)));". Then I downloaded the
the Spi Library and tried reading the status register over SPI from the
dataflash chip. Low and behold, it worked with both pins 10 and 7. I then simply converted the original at45db161d.h
and at45db161d.cpp to use the Spi Library. It was just a matter of including Spi.h in the files and doing a change-all
of "spi_transfer" to "Spi.transfer". The
author's test program now works without problems
on both Pin 7 and Pin 10.

[19 Feb 2010] I haven't gotten caching using a manifest file to work yet.
The pages cache. Ie. after clearing my browser's cache and then accessing my Camera Controller app,
I see the manifest file and the app's pages being loaded from the server on the first reference to the app's initial index.html page.
From that point on, the pages are not reloaded and the response time is nearly instantaneous as if it was a native iPod app
as I flip from page to page. But my links to the server
don't work. It's as if the browser is blocking fetches to the web from cached pages.
Removing caching (by simply removing the manifest file from the <html> tag) allows the links to work again.
This happens on both the iPod Safari browser and Firefox on my MacBook. This is pretty basic so I must be missing something.
Both relative (href="/tp/i/r.html" or href="./r.html") and absolute
(href="html://192.168.1.3/tp/i/r.html") links behave the same.
Hmm.[21 Feb 2010] I had been using a 1g iPod Touch up until now. I just got a 3g, hoping to see a performance improvement and
whether there might be a difference in the problem noted above. I see some improvement in performance (I'll show in
my video). But no change with regard to the problem. One thing I note is that using Safari
from the Home Screen (ie. clicking on the Safari icon in the Home Screen, then entering the URL in it's address bar) doesn't
cache the pages at all. I see the page and the manifest file fetched from the server, but not the pages listed in the
manifet file. So the links to the server work, but the hoped-for caching doesn't. Again, I'm probably missing
something that will become obvious later. The overall speed of the 3g iPod is quite a bit faster and makes the purchase
worth it IMO. Plus it is nicer to hold and the colors (especially blue) are much nicer. Easy to justify a new toy :-).
It also induced me to download an iTunes U course -
Stanford's iPhone Application Development (Winter 2010). Wow!

[19 Feb 2010] I used Java to write a utiity that strips out the white space
(tabs, spaces, line feeds,
and comments) from my app's html in order to shrink it down as much as possible to save on space and
improve the transfer speed. This was pretty quick and painless. Only complaint is that
Apple has apparently removed support for Java from the latest release of Xcode. Bummer.

[19 Feb 2010] This seems to be working OK. The only problem I had was in downloading
the install image. I first tried a peer-to-peer download (I think they recommend it for speed and reliabiity).
The file appeared to download OK (no errors seen), but trying to install it failed consistently midway through -
something about an I/O error. I then downloaded the install image from Ubuntu's download page (clicking on the big
green button) and it installed without problems.

[19 Feb 2010] I'm using Parallels. It seems to be working well. My only complaint is that
the MacBook Pro's builtin SD card reader does not appear to be mounted as a device on Ubuntu (at least I couldn't
find it). It is mounted under /media/psf/. So, instead of using the builtin SD card reader to format the microSD card,
I got one of the USB-based microSD card readers - $10 for the Sandisk microSD reader from Staples. It mounts as
/dev/sdb on Ubuntu and the partitions are then named /dev/sdb1 and /dev/sdb2 after formatting the card.

[26 Feb 2010]UVC Camera Control for Mac OS X
looks like a good starting point. His project builds and runs without too much fuss.
Disabling the iSight camera
on my MacBook
appears to help - it prevents these simple sample programs from finding the iSight camera first and attempting to use it.