Friday, 13 November 2009

Karmic IPv6 Global address problems

If you're running IPv6 on Ubuntu 9.10 with multiple interfaces and you're not seeing any global IPv6 addresses assigned to your interfaces, and you're seeing this kind message in /var/log/messages:
Nov 13 10:10:10 my_machine kernel: [ 1000.101010] eth0: IPv6 duplicate address detected!
Then it's obviously Friday 13th and you should put down to ....Yeah maybe but yesterday it was the same....

It seems there's a kernel (2.6.31-15) bug which means IPv6 Duplicate Address Detection (DAD - see RFC4862) is generating false-positives and subsequently not permitting your global address to be assigned to an interface.

To work around this bug do (change eth0 to your iface name):
sudo sysctl net.ipv6.conf.eth0.accept_dad=0

Tuesday, 10 November 2009

Ubuntu 9.10 (Karmic) has dodgy input problem

I just upgraded to Karmic Koala and I'm NOT impressed - My mouse and keyboard have become unresponsive and sluggish - sometimes even losing keystrokes and control of the mouse for a few milliseconds at a time (I had to go back and correct this post due to missing keystrokes that I did make but didn't register).

I'm considering changing distro if this isn't fixed soon.

Sunday, 25 October 2009

Our Solar system (planets) broken on Google Earth/Sky

I was trying to see the planets (our solar system) on google earth recently but there seems to be a problem/bug - they do not display - both in the dedicated app and on the google sky website. When you click on the planets in the app (with error reporting on) you get:
http://mw1.google.com/mw-earth-vectordb/sky/sky0/solarsearch/mars-en-currenthour.kmz 404 not found
...and for all the others (maybe it's something else but they're not working on either right now).

Wonder when it'll be fixed?!

I posted a question on the help forums but no response....

Friday, 2 October 2009

MacBook disc crash (and restore)

Well my MacBook's disc decided to die the other week but thanks to Time Machine I had most of my stuff safe (apart from my other two partitions on my triple boot setup ;) - But I hadn't booted into 'em in a while so there can't have had anything tooo serious lost there - I think I'm going to just use VMware/Parallels/VirtualBox from now on...).

