No, iPad auto-correct. “Afro bed meeting” is not really close to “at dinner meeting.”
Author Archives: Allen Huffman
Fix a 1998 Furby that won’t wake up or start up (without disassembly)
- 12/2014 Update: I keep planning to take some pics of the “screw thing” to post with this, but keep forgetting. Sorry about that.
- 11/2015 Update: This is the most viewed article on my site. Who knew there were so many folks out there with bad Furbys!
- 12/2016 Update: A year later, and folks are still finding this article. There were about 300 views of it on Christmas day. Retro presents, I guess?
- 01/24/2017 Update: Commenter Samuel submitted a photo of the gear. It doesn’t look like the spiral gear I remember, so either there is another gear I missed, or there was a variation of the Furby
- 3/5/2026 Update: Today I shut down my old appleause.com blog and moved the content here. Welcome, Furby rescuers!
If your old Furby won’t wake up or won’t start up and appears dead, you may be able to fix it in a few seconds without having to take it apart.
I recently tried to get my original 1998 Furby to work, and found that it was dead. I spent some time doing unsuccessful web searches, with none of the tips (“try new batteries”, “press the reset button”) helping. A second Furby has the same issue, and it looked like it might be related to a jammed motor, per this tutorial:
http://www.instructables.com/id/Push-Start-a-Comatose-Furby/
This procedure involved all kinds of disassembly, sewing things back together and hot glue. A similar YouTube video shed more light on the problem off the stuck motor:
I suspected you could just get to the motor using a small screwdriver and going in around the eye or beak, and indeed, it works. I was able to use a tiny flathead screwdriver, inserted above the beak and in to the left to gently rotate the corkscrew spiral connected to the motor a few times and within seconds, the Furby was alive again. Both units were fixed this easy, with no disassembly required.
Update: Thanks to Samuel (http://twitter.com/samsearight), we now have a photo. On my Furby, there is a corkscrew spiral gear I moved, and not this normal gear. I don’t know if the gear is also in mine or if this is a different revision. It looks easier to work with than the gear I found in mine. Thanks, Samuel!

Teensy 2.0 iCade source code
(Edited on 02/12/2013 to fix the source code formatting, and to add a photo.)
NOTE: There is a native method of compiling code for the Teensy, using a C compiler, but this source code was built using the Teensyduino add-on. It enables the standard Arduino IDE GUI to build code for the Teensy. You have to install the Arduino IDE first, then you install the Teensyduino add-on on top of it.
“As seen on the Teensy Project Page.”
This is my source code for the Teensy 2.0 iCade/Atari joystick interface. It could easily be made to work on an Arduino that has USB HID support (Arduino Leonardo, Esplora) and enough digital I/O pins. It is a bit bulky because I emit various status messages for testing, but I will at some point provide a stripped down version. I also have a version that uses the Debounce library which appears even smaller, but I like completely self-contained code where possible.
I have not got back to clean this up, so it includes some items commented out and such, but I wanted to provide this for those asking about it.
Or, this code could be modified to run on the new Arduino Esplora, which already has joystick buttons on it and USB HID output to act like a keyboard/mouse to whatever it’s hooked up to:
http://www.radioshack.com/product/index.jsp?productId=18450286#
Keep in mind, the Teensy 2.0 is a low power device and it seems the 20mah of the iPad is enouhg to power it (running in low power mode, no LEDs, etc.). This may not be the case with an Arduino, and they may require hooking up via a powered hub before connecting to the iPad.
//*-----------------------------------------------------------------------------
Teensy iCade Input
by Allen C. Huffman (alsplace@pobox.com)
Monitor digital inputs, then emit a USB keyboard character mapped to an iCade
button depending on the pin status. The character will be the "hold" character
for pin connected (N.O. button push) and "release" character for pin
disconnected (N.O. button released).
Pin 11 is reserved for blinking the onboard LED as a heartbeat "we are alive"
indicator.
This software was written to allow a Teensy 2.0 to interface between arcade
buttons and an iPad via USB and Camera Connector Kit.
2012-12-04 0.0 allenh - Initial version, based on my ArduinoAIDI code.
-----------------------------------------------------------------------------*/
#define VERSION "0.0"
#define LED_OFF
//#include <eeprom .h>
//#include <avr/wdt.h>
/*
iCade keyboard mappings.
See developer doc at: http://www.ionaudio.com/products/details/icade
WE YT UF IM OG
AQ< -->DC
XZ HR JN KP LV
Atari joystick port, looking at the male DB9 on the Atari.
See: http://old.pinouts.ru/Inputs/JoystickAtari2600_pinout.shtml
1 2 3 4 5/ Up Dn Lt Rt PA
6 7 8 9/ Bt +5 Gd PB
*/
/*
The following I/O pins will be used as digital inputs
for each specific iCade function.
*/
#define UP_PIN 0
#define DOWN_PIN 1
#define LEFT_PIN 2
#define RIGHT_PIN 3
#define BTN1_PIN 4
#define BTN2_PIN 5
#define BTN3_PIN 6
#define BTN4_PIN 7
#define BTN5_PIN 8
#define BTN6_PIN 9
#define BTN7_PIN 10
#define BTN8_PIN 12
/*
The following keys are the iCade sequence (hold, release)
for each function. Send "W" to indicate UP, and "E" when
UP is released.
*/
#define UP_KEYS "we"
#define DOWN_KEYS "xz"
#define LEFT_KEYS "aq"
#define RIGHT_KEYS "dc"
#define BTN1_KEYS "yt"
#define BTN2_KEYS "uf"
#define BTN3_KEYS "im"
#define BTN4_KEYS "og"
#define BTN5_KEYS "hr"
#define BTN6_KEYS "jn"
#define BTN7_KEYS "kp"
#define BTN8_KEYS "lv"
#define DI_PIN_COUNT 12 // 12 pins used.
#define DI_PIN_START 1 // First I/O pin.
#define DI_PIN_END 20 // Last I/O pin.
byte myPins[DI_PIN_COUNT] =
{UP_PIN, DOWN_PIN, LEFT_PIN, RIGHT_PIN,
BTN1_PIN, BTN2_PIN, BTN3_PIN, BTN4_PIN,
BTN5_PIN, BTN6_PIN, BTN7_PIN, BTN8_PIN};
char iCadeKeymap[][DI_PIN_COUNT] =
{UP_KEYS, DOWN_KEYS, LEFT_KEYS, RIGHT_KEYS,
BTN1_KEYS, BTN2_KEYS, BTN3_KEYS, BTN4_KEYS,
BTN5_KEYS, BTN6_KEYS, BTN7_KEYS, BTN8_KEYS};
char iCadeDesc[][DI_PIN_COUNT] =
{"Up", "Down", "Left", "Right",
"Btn1", "Btn2", "Btn3", "Btn4",
"Btn5", "Btn6", "Btn7", "Btn8"};
/* We want a very short debounce delay for an arcade controller. */
#define DI_DEBOUNCE_MS 10 // 100ms (1/10th second)
#define LED_PIN 11
#define LEDBLINK_MS 1000
/*---------------------------------------------------------------------------*/
/* For I/O pin status and debounce. */
unsigned int digitalStatus[DI_PIN_COUNT]; // Last set PIN mode.
unsigned long digitalDebounceTime[DI_PIN_COUNT]; // Debounce time.
// unsigned long digitalCounter[DI_PIN_COUNT]; // Times button pressed.
unsigned int digitalDebounceRate = DI_DEBOUNCE_MS; // Debounce rate.
/* For the blinking LED (heartbeat). */
unsigned int ledStatus = LOW; // Last set LED mode.
unsigned long ledBlinkTime = 0; // LED blink time.
unsigned int ledBlinkRate = LEDBLINK_MS; // LED blink rate.
unsigned int pinsOn = 0;
/*---------------------------------------------------------------------------*/
void setup()
{
// Just in case it was left on...
// wdt_disable();
// Initialize the serial port.
Serial.begin(9600);
// Docs say this isn't necessary for Uno.
// while(!Serial) { }
showHeader();
// Initialize watchdog timer for 2 seconds.
// wdt_enable(WDTO_4S);
// LOW POWER MODE!
// Pins default to INPUT mode. To save power, turn them all to OUTPUT
// initially, so only those being used will be turn on. See:
// http://www.pjrc.com/teensy/low_power.html
for (int thisPin = 0; thisPin < DI_PIN_COUNT; thisPin++)
{
pinMode(thisPin, OUTPUT);
}
// Disable Unused Peripherals
ADCSRA = 0;
// Initialize the pins and digitalPin array.
for (int thisPin = 0; thisPin < DI_PIN_COUNT; thisPin++)
{
// Set pin to be digital input using pullup resistor.
pinMode(myPins[thisPin], INPUT_PULLUP);
// Set the current initial pin status.
digitalStatus[thisPin] = HIGH; // digitalRead(thisPin+DI_PIN_START);
// Clear debounce time.
digitalDebounceTime[thisPin] = 0;
// digitalCounter[thisPin] = 0;
}
// Set LED pin to output, since it has an LED we can use.
pinMode(LED_PIN, OUTPUT);
Serial.println("Ready.");
}
/*---------------------------------------------------------------------------*/
void loop()
{
// Tell the watchdog timer we are still alive.
// wdt_reset();
#ifndef LED_OFF
// LED blinking heartbeat. Yes, we are alive.
if ((long)(millis() - ledBlinkTime) >= 0)
{
// Toggle LED.
if (ledStatus == LOW) // If LED is LOW...
{
ledStatus = HIGH; // ...make it HIGH.
}
else
{
ledStatus = LOW; // ...else, make it LOW.
}
// Set LED pin status.
if (pinsOn == 0)
digitalWrite(LED_PIN, ledStatus);
// Reset "next time to toggle" time.
ledBlinkTime = millis() + ledBlinkRate;
}
#endif
// Check for serial data.
if (Serial.available() > 0)
{
// If data ready, read a byte.
int incomingByte = Serial.read();
// Parse the byte we read.
switch (incomingByte)
{
case '?':
showStatus();
break;
default:
break;
}
}
/*-------------------------------------------------------------------------*/
// Loop through each Digital Input pin.
for (int thisPin = 0; thisPin < DI_PIN_COUNT; thisPin++)
{
// Read the pin's current status.
unsigned int status = digitalRead(myPins[thisPin]);
// In pin status has changed from our last toggle...
if (status != digitalStatus[thisPin])
{
// Remember when it changed, starting debounce mode.
// If not currently in debounce mode,
if (digitalDebounceTime[thisPin] == 0)
{
// Set when we can accept this as valid (debounce is considered
// done if the time gets to this point with the status still the same).
digitalDebounceTime[thisPin] = millis() + digitalDebounceRate;
}
// Check to see if we are in debounce detect mode.
if (digitalDebounceTime[thisPin] > 0)
{
// Yes we are. Have we delayed long enough yet?
if ((long)(millis() - digitalDebounceTime[thisPin]) >= 0)
{
// Yes, so consider it switched.
// If pin is Active LOW,
if (status == LOW)
{
// Emit BUTTON PRESSED string.
Serial.print(iCadeDesc[thisPin]);
Serial.print(" pressed (sending ");
Serial.print(iCadeKeymap[thisPin][0]);
Serial.println(" to iCade).");
Keyboard.print(iCadeKeymap[thisPin][0]);
// digitalCounter[thisPin]++;
pinsOn++;
#ifndef LED_OFF
digitalWrite(LED_PIN, HIGH);
#endif
}
else
{
// Emit BUTTON RELEASED string.
Serial.print(iCadeDesc[thisPin]);
Serial.print(" released (sending ");
Serial.print(iCadeKeymap[thisPin][1]);
Serial.println(" to iCade).");
Keyboard.print(iCadeKeymap[thisPin][1]);
if (pinsOn > 0)
pinsOn--;
if (pinsOn == 0)
digitalWrite(LED_PIN, LOW);
}
// Remember current (last set) status for this pin.
digitalStatus[thisPin] = status;
// Reset debounce time (disable, not looking any more).
digitalDebounceTime[thisPin] = 0;
} // End of if ( (long)(millis()-digitalDebounceTime[thisPin]) >= 0 )
} // End of if (digitalDebounceTime[thisPin]>0)
}
else // No change? Flag no change.
{
// If we were debouncing, we are no longer debouncing.
digitalDebounceTime[thisPin] = 0;
}
} // End of (int thisPin=0; thisPin < DI_PIN_COUNT; thisPin++ )
}
/*---------------------------------------------------------------------------*/
void showHeader()
{
int i;
// Emit some startup stuff to the serial port.
Serial.print("iCadeTeensy ");
Serial.print(VERSION);
Serial.println(" by Allen C. Huffman (alsplace@pobox.com)");
Serial.print(DI_PIN_COUNT);
Serial.print(" DI Pins (");
for (i = 0; i < DI_PIN_COUNT; i++)
{
Serial.print(myPins[i]);
Serial.print("=");
Serial.print(iCadeDesc[i]);
Serial.print(" ");
}
Serial.print("), ");
Serial.print(digitalDebounceRate);
Serial.println("ms Debounce.");
}
/*---------------------------------------------------------------------------*/
void showStatus()
{
showDigitalInputStatus();
}
/*---------------------------------------------------------------------------*/
void showDigitalInputStatus()
{
Serial.print("DI: ");
for (int thisPin = 0; thisPin < DI_PIN_COUNT; thisPin++)
{
// Read the pin's current status.
Serial.print(iCadeDesc[thisPin]);
Serial.print("=");
Serial.print(digitalRead(myPins[thisPin]));
Serial.print(" ");
// Serial.print(" (");
// Serial.print(digitalCounter[thisPin]);
// Serial.print(") ");
}
Serial.println("");
}
/*---------------------------------------------------------------------------*/
// End of file.
Apple Maps: Your milage may vary.
I just read a reference to Apple’s “struggling” map software. Like many things that get “reported” in the blogosphere, they are often repeating the echo chamber of things observed or researched by others, or they are sharing one tiny sliver of experience as fact as if everyone experiences it the same way.
When it comes to Apple Maps on iOS 6, I must say, I am quite impressed. You see, there is a small connecting road on the East side of Des Moines that my 2005 Toyota Prius navigation system never knew about. It would always route many blocks out of the way to go around it.
My 2007 navigation system, likewise, also did not know about. And neither did an additional map update I purchased for it at great cost.
My 2010 3rd generation Prius navigation system also does not seem to think it exists, nor did a map update for it.
Two TomTom models, years apart, do not know it exists, even after being reported with the community “suggest corrections” feature TomTom brags about.
I believe I even tested a Magellan navigation unit to find it also did not know about this road.
Surprisingly, to me, the one map that did have it was OpenStreetMaps – the open source wikipedia of maps. Amazing that they knew about this road, while Google, Navtec, TomTom, etc. did not seem to believe that it existed — even though it had been there for ages.
Google, today, does show this section of the road, but I believe that was not the case a few years ago.
And Apple Maps also shows it. Not only that, but Apple Maps can correctly navigate me from my housing area to the Main Street without jumping me through the forest nearby like everything else does. None of the systems I have used had the connecting driveway that links my area with the road, so they often jump to the closest pavement they can find, which is over the river and through the woods.
Apple Maps is the first map software I have used that correctly pinpoints where I live, and knows how to get there without just getting close.
So from my perspective, it’s a huge improvement over many other maps I have used and reviewed over the years.
But your milage may vary.
Hook an Atari 2600 joystick up to an iPad, thanks to Teensy 2.0
- 2014/03/16 Update: The source code to this is now on GitHub. Check the Arduino link at the top of each page of this site.
“As seen on the Teensy Project Page.”
I recently gained some experience using Arduinos to control inputs in a local haunted house attraction, and that has opened up quite a world of projects. During my research, I learned about the Teensy 2.0, a cheap (starting at $16, http://www.pjrc.com/teensy/index.html) controller that is similar to Arduino, but had more I/O pins than the Arduino Uno, plus had the ability to act like a USB keyboard or mouse. This enables it to send keystrokes or mouse movements/clicks to a computer, as if it were receiving them from an input device.
So, using the $19 version of Teensy 2.0 (that has header pins) and some wires, I was able to connect my Atari Flashback 2 joystick to an iPad via the USB adapter. I wrote a small program that reads the I/O pins of the Teensy 2.0, then sends out USB keyboard commands that emulate the iCade arcade controller.
My project was noted on the Teensy 2.0 project page:
http://www.pjrc.com/teensy/projects.html
I will be posting full notes and the code as soon as I have a moment to work on it.

Stay tuned…
Greetings. All the old content from my former Applause site, including the postings on FireWIre/SATA and UltraProjector, will be migrated to this WordPress blog shortly.
Until then, enjoy the blandness of a generic install.
2012: The Year of 3-D
RAR (Random Apple Rumor, see 2007 post) of the day…
Apple will announce its 3-D imitative. “3-D is big in the movie industry right now, but it hasn’t made it successfully to the home. Other companies have been trying 3-D for years, but we think we can do it better.”
1. The Apple TV that is an actual TV will be a 3-D TV. Since 3-D TVs already carry a premium price, having one that also does Apple TV stuff won’t seem to have too much of an “Apple tax” associated with it. Killer industrial design AND “Apple Eye” glasses that will be better and cheaper than existing ones will be the feature that makes them better.
2. The iTunes 3-D Movie Store will provide content.
3. The new iPhone 3D and iPod Touch 3D will allow consumers an easy way to record their own 3-D movies.
4. iMovie 3-D will allow easy 3-D processing, including adding 3-D titles (user selectable depth).
5. Output to red/blue anaglyph (or direct uploading to YouTube, since they support 3-D) will be part of it.
6. 2012 will be the year of 3-D.
Based on nothing. (Well, except a supposed “next iPhone” case photo that shows a hole in each corner, spaced like they are spaced on the 3-D Aiptek/Viewsonic cameras… Sure, they said it was for a flash, but…)
AIPTEK 3D HD Camcorder i2 & Mac p2
Updates:
- 2017-01-10: Reformatted for WordPress.
Here are some things I have learned so far:
See also: Part 1
My camera shipped with FW Ver 1504, Jul 23 2010. HWVer 10B1.
- There is a firmware update (build 160) available on the European site for AIPTEK, but not on the US site. It fixes a frame rate issue that reviews seem to complain about. Why this update is not available in the US (the archive comes with English and it appears to work fine) is unknown. You can find it here.
- My unit had a color issue, where the right side image (right eye/camera) had a reddish tint to it. I wrote tech support and they responded within 24 hours, and we had a few e-mails back and forth during the day. They provided me with another firmware update (180, Ver 1803 Oct 11 2010) but it did not resolve the problem. They suggested I return the unit to Amazon, so I did. I requested an exchange on Friday, and Amazon shipped out the replacement “next day” (via Amazon Prime of my original order I suppose) and I picked up the replacement and shipped back my original the following Monday. (Wow, Amazon!)
- To install updates, you copy two files to an SD card (the instructions say to use 4GB or smaller, but it worked fine on my 16GB card — to be safe, follow their instructions). One file is an .elf (probably the standard debugger file format) and the other is AipFwUpgrade.txt, an empty file that is probably a trigger file the camera will look for. The card is inserted back in to the camera, and when you power it up and the update will proceed. Once complete, you have to remove these files from the SD card via a computer else the update will happen every time you power up. I found that you can mount the camera and copy the files over to it, directly, then let it update, but you still need to put the SD card in a card reader on a computer to remove them.
- There is also an update to the Windows PC software that comes on the virtual “CDImage” you see when you plug in the camera to a computer. This update can be found here too. Just like the firmware update, you copy two files over to an SD card (a .iso CD image file, and AipUpdateISO.txt trigger file) and put it back in the camera then turn it on. When done, you have to delete these files (just like with the firmware updates). This is a very decent system for doing updates.
- The files uploaded to YouTube (videos) are split screen squished — meaning for a 1920×720 image, you are seeing two 640×720 images squished together. YouTube can handle 3-D video if you add special keyword tags — in this case, the tags added by the AIPTEK ArcSoft software are “yt3d:enable=true”, “yt3d:swap=true” and “yt3d:aspect=16:9”. These are added by the ArcSoft software on upload, which means the software is not really doing anything special. I confirmed this by trying to upload the same .MP4 file directly to YouTube via the website, and received a “duplicate file” warning.
- YouTube will display the split screen file as various forms of red/blue anaglyph, interlace or checkerboard formats. This is nice, meaning you can let them do all the translations for your friends to watch however they want (even side by side or cross eye formats for viewing without glasses). BUT, viewing these files outside of a web browser (iPhone, iPad, etc.) will display only the split screen squished video as, apparently, the 3-D stuff is not handled by mobile devices (yet?).
- There is no Mac software, but it is quite easy to convert the video inside of Final Cut Express by layering the video on two tracks, applying the Levels filter to the top track and setting Red output tolerance to 0, then applying two instances of Level filter to the bottom copy, and setting one to Blue tolerance 0 and the other to Green tolerance 0, then setting top track to a mix so it shows through. This requires rendering and is slow, but produces good red/blue anaglyph results. Details on how to do this I found on this DVINFO.net message board years ago. Their suggestion of using “Screen” composite mode did not produce good results for me, but using Overlay worked fine.
- Conversion of photos on a Mac is my next project. There are quite a few programs out now for dealing with the Fuji W3 3-D camera, but I have not checked any of them yet to see if they also handle the side-by-side split screen format.
- There is no adjustment (seemingly) for parallax on the Aiptek. Back when I was using the NuView 3-D camcorder lens adapter (see also: Stereocam), there was a knob you turned to adjust the distance of the image. You would basically line up the two ghost images of whatever you wanted to be on the surface of the TV — anything in front of that would jump out of the TV, and anything behind it would recess in to the TV. This meant you could record something five feed away and adjust it so 4 feet popped out, and 6 feet went in. Or if you recorded something 20 feet away, you could set that as the neutral “flat” part. The Aiptek has no such adjustment (the W3 apparently does). The default distance appears to be around 10 feet, so trying to record anything too close (like something within a few feet) causes very bad ghosting — so this is best used for wide shots, and not close ups.
I will post more updates when I have time. I have to charge up the replacement camera and see if it handles color any better.
AIPTEK 3D HD Camcorder i2 & Mac
Two days ago, a random Google search led me to discover a cheap ($199 list price!) 3-D camcorder now for sale. This AIPTEK 3D HD Camcorder i2 model was not a camcorder like I think of the term, but more like one of those Flip video memory card cameras. It shoots video and takes digital pictures in 2D and 3D. The camera has 25MB of internal memory for taking a few shots, but an SDHC card is required to do anything more substantial than test it.
I placed an order via Amazon Prime and had the camera the next day — thanks, Amazon! If you wish to buy one, the model I got was $183
The camera comes with an HDMI cable (there is a mini HDMI port on the camera), NP70 battery, a USB extension cable, a set of nice plastic red/blue 3-D anaglyph glasses, a wrist strap and carrying pouch. When the camera is plugged in to a computer, it mounts as a “CDImage” virtual CD with Windows software, and a flash drive with the standard DCIM folder structure on it.
The software is used to download video and photos from the device, and then upload them to Facebook or YouTube. YouTube has support for 3-D video files, and will display them dynamically as either side-by-side format or several types of red/blue anaglyph (color, greyscale, optimized).
The raw 3-D JPG files that come out of the camera are 2592×1944 and they are two images squished side-by-side. Videos are in MP4 format and 1280×720, left and right images side-by-side. The conversion software (ArcSoft TotalMedia HDCam for 3D) will split the two images out and process them as a red/blue anaglyph image (for viewing with the old style paper glasses).
There is no Macintosh software, and thus this post.
Without the software, you are stuck with a cheesy 2-D camera of questionable resolution. It should be very easy in Final Cut Express to convert the MP4 video files, but I am not sure what software exists for handling the still photos.
I will add a new post when I get it figured out. I just wanted this here so Google could find it and maybe someone out there could help on this project.
UltraProjector and Mac
In 2009, I stumbled across a “coming soon” solid state digital projector called UltraProjector. It was designed for use in things like Halloween haunted house. (It was originally $149, but today is $199.) The unit, which began shipping in October that year, was a totally silent, self contained low resolution projector (320×240) with audio output. Simply convert video to the proper AVI format, copy it to the device via USB, then turn and and watch it endlessly project the video clip(s).
I evaluated one of the prototypes and made the decision to order four of them when they began shipping, and we used them in several Haunted House attractions here in Des Moines, Iowa.
BUT, I quickly found out these units were not at all Mac friendly. First, there seemed to be only one program in the known world that could convert files that would play on it, and it was only available on Windows — some AVI Creator program, available as a free download.
(UltraProjector identifies itself as “ROCK MP3” and uses a China made chipset called Rockchip.)
Some intense research showed a secondary program, ViDrop, which could create videos — maybe — and it was a graphical frontend to “mencoder,” an open source converter program that is also available for Mac.
This blog post is just a placeholder to document my attempts to convert video on a Mac to use in the UltraProjector.
A bigger problem, though, is that bogus files on the UltraProjector file system make it lock up. When you plug it up to a Mac, Spotlight takes over and creates a few hidden “dot” files on the USB file system — which then render it dead!
Here’s a quick command line to remove those files. First, open up Terminal and then change directories over to the USB UltraProjector device:
alsmb:~ allenh$ cd /Volumes/NO\ NAME/
If you list the directory there, using the “-a” option, it will show “all” files, including invisible files (files that start with a dot as their first character):
alsmb:NO NAME allenh$ ls -a
. .Trashes Storybook and Audio.avi
.. ._.Trashes
.Spotlight-V100 .fseventsd
There you can see the problem files — .Trashes, .Spotlight-V100, etc. Use the “rm” command with a few options to get rid of them. -R for recursive (so it goes in to each directory, deleting stuff), -d to tell it to remove directories, and -f to force the removal without prompting you each entry for verification:
alsmb:NO NAME allenh$ rm -R -d -f .*
rm: "." and ".." may not be removed
It’s okay that it cannot remove “.” and “..” — those are not real files, but references. “.” is the current directory (so an “ls .” shows where you are) and “..” is one directory up (“ls ..” would be “/Volumes”, in this example):
alsmb:NO NAME allenh$ ls -a
. .. Storybook and Audio.avi
You can see the dot files have been removed.
Up next … experiments with using mencoder to create proper AVI files for the device.
Stay tuned. I just wanted to get this uploaded so Google can start finding it…

