I love that second smile effect. This is what creates a truly loyal customer base.
$ ./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.
Wow. I've never ever used critcl before. Now I'm convinced. I didn't even know I had critcl on my system, but the above cut'n'pasted and Just Worked. Nifty.
Scripting with a C compiler built-in. A few years from now, most people will get their first exposure to C this way. Quite a difference from how old-timers like me had to make things work!
I've got tons of uses for this: storing ideas, remembering URLs, tracking To-do's, and (with proper protection) saving passwords and account info. I'd like to dump my entire chaotic brain in it (for personal use only).
On the Mac, there are several applications which can sort of do this. NoteTaker, MacJournal, OmniOutliner, and VoodooPad come to mind. On the web, there are wiki's and del.icio.us and bookmarks. The Backpack website has a Mac OS X Dashboard widget, a great combo. Will Duquette's Notebook also comes close: incr search and portable. There are lots of ways to do this - it's not rocket science.
But all of the above are single-machine!
On a PDA it would be moot, since those are so easy to carry everywhere, but there's no quick way to enter even limited amounts of text in them.
Is it too much to ask to have a solution which talks to some server, is portable, and can work in disconnected mode as well? All it takes is Tcl/Tk and perhaps Tequila + Metakit. I'm even willing to forego Tk and use the command line, as long as a rendered version in HTML is easy to automatically maintain (for that N770 thing...).
Let's call it SyncPad. Simple idea, simple project, I wish someone would do it.
$ 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 184.108.40.206-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
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
RX bytes:98214 (95.9 KiB) TX bytes:72681 (70.9 KiB)
~ $ id
~ $ uptime
11:10:40 up 43 min, load average: 0.03, 0.15, 0.17
~ $ ps ax | wc
76 461 3952
~ $ set
PS1='\w \$ '
~ $ 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...
As you can see, there are quite a bit of things one can do when an error is thrown. Clever - and I assume very useful while writing new code or just for trying out things before writing tests and code.
Chuckle. And while the world feasts on SQL, I can focus on other stuff.
If you're working in a zoo you don't want to be the one who has to brush the teeth of the lion.
Update: The answer is: no, there are more people with that name.
I'd like to be able to take existing (filled!) data tables and play around with alternate representations, while at the same time exploring the implications for performance and the impact on normalization. Drastic changes, sort of like a "refactoring browser for data" - preferably in a highly visual manner.
Have not found such a utility so far.
Maybe one day, the views and relational algebra of Vlerq will make it possible to support such a data model evolution tool. The dynamics of views, and derived views (also blocked views, as first explored in Metakit) ought to be up to the task.
Days are too short!
The more I learn about NULLs in SQL the less sense they make...
So true, Richard, so true.
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).
Data dominates. If you've chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming.
It's rule 5 on this page (which in turn came from Ivan Lazarte's comment on the wiki ).
Second place, by Ken Thompson, from the same page:
When in doubt, use brute force.
Could be a mantra for Vlerq, that one!
Let's move away from the clever stuff. Let's focus on wisdom.
Given that I consider data on-disk and in-memory to be two sides of the same coin, I can only conclude that SQL and OO are going out of their way to be as different from each other as can be.
Why marry two opposite mindsets? It makes no sense.
Under the terms of [Michel] Rocard's draft, software would only be patentable if it controlled a physical process, or a controllable force of nature. Patents would not be allowed for software that handles "the treatment, the manipulation, the representation and the presentation of information".
Imagine a light source coming from one end and a camera picking up the image reflected by some scene. With a mathematical transformation, it is possible to reconstruct the "dual" image, i.e. the view of the scene as if the roles of the camera and the light source were reversed (note that this requires a scanning light beam, not a floodlight).
Amazingly, this allows you to see things which are not visible from the original camera viewpoint. See the video at the bottom of this page.