Of course I'd been using my TC with encrypted backups so when I attempted a restore using a new Snow Leopard DVD it couldn't find the backups... Oh dang! Luckily there is another way - I upgraded the default Tiger install to shiney new Snow Leopard and then fired off the Migration Assistant (from the another Admin account on the machine - you should not create your original user account with the same name as the one in your backup as it will clash - so just use another [admin] login and once you've run the Migration Assistant it will recreate your old account).

Friday, 25 September 2009

Handy OSX commands

List USB devices (a bit like lsusb on Linux)
On standard installation:
ioreg -c IOUSBDevice -l -w 0
Or using the developer tools:
IORegistryExplorer

Airport Wifi Info
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport
There are various arguments you can run it with -h to get a listing but the most useful are -I to get current wireless status, and -s to do a wireless scan.

Mount and mess with disk images
Here's how to mount a dmg:
hdiutil attach your_disk_image.dmg

List process' network connections
sudo lsof -i -P

Tweaking startup apps
- To disable startup items - add/rm a file called .disabled in their directory (i.e. a subdir of /System/Library/StartupItems/ or /System/Library/StartupItems/)
- launchctl -- Interfaces with launchd - in /Library/LaunchDaemons and similar
- Various custom ones; e.g. sudo "/Library/Application Support/VMware Fusion/boot.sh" --stop

Search using Spotlight on the command line
mdfind your_search_term (or mdfind -name file_to_find to look for file names).
There's also a few other related utilities like mdls to list file attributes etc. For more info see this useful post. It is also possible to enable the unix style locate command but it seems like a waste of space on OSX since you've already got Spotlight - though locate does provide for searching all files (only by name). However one can tweak Spotlight to search these files too...

Playing sounds on the cmd line
/usr/bin/afplay
Also afinfo gives you info on the file.

Print out OSX version
/usr/bin/sw_vers | grep 'ProductVersion:' | grep -o '[0-9]*\.[0-9]*\.[0-9]*'
Or use system profiler (both suggestions from here):
system_profiler SPSoftwareDataType

[updated: 8nov09]

Tuesday, 15 September 2009

Robot controller interfacing (using Python with FTDI based systems)

FTDI are a company based in Scotland that make a range of chips - this article is about using their serial-to-USB chips (e.g. FT232R used in Robot Electronic's SD84, and the Arduino).

Get the FTDI VCP drivers for OSX 10.5 - I found that the FTDIUSBSerialDriver_v2_2_9.dmg worked better than the latest 2.2.10 version (though there are now newer ones which may well work ok). Initially I installed the 2.2.10 version but firstly the kernel module didn't load when I plugged in the SD84, nor would it load manually (complaining of "can't add kernel extension /System/Library/Extensions/FTDIUSBSerialDriver.kext (not a bundle)") - I tried some suggestions here to no avail. I fixed it by uninstalling that version and cleaning up according to here - also removing my old pl2303 drivers, as mentioned here:
sudo rm -rf /System/Library/Extensions/FTDIUSBSerialDriver.kext /System/Library/Extensions.kextcache /System/Library/Caches/com.apple.kernelcaches/* /Library/Receipts/FTDIUSBSerialDriver.* /Library/Receipts/osx-pl2303-10.4.* /System/Library/Extensions/osx-pl2303.kext
I then did a clean install of the 2.2.9 package and rebooted then the drivers just loaded when I plugged in the SD84 - you should see a message about FTDI drivers loading in dmesg, and you should also see the driver instantiate the appropriate device nodes - e.g. /dev/tty.usbserial-XXXX.

There are also FTDI's D2XX drivers which are apparently supported by the Python pyusb module (not sure diff with this one) but I haven't tried them yet - though they potentially provide for better performance. It seems that these can also be used for JTAG based debugging.

I then used Python pyserial module (installed on OSX from ports using sudo port install py-serial, or you can download pyserial package and then run: sudo python setup.py install in the unpacked directory) to control an SD84 - the basics are (which will work on Linux as well, and windows if you replace'/dev/tty.usbserial-A2001mJE' with 'COM3') :
import serial
sync='\xAA\xA0\x55'
SET_SERVO='\x01'
SET_MODE='\x04'
GET_VERSION='\x0A'
# Open Serial port to FTDI usb serial tty
ser = serial.Serial('/dev/tty.usbserial-A2001mJE', baudrate=115200, byte
size=8, parity='N', stopbits=2,timeout=1)
# Send GET_VERSION command
ser.write(sync+GET_VERSION+'\x02\x00')
# Read the returned version and print
ver=ser.read(2)
print "VERSION:"+ver
# set SERVO mode
ser.write(sync+SET_MODE+'\x11\x01\x19')
#Read return code (should be \x00 if all is well)

ser.read(1)


There's also other places with useful info here on OSX and serial setup.
[updated 23oct09]

Tuesday, 25 August 2009

Interact with other local Linux terminal sessions

If you're interested in trying to control/inject/view other terminal sessions (e.g. with ssh or telnet on a tty or pts) that you/someone is logged into on that machine then read on. Handy for zapping that vi session you left running at work, or playing havoc with something random ;)

It seems that watch does the trick for FreeBSD, but for Linux there's only things like ttysnoop (for linux-2.6) but that requires you modify your /etc/inittab files which is bore. There's also conspy but that only works with physical terminal devices not ptys, as far as the docs say...

However you can do it without altering anything - (you'll probably need to run the following commands with sudo if you're not the process owner):

  • See what's being typed (and subsequent output) in another terminal session by using peekfd - you just need to supply the UID of the shell running on that other terminal (find it using ps). Watch out as the output may well contain some 8-bits chars which can confuse your current terminal - though you can get it back to normal using a terminal reset.

  • Inject characters into a terminal by using the TIOCSTI ioctl() with this neat perl script (find the tty of the process you're interested in (e.g. ps axg | grep vi) and use that as the argument to the perl script e.g. echo 'ZZ' | sudo ./catvt.pl /dev/pts/27)
[updated 22oct09]