deployment

Wrap it up

I've been reading up a bit on jQuery, a small, modular, and very expressive JavaScript library. There is a large collections of plug-ins, which build on it and extend its functionality in numerous ways. It's a bit hard to separate the wheat from the chaff, but there are many interesting pieces in there.

A particularly interesting set of extensions is jQuery UI - I really like the way you can pick and choose what you want and get a personalized package with a few mouse clicks on the download builder page.

One of the countless projects of mine which never materialized was the "Standalone Executable Assembly Line" (SEAL). I still think it would be very useful. So would a much simpler system which does this for pure Tcl scripts, btw (or Lua, Python, Ruby, whatever).

Not enough hours in the day. Nor years in a lifetime.

How to finish twice

Ok, so the Mac project I worked on with Fred was completed by us on October 1st, as planned.

Except it wasn't. The original specs were so wildly different from the end requirements that we ended up doing a lot more work (mostly paid for). Some major organizational changes as well. Anyway, 10 weeks later, this project is again finished - but this time it's for real, the final DVD image was frozen today.

Many interesting aspects, technically. A Windows + Mac product, of which both GUIs were developed separately, but with a common engine. A pleasant and respectful level of collaboration between the Win and Mac teams, with a willingness to adopt each other's choices, leading to two apps which clearly are native on each yet show a strong resemblance and commonality. One big reason IMO is the use of some strong visual cues, making it obvious that the apps are essentially the same thing (it's all about multi-lingual dictionaries, with a bunch of features aimed at professional translators). All sorts of interesting stuff on the side as well, such as internet-based licensing and automated software updates.

Many lessons also for me in how to carve up an app between developers, how to plan against a strict deadline, how to manage when you're not the manager, how to prepare and push through the final stages, and of course numerous lessons on mistakes to try and avoid next time around.

All in all, a project I'm very pleased with and proud of. Finishing is good.

Speaking of which... it's time to gently but decidedly return to that other project of mine.

Copies

Here's another angle on deployment: no deployment. I've always considered "copy" one of the most abused concepts in IT - be it for documents, files, or my favorite: values in software.



There are of course many other trade-offs involved (e.g. Google ...) - but this 3-minute video is excellent (from 43 Folders).

Electric Cloud

John Ousterhout's company tackles the problem of large builds. In ACM Queue.

MAMP

A one-click installation of a full Mac, Apache, MySQL, and PHP suite. Not a starpack, but as close as it gets. Hefty package, but it seems to be doing everything just right: all the stuff is inside a single folder - install=copy, uninstall=delete. The attention to detail is impressive, considering how many different technologies are brought together - all the way to a DashBoard widget to control this thing.

Bug tracking

I've just completed the (trivial) installation of CVStrac for use in my main OSS projects. It offers excellent integration of the CVS timeline (with RSS feed) with a ticketing system, and makes it easy to cross-link and cross-reference all the bits and pieces. Thank you Richard Hipp for this gem!

The base url is http://www.equi4.com/cgi-bin/cvstrac/?/ - replace ? with one of: critcl, metakit, oomk, sdx, tclkit, vlerq, or wikit.

Zero install

Irony: to use the Zero Install System you have to ... install it! Oh well, I'll stick with Starkits and starpacks.

Tcl on Nokia 770

Tclkit on Nokia 770 is starting to work properly, as seen is this SSH session:

$ ./tsh2 wikit.kit -httpd 8000
Wed, 23 Nov 2005 21:05:08 GMT: notice Now listening: 0.0.0.0 0.0.0.0 8000
Wed, 23 Nov 2005 21:05:26 GMT: [10.0.1.100] GET /
Wed, 23 Nov 2005 21:05:26 GMT: [10.0.1.100] GET /favicon.ico
Wed, 23 Nov 2005 21:06:55 GMT: [10.0.1.100] GET /edit/0@
Wed, 23 Nov 2005 21:06:55 GMT: [10.0.1.100] GET /favicon.ico
Wed, 23 Nov 2005 21:07:09 GMT: [10.0.1.100] POST /0
Wed, 23 Nov 2005 21:07:09 GMT: [10.0.1.100] GET /favicon.ico
[...]

