Loyola University Chicago Loyola eCommons

Computer Science: Faculty Publications and Other Works Faculty Publications

3-2009

Putting a Slug to Work

Konstantin Läufer Loyola University Chicago, [email protected]

George K. Thiruvathukal Loyola University Chicago, [email protected]

Ryohei Nishimura

Carlos Ramirez Martinez-Eiroa

Follow this and additional works at: https://ecommons.luc.edu/cs_facpubs

Part of the Computer Sciences Commons

Recommended Citation Konstantin Läufer, George K. Thiruvathukal, Ryohei Nishimura, Carlos Ramírez Martínez-Eiroa, "Putting a Slug to Work," Computing in Science and Engineering, vol. 11, no. 2, pp. 62-68, Mar./Apr. 2009, doi:10.1109/MCSE.2009.35

This Article is brought to you for free and open access by the Faculty Publications at Loyola eCommons. It has been accepted for inclusion in Computer Science: Faculty Publications and Other Works by an authorized administrator of Loyola eCommons. For more information, please contact [email protected].

This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License. Copyright © 2009 Konstantin Läufer, George K. Thiruvathukal, Ryohei Nishimura, Carlos Ramírez Martínez-Eiroa S cientific P rogramming

Editors: Konstantin Läufer, [email protected] Konrad Hinsen, [email protected]

Pu t t i n g a Sl u g t o Wo r k

By Konstantin Läufer, George K. Thiruvathukal, Ryohei Nishimura, and Carlos Ramírez Martínez-Eiroa

Although novel architectures such as cell processors, graphics processors, and FPGAs are growing in popularity, conventional microprocessor designs pack a punch in a small footprint and are widely supported by commodity operating system and development tools.

e’ve been busy during the you’ve probably been waiting for the fore you buy, just make sure you do the past several months with day when you could put that cigarette research on how hackable the device W an emerging multidisci- lighter to use for something other than is and what firmware supports which plinary research project focused on its original intended purpose. In any of the hardware features (for example, environmental science in an urban event, our hope is to use the slug as the USB ports in some wireless rout- setting. Given that Chicago is our a host for environmental monitoring, ers might not work). hometown, matters of air and water which is becoming possible via a grow- quality are near and dear to our hearts ing number of USB-capable sensors. Setting up the SlugOS (literally), so we hope to bring multi- Although it has several physical Let’s now focus on the nuts and bolts. ple people and organizations together challenges to address (which we won’t The first thing we did was to transplant to better understand them. Toward cover here), this platform is only one the firmware on the device, starting this goal, we’ve been exploring several of a whole class of computers that with the extensive resources at www. technologies to support mobile and can run embedded —and run -linux.org. Although we initially wireless distributed computing, which it well, especially with all the work found the information perplexing, ow- will play a crucial role in our project. going into lower-power processors. ing to the number of alternative distri- In this installment of Scientific Pro- The device firmware itself is Linux- butions available, we ultimately settled gramming, we’re going to talk about based and uses the GNU toolchain on the SlugOS/BE distribution because our initial foray into embedded Li- and various utilities that most people it appeared to have the most momentum nux running on the slug, which is the already know and love. Because Link- behind it, not to mention a large pack- pet name for the Linksys NSLU2, a sys made the decision to use Linux, age database, which would eliminate home “appliance” aimed at providing the firmware is bound by open source the need to rebuild most of the pack- network-attached storage. licenses, and its source code is freely ages we needed from scratch. Ordinar- Although the slug is aimed at home available. Translation: hackers have ily, we wouldn’t be bothered by having users wanting network-attached stor- already figured out how to replace the to build a few packages from scratch, age (a form of storage not attached to slug’s firmware, so you can turn this but memory is severely constrained any one computer but accessible from device initially aimed at NAS into a on the slug at 32 Mbytes RAM and 8 any computer on the LAN), we took full-fledged Linux environment and Mbytes flash (still better than your first immediate notice of this device as a develop your own applications to run PC, mind you), so we’d need to set up a prospective embedded host for other on it. (Please note that replacing the cross-compiler to build a good number kinds of USB devices—in particular, stock firmware voids your warranty.) of the available free and open source those that can support various envi- Even though Linksys has discontin- software (FOSS) packages. Even so, the ronmental sensing technologies. Its ued this product, you can still get your other advantage of SlugOS/BE is that power footprint also attracted us: this hands on one for roughly US$60 if you most available packages have already completely fanless, thus silent, com- look around a bit. What we cover here been tested on the slug and, whenever puter runs on a 12-V DC power input, also applies to various other similarly possible, hand-tuned or written to keep which you can power with a cigarette hackable devices, including network the memory footprint low. lighter. If you’re nonsmokers like us, storage units and wireless routers. Be- In the remaining discussion, we’ll

