August 13, 2012

ECL on Raspberry Pi

ECL source code won't compile without proper options.  See this page:
http://posterous.betareduction.info/building-my-own-ecl-for-and-on-the-raspberry

The page has the proper options to use to configure, and also provides the binary.  I did compile myself on Rasberry Pi, and it took VERY long time -- I had to let it run over night to finish.

Summarized Steps
$ git clone git://ecls.git.sourceforge.net/gitroot/ecls/ecl
$ ./configure --prefix=/usr/local --enable-unicode=yes "CFLAGS=-mcpu=arm1176jzf-s -DAO_USE_PTHREAD_DEFS"
$ make
$ sudo make install


August 10, 2012

Ecl For Windows



ECL (download)

I use CLisp and SBCL, but switched to ECL recently for a few reasons which I will not discuss.  It's just a personal preference.

OSX, Ubuntu, Wheezy(Raspberry Pi) all have pre-compiled packages available through mac port and apt-get, but those are older versions and have issues with quicklisp.

So I compiled Ecl source code for Windows, Ubuntu, OSX, Raspberry Pi.  They all compiled without any difficulties, except that for Windows, it's a few more steps: get VC++(Express version is fine too), run 'nmake' and run installer to package it.  For others who just want to download the binaries

I'll post Windows, and Wheezy version on my blog so people can just download it and use it.  Here is the Windows version: Download Ecl 12.7.1 For Windows, pre-compiled installer

ECL
Windows EMACS

August 9, 2012

tcpdump on OSX

http://java.dzone.com/articles/tcpdump-learning-how-read-udp

Above page shows use of tcpdump:
$ tcpdump -i lo udp port 8125 -vv -X
$ echo -n "blah:36|c" | nc -w 1 -u -4 localhost 8125

On Mac, install it using mac port (sudo port install tcpdump) and run as below:
$ sudo tcpdump -vv -X -i lo0 udp port 8125
$ echo -n "blah:36|c" | nc -w 1 -u -4 localhost 8125

August 8, 2012

Raspberry Pi: Installing OS, WebCam, Wifi module



I've ordered Raspberry Pi in March, received in June, then something came up and couldn't do much for a while.  Finally I set it up properly and ready.

I'm thinking of a project using this device with wifi and webcam -- with Javelin (product link) to control servos and interface with various sensors -- the wifi module and the webcam are verified to be working with Raspberry Pi without any problems, and external USB hub with power is not required:
I didn't want any devices that requires external HUB with power -- and I had the web cam already lying around, and I purchased the Wifi USB module for only $8.99.  I also didn't want to spend too much time on setting up the device, so did some googling to find which OS image is the easiest one to use -- and tried Arch Linux, but that didn't work for a few reasons.  Wheezy version (7/15/2012 version) worked without much effort.

For the usb wifi module, read this thread -- and get the automatic install script from here, and the driver from here.  For the webcam, it worked out of the box.  My wireless router is set to use WEP with MAC filtering, but if you use WPA, please read other tutorial to configure it.

There are other advantages of using Wheezy over Arch Linux -- I did not attach monitor keyboard to the device, but ssh to it -- Wheezy lets you resize the SD card and configure other things with simple rasp-config command.  I didn't really measure the performance, but actually, I felt that Arch Linux performance is some what better than Wheezy.  For Arch Linux, the automatic wifi script or driver did not work, and resizing SD card is not possible on the raspberry pi while the OS is running. (adding partition is possible).

Conclusion
Use Wheezy and get verified H/W -- and save time.

To Do
  • Write more about S/W and H/W on Raspberry Pi.
  • Hook up Javelin with Raspberry Pi via GPIO/Serial/TTL.
Javelin Stamp
Why am I using Javelin instead of the popular Arduino?  It's only because I purchased the Javelin stamp development kit and other parts when it first came out (2001).  The product is discontinued, but still sold and its price is much cheaper than 2001 price.  The hardware is pretty good in today's standard -- compare with Arduino Uno: see here and here.  And you can program it in Java!  The Javelin IDE runs on Windows OS -- I tested up to Vista, and read that it works on Windows 7 as well.  The IDE comes with Jike Java compiler, so Sun's (oops), Oracle's Java SDK is not necessary.

