One of the things that Arch Linux does _not_ try to do is administer your system for you. One area where this bothers me is in a system upgrade procedure which goes roughly like this:

$ pacman -Syu
The above command will refresh the local cache of packages made available by any configured archlinux repositories, then proceed to upgrade any installed packages to the newest available version.
The (pac)kage (man)agement tool "pacman" does not provide the capability of merging new and exisiting configuration files. This is an intentional decision meant to assure that system settings won't be clobbered. As a result, you must manually scan through your filesystem after an update, looking for files with the *.pacsave or *.pacnew extensions, merge in any changes you would like, then (optionally) delete the *.pac{save,new} files. A tool called pacdiffviewer is provided by the yaourt package which can automate the previous procedure.

Another thing that pacman is not capable of is updating packages installed via the (A)rch (U)ser (R)epository, AUR (http://aur.archlinux.org/). One tool which is capable of (un)installing/updating/querying/etc. packages located in AUR is yaourt.

$ yaourt -Syu --aur --devel
The above command will update all packages on the entire system whether installed from pacman repositories or from the AUR.

A tool that I recently started using to manage my /etc/ directory is called etckeeper. Etckeeper can be configured to use one of several revision control systems (git, bzr, cvs, etc.) and creates and manages all of the revisions that /etc/* files go through. I've really enjoyed not having to manually make backups of config files when I experiment with new settings and it's good to know that I can easily roll-back or merge changes of files in the future if I decide that I liked things better the way they were before.

To put all of the previous things together and save my fingers some typing each day, I created the following alias in ~/.bashrc :
alias update='yaourt -Syu --aur --devel && sudo pacdiffviewer && cd /etc/ && sudo etckeeper commit; cd -'

My system upgrading is now done by simply typing "sysupgrade" as a normal user and interactively managing the rest of the process. 

Palm Pre webOS Internals

| No Comments | No TrackBacks

At Guru Labs we've been long time smartphone users. I purchased a Treo 600 in October of 2003 and have had pretty much all the Treo revisions since then.

Having a smartphone is extremely handy for in my line of work (traveling and doing Linux training). The original PalmOS has gotten pretty dated and I admit I've had some iPhone envy the last couple years. Lack of multi-tasking, Apple control issues, AT&T, and no real keyboard has kept my envy at bay. Ever since Palm announced that they'd have a Linux powered Treo back in 2004 I've been patiently waiting.

Finally, after 5 years of waiting, I have a Linux powered Palm smartphone! I've had the Palm Pre running webOS for the past few days.

This phone is awesome. Highly recommended.

If you are the tinkering type of person and don't mind potentially having to do a factory restore on your device (which isn't so bad given that you can easily restore your settings and data via your Palm Profile) you might want to:

1. Gain root access on your phone via "Developer Mode".
2. Install a SSH backdoor door ongoing access (a procedure to which I contributed a great deal)

Palm webOS is a fairly typical Linux distribution. Here is data from version 1.0.2 (As of June 11th 2009).



Memory - After about 12 hours of heavy use, bunch of apps open

dkelson@castle:~$ free
total used free shared buffers cached
Mem: 245036 236772 8264 0 12288 54020
-/+ buffers/cache: 170464 74572
Swap: 131064 37520 93544




Kernel/Version Info

root@castle:/etc# uname -a
Linux castle 2.6.24-palm-joplin-3430 #1 175.1.15 armv7l unknown

root@castle:/etc# lsmod
Module Size Used by
sd8xxx 184732 1
bridgedriver 187924 1
g_composite 99292 0

root@castle:/etc# **cat palm-build-info **
PRODUCT_VERSION_STRING=Palm webOS 1.0.2
BUILDNAME=Nova-Sprint-Castle
BUILDNUMBER=118
BUILDSET=base
BUILDTIME=20090522140049
BUILDMARK=165841

root@castle:/etc# **cat issue.net **
Rockhopper .dev-snapshot-20090522 %h



Kernel Command Line

root@castle:/var/home/root# **cat /proc/cmdline **
root=b302 rootdelay=2 ro fb=0x8f600000 fbcon=disable console=tty1
nduid=DeviceSpecificIDGoesHere klog=0x8ff00000 klog_len=0x100000
boardtype=castle-dvt3 dsp_base=0x8f900000 dsp_len=0x600000



Listening Ports - (see firewall below)

root@castle:/etc# netstat -taunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:14400 0.0.0.0:* LISTEN 1092/PmBtStack
tcp 0 0 127.0.0.1:8083 0.0.0.0:* LISTEN 1131/java
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 1173/dnsmasq
tcp 0 0 0.0.0.0:16888 0.0.0.0:* LISTEN 1092/PmBtStack
tcp 0 0 0.0.0.0:16889 0.0.0.0:* LISTEN 1092/PmBtStack
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 6053/dropbear
tcp 0 0 0.0.0.0:4444 0.0.0.0:* LISTEN 1031/dbus-daemon
tcp 0 0 0.0.0.0:4445 0.0.0.0:* LISTEN 1025/dbus-daemon
tcp 0 0 0.0.0.0:222 0.0.0.0:* LISTEN 1163/dropbear
tcp 0 0 174.149.231.221:55005 205.140.203.34:5222 ESTABLISHED 1179/pubsubservice
tcp 0 0 127.0.0.1:34071 127.0.0.1:14400 ESTABLISHED 1437/PmBtEngine
tcp 0 0 127.0.0.1:55756 127.0.0.1:4445 ESTABLISHED 1571/contextupload
tcp 0 0 127.0.0.1:4445 127.0.0.1:55756 ESTABLISHED 1025/dbus-daemon
tcp 0 576 10.2.3.203:222 10.2.3.228:58423 ESTABLISHED 6053/dropbear
tcp 0 0 127.0.0.1:14400 127.0.0.1:34071 ESTABLISHED 1092/PmBtStack
udp 0 0 0.0.0.0:33941 0.0.0.0:* 1173/dnsmasq
udp 0 0 0.0.0.0:53 0.0.0.0:* 1173/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 1173/dnsmasq
udp 0 0 0.0.0.0:68 0.0.0.0:* 6557/dhclient



File System Layout - (I have 5.2GB of my own data in /media/internal)

root@castle:/var/home/root# df -h
Filesystem Size Used Available Use% Mounted on
rootfs 441.7M 368.9M 72.8M 84% /
/dev/root 31.0M 11.1M 19.9M 36% /boot
/dev/mapper/store-root
441.7M 368.9M 72.8M 84% /
/dev/mapper/store-root
441.7M 368.9M 72.8M 84% /dev/.static/dev
tmpfs 2.0M 152.0k 1.9M 7% /dev
/dev/mapper/store-var
248.0M 77.6M 170.4M 31% /var
/dev/mapper/store-log
38.7M 6.4M 32.3M 17% /var/log
tmpfs 64.0M 2.8M 61.2M 4% /tmp
tmpfs 119.6M 0 119.6M 0% /media/ram
/dev/mapper/store-media
6.7G 1.4G 5.2G 22% /media/internal



LVM Layout

root@castle:/var/home/root# vgdisplay -v
Finding all volume groups
Finding volume group "store"
--- Volume group ---
VG Name store
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 6
Open LV 5
Max PV 0
Cur PV 1
Act PV 1
VG Size 7.62 GB
PE Size 8.00 MB
Total PE 975
Alloc PE / Size 973 / 7.60 GB
Free PE / Size 2 / 16.00 MB
VG UUID tWVoWv-vlFA-XwWT-33LX-1ZaV-twiY-qF9bDN

--- Logical volume ---
LV Name /dev/store/root
VG Name store
LV UUID NBwspO-rIY3-4Zuh-m8Ms-tXzA-lpWE-0RdiX3
LV Write Access read/write
LV Status available
# open 1
LV Size 456.00 MB
Current LE 57
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Persistent major 254
Persistent minor 0
Block device 254:0

--- Logical volume ---
LV Name /dev/store/var
VG Name store
LV UUID FTnu68-LsSa-YRch-aIOu-VbAp-hHW7-4hJU32
LV Write Access read/write
LV Status available
# open 1
LV Size 256.00 MB
Current LE 32
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Persistent major 254
Persistent minor 1
Block device 254:1

--- Logical volume ---
LV Name /dev/store/update
VG Name store
LV UUID 7HPOTh-0QgT-0Nq4-BD9x-vTt0-R2kq-DE3dOf
LV Write Access read/write
LV Status available
# open 0
LV Size 56.00 MB
Current LE 7
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Persistent major 254
Persistent minor 2
Block device 254:2

--- Logical volume ---
LV Name /dev/store/log
VG Name store
LV UUID 73c7a7-S71k-wWLI-nn9v-U6Eh-8RIQ-cnuQNA
LV Write Access read/write
LV Status available
# open 1
LV Size 40.00 MB
Current LE 5
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Persistent major 254
Persistent minor 3
Block device 254:3

--- Logical volume ---
LV Name /dev/store/media
VG Name store
LV UUID bfLJQ3-M3Vs-AhfQ-8uYp-N2iC-39mS-4TuXuI
LV Write Access read/write
LV Status available
# open 1
LV Size 6.69 GB
Current LE 856
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Persistent major 254
Persistent minor 4
Block device 254:4

--- Logical volume ---
LV Name /dev/store/swap
VG Name store
LV UUID lGNstl-OH3S-a5SA-fJhT-pSPH-brEu-Q8FAEG
LV Write Access read/write
LV Status available
# open 1
LV Size 128.00 MB
Current LE 16
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Persistent major 254
Persistent minor 5
Block device 254:5

--- Physical volumes ---
PV Name /dev/mmcblk0p3
PV UUID GJUws6-7CBV-8gzk-s7VA-uY1Q-3HxG-96ygIP
PV Status allocatable
Total PE / Free PE 975 / 2



Network Interfaces - eth0 (WiFi) ppp0 (EVDO)

root@castle:/var/home/root# ifconfig
bsl0 Link encap:Ethernet HWaddr 00:1D:FE:34:7D:72
inet addr:10.1.1.10 Bcast:10.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

eth0 Link encap:Ethernet HWaddr 00:1D:FE:XX:XX:XX
inet addr:10.2.3.203 Bcast:10.2.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3106 errors:0 dropped:0 overruns:0 frame:0
TX packets:2282 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:315417 (308.0 KiB) TX bytes:677358 (661.4 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3580 errors:0 dropped:0 overruns:0 frame:0
TX packets:3580 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:294062 (287.1 KiB) TX bytes:294062 (287.1 KiB)

ppp0 Link encap:Point-to-Point Protocol
inet addr:174.149.231.221 P-t-P:66.174.200.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1480 Metric:1
RX packets:3428 errors:5 dropped:0 overruns:0 frame:0
TX packets:4745 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:1746157 (1.6 MiB) TX bytes:3258322 (3.1 MiB)



CPU Speed Scaling - (Palm locks it to 500Mhz at boot)

root@castle:# cd /sys/devices/system/cpu/cpu0/cpufreq
root@castle:# cat scaling_available_frequencies
600000 550000 500000 250000 125000
root@castle:# cat scaling_cur_freq
500000
root@castle:# cat scaling_available_governors
ondemand userspace
root@castle:# cat scaling_governor
userspace



Default Firewall Rules

root@castle:/var/home/root# iptables -nvL
Chain INPUT (policy DROP 233 packets, 11729 bytes)
pkts bytes target prot opt in out source destination
3580 294K ALLOWED_PACKETS all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 INVALID_PACKETS all -- !lo * 127.0.0.0/8 0.0.0.0/0
0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:113 flags:0x17/0x02 state NEW reject-with tcp-reset
0 0 DROP tcp -- bsl0 * 0.0.0.0/0 0.0.0.0/0 tcp dpts:4444:4445
5627 3296K ALLOWED_PACKETS all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ALLOWED_PACKETS all -- bsl0 * 0.0.0.0/0 0.0.0.0/0
0 0 ALLOWED_PACKETS all -- usb0 * 0.0.0.0/0 0.0.0.0/0
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 0 state NEW
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 5 icmp type 0
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 3 state NEW
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 5 icmp type 3
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 4 state NEW
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 5 icmp type 4
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 5 state NEW
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 5 icmp type 5
4 324 ICMPFLOOD icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 8 state NEW
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 11 state NEW
0 0 ALLOWED_PACKETS icmp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 5 icmp type 11
217 11089 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 10 LOG flags 0 level 7 prefix `IPT_PACKET_DROPPED_NO_MATCH: '

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 14456 packets, 4914K bytes)
pkts bytes target prot opt in out source destination

Chain ALLOWED_PACKETS (15 references)
pkts bytes target prot opt in out source destination
9211 3590K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0

Chain ICMPFLOOD (1 references)
pkts bytes target prot opt in out source destination
4 324 all -- * * 0.0.0.0/0 0.0.0.0/0 recent: SET name: ICMP side: source
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 recent: UPDATE seconds: 1 hit_count: 6 TTL-Match name: ICMP side: source limit: avg 1/sec burst 1 LOG flags 0 level 4 prefix `IPT_ICMPFLOOD: '
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 recent: UPDATE seconds: 1 hit_count: 6 TTL-Match name: ICMP side: source
4 324 ALLOWED_PACKETS all -- * * 0.0.0.0/0 0.0.0.0/0

Chain INVALID_PACKETS (1 references)
pkts bytes target prot opt in out source destination
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 100 LOG flags 0 level 4 prefix `IPT_INVALID_PACKETS_DROPPED: '
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0



Running processes

root@castle:/etc# ps -ax -o user,cmd
USER CMD
root /sbin/upstart
root [kthreadd]
root [ksoftirqd/0]
root [watchdog/0]
root [events/0]
root [khelper]
root [kblockd/0]
root [cqueue/0]
root [twl4030-irq]
root [omap2_mcspi]
root [ksuspend_usbd]
root [khubd]
root [kmmcd]
root [pdflush]
root [pdflush]
root [kswapd0]
root [aio/0]
root [cifsoplockd]
root [cifsdnotifyd]
root [modem_act]
root [modem_rmw]
root [cdc-acm]
root [gadget_event]
root [tp_wq]
root [temt6200_light]
root [w1_control]
root [w1_bus_master1]
root [ksnapd]
root [kondemand/0]
root [rpciod/0]
root [mmcqd]
root [kjournald]
root [kjournald]
root udevd --daemon
root [kjournald]
root [kjournald]
root /usr/bin/pmsyslogd -z -f 6 -m
root [usb_charger]
root [file-storage-ga]
root /sbin/getty -L ttyS2 115200 vt100
root /usr/bin/dbus-daemon --fork --system
root /usr/bin/dbus-daemon --fork --session
root /usr/bin/PmNetConfigManager
root /usr/bin/SprintDaemon
root /usr/bin/luna-prefs-service
root /usr/bin/PmSystemTimeout
root /usr/bin/rdxd -v
root /usr/bin/hidd -v -f /etc/hidd/HidPlugins.xml --output-syslog
root /usr/sbin/storaged -s -d
root /usr/bin/uploadd -v
root /usr/bin/UpdateDaemon
root /usr/bin/PDFService
root /usr/bin/OfficeService
root BluetoothMonitor
root /usr/sbin/audiod -n -1
root /usr/bin/PmBtStack -C /dev/btuart -B 115200 00:1D:FE:XX:XX:XX 1 0x3afc 16888 1
root /usr/bin/PmWanDaemon
root /usr/bin/PmConnectionManager
root /usr/lib/jvm/java-1.5-palm/bin/java -Xexact -m 10M -Djava.library.path=/usr/lib/jvm/java-1.5-palm/bin:/usr/lib/jvm/java-1.5-palm/jre/bin:
root /usr/bin/LunaSysService
root /usr/bin/extractfs -f /var/luna/data/extractfs
root /usr/bin/fileindexer
root /usr/sbin/powerd
pulse /usr/bin/pulseaudio --log-target=syslog
root /usr/sbin/memchute
root /opt/sbin/dropbear -w -F -p 222
root /usr/bin/PmWiFiService
root /usr/bin/LunaSysMgr
root /usr/bin/dnsmasq -d -C /etc/dnsmasq.palm.conf
root /usr/bin/pubsubservice
root /usr/bin/TelephonyInterfaceLayerCdma
root /usr/bin/PmBtEngine
root /usr/bin/contextupload
root pppd /dev/tts/modem0 file /etc/ppp/options-cdma mtu 1480
root /opt/sbin/dropbear -w -F -p 222
dkelson -sh
root /usr/bin/BrowserServer
root -sh
root /usr/bin/mediaserver -l --gst-debug=1 castle
root [wlan_main_servi]
root /usr/sbin/wpa_supplicant -D wext -B -c /tmp/.wpa_supplicant.conf -i eth0
root /sbin/dhclient -d -cf /etc/PmWiFiDhclient.conf -sf /etc/PmWiFiDhclient-script -lf /tmp/dhclient.eth0.leases.784 -pf /var/run/dhclient.eth
root ps -ax -o user,cmd



Packages Installed

root@castle:/var/home/root# ipkg list
agg - 2.4-2 -
alsa-conf-base - 1.0.18-2.1 - Alsa sound library
alsa-lib - 1.0.18-2.1 - Alsa sound library
alsa-plugins - 1.0.18-3 - ALSA Plugins
alsa-utils - 1.0.18-1 -
alsa-utils-amixer - 1.0.18-1 -
alsa-utils-aplay - 1.0.18-1 -
amazonservice - 1.0-5 - Amazon Service
audiod - 1.0-131.2 - Audio Policy Manager
audiod-config - 1.0-78 -
audiod-config-sprint - 1.0-2 - Audio Policy Manager Sprint Configuration
base-files - 3.0.14.2-6 - Miscellaneous files for the base system.
base-passwd - 3.5.9-r5 -
bcprov - 1.41-2 -
binutils - 2.17.50.0.8-r0 -
bootchart - 0.9-r2 -
bootloader - 1.0.0-145.2.5 - Bootie 'da Bootloader
browser-adapter - 1.0.0-81.1 - browser-adapter
browserserver - 1.0.0-147.15 - BrowserServer
busybox - 1.11.3-6 -
bzip2 - 1.0.2-r3 -
cairo - 1.3.14-r0 -
camd-omap34xx - 1.0.1-31 - Reference Platform SW Camera 3A Daemon
camsrc-omap34xx - 1.0.0-25 - Reference Platform SW Camera Gstreamer Plugin
castlecdmafw - 1.0.0-51 - Modem Firmware package for Castle CDMA EVT0B
castletpfw - 1.0.2-15 -
castleumtsfw - 1.0.0-49 -
cifs - 3.0.23c-1 -
cjson - 1.0-8.1 - cjson
codesourcery-arm - 2007q3-1 -
com.handson.app.nascar - 1.0-25 - NASCAR App
com.mobitv.app.sprinttv - 1.0-36 - SprintTV App
com.motionapps.rom.classic - 1.0.0-15 -
com.motionapps.service.classic - 1.0.0-15 -
com.palm.app.amazonstore - 1.0-56 - Amazon Music Store
com.palm.app.backup - 1.0-46.4 - Backup application
com.palm.app.bluetooth - 1.0-95 - Bluetooth Panel
com.palm.app.browser - 1.0-95.6 - Browser application
com.palm.app.calculator - 1.0-20 -
com.palm.app.calendar - 1.0-134.7 - Calendar application
com.palm.app.camera - 1.0-73 - Camera application
com.palm.app.certificate - 1.0-22 - Certificate Panel
com.palm.app.clock - 1.0-19 - Clock
com.palm.app.contacts - 1.0-142.6 - Contacts application
com.palm.app.dataimport - 1.0-18.3 - Data Import application
com.palm.app.dateandtime - 1.0-32.2 - Date and Time Pref
com.palm.app.deviceinfo - 1.0-53.4.4 - Device info application
com.palm.app.devmodeswitcher - 1.0-1 -
com.palm.app.docviewer - 1.0-67.4 - Office Document Viewer application
com.palm.app.email - 1.0-135.6 - eMail application
com.palm.app.findapps - 1.0-119.2 - FindApps application
com.palm.app.firstuse - 1.0-130.7 - First Use application
com.palm.app.help - 1.0-16 - Help App
com.palm.app.languagepicker - 1.0-23.1.1.1 - Langauge Preference Panel
com.palm.app.location - 1.0-9.1.1 -
com.palm.app.maps - 1.0-22.1.1 -
com.palm.app.messaging - 1.0-118.6.1 - Messaging application
com.palm.app.musicplayer - 1.0-134 - Music Player
com.palm.app.notes - 1.0-33.1 - Notes application
com.palm.app.pdfviewer - 1.0-64.1 - PDFViewer application
com.palm.app.phone - 1.0-196.11.1 - PhoneApp
com.palm.app.phoneprefs - 1.0-83.7.1.1 - PhonePrefs App
com.palm.app.photos - 1.0-100072.1.1.1 - Photos application
com.palm.app.screenlock - 1.0-40.7.1.1 - Screen Lock Preference Panel
com.palm.app.soundsandalerts - 1.0-27.6.1.1 - Sounds & Alerts Preference Panel
com.palm.app.sprintportal - 1.0-7 - Sprint Portal launcher icon
com.palm.app.streamingmusicplayer - 1.0-34 - Streaming Music Player
com.palm.app.tasks - 1.0-55.1.1 - Tasks application
com.palm.app.updates - 1.0-40.1.1 -
com.palm.app.videoplayer - 1.0-73.1 - Video Player
com.palm.app.wifi - 1.0-59 - Wifi Panel
com.palm.app.youtube - 1.0-23.1.1 - YouTube App
com.palm.crotest - 1.0-11 -
com.telenav.app.sprintnavigation - 1.0.0-50.8 - Telenav App
com.telenav.sprintnavigation - 1.0.0-50.8 - Telenav Service
contextupload - 1.0-6 - Context upload Service
cryptsetup - 1.0.6-r2 -
curl - 7.19.3-r2 -
cypress-multitouch - 1.0.0-26 -
dbus - 1.1.20-r14 -
dbus-lib - 1.1.20-r14 -
dbus-util - 1.0-4 -
default-content - 1.0.0-10 -
dhcp-client - 3.0.2-r5 -
directfb - 1.1.0-9 -
dnsmasq - 2.40-r0 -
docadapterbase - 1.0.0-12 -
documentserver - 1.0.1-82.3 - DocumentServer
domparser - 1.0-11 -
dosfstools - 3.0.2-r1 -
downloadupdate - 1.0.0-37 -
dropbear - 0.52-3 - Lightweight SSH client and server system
dspmon-omap34xx - 1.0.0-6 -
e2fsprogs-badblocks - 1.41.4-r0 -
e2fsprogs-blkid - 1.41.4-r0 -
e2fsprogs-e2fsck - 1.41.4-r0 -
e2fsprogs-fsck - 1.41.4-r0 -
e2fsprogs-libs - 1.41.4-r0 -
e2fsprogs-mke2fs - 1.41.4-r0 -
e2fsprogs-tune2fs - 1.41.4-r0 -
e2fsprogs-uuidgen - 1.41.4-r0 -
exmap-console - 0.4.1-r1 - Exmap-console is a suite of command line applications developed around the Exmap memory analysis tool.
expat - 1.95.8-r1 -
extractfs - 1.0.1-36.3.1 - Palm embedded file extractor
fbdraw - 1.0.0-5 -
fbset - 2.1-r2 -
ffmpeg - svnr16648-r4 -
fileindexer - 1.0.1-98.3.2 - File Indexer
firstuse-media - 1.0-1 - Media file used by luna app com.palm.app.firstuse
fnmbl-clientapi - 1.0-21 -
fnmbl-clientframework - 1.0-2.1 -
fontconfig - 2.3.2-r2 -
freefont-ttf - 20061128-r1 -
freetype - 2.3.6-r2 - Freetype font rendering library
fuse - 2.7.2-r1 - With FUSE it is possible to implement a fully functional filesystem in a userspace program
fuse-utils - 2.7.2-r1 - With FUSE it is possible to implement a fully functional filesystem in a userspace program
fuser - 22.2-r1 -
gdata-java-client - 1.0-4 -
gdb - 6.8-r0 -
gdbm - 1.8.3-r3 -
geolocation-adapter - 1.0-8 - geolocation-adapter
giflib - 4.1.6-r1 -
glib-2.0 - 2.14.4-r5 - GLib is a general-purpose utility library, which provides many useful data types, macros, type conversions, string utilities, f
gloox - 1.0-8 -
gmflag - 1.0.0-1 -
gnutls - 1.6.1-r1 - GNU Transport Layer Security Library
goodfork - 1.0.0-2 -
google-rfc-2445 - 1.0-5 -
gst-ffmpeg - 0.10.6-r20 -
gst-plugins-bad - 0.10.9-r20 -
gst-plugins-base - 0.10.21-r23 -
gst-plugins-good - 0.10.11-r21 -
gstreamer - 0.10.21-r20.1 - GStreamer is a multimedia framework for encoding and decoding video and sound. It supports a wide range of formats including mp
harmony - 5.0.r603534-48.1 - Apache Harmony class library
harmonykernel - 1.0.0-20 -
hidaccelerometer - 1.0.0-22 -
hidavrcp - 1.0.0-1001 -
hidd - 1.0.0-41 -
hidkeypad - 1.0.0-26 -
hidlib - 1.0.0-28 - Library for HID plugins and utilities
hidlight - 1.0.0-8 -
hidproximity - 1.0.0-10 -
hidqemukeypad - 1.0.0-5 -
hidqemutouchpanel - 1.0.0-5 -
hidtouchpanel - 1.0.0-118.3 - HidTouchpanel is the userspace touchscreen plugin.
icu4j - 3.8-3 -
initscripts - 1.1-19.2 - SysV init scripts
install-first - 1.0.0-3 -
integcheck - 1.0-7 -
ipkg - 0.99.163-r8 -
iproute2 - 2.6.18-r0 -
iptables - 1.4.2-1 -
iputils-arping - 20020927-r4 -
java-activerecord - 1.0-89.1 - ActiveRecord
java-async - 1.0-6.1 -
java-com.palm.accounts - 1.0-79.3 - Accounts
java-com.palm.accountservices - 1.0-80.1 - Nova Account Service
java-com.palm.backup - 1.0-68.1 - Backup
java-com.palm.calendar - 1.0-83.8 - Calendar
java-com.palm.carriernetworksettings - 1.0-49 -
java-com.palm.contacts - 1.0-89.7 - Contacts Service
java-com.palm.customization - 1.0-30 -
java-com.palm.dataimport - 1.0-17 -
java-com.palm.datamigration - 1.0-4 -
java-com.palm.defaultdatabasebuilder - 1.0-3 - Default Database Builder
java-com.palm.deviceprofile - 1.0-35 -
java-com.palm.devicewipe - 1.0-6 -
java-com.palm.findapps - 1.0-1.1 -
java-com.palm.interfaceregistry - 1.0-3.1 -
java-com.palm.location - 1.0-43 -
java-com.palm.mail - 1.0-137.8 - Mail
java-com.palm.mediaevents - 1.0-8 -
java-com.palm.messaging - 1.0-162.2 - Messaging
java-com.palm.messagingrouter - 1.0-29 -
java-com.palm.notes - 1.0-3 -
java-com.palm.packageinfo - 1.0-9.1 -
java-com.palm.photos - 1.0-4 -
java-com.palm.pim - 1.0-155.7 - PIM
java-com.palm.pimsync - 1.0-92.2 - PIMSync
java-com.palm.scheduler - 1.0-26 - Scheduler
java-com.palm.serviceboot - 1.0-37.1 - ServiceBoot
java-com.palm.superlog - 1.0-18 -
java-com.palm.tasks - 1.0-23.1 -
java-com.palm.telephony - 1.0-141 -
java-service - 1.0-54 -
java-utils - 1.0-56 -
jemalloc - 1.0-3 -
joda-time - 1.0-3.1 -
jpeg - 6b-r6 -
jpegdecodelib-omap34xx - 1.0.0-11 -
jpegtranscodeclient-omap34xx - 1.0.0-7 -
jpegtranscodeserver-omap34xx - 1.0.0-16 -
jwap - 1.2.cvs04012008-7 -
kernel - 2.6.24-175.1.15 - Rockhoppper Linux Kernel, v2.6.24
kernel-dev - 2.6.24-175.1.15 - Rockhoppper Linux Kernel, v2.6.24
kernel-image-2.6.24-palm-joplin-3430 - 2.6.24-175.1.15 - Rockhoppper Linux Kernel, v2.6.24
kernel-module-ecb - 2.6.24-175.1.15 - ecb kernel module; ECB block cipher algorithm
kernel-module-g-composite - 2.6.24-175.1.15 - g-composite kernel module; USB Gadget filesystem
kernel-module-oprofile - 2.6.24-175.1.15 - oprofile kernel module; OProfile system profiler
kernel-module-pcbc - 2.6.24-175.1.15 - pcbc kernel module; PCBC block cipher algorithm
kernel-module-scsi-wait-scan - 2.6.24-175.1.15 - scsi-wait-scan kernel module; SCSI wait for scans
kernel-modules - 2.6.24-175.1.15 - Kernel modules meta package
killall - 22.2-r1 -
klog - 1.0-1 -
ksoap - 2.1.1-2 -
libasound - 1.0.18-2.1 - Alsa sound library
libasound-module-ctl-pulse - 1.0.18-3 - Alsa plugin for ctl-pulse
libasound-module-pcm-pulse - 1.0.18-3 - Alsa plugin for pcm-pulse
libatomic-ops - 1.2-1 -
libavcodec - svnr16648-r4 -
libavdevice - svnr16648-r4 -
libavformat - svnr16648-r4 -
libavutil - svnr16648-r4 -
libcrypto - 0.9.8j-r2 -
libcurl - 7.19.3-r2 -
libgcrypt - 1.4.4-r1 - A general purpose cryptographic library based on the code from GnuPG
libgdbus - 1.0.0-r7 -
libgpg-error - 1.4-r2 - GPG-Error library
libgpod - 0.6.0-r0 -
libicudata - 3.6-r2 -
libicui18n - 3.6-r2 -
libicuio - 3.6-r2 -
libicule - 3.6-r2 -
libiculx - 3.6-r2 -
libicutu - 3.6-r2 -
libicuuc - 3.6-r2 -
libipkg - 0.99.163-r8 -
libltdl - 1.5.24-r1 -
libmatthew-java - 0.7-r1 -
liboil - 0.3.14-r0 -
libpcap - 0.9.3-r2 - Network Packet Capture Library
libpng - 1.2.12-r5 -
libpng12 - 1.2.12-r5 -
libpulse - 0.9.14-5.4 - Pulseaudio is a sound server for Linux and Unix-like operating systems.
libpulse-simple - 0.9.14-5.4 - Pulseaudio is a sound server for Linux and Unix-like operating systems.
libpulsecore - 0.9.14-5.4 - Pulseaudio is a sound server for Linux and Unix-like operating systems.
libpurple - 1.0-r23 - multi-protocol instant messaging library
libpurple-adapter - 1.0-70 - Wrapper around libpurple for exposing libpurple functionality over dbus
libsamplerate0 - 0.1.2-r2 -
libsndfile1 - 1.0.17-r5 -
libspeex - 1.2rc1-r2 -
libsqlite - 3.6.1-r0 -
libssl - 0.9.8j-r2 -
libsysfs - 2.0.0-r0 -
libulockmgr - 2.7.2-r1 - With FUSE it is possible to implement a fully functional filesystem in a userspace program
libvolume-id - 115-r15 -
libxml2 - 2.6.26-r4 - GNOME XML Parser library
libxslt - 1.1.17-r5 - GNOME XSLT library
locationadapter - 1.0-12 - locationadapter
logctld - 1.0-25 - Log Control service
luna-applauncher - 1.0-83.4.1 - Luna Application Launcher
luna-fonts - 1.0-16 -
luna-init - 1.0-37.3 - Luna Init
luna-keymap-headers - 1.0-14 -
luna-media - 1.0-84 - Media Objects for Luna
luna-media-adapter - 1.0-45 - LunaMediaAdapter
luna-network - 1.0-17.6.1 -
luna-prefs - 1.0-43 - LunaPreferencesManager
luna-pseudocard - 1.0-7.1 - Pseudocard for luna
luna-service - 1.0.0-61 -
luna-sysmgr - 1.0-471.45 - LunaWindowManager
luna-sysservice - 1.0-34.6 - Luna System Service
luna-systemui - 1.0-183.16.1 - Luna System UI
luna-webkit - v8-162.40 - Webkit 31 + v8 Javascript engine
lvm2 - 2.02.44-r1 -
lvm2-config - 2.02.44-r1 -
lvm2-static - 2.02.44-r1 -
makedevs - 1.0.0-r2 -
masflib - 1.0-4 -
mediaadpcmdecodelib - 1.0.0-1 -
mediaregistryapp - 1.0.0-18 -
mediaserver - 1.0.0-145.13 - PmMediaServer
memchute - 1.0.0-13 - Palm Memchute - low-memory manager
minicore2 - 1.0.0-13 -
mjson - 1.0-12 -
mkbootfs-tools - 1.0-6 -
mobitv-sprint-rtspsrc - 1.0.0-16 - MobiTV GStreamer RTSP Source Element
module-init-tools - 3.2.2-r3 -
module-init-tools-depmod - 3.2.2-r3 -
modutils-initscripts - 1.0-r2 -
mojo - 1.0-175.7 - Mojo Application Framework
mtools - 3.9.11-r4 -
ncurses - 5.4-r9 -
net-tools-netstat - 1.60-r3 -
netbase - 4.21-r16 -
netcat - 0.7.1-r1 -
novacom - 1.0-5 -
novacomd - 1.0-45 -
npapiinterfacelib - 1.0.0-11 - NPAPIInterface
ntpdate - 4.2.2p3-r1 -
oasisharmonyvm - 1.0-96.2 - Oasis VM
officeadapter - 1.0.0-47 -
officeserver - 1.0.0-68.1 - OfficeServer
omadm - 1.0.0-94.1 -
omxclientlib-omap34xx - 1.0.0-14 -
openssl - 0.9.8j-r2 -
oprofile - 0.9.3-r3 -
org.json - 1.0-2.1 -
ossinfo - 1.0.0-9 -
palmaacdemux - 1.0.0-24 -
palmadpcmdecoder - 1.0.0-5 -
palmamrdemux - 1.0.0-10 -
palmaudiodecoder-omap34xx - 1.0.0-52 - palmaudiodecoder: audio decoder plugin that supports mp3, amr and aac
palmbuildinfo - 1.0.3-118 - Build Info
palmcustomizationinfo - 1.0.0-118 - Customization Info
palmdrmlib - 1.0.0-12 -
palmdrmutilslib - 1.0.0-3 -
palmhttpsrc - 1.0.0-47 - PmMediaGstHttpSrcLib
palmipc-java - 1.0.0-21 - palmipc-java
palmjpgencsink-omap34xx - 1.0.0-44 - PmMediaGstJpegEncSinkLib
palmmp3demux - 1.0.0-82 - PmMediaGstMp3DemuxLib
palmqcelpdemux - 1.0.0-15 -
palmvideodecoder-omap34xx - 1.0.0-42 - palmvideodecoder
palmvideoencoder-omap34xx - 1.0.0-3 -
palmvideosink-omap34xx - 1.0.0-34 - PmMediaGstVideoSinkLib
passthrud-castle - 1.0.0-31 -
pdfadapter - 1.0.0-36 -
piranha - 1.1-60.1 -
pmappsigningcerts - 1.0.0-1 -
pmbtcontacts - 1.0.0-1006.1 -
pmbtengine - 1.0.0-100000 -
pmbtlib - 1.0.0-38 -
pmbtos - 1.0.0-1009 -
pmbtstack - 1.0.1-100000 -
pmbtstartup - 1.0.0-1004 -
pmbttest - 1.0.0-71 - PmBtTest
pmcasper - 1.0.0-10 -
pmcertificatemgr - 1.0.0-11 -
pmcertificatemgrservice - 1.0.0-18 -
pmcertstore - 1.0.1-5.1 -
pmconnectionmanager - 1.0.0-38 - Provides Connection Management functionality for the system
pmeloop - 1.0.0-3 -
pmipcdispatch - 1.0.0-8 -
pmipclib - 1.0.0-44.3 - Palm IPC Library
pmlinuxmodemcmd - 1.0.0-6 -
pmlogctl - 1.0.0-7 -
pmlogdaemon - 1.0.0-57 -
pmloglib - 1.0.0-8 -
pmmedia - 1.0.0-2 -
pmmedia-omap34xx - 1.0.0-2 -
pmmodemfactory - 1.0.0-21 -
pmmodeminfo - 1.0.0-19 -
pmmodempower - 1.0-5 -
pmmodemupdater - 1.0.0-56 -
pmnetconfiglib - 1.0.0-9 -
pmnetconfigmanager - 1.0.0-27 -
pmnetworking - 1.0.0- -
pmnetworking-castle - 1.0.0- -
pmsystemtimeout - 1.0-1 -
pmtelephony - 1.0.0-1 -
pmtelephony-msm6xxx - 1.0.0-1 -
pmtpupdater - 1.0.1-24 -
pmupdater - 1.0.0-89 -
pmwandaemon - 1.0.0-101.5 - PmWanDaemon
pmwanpppplugin - 1.0.0-14 -
pmwifidriver - 1.0.0-39-175.1.15 - Marvell's WiFi Driver for SD8686 chipset
pmwifiservice - 1.0.0-63 - PmWiFiService: Linux Daemon which controls WiFi subsystem
popt - 1.7-r4 -
powerd - 1.0.0-124 - Palm powerd daemon
ppp - 2.4.3-r3 -
procps - 3.2.7-r8 -
psmisc - 22.2-r1 -
pstree - 22.2-r1 -
pubsubservice - 1.0-49.2 - Publish Subscribe Service
pulseaudio - 0.9.14-5.4 - Pulseaudio is a sound server for Linux and Unix-like operating systems.
pulseaudio-lib-alsa-util - 0.9.14-5.4 - PulseAudio library for alsa-util
pulseaudio-lib-auth-cookie - 0.9.14-5.4 - PulseAudio library for auth-cookie
pulseaudio-lib-authkey - 0.9.14-5.4 - PulseAudio library for authkey
pulseaudio-lib-cli - 0.9.14-5.4 - PulseAudio library for cli
pulseaudio-lib-iochannel - 0.9.14-5.4 - PulseAudio library for iochannel
pulseaudio-lib-ioline - 0.9.14-5.4 - PulseAudio library for ioline
pulseaudio-lib-ipacl - 0.9.14-5.4 - PulseAudio library for ipacl
pulseaudio-lib-packet - 0.9.14-5.4 - PulseAudio library for packet
pulseaudio-lib-pdispatch - 0.9.14-5.4 - PulseAudio library for pdispatch
pulseaudio-lib-protocol-cli - 0.9.14-5.4 - PulseAudio library for protocol-cli
pulseaudio-lib-protocol-native - 0.9.14-5.4 - PulseAudio library for protocol-native
pulseaudio-lib-pstream - 0.9.14-5.4 - PulseAudio library for pstream
pulseaudio-lib-pstream-util - 0.9.14-5.4 - PulseAudio library for pstream-util
pulseaudio-lib-socket-server - 0.9.14-5.4 - PulseAudio library for socket-server
pulseaudio-lib-socket-util - 0.9.14-5.4 - PulseAudio library for socket-util
pulseaudio-lib-strlist - 0.9.14-5.4 - PulseAudio library for strlist
pulseaudio-lib-tagstruct - 0.9.14-5.4 - PulseAudio library for tagstruct
pulseaudio-misc - 0.9.14-5.4 - Pulseaudio is a sound server for Linux and Unix-like operating systems.
pulseaudio-module-alsa-sink - 0.9.14-5.4 - PulseAudio module for alsa-sink
pulseaudio-module-alsa-source - 0.9.14-5.4 - PulseAudio module for alsa-source
pulseaudio-module-cli - 0.9.14-5.4 - PulseAudio module for cli
pulseaudio-module-cli-protocol-unix - 0.9.14-5.4 - PulseAudio module for cli-protocol-unix
pulseaudio-module-default-device-restore - 0.9.14-5.4 - PulseAudio module for default-device-restore
pulseaudio-module-detect - 0.9.14-5.4 - PulseAudio module for detect
pulseaudio-module-native-protocol-unix - 0.9.14-5.4 - PulseAudio module for native-protocol-unix
pulseaudio-module-null-sink - 0.9.14-5.4 - PulseAudio module for null-sink
pulseaudio-module-palm-a2dp-provider-sink - 0.9.14-5.4 - PulseAudio module for palm-a2dp-provider-sink
pulseaudio-module-palm-policy - 0.9.14-5.4 - PulseAudio module for palm-policy
pulseaudio-module-rescue-streams - 0.9.14-5.4 - PulseAudio module for rescue-streams
pulseaudio-module-suspend-on-idle - 0.9.14-5.4 - PulseAudio module for suspend-on-idle
pulseaudio-module-volume-restore - 0.9.14-5.4 - PulseAudio module for volume-restore
pulseaudio-server - 0.9.14-5.4 - Pulseaudio is a sound server for Linux and Unix-like operating systems.
rdxd - 1.0.0-44.2 - Remote diagnostics daemon
readline - 4.3-r4 -
redbend - 2.1.1.13-2 -
rsync - 2.6.9-r0 -
saxparser - 1.0-13 - saxparser
screen - 4.0.2-r1 -
setcharge - 0.1-4 -
setserial - 2.17-r1 -
shutdownscripts - 1.0.0-15 -
sprintdaemon - 1.0.0-51.6 - SprintDaemon listens for IPC messages send by client or server (Sprint) for provisioning and device configuration, and launches
sqlite-service - 1.0-6 -
sqlite3 - 3.6.1-r0 -
sqlite3-palm-extension - 1.0-15 -
sqlitejdbc - v053-4 -
storaged - 1.0-51.1 - Storage Manager
strace - 4.5.14-r4 -
sweatshop-sprint-castle - 1.0-118 - Version 1.0-118 of package sweatshop-sprint-castle
sysfsutils - 2.0.0-r0 -
sysstat - 9.0.1-r1 -
systemsoundsloader - 1.0.0-13 -
sysvinit - 2.86-r36 -
sysvinit-pidof - 2.86-r36 -
telephonyinterfacelayer1cdma - 1.0.0-118.9 - TelephonyInterfaceLayer for CDMA
telephonyinterfacelayer1gsm - 1.0.0-125 -
telephonyinterfacelayercommon - 1.0.0-2 -
tellbootie - 1.0-3 -
thumbnailextractorlib-omap34xx - 1.0.0-21 - ThumbnailExtractor
tiff - 3.7.1-r0 -
tilipctest - 1.0.0-54 -
timezone - 2006l-r1 -
tiopenmax - L23.8M3-127-175.1.15 - OpenMax IL implementation from Texas Instruments
touchpanel-measure - 1.0-2 -
trenchcoat - 1.1-33 - Trenchcoat -- Palm's Flashing Tool
udev - 115-r15 -
update-modules - 1.0-r4 -
update-rc.d - 0.7-r0 -
updatedaemon - 1.0.0-115 - UpdateDaemon listens for IPC messages involving a system software update, and launches the OmaDm, Downloader, and PmUpdater exe
uploadd - 1.0.0-17 -
upstart - 0.3.8-16-r1 -
upstart-initscripts - 1.0-66.1 - upstart jobs not package-specific
upstart-sysvcompat - 0.3.8-16-r1 -
uriparser - 0.7.4-r0 -
usbmon - 1.0-3 -
usbnet - 1.0.0-1 -
util-linux-ng-blockdev - 2.14.2-r4 -
util-linux-ng-ionice - 2.14.2-r4 -
util-linux-ng-losetup - 2.14.2-r4 -
util-linux-ng-mkswap - 2.14.2-r4 -
util-linux-ng-swaponoff - 2.14.2-r4 -
vibetonz - 1.0.0-4 -
vibetonz-castle - 1.0.0-4 -
wireless-tools - 29-r2 -
wpa-supplicant - 0.6.4-r0 -
wxwidgets - 2.8.7-r3 - wxWidgets is a cross platform application framework utilizing native widgets.
zlib - 1.2.3-r2 -

It’s time for me to praise one of the useful utilities that makes my everyday work just a little bit more pleasant: rlwrap.

rlwrap “wraps” other interactive programs, providing readline functionality for programs that don’t have it built in. For example, last week I had to repeatedly use ‘imtest’ and ‘cyradm’ while doing some exploration about IMAP. Neither of these tools supports readline, so I normally would be able to press ‘up’ to recall my last command, use ^W or ^U to clear parts of my command, or use ^R to search my history. This would be very frustrating.

So, here comes rlwrap. You use it just like sudo, prefixing it to the command you want to run, thus

imtest -u sweeks -a vmadmin -t '' -m plain localhost

becomes

rlwrap imtest -u sweeks -a vmadmin -t '' -m plain localhost

rlwrap even remembers command history on a per-command basis, so you can recall your interactive commands from previous sessions. This greatly eases debugging. rlwrap is a very valuable part of my toolkit. If this interests you, you can also enable filename tab-completion, or even custom wordlists for tab-completion of command-specific commands.

I mentioned this to my co-workers, and I was surprised to hear that none of them had ever heard of it before. What tools do you use that you take for granted that everybody knows about?

On Saturday, I wrote up a possible API for Parrot compilers to support loading libraries written in other languages and discussed some of the details with Jonathan++ and Allison++. It’s not perfect, and is missing a few parts, but should be extensible enough to support whatever else we need in the future. I still need to formalize it a bit and add it to the Parrot docs and the example language shell.

On Sunday, I implemented it on Rakudo (Perl 6) and Cardinal (Ruby; very incomplete).

This morning, after confirming the spec with pmicahud++, I merged the changes into Rakudo trunk.

The syntax for specifying the source language for Perl 6 is:

use Foo:lang<cardinal>;

I couldn’t quite figure out what an appropriate way to do this in Ruby would be, so I just added a function to cardinal:

foreign_load('perl6','Foo/Bar')

If you have a better suggestion for what it should look like in Ruby, please let me know! I don’t actually know much Ruby at all, so my Ruby compiler is fairly limited.

I’ll be adding support for this to pynie (Python) soon, and other languages after that.

Here’s a simple example of using a Perl library from Ruby:

[sweeks@kweh ~]$ cat Foo.pm
module Foo {
    sub greet($name) is export {
        say "Hello, $name!"
    }
}
[sweeks@kweh ~]$ cat perl6.rb
foreign_load 'perl6', 'Foo'
['Ruby', 'Perl', 'World'].each { |name| greet name }
[sweeks@kweh ~]$ cardinal perl6.rb
Hello, Ruby!
Hello, Perl!
Hello, World!

Here’s a similar example of using a Ruby library from Perl:

[sweeks@kweh ~]$ cat Foo.rb
module Foo
    def greet(name)
        puts "hello, " + name
    end
    def apply_people(cb)
        people = ['Dave', 'Bryan', 'Stuart', 'Dax']
        people.each { |name| cb(name) }
    end
end
[sweeks@kweh ~]$ cat ruby.pl
use Foo:lang<cardinal>;
greet("person $_") for 1..5;
apply_people( { say "hello from perl, $^name" } )
[sweeks@kweh ~]$ perl6 ruby.pl
hello, person 1
hello, person 2
hello, person 3
hello, person 4
hello, person 5
hello from perl, Dave
hello from perl, Bryan
hello from perl, Stuart
hello from perl, Dax

Thanks go to my employer (Guru Labs) for their support in my work on Rakudo and Parrot.

Rakudo is just starting to get support for adding custom operators to the grammar from user-level code. You can’t specify the precedence yet, but you can run the traditional examples:

multi sub infix:<±>(Int $a, Int $b) { return $a + $b | $a - $b }
multi sub postfix:<!>(Int $a where { $_ > 0 }) { return [*] 1..$a }

my $x = 5! ± 2;
say "hi dood" if $x > 121;
say "hello again" if $x < 119;

I was playing around today with defining operators for mathematical set operations (∩ ∪ ∖ ⊂ ⊃ ⊆ ⊇ etc.) and then decided that I wanted a fancy syntax for defining sets, so I added support to rakudo for circumfix operator definition, and i now have this running on rakudo:

say "subset" if ⦃ 1, 3, 5 ⦄ ⊆ ⦃ 1, 2, 3, 4, 5 ⦄;

Blog speed-run.

| No Comments | No TrackBacks

On Sunday, before I left for my flight, I saw masak chatting on IRC about his blog speed-run, which I later found described here. He set a time limit to see how quickly he could implement a basic blog app on the tools we've been building.

At the airport later that day, I had 20 minutes to wait before boarding my flight, so I thought I'd try the same thing. Omgblog is what I got done before I needed to board. I'll try to leave it running for a while. The source is in the usual place.

I’ve still been working on the Web libraries for Perl 6.

In the past week, I’ve improved my Tags library to handle more common cases and be easier to use, I migrated HTTP::Daemon to use Parrot sockets instead of exec-ing socat, and I wrote a basic pastebin: http://github.com/masak/web/blob/c84c4c1892463459e406958db8f9232e7b7bf5d1/bin/kopipasta.pl.

You might be able to see a running instance here: http://pleasedieinafire.net:2080/. That host has poor connectivity lately, though.

I’ve also played a bit with some ideas related to dispatch. Here’s an example I got working on the plane home from Boston:

use LolDispatch;
use HTTP::Daemon;
sub item($request, $match) is handler(/^\/item\/(\d+)/) {
    say 'dispatched to item';
    say $match.perl;
}
my $request = HTTP::Request.new(
    req_url => HTTP::url.new(path => '/item/12345'),
    headers => HTTP::Headers.new( header_values => { 'Host' => 'localhost' }),
    req_method => 'GET',
);
dispatch($request);

Here’s the output of that example:

dispatched to item
Match.new(
 # WARNING: this is not working perl code
 # and for debugging purposes only
 ast  => "/item/12345",
 text => "/item/12345",
 from => 0,
 to   => 11,
 positional => [
  Match.new(
     ast  => "12345",
     text => "12345",
     from => 6,
     to   => 11,
    ),
 ],
)

Today I noticed that Adobe Acrobat Reader 9.1 was released. It turns out that it was released last Wednesday, but I didn't notice until today when Adobe put it in their RPM yum repository.

On Windows is common to have lots application specific background apps wasting memory checking to see if new versions have been released. The Linux software update model is definitely better in that regard (though it does have it's own issues such as having to wait until the next stable distribution release to cleanly get the next version of GNOME).

I'm participating in the web framework for Perl 6 grant from The Perl Foundation. My first task has been working on a Tags library for (X)HTML generation.

I've got the start of a simple port of Template Declare implemented. It's not perfect, and I'm still working out the API we want, but it's functional, and nice. It's quite a bit nicer than CGI.pm-style html generation.

The philosophy of this library is that templates are code, and we should be able to deal with them as such. If your template is Perl, you can use all of the same tools you use for Perl. No need to learn a new language, and far fewer angle brackets. :)

Here's an example that runs under the current Tags.pm. Keep in mind, there's still a decent amount of API refactoring needed.

use Tags;
say show {
    html {
        head { title { 'Tags Demo' } }
        body {
            outs "hi";
            ul :id<numberlist> {
                outs "A list from one to ten:";
                for 1..10 {
                    li :class<number>, { $_ }
                }
            }
        }
    }
}

My last blog entry covered issues running a 64bit Linux desktop. I promised more details on installing and using 64bit Java applet support with 64bit Firefox.

Java Installation Primer
Currently, there are many methods to install Java on Linux:


  1. Use the Sun Java RPMs or installer only.

  2. Use the Sun Java RPMs along with the java-1.6.0-sun-compat RPM to get JPackage policy compliance enabling the /etc/alternatives for managing multiple concurrent Java JVM installation.

  3. Use the Sun Java RPMs provided by your distribution. For example, with Red Hat Enterprise Linux 5, enabling the RHEL Supplementary software channel enables you to install and automatically keep current the Sun Java RPMs which have been repackaged into a JPackage compliant form.

Using Method 1 - Sun RPMs only

When using method 1 above, you'll download the file jdk-6u12-linux-x64-rpm.bin or jdk-6u12-linux-i586-rpm.bin. After making it executable, you'll run the file which will extract and then install the following RPMs:

jdk-6u12-linux-amd64.rpm or jdk-6u12-linux-i586.rpm
sun-javadb-client-10.4.1-3.1.i386.rpm
sun-javadb-common-10.4.1-3.1.i386.rpm
sun-javadb-core-10.4.1-3.1.i386.rpm
sun-javadb-demo-10.4.1-3.1.i386.rpm
sun-javadb-docs-10.4.1-3.1.i386.rpm
sun-javadb-javadoc-10.4.1-3.1.i386.rpm

Finally, to install Java Applet support for Firefox and other browsers that are compatible with Firefox plugins, create a symlink in the Mozilla plugin directory:

  • 64bit Java Applet Support (new with Java 1.6.0_12)

cd /usr/lib64/mozilla/plugins
ln -s /usr/lib/jvm/java-1.6.0-sun-1.6.0.12/jre/lib/amd64/libnpjp2.so

  • 32bit Java Applet Support

cd /usr/lib/mozilla/plugins
ln -s /usr/lib/jvm/java-1.6.0-sun-1.6.0.12/jre/plugin/i386/ns7/libjavaplugin_oji.so

Notice that the browser plugin library filename is different between 32bit and 64bit java.

Using Method 2 - Sun RPMs with JPackage compatibility

To use method 2, install the same RPMs in method 1 above, but then install one more additional RPM that makes the Sun RPMs compatible with the JPackage policy.

That RPM is the java-1.6.0-sun-compat RPM, and you would normally simply obtain it from the JPackage website. The only problem is that as of March 2009, the package is out of date (currently only supporting Sun Java 1.6.0_03).

I have created a java-1.6.0-sun-compat RPM that works with 1.6.0_12, the first version of Sun Java that has 64bit Java Applet support. You can grab it here:

64bit - java-1.6.0-sun-compat-1.6.0.12-1jpp.x86_64.rpm
32bit - java-1.6.0-sun-compat-1.6.0.12-1jpp.i586.rpm

Using the java-1.6.0-sun-compat RPM there is no need to manually create the browser plugin symlink.

For the sake of completeness and if you are into creating RPMs yourself, you might be interested in the SPEC and the SRPM file and the patch to the SPEC. Normally you don't need these files.

java-1.6.0-sun-compat-1.6.0_12-b04.spec
java-1.6.0-sun-compat-1.6.0_06-to-1.6.0_12.spec.patch
java-1.6.0-sun-compat-1.6.0.12-1jpp.src.rpm

Using Method 3 - Using Sun Java included with your distribution

If you are using Red Hat Enterprise Linux v5 with a RHN subscription, getting the latest Sun Java automatically installed on your systems is pretty easy.

  1. Login to RHN
  2. Subscribe to the RHEL Supplementary software channel on the desired system
  3. Back on your 64bit system run:
    yum install java-1.6.0-sun java-1.6.0-sun-plugin.x86_64
    On a 32bit system run:
    yum install java-1.6.0-sun java-1.6.0-sun-plugin
  4. Optionally, if you want the JDK and not just the JRE (because you plan on compiling Java software), then run:
    yum install java-1.6.0-sun-devel

Running a 64bit Linux desktop has a few bumpy areas. I've been running a 64bit Linux desktop for the past year to take advantage of the 8GB of RAM that my T61p laptop now has. The bumpy areas are:

  • 32bit applications require all the 32bit libraries to be installed. This primarily concerns proprietary apps like Adobe Acroread since virtually all open sources apps are compiled to 64bit binaries already. This isn't a huge issue, just a little more bloat on the hard drive and package updates have to be pulled down for both architectures.
  • The old trick of having mplayer (or similar apps) use DLLs from Windows for some codecs such as WMV9 no longer work. There are workarounds (such as having a separate 32bit version of mplayer installed), but I don't encounter much WMV9 video on the internet -- most sites use Flash video or H.264 nowadays.
  • Linux Flash support. Two ways to address this. Use the 32bit Flash plugin with nspluginwrapper, or use the new (not production quality yet) 64bit Flash plugin (with or without nspluginwrapper).
  • 64bit Java Applet support. Even though Sun has been shipping 64bit Java JVMs forever, there has been no 64bit Java Applet plugin for 64bit browsers. The request has been tracked in the Sun java bug database as bug id 4802695 (bug created in Jan 2003). In 2008 there was some progress outside of Sun to bring 64bit applet support to fruition as part of the IcedTea project's gcjwebplugin with partial success. Finally, on February 20th, 2009 Sun released JDK/JRE 1.6.0_12 with "64-Bit Browser Support for Java Plugin and Java Webstart".

My next blog post will cover how to install and use the new 64bit Java applet support.

Fast Times at Guru Labs

Q: So what did you do today at work?

A: Oh, you know, the usual. Threw stuffed penguins at one boss. Put forty pounds of putty on my other boss's head then watched it slowly melt around him. Buried a co-worker in roughly one thousand stuffed penguins... And you?

It's going to take some time to process all the photos, but I promise we'll share. Stay tuned.

Thumbnail image for HILTON-MAR09-2195.jpg

Recently I found a good deal on a refurbished WRT54G2 wireless access point / router. I had been looking for a straight WRT54G, but at $25.72, including free shipping, I had to bite at this little refurbished unit.

** Please Read **

Now before going any farther I would like to point out that what is involved may result in voiding of any warranty and support from the manufacturer. You may also "brick" your new toy, i.e. you will break it to the point of requiring a soldering iron to fix it. I wasn't worried about this, but you might be. Please consider this before continuing.

** End Please Read **

For those of you that are not familiar with dd-wrt, open-wrt, or even Tomato, let me explain.

These are projects that have been developed to replace the current operating system (OS) from the manufacturer with a Linux based system. Giving you more control and flexibility with your hardware. For those that think the original system is better then a possible replacement with Linux, I would like to point out that the existing system is already Linux based.

In order to do this the Firmware must be replaced through a process known as flashing. What this entails doing is taking a binary image, transferring it to the device and then having the device rewrite the firmware with this new image. The process itself is automated and the worst part is transferring the image(s).

So first we have to obtain the images. Go to the project of your choice and see if your hardware is supported. I found out fairly quickly that there was a design change with the WRT54G2. Linksys, now owned by Cisco, had changed the OS image since the WRT54G.

The original plan had been to use Tomato. Unfortunately these changes prevented that. Fortunately I was able to use dd-wrt.

A quick look at dd-wrt and I was able to locate the specific instructions and links to the appropriate images. In this case I had actually had to get several different images and a specialized tool.

Images used, in order of use:

VxWorks Prep
http://www.dd-wrt.com/routerdb/de/download.php?file=395

VxWorks Killer
http://www.dd-wrt.com/routerdb/de/download.php?file=393

Micro Generic Image
http://www.dd-wrt.com/routerdb/de/download.php?file=282

Micro Image with sshd
ftp://dd-wrt.com/others/eko/V24_TNG/svn11650/dd-wrt.v24-11650_NEWD_micro-plus_ssh.bin

And one very specific tool for the tftp transfer
http://www.dd-wrt.com/dd-wrtv2/downloads/others/tornado/Linux_Linksys_Tftp/linksys-tftp.tar.bz2

** Please note that the tool I used was from redsands directly. It is the same tool however.

Once these have been downloaded we need to build the modified tftp tool. The reason that we have to use the modified tool is because Linksys modified tftp to require a password as an argument. This still boggles my mind since tftp was never meant to require any authentication and is completely done through clear text.

Since the tool is nicely packaged in a tar ball we simply need to untar it:

$ tar -xvjpf linksys-tftp.tar.bz2
linksys-tftp-1.2.1/
linksys-tftp-1.2.1/tftp.h
linksys-tftp-1.2.1/Makefile
linksys-tftp-1.2.1/main.c
linksys-tftp-1.2.1/tftp.c
linksys-tftp-1.2.1/tftpsubs.c
linksys-tftp-1.2.1/README
$

Now we will change into the linksys-tftp-1.2.1 directory:

$ cd linksys-tftp-1.2.1/
$

A quick use of ls will reveal that we have several files:

$ ls
main.c  Makefile  README  tftp.c  tftp.h  tftpsubs.c
$

Be sure to read the README for any recent notices and changes in the instructions. This is a C program so make sure that you have GCC installed and available.

Next we need to use the command make to build the binaries:

$ make
...output omitted...
$

Once this is done we have the tool for transferring the images over a modified tftp session to the device.

Next make sure that you have a WIRED connection to the device. We don't want the connection to get garbled part way through transmission. Make sure that the computers IP address is 192.168.1.10 with a net mask of 255.255.255.0 and NOT dynamically assigned. The wap/router is going to be 192.168.1.1.

Also ensure that if you have a firewall set that it is not going to block a successful transmission. The default firewall on a Fedora 10 installation will. Please be sure to make the appropriate adjustments.

run ./linksys-tftp

$ ./linksys-tftp
TJ Shelton    redsand [at] redsand.net
Mike Lynn    abaddon [at] 802.11ninja.net
Linksys TFTP Client for *BSD/Linux    The Firmware gets sexier
Modified Berkeley TFTP client Release: !(@) 1.2.1 (10/01/03)

linksys-tftp>

At this point we need to go ahead and establish a conection:

linksys-tftp> connect 192.168.1.1
linksys-tftp>

And finally we are going to put up the image:

linksys-tftp> put ../VxWorksPrep-G2V1.bin password

Replace password with whatever your password is. The default is admin. Again this is being sent as plain text and you should consider it a temporary password to be replaced later on.

Once the transmission is done the router will automatically begin a flash and reboot. This can take up to three minutes. Once it is completed with the prep image we are going to use the kill image. Again it is automatically going to reboot and we are going to have to wait for it to finish. Once that is done you can put in the dd-wrt image.

When I did this I first did the dd-wrt image that was generic and then followed with the other image since the first one was less then desirable. It should be possible to skip the first dd-wrt image. I have not done that and will not guarantee any results.

Be sure to change your password over a secure connection. Probably the best way to do this to first establish an ssh port forwarding session:

$ ssh -L 8080:192.168.1.1:80 root@192.168.1.1
DD-WRT v24-sp2 micro (c) 2009 NewMedia-NET GmbH
Release: 02/18/09 (SVN revision: 11650)
root@192.168.1.1's password:
==========================================================
...snip...

BusyBox v1.13.2 (2009-02-18 17:58:33 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.

root@DD-WRT:~#

Now simply open up a browser and point it to http://localhost:8080.

Now we have a secure connection for administration. One downside I have noticed with dd-wrt is the lack of a secure connection. This is a great way to ensure the security for your administrative password.

And that is it. Configure it to your hearts content and enjoy your new dd-wrt router!

Ever See a Penguin Fly?

| No Comments | 1 TrackBack

Ever wonder how a penguin can strike fear into the hearts of men? I give you Tux!

 

1236376118027.jpg

Click for larger than life image. For a Kung Fu Tux of your own take a class! Learn Powerful Linux Kung Fu!

Aggregated Blogs:

Aaron Toponce
Almost Everything Linux
Bryan's Blog
Dax's Blog
D E Evans
goozbach's Techtips
Mike
Stephen Weeks
Stuart's Blog
Tim - the *other* archlinux user