62 Copublished by the IEEE CS and the AIP 1521-9615/09/$25.00 © 2009 IEEE Co m p u t i n g in Sc i e n c e & En g i n e e r i n g talk about how to get a complete slug ommend that you set your private IP Not bad, right? Next, we’ll work on environment up and running. We’ll subnet to 192.168.1.0/255.255.255.0. By the discovery. also describe how to integrate the slug default, the slug has a fixed address, into your existing home or office com- 192.168.1.77; you might also want to Step 3: puting setup, which will allow you to check in your router’s Dynamic Host Finding Your Device on the LAN login remotely via SSH for your own Configuration Protocol (DHCP) client As indicated in Step 2, we’re big fans experiments. table whether the slug has come up with of discovery, which is distributed sys- a dynamic address. Another possibility tems speak for “I should be able to Step 1: Initial Setup is to connect the device to any comput- browse for the device when it’s run- To set up the device, we recommend er that has more than one network port ning.” DHCP is vastly underrated: that you have an existing Linux setup and make sure the additional port is when you use it, you can actually dis- somewhere on your LAN (your desk- configured to the same subnet. It’s per- cover all your attached devices (slug top or laptop will do): mitted to have more than one private included) simply by going to the net- subnet (just make sure they’re not both work router’s administrative interface. • Install the NSLU2 flash utility ap- 192.168.1.0). Now you just follow the (Most routers released within the past propriate for your host hardware instructions at www.nslu2-linux.org/ few years support this capability.) (upslug2 for Linux and Mac OS). wiki/OpenSlug/InitialisingOpenSlug: In recent years, however, Zeroconf • Download the latest SlugOS/BE bi- (www.zeroconf.org) has gained some nary image for NSLU2 from www. • Log into the slug: ssh root@ popularity. This multicast framework slug-firmware.net. 192.168.1.77 (or actual dy- for device announcement and discov- • Put the slug in upgrade mode fol- namic address). The password is ery has its roots in AppleTalk and now lowing the instructions at www.ns ­opeNSLUg (the letters in red must lives as Bonjour (formerly Rendezvous). lu2-linux.org/wiki/HowTo/Use be capitalized). Zeroconf lets us browse the network of TheResetButtonToEnterUpgrade • Initialize basic configuration:turn- devices via a common name and look Mode. Similar to many other home up init. up various properties about them, no- networking appliances (such as • Leave networking set to DHCP. tably their IP addresses. Translation: routers), you power off the device We’ll work on how to discover the set up Zeroconf on your slug and on and then insert a pin or straightened hostname later, which eliminates your computer (unless you’re using a paper clip into the pinhole near the the need for a static IP in most Mac, which means you already have back of the device. You then press situations. it running), and you’ll be able to find and release the power button exact- • Set the host name in accordance your slug by its common name as set ly as instructed. with your project naming scheme, in Step 2 (in our case, luc-etl-slug0). • Flash the image following the such as luc-etl-slug0. Ubuntu Linux also supports Zeroconf ­instructions at www.nslu2-linux. • Using the “vi” editor, remove the out of the box. org/wiki/SlugOS/UsingTheBinary. line containing w_g_name (domain- On the slug, you need to use the If you’re on a Linux box (such as name) from /etc/default/sysconf. It intrinsic packaging system () Ubuntu or a similar major distribu- should now look like this: to set up Zeroconf support via the tions), you can just install the up- ­Avahi project: slug2 utility via aptitude or apt-get. [network] • Wait for the slug to reboot. hw_addr= • First, make sure your package data- lan_interface=eth0 base is up to date: ipkg update. Next, you’ll have to install the operat- disk_server_name=luc- • While you’re at it, make sure ing system. etl-slug1 all packages are current: ipkg bootproto=dhcp upgrade. Step 2: Installing the OS • Install the Avahi daemon: ipkg The next step requires your network • Preserve basic configuration in install avahi-daemon. to be set up properly—in particular, NVRAM: turnup preserve. • Make sure it’s running: /etc/ if this is your home network, we rec- • Reboot. init.d/avahi-daemon start.