(My) Environments
  • MacBook, Snow Leopard, with Parallax+WinXP (For Javelin IDE)
  • Use USB-to-Serial device to program Javelin.  Remember to install the device driver on Mac and add that device to the VM, and install WinXP driver.  The one I have uses Prolific PL-2303 chipset -- get drivers from here.
  • For Raspberry Pi, I had the web cam already, bought the wifi module, had this power adapter with micro USB from old phone.  Since no monitor or keyboard is attached, first install the OS image on the SD, use Ethernet to connect to the router, and turn it on.  Check the router setting and get the IP (it's first configured to use dynamic IP).  Then set it up to use wifi, rasp-config, etc.  I configured it to use static IP.
Misc Tips, Resources
  • Helpful wifi related Linux commands: 
    • iwconfig, lsusb, lsmod, ifconfig, iwlist wlan0 scan
  • Install ISO image onto SD card from Mac for Raspberry Pi:
    • example:
      sudo dd bs=1m if=~/Downloads/OS_image.img of=/dev/rdisk1 (replace 'rdisk1' with your device.)
  • Back up SD image
      1. unmount) $ diskutil unmount /dev/disk1s1
      2. backup) $ dd if=/dev/rdisk1 of=/Users/kkim/Desktop/raspberry_backup.img bs=1m
      3. eject) diskutil eject /dev/rdisk1 
    • Restore SD image
      1. unmount) $ diskutil unmount /dev/disk1s1
      2. Restore) $ dd if=./raspberry_backup.img of=/dev/rdisk1 bs=1m
      3. eject) diskutil eject /dev/rdisk1
    • Javelin: manual/IDE/files, some codes, sensors.

    S/W
    For WebCam, get followings (google yourself to find out what they are and how to use them):

    • sudo apt-get install motion
    • sudo apt-get install fswebcam
    • sudo apt-get install vlc

    August 7, 2012

    How to disassemble in OSX

    Compiled simple "Hello, World" codes in ECL Lisp and GCC into binary, and wanted to compare the two in assembly.

    Just do:

    $ otool -tV "filename"
    


    August 4, 2012

    Helpful Mac port commands

    Just a note for myself...
    • port list installed
    • port search erlang
    • sudo port upgrade outdated
    • sudo port -fp uninstall installed
    • sudo port -f uninstall inactive
    • sudo port -f clean --all all
    • Configuration file: /opt/local/etc/macports/macports.conf


    Install OpenCV+Python on OSX Snow Leopard


    Environment
    OSX Snow Leopard
    X-code v4.0.2

    How-To
    The reason I failed to install it with other methods is that everyone's environment is a bit different, and some tutorials are outdated.  So check your environment against mine and if it's not what you have, then please find other tutorials.

    1. install mac port, if it's already installed clean it up (e.g. sudo port -f clean --all all)
    2. mv /usr/local /usr/local.bak (remember to change it back later)
    3. sudo port install opencv +python27 configure.compiler=clang

    (Help from: https://trac.macports.org/wiki/ProblemHotlist#compiler)

    Note

    • It's easier to experiment with Python.
    • What I'd like to try with OpenCV is to feed photos and videos to recognize faces and add meta tags to the photo, and make it more searchable.  Picasa already has that feature for photos, but not for videos.
    • Using MacBook's built-in webcam, the face detection works great.

    Other How-To's
    http://opencv.willowgarage.com/wiki/Mac_OS_X_OpenCV_Port
    http://opencv.willowgarage.com/wiki/UsingOpenCVUnderOSX
    http://opencv.willowgarage.com/wiki/InstallGuide
    http://tilomitra.com/opencv-on-mac-osx/
    http://vislab.cs.vt.edu/~vislab/wiki/index.php?title=Vision#OpenCV_2.0_universal_framework_for_Mac_.28ppc.2Fi386.29
    http://www.tsd.net.au/blog/opencv-python-bindings-macports
    http://code.google.com/p/opencv-cocoa/wiki/Building
    http://stackoverflow.com/questions/3681496/opencv-macport-python-bindings
    http://www.janeriksolem.net/2010/12/opencv-with-python-on-mac-os-x.html

    OpenCV and Python
    http://opencv.willowgarage.com/documentation/python/cookbook.html
    http://opencv.willowgarage.com/documentation/python/index.html
    http://recursive-design.com/blog/2010/12/14/face-detection-with-osx-and-python/

    August 3, 2012

    Interesting Project at Kickstarter: Oculus Rift

    Oculus


    log4j properties file to XML converter

    I had to convert log4j.properties file to log4j.xml -- and found this tool (saves time):
    http://code.google.com/p/log4j-properties-converter/

    For logback, use this tool:
    http://logback.qos.ch/translator/

    Helpful Windows commands

    I'm more familiar with Linux/Unix environment -- and I find the following Windows commands very helpful:

    "grep"

    $ netstat -a | grep 8080


    C:\> netstat -a | find -i "8080"


    Killing Process

    C:\> wmic PROCESS where "commandline like 'C:\MyConsoleApp\%run.exe%'" delete

    (See here for more about "wmic")

    List Running Services

    C:\> service where state="Running"

    July 15, 2012

    OSX(Mac) and NateOn

    NateOn is a very popular messenger system in Korea.  The native client is only available for Windows, but someone developed a plugin for Adium (Mac OSX client for multiple chat systems).  The latest version of Adium is 1.5.1 (as of July 15, 2012), but I have to use 1.4.5 in order to use with SIPE MS Messenger plugin which is compatible with my work messenger system.

    Resources:
    Install Adium first, and download the NateOn Plugin, unzip it, just double click on the plugin file.  The plugin files are installed at: /Users/[YOUR USER NAME]/Library/Application Support/Adium 2.0


    April 13, 2012

    Book: Machine Learning in Action

    Reviewed the book



    Machine Learning in Action by Peter Harrington

    Machine learning is getting more and more attention nowadays, and it's easier to use than before for average developers.  There are many open source frameworks and libraries to use for many popular languages.  But still, developers need to know what ML is -- how it works, what methods are there and for what cases to use them appropriately.  It's not a magic bullet -- understanding is still necessary.  I have reviewed this book for Manning publication and I found that it's a great book to learn ML for a starter, for average developers.  It explains many ML techniques and shows examples.  I highly recommend this book to anyone who want to get into ML.  It's not for advanced ML folks -- this would be too easy for them. :-)

    January 23, 2012

    Set up Mac as an Access Point, and connect Kindle to it

    If having kindle to connect to wifi is a problem, you can set up MacBook to use ethernet to use internet, and set up wifi as an access point.  This is very useful with services like "Send to Kindle" and "Kindle It" to send web documents to Kindle for offline reading.  I read a lot of technical web pages and reading them while commuting would save a lot of time.  But it requires wifi to transfer the documents to Kindle.  (Or, pay for the user document service to Amazon over 3G, and non-3G kindle doesn't have this option.)


    Tested with Kindle keyboard 3G and Kindle Fire.  Great tip.


    Source:
    https://discussions.apple.com/thread/2743129?start=0&tstart=0


    HOW TO GET IT TO WORK:

    A. On your Mac:

    1. Make sure Internet works in general and that internet sharing is properly configured and works with another (Apple) computer / iDevice (Apple device)
    2. System Preferences => Sharing => Internet Sharing (disabled to configure) => AirPort (enabled) => AirPort Options...
    3. Network Name: (alpha characters, upper/lower case mix, no spaces; other characters might work, not tested; space(s) in-between might work, not tested)
    4. Channel: Automatic
    5. Enable encryption (using WEP) => enabled (optional)
      1. Password, Confirm Password: (optional, 5 characters or 13 characters, depending on key length at next step, alphanumeric tested, upper/lower case mix tested, other characters tested but not as the first character)
      2. WEP Key Length: 40 or 128 bit (both tested)
    6. OK to confirm => Internet Sharing (enabled) => Start

    B. On your Kindle:
    1. Make sure the network name you chose above shows up, if not select "Rescan".
    2. Connect => Password (optional, if encryption selected above)
    3. Unable to Connect to Wi-Fi Network => set up network
    4. Network Name: (should be properly filled in)
    5. Connection Type: static (switch to)
    6. IP Address: 10.0.2.x (I chose 4 for x)
    7. Subnet Mask: 255.255.255.0
    8. Router: 10.0.2.1
    9. DNS: 10.0.2.1
    10. Security Type: WEP (WPA, WPA2 so far unsupported by OS X)
    11. Password: (should be properly filled in)
    12. connect