This is a Tclkit build on the Maemo development system (which is a huge hassle to set up IMO). There were some gotchas, but it's essentially a genkit build.
Zaurus-based builds were tried, but it looks like some C++ dependency leads to occasional unresolved dynlink errors. Tk is also not quite there yet: a "pack [button .b -text Hello]" reboots the machine. Whoops!
Still, tclsh is not bad for starters. Metakit, Starkits, Wikit, SDX, and Ratcl all seem to work just fine.

I'm in

After installing xterm+sshd, I can connect by WLAN to the Nokia 770 using SSH:

$ ssh -l user -p 2222 10.0.1.101


BusyBox v1.00 (Debian 2:20041102-11) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ $ uname -a
Linux Nokia770-43 2.6.12.3-omap1 #1 Thu Oct 27 09:24:21 EEST 2005 armv5tejl unknown
~ $ free
total used free shared buffers
Mem: 61828 59820 2008 0 220
Swap: 0 0 0
Total: 61828 59820 2008
~ $ df
Filesystem Size Used Available Use% Mounted on
/dev/mtdblock4 2.0M 1.9M 92.0k 96% /mnt/initfs
none 512.0k 40.0k 472.0k 8% /mnt/initfs/tmp
/dev/mtdblock4 123.5M 60.1M 63.4M 49% /
none 512.0k 40.0k 472.0k 8% /tmp
none 1.0M 52.0k 972.0k 5% /dev
/dev/mmcblk0p1 60.9M 30.8M 30.2M 50% /media/mmc1
~ $ /sbin/ifconfig
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:662 errors:0 dropped:0 overruns:0 frame:0
TX packets:662 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:54698 (53.4 KiB) TX bytes:54698 (53.4 KiB)

wlan0 Link encap:Ethernet HWaddr **:**:**:**:**:**
inet addr:10.0.1.101 Bcast:10.255.255.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:459 errors:0 dropped:0 overruns:0 frame:0
TX packets:334 errors:1 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:98214 (95.9 KiB) TX bytes:72681 (70.9 KiB)

~ $ id
uid=29999(user) gid=29999(users)
~ $ uptime
11:10:40 up 43 min, load average: 0.03, 0.15, 0.17
~ $ ps ax | wc
76 461 3952
~ $ set
HISTFILE='/home/user/.ash_history'
HOME='/home/user'
IFS='
'
LOGNAME='user'
MALLOC_MMAP_THRESHOLD_='32768'
MALLOC_TRIM_THRESHOLD_='4096'
OLDPWD='/media/mmc1'
PATH='/usr/bin:/bin'
PPID='1015'
PS1='\w \$ '
PS2='> '
PS4='+ '
PWD='/home/user'
SHELL='/bin/sh'
TERM='xterm-color'
USER='user'
_='set'
~ $ cat /proc/cpuinfo
Processor : ARM926EJ-Sid(wb) rev 3 (v5l)
BogoMIPS : 125.03
Features : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 3
Cache type : write-back
Cache clean : cp15 c7 ops
Cache lockdown : format C
Cache format : Harvard
I size : 32768
I assoc : 4
I line length : 32
I sets : 256
D size : 16384
D assoc : 4
D line length : 32
D sets : 128

Hardware : Generic OMAP1510/1610/1710
Revision : 17100016
Serial : ****************
~ $

Sure feels weird to ssh into one's own shirtpocket...

Starkits

Here's my feeble attempt to bring across the real point of Starkits.

Autopackage

Just came across a tool called "autopackage" to build multi-distribution binary packaging framework for Linux systems. At last, what took OSS developers so long! Many useful docs here!

Also contains several interesting sub-tools such as BinReloc (find your own exe and shlib path, great for starkits/packs), apgcc (compile using older libs so the shared libs don't break on older systems, great for tclkit), Relaytool (use run-time dynamic calls as if they were static), and Scandeps (analyze ELF executables).