Ma r c h /Ap r i l 2009 63 S cientific P rogramming

• (Optional) set up the Avahi utili- ssh root@. To get this benefit, insert your ad- ties, which let you browse your full local ditional storage device into one of network from the device: ipkg in- the slug’s USB ports (doesn’t matter stall avahi-utils. Once you log in, though, you’ll real- which): ize that this isn’t your father’s (or your You’ll also want to install Zero- mother’s) Linux system. You can try • The device might mount automati- conf if you’re running on Windows various utilities to get an idea of the cally in /media/. or Linux. For Linux distributions, available resources: You’ll need to look for /dev/sda* or you should see packages named ava- /dev/sdb* and unmount the parti- hi-*. We use Ubuntu Linux, which top tion. For example, if /dev/sda1 is provides two important packages: cat /proc/cpuinfo mounted as /media/happy, just do apt-get install avahi-daemon cat /proc/meminfo umount /media/happy. avahi-utils. Technically, you df -h / • The reason we need to ensure noth- don’t need to install avahi-daemon. ing is mounted is that we need to We list it here just in case you’re This might take you for a walk down create a proper filesystem that will running an older version of (Ubun- memory lane to your first PC, the work nicely with Linux: ext3. In tu) Linux. As noted for the slug, Commodore 64, the Timex-Sinclair most cases, the device should be­ avahi-utils lets you browse the SX80, or perhaps the Eniac or Z3. /dev/sda (you’ll know if Linux tried network of devices via a command- You’ll be looking for every superla- to mount your FAT filesystem or line utility named avahi-browse. tive or exaggeration until you realize whatever was on your USB drive in For Windows, you can download that this is still a powerful computer. the first bullet). Try creating a par- an installer from http://support. It has a reasonably zippy CPU and 32 tition on /dev/sda using fdisk (not apple.com/downloads/Bonjour_for Mbytes of RAM. You even have built- covered here) and then do mkfs. _Windows_1_0_5. in flash storage; otherwise, how would ext3 /dev/sda1. Once you install Zeroconf, you’ll be your data persist? • If you’re at all unsure what the de- able to access the device from any IP- But then you realize you want more. vice name is, it’s usually harmless to enabled program (Web browser, SSH, This happened to us, and we de- just try /dev/sda. You can verify that and so on) via a common name such as cided that the best way to get “more” you’ve got the right one by looking .local. We have several yet maintain the spirit of this device is at the dmesg output and using grep devices in our laboratory, so we use to use an external USB stick to hold to search for the detected device, luc-etl-slugN.local (N = 1, 2, ...). the root filesystem. After all, the slug dmesg | grep sd[a-z]. Whether you browse the network has two USB ports (with the ability to • After creating the filesystem, we on the slug (schneckle, the South Ger- support more than two via a USB hub, need to copy the existing root filesys- man diminutive for slug) or on your if you wish) and a network port, so we tem to the new device, turnup mem- other computer (feldberg, in this case), opted to pick up some USB sticks (a stick -i /dev/sda1 -t ext3. you should now see the same list of five-pack of 2-Gbyte sticks at the time services, as in Figure 1. of this writing was US$25). Having 2 Once you’ve done these steps, you Gbytes of storage makes our system now have a usable root filesystem, but Step 4: Getting a even more upgradeable and usable for we still need to do some final steps to Bigger Root Filesystem applications. In our work, we need to ensure that the USB stick is mounted Once you’ve completed Steps 1 run a significant number of develop- as root, provided it’s already inserted through 3, you could consider your- ment tools and services, and we also when you power up the slug. Go ahead self done in a technical sense, and you use the device itself to host simple and mount it on your Linux computer, might well feel like calling it a day. databases of environmental data until say, on a temporary directory, /mnt: You might even want to pour yourself we can push it out to a remote server a glass of wine to celebrate, but hold (such as a data warehouse), so addi- • Add a disk label for your root file- off until you make sure the following tional storage is crucial to doing any- system, tune2fs -L root /dev/ command works: thing useful. sda1.

64 Co m p u t i n g in Sc i e n c e & En g i n e e r i n g avahi-browse -a -t + eth0 IPv4 EPSON Stylus C80 @ feldberg _ipp._tcp local + eth0 IPv4 Brother HL-2040 series @ feldberg _ipp._tcp local + eth0 IPv4 SqueezeCenter on feldberg _http._tcp local + eth0 IPv4 MythTV server on feldberg _http._tcp local + eth0 IPv4 SFTP File Transfer on feldberg _sftp-ssh._tcp local + eth0 IPv4 SFTP File Transfer on schneckle _sftp-ssh._tcp local + eth0 IPv4 feldberg _ssh._tcp local + eth0 IPv4 schneckle _ssh._tcp local + eth0 IPv4 feldberg [00:xx:xx:xx:xx:xx] _workstation._tcp local + eth0 IPv4 schneckle [00:xx:xx:xx:xx:xx] _workstation._tcp local

Figure 1. List of locally available services. The avahi-browse utility lets you browse your full network for available Zeroconf services.

• Add an entry to /mnt/etc/fstab, ages via the commands we covered instructions at www.dyndns.org. If LABEL=root / ext3 noatime in Step 3 (with ipkg update and you want inadyn to start automati- 1 1. ipkg upgrade). cally, you must first create the startup • Obtain the volume ID (its UUID), • Set up the right time zone (optional script /opt/etc/init.d/inadyn with the vol_id /dev/sda1. but highly recommended), ipkg contents shown in Figure 2, then cre- • Reboot the slug without any USB install tzdata-right ; ln -s ate symbolic links to the script, and drives present. /usr/share/zoneinfo/right/ start it up: • Edit /linuxrc (using “vi” or your fa- CST6CDT /etc/localtime. vorite editor) on the slug to refer to • Set up automatic time synchroniza- • ln -s /opt/etc/init.d/inadyn /opt/ the UUID obtained earlier. tion, ipkg install ntpclient. etc/init.d/S60inadyn • Reboot the slug after inserting the • Set up Optware following the in- • ln -s /opt/etc/init.d/inadyn /opt/ USB stick. structions at www.nslu2-linux.org/ etc/init.d/K60inadyn wiki/Optware/Slugosbe. • /opt/etc/init.d/inadyn start. We’re almost there! Note that you now have two versions If ipkg ever starts failing, you might Step 5: Some Final Tweaking of ipkg, /usr/bin/ipkg to manage over be out of memory. In that case, remove to Ensure Happiness 4,000 OpenEmbedded packages and /var/lib/ipkg/* and /opt/lib/ipkg/*, For the most part, you can consider /opt/bin/ipkg-opt to manage over then update the lists for each reposi- yourself done, but this last step is es- 800 Optware packages. In particular, tory. In some cases, it helps to down- sential if you plan to do serious devel- Optware has numerous useful server load the package file manually using opment on your device—that is, you’re packages (media servers, print servers, wget and then installing it locally us- not just planning on using it as an ap- Web servers, and so on). What gets a ing ipkg. You might also want to add pliance. We’re perfectionists, which bit messy is the automatic starting and a swap partition to make software in- means we can’t live with annoyances, stopping of Optware services at boot stallation and configuration smoother. such as an incorrect time of day. Thanks and shutdown time. At www.nslu2- Because flash memory can handle only to Step 4, which expanded the available linux.org/wiki/OpenWrt, you’ll see a limited number of writes, you should storage for applications and data, this how to do this for another embedded remove the swap partition once you last step will let you grow the system as called OpenWRT, put the slug into production. For the your needs and interests evolve: but the instructions work equally well same reason, you should turn off most for SlugOS. Some packages exist in logging as well. • Turn off getty in /etc/inittab by both places, and which version is bet- By the way, some older slugs are un- commenting out the correspond- ter varies from package to package. derclocked; if you’re brave, see www. ing line using vi; getty isn’t needed Optionally, if you want to be able to nslu2-linux.org/wiki/HowTo/OverClock because there’s no console attached. find your slug using DNS in addition TheSlug for a fix that requires remov- (You can probably add one using to Zeroconf, set up Dynamic DNS us- ing a resistor from the PCB (at your your other USB port, if you have a ing inadyn, a very lightweight DDNS own risk). spare Zenith, VT, or Wyse dumb client found in Optware: ipkg-opt At this point, you should now con- terminal lying around.) install inadyn. You can set up sider enjoying your second glass of • Populate the lists of available pack- /opt/etc/inadyn.conf according to the wine (if you haven’t finished the bottle

Ma r c h /Ap r i l 2009 65 S cientific P rogramming

#!/bin/bash

CONF=/opt/etc/inadyn.conf PROGRAM=/opt/bin/inadyn

if [ ! -f $CONF ] ; then echo “No configuration file, exiting” exit 2 a suitable adapter in some cases). This fi isn’t convenient if, say, you have only laptops in your household. # See how we were called. Commercially available print serv- case “$1” in ers solve this problem, but the slug start) handles it equally well along with lots start-stop-daemon -S -x $PROGRAM -- \ of other functions. None of these em- --input_file $CONF --background bedded servers, slug included, have ;; the power to run a full-fledged instal- stop) lation of the Common Unix Printing start-stop-daemon -K -x $PROGRAM System (CUPS) that provides spooling ;; and transformation of documents into *) PostScript or other printer languages. echo “Usage: inadyn {start|stop}” Instead, they expose the printer di- exit 1 rectly using the AppSocket protocol esac and assume that all the work happens on the client. exit 0 To set up your slug as a print server, all you need is p910nd from Optware. You’ll have to run one instance of Figure 2. Startup script. By creating this script, you’re well on the way to p910nd for each printer you’re expos- automatically starting inadyn. ing. Unlike the print servers embed- ded in typical network printers, using a slug in this way lets you choose a already) because you’ve really earned ond USB port, or you can use a USB nice host name. In addition, you can it. You now have a complete environ- hub to connect additional drives or expose each printer as a Zeroconf ser- ment to try some of our examples and other devices. vice so your clients find them easily. sample applications that we developed Depending on your specific needs, in our group. you’ll want a combination of these Telephony Server services: Believe it or not, most of the setup de- Applications scribed in a previous issue1 runs fine The next question is how to put the • Network File System (NFS), on a slug. Most of the work the Aster- slug to use. In general, the slug excels • CIFS (Samba), isk telephony server does in this mini- at providing services that require rela- • Firefly (mt-daapd) media server for mal setup is routing Session Initiation tively little CPU power and should be iTu nes, Protocol (SIP) packages, which play a always available without drawing a lot • UPnP media server, and role in setting up a call, while the ac- of current or requiring a full-fledged • Podget or some other automated tual voice traffic occurs between the server. Let’s look at some of the wide- podcast downloader. call’s resulting endpoints. The key is ranging possibilities that you can to avoid CPU-intensive codecs or oth- combine freely as long as you have Just keep in mind that the slug doesn’t er features that could bog down As- memory left or add a swap partition have the capacity to perform any terisk. Consequently, CPU utilization on a conventional hard drive. CPU-intensive tasks such as media remains below 10 percent even when a transcoding. call is active, and the number of calls Media Server is usually very low for a home setup. Using the slug as a media server prob- Print Server ably comes closest to what it was mar- Unless your printer is already net- User-Space IP keted for originally. You can plug an work-enabled, you need to connect it Address Registration Server external USB hard drive into the sec- to a specific computer’s USB port (via As part of our research project into

66 Co m p u t i n g in Sc i e n c e & En g i n e e r i n g distributed sensor networks, we need- Similarly, to register a node within a Webcam Server ed a service for keeping track of the namespace, we submit a PUT request In the broader context of our sensor IP addresses of nodes as they become to the namespace’s URI, http://host/ network project, Carlos set up a slug available or unavailable. Although registry/myns.org, where the payload as a webcam server for a class project. (Dynamic) DNS serves a similar is a representation of the host regis- Besides integrating the required hard- purpose, we wanted something light- tration. In practice, this means a Web ware drivers and software, he used weight that we could run in user-space form with these parameters: PHP, XHTML, and JavaScript to de- (not requiring privileged access) and velop a Web interface for the w3camd evolve as needed. • host=myhostname, application. Consequently, a user can In our network, we want to be able • ip=10.20.30.40, and take pictures remotely and view them to create namespaces and register in- • ttl=3600 # time-to-live in seconds. on the Web, and the application en- dividual nodes within them. We take a sures that the drivers are loaded and resource-oriented approach typically The resulting URI for the registered the connected camera model is sup- associated with the representational host is http://host/registry/myns.org/ ported. Detailed project documenta- state transfer (REST) architectural myhostname. To retrieve a registered tion is available at http://code.google. style, meaning that each thing that host, we submit a GET request to this com/p/slurchin/. matters is an addressable resource that URI and get back a representation has at least one uniform resource iden- like the one we submitted to create tifier (URI) and supports a standard the host. To delete a registered host, t this point, you might be won- set of operations exposed as HTTP we simply submit a DELETE request A dering whether you can run Java methods, including PUT (create), to the same URI, and to update a reg- on the slug. The answer is a cautious, GET (retrieve), POST (update), and istered host’s registration informa- “yes, but not as well as Python.” DELETE (delete). tion, we submit a POST request to We tried JamVM with GNU Class- The registry and its namespaces and the URI whose payload is the updated path, intended as a replacement for nodes map naturally to this style: registration information (such as the Sun’s Java SE API. Both packages new IP address). are available in Optware and install • The registry lives at http://host/ As part of his undergraduate research without problems. Unfortunately, we registry. project in our group, Ryohei imple- couldn’t get JamVM to run anything • To create a namespace, we sub- mented this service on the slug. He much beyond a “Hello Slug” console mit a PUT request to http://host/ chose Python as the implementation app. Some developers have reported registry, where the payload is a rep- language because Python 2.5 (the one success with older versions of JamVM, resentation of the namespace to be from Optware, not OpenEmbedded) but we haven’t had a chance to cross- created—that is, the namespace’s runs out of the box on SlugOS/BE, has compile it yet for the slug. We’ll also name, such as myns.org. Once we bindings to the lightweight SQLite da- try to cross-compile GCC with sup- create this namespace, it has the tabase, and provides the BaseHTTP­ port for the Gnu Java compiler (gjc) URI http://host/registry/myns.org. Server package as a good starting point in our future work. • To delete a namespace, we submit a for Web service development (the On the upside, the phoneME im- DELETE request to that URI. HTTP methods map to Python func- plementation of the Java ME platform • To retrieve a namespace, we submit a tions by name, such as do_PUT). does work. But because it targets mo- GET request to the same URI. Now, Because we use standard HTTP bile phones and other limited devices, following the resource-­oriented ap- request methods, we don’t even need it comprises a stripped-down API proach, we get back a suitable rep- to write a dedicated client. Instead, that’s missing some of the packages resentation of the resource, in this we simply use the cURL command- servlet containers such as Jetty expect. case, a list of nodes currently regis- line client, which supports all request Fortunately, an embedded subset of tered within this namespace. methods, form submission, file upload, Jetty also works. The MinimalServ- • Namespaces don’t support renam- and so on. In real life, the hosts would lets example represents this subset and ing, which we would otherwise have use the cURL client to register them- serves as our starting point for further mapped to the POST method. selves, as you can see in Figure 3. exploration on the Java ME side.

Ma r c h /Ap r i l 2009 67 S cientific P rogramming

curl http://schneckle.local/registry namespace=myns.org # empty response: no namespaces in registry host=myhost1 curl -X PUT -d myns.org http://schneckle.local/registry ip=10.20.30.40 curl -X PUT -d myotherns.org http://schneckle.local/registry ttl=3600 curl http://schneckle.local/registry curl -X POST -d ip=17.27.37.47 -d ttl=7200 \ http://schneckle.local/registry/myns.org http://schneckle.local/registry/myns.org/myhost1 http://schneckle.local/registry/myotherns.org curl http://schneckle.local/registry/myns.org/myhost1 curl http://schneckle.local/registry/myns.org namespace=myns.org # empty response: no hosts in namespace host=myhost1 curl -X PUT -d host=myhost1 -d ip=10.20.30.40 -d ttl=3600 \ ip =17. 27.37.47 http://schneckle.local/registry/myns.org ttl=7200 curl -X PUT -d host=myhost2 -d ip=11.22.33.44 -d ttl=3600 \ curl -X DELETE http://schneckle.local/registry/myns.org http://schneckle.local/registry/myns.org curl http://schneckle.local/registry/myns.org curl http://schneckle.local/registry/myns.org HTTP/1.0 404 Not Found http://schneckle.local/registry/myns.org/myhost1 curl http://schneckle.local/registry http://schneckle.local/registry/myns.org/myhost2 http://schneckle.local/registry/myotherns.org curl http://schneckle.local/registry/myns.org/myhost1

Figure 3. Registry client code using cURL. Because we use standard HTTP request methods, we don’t even need to write a dedicated client. Instead, we simply use the cURL command-line client, which supports all request methods, form submission, file upload, and so on. In real life, the hosts would use the cURL client to register themselves.

In any event, please stay tuned. We Konstantin Läufer is a professor of com- plines. Thiruvathukal has a PhD in computer hope to cover progress on this topic in puter science at Loyola University Chicago. science from the Illinois Institute of Technol- the near future. His research interests include programming ogy. Contact him via http://gkt.etl.luc.edu. languages, software architecture and frame- Acknowledgments works, distributed systems, mobile and Ryohei Nishimura recently graduated from George and Konstantin are grateful embedded computing, human-computer Loyola University Chicago with a BS in com- to Chandra Sekharan, chairperson of interaction, and educational technology. puter science. His technical interests include Loyola University Chicago’s Depart- Läufer has a PhD in computer science from programming languages, embedded sys- ment of Computer Science, for having the Courant Institute at New York University. tems, and distributed systems. Contact him funded our initial equipment purchases. Contact him via www.cs.luc.edu/laufer. at [email protected]. Carlos is grateful to Corby Schmitz for general guidance and security-related George K. Thiruvathukal is an associate Carlos Ramírez Martínez-Eiroa is a gradu- advice on his webcam project. professor of computer science at Loyola ate assistant at Loyola University Chicago. His University Chicago and is now an associate technical interests include Web development, Reference editor in chief of this magazine. His technical distributed systems, and embedded systems. 1. G.K. Thiruvathukal and K. Läufer, “What I interests include parallel/distributed systems, Ramírez Martínez-Eiroa has an MS in com- Did on My Summer Vacation,” Computing programming language design/implementa- puter science from Loyola University Chicago. in Science & Eng., vol. 10, no. 6, 2008, pp. tion, and computer science across the disci- Contact him at [email protected]. 76–81.

IEEE Computer Society Save Members 25% on all conferences sponsored by the IEEE Computer Society www.computer.org/join

68 Co m p u t i n g in Sc i e n c e & En g i n e e r i n g