One man's overview of popular Scheme implementations.
PLT anon-CVS server has been down all day.
Submitted bug report for something I noticed yesterday while linting my pages through Bobby:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML LANG="en"><HEAD><TITLE>Bobby Test</TITLE></HEAD><BODY> <H1><A NAME="someanchor">Bobby Test</A></H2> <P><A HREF="http://cast.org/bobby/">Bobby</A> doesn't like <CODE>A NAME</CODE> adjacent to <CODE>A HREF</CODE>. </BODY></HTML>
A reminder from rec.humor.funny.reruns.
Bummer. CSS2 explicitly does not provide a way to express
equivalents for the HTML COLSPAN and ROWSPAN
behavior. (Though the CSS2 specification was thoughtful enough to
address the sensitive topic of "border conflict resolution.") So when converting all the fontified file views on
this site, such as file gnushush.el, to the new CSS-based layout, I've taken the easy way out
and just put the fontified view in a non-spanning column with a smaller font.
OK, 9:45am means it's time to cease the morning's CSS play and do real work.
During a break later in the day, Validator for the HTML 4.01 Strict DTD inspired me to add
ALT attributes to all my IMG elements and to remove
all the IMG positioning attributes. Will have to re-fix image
positioning soon.
A few minutes after midnight last night, before the CSS on my Web pages had even 24 hours to dry, I received a nice email from someone, asking if they could "borrow the design concept" of my pages. In general, I'd encourage people to use an approach similar to mine to mark up plain least-common-denominator HTML for fancy presentation via CSS, and to maybe start with a CSS tables layout if they want to experiment with various looks of sideheads. However, I actually prefer to keep the exact visual design of my site distinctive, and would like for people to come up with their own personal designs. I've added a comment in the CSS to this effect.
Got up very early Monday morning. Shaver pointed me at
/usr/lib/mozilla/res/html.css, which told me how to do my
table-based page layout in CSS without using TABLE elements.
Trivial compared to the tricks I was playing with DIV margins
before. So a (defconst web5-css-p t) here, a bunch of (if
web5-css-p foo bar) there, and the majority of my site is
now CSS'd. I'll finish it and test under IE as I get time.
Mucked about with some of the basics and esoterica of CSS. Learning exercise is to duplicate my Web pages' current
tables-based layout with a CSS-based one that works from a simple structure of
Mosaic-and-Lynx-friendly HTML elements (H1, H2,
P, etc.) along with a few strategic DIV elements.
By noon, it was coming close, though the tables-based layout is more robust. I've put
it aside for now, since the afternoon is reserved for an appointment with
DrScheme.
Oh, of course there's a css-mode.el. Suggested option settings:
(setq cssm-indent-function 'cssm-c-style-indenter) (setq cssm-mirror-mode nil)
A quick glance at the source showed that making Emacs VM use browse-url instead of its aging internal
Web browser support is as easy as:
(setq vm-url-browser 'browse-url)
For Galeon, you may also want to do:
(setq browse-url-browser-function 'browse-url-galeon
browse-url-new-window-p t)
As an exercise in PLT immersion, this weekend I will shun Emacs and force myself to use the DrScheme GUI environment. It is both pretty and not-pretty. I've already patched it to use Helvetica instead of Lucida Sans.
I also need to take a longer look at Bigloo Scheme, especially as it has some useful-looking development tools.
Hopefully hiding some email addresses from spammers' Web-crawling harvesters, while still permitting non-techies to easily copy-and-paste the addresses from their Web browsers into their email clients:
(pertekt-email "foo@bar.baz") ⇒ "<CODE>foo</CODE><CODE><B>@</B></CODE><CODE>bar.baz</CODE>"
Almost bought a Kodak DVC325 just now, but a Web search showed that Kodak has declined to release specs that would enable a open source Linux driver to be written. I wonder how many sales this cost them (100? 1000?), and how much the Kodak brand goodwill damage is reflected in the bottom line.
Prose-ified most of my home page. It's arguably too text-heavy for one page now, but readers are still more likely to scroll down than they are to click through to multiple linked pages.
Cadre people: Karen Chiacu is organizing a Cadroids get-together. Emails will be going out shortly.
Caught up on all but 4 email messages in my inbox yesterday.
The tagline for Schemers.org is even recursive:
'(schemers.org): an improper list of Scheme resources
Removing old crufty links from my front page, but I'll link to them from my weblog so that search engine users can still find the pages. The short commentary Bonsai Kitten Stunt Is Bad Idea is clearly no longer timely. And the Gnome Elmo joke is the next to go, as it was pretty stupid to begin with, and I no longer use Gnome at all. Starting to better prose-ify the front page, in little nibbles, whenever I need a break from looking at s-expressions.
"I vill crush all who dare oppose me!"
A fistful of dollars invested in paint, new window blinds, and misc. hardware can elevate a room from "student economy" hovel to a veritable palace. Here's hoping the landlord doesn't realize the apartment is more marketable now and raise the rent.
Woke up this morning having to debug an odd system failure that
looked like it might be an intrusion. My first theory was that last night
update-passwd decided to give user junkbust's UID to
user gdm, when all it said it wanted to do was to change
mail's home dir. What actually happened is admitted by a
ChangeLog entry posted later in the day:
base-passwd (3.2.3) unstable; urgency=high * Major paper brown bag release * Do not swap uid and gid in putpwent. Closes: Bug#130032
Serves me right for not being paranoid enough to have a hold on
base-passwd.
Spent most of the day getting all domestic and painting a room that has desperately needed painting since before I moved in. Antique White. Painting is a little bit stressful (I'm forever indebted to whomever invented water-soluble acrylic latex), but painting also has a Csikszentmihalyan flow quality to it. I began to wonder if nature selected for people who painted say, a man who was handy around the house was permitted more frequent opportunities to procreate with his wife, thereby propagating his genetic material more widely.
Salon is attempting to entice you to sign up for their subscription-only content.
At 8am Saturday morning, first order of the day is trying to
build MZGtk against PLT Scheme 200alpha from CVS. First glance suggests it may be using an obsoleted
unit API. Think I'll build against 103, just to see how much of
MZGtk works there. Simon Weijgers reports that it segfaulted when he tried a
quick test with MZGtk and continuations.
Submitted PLT bug 5175 with patch for src/Makefile.in. Grab this if
you are running make install and wondering why your changes aren't
taking effect.
Patched my copy of PLT to make MrEd and DrScheme substitute Helvetica for Lucida Sans. That'll have to suffice for now.
Neil Jerram released guile-debugger 0.3 this morning, and extended giguile.el 0.1 for the Emacs interface. Will take a closer look soon.
Want to take a look at the rumored PLT Scheme v200 before investing in GTK support for v103. Found the poorly-advertised PLT Scheme CVS repository.
Long-time nit: URI are identifiers for objects, and usually
human-readable. From a client perspective, server-side representation of the
object is usually irrelevant, i.e., implementation rather than interface.
Strings such as /cgi-bin/, /servlets/,
.php, .dll, .shtml etc., should rarely
be seen in URLs, since they suggest particular server-side implementations that
should be abstracted away, from the client perspective. In the case of HTML
page objects, the client does not care whether a particular HTML page is
generated by a Java servlet, PHP, a CGI (or mod_perl) Perl script, etc. The
operator of the server should be able to one day quietly replace their
CGI-based implementation with a non-CGI implementation, without breaking all
the existing URLs to various objects that are now served via a different
server-side implementation.
Removing irrelevant implementation information from URI would also make ugly user-visible URLs prettier. For example, the URL
http://cgi.ebay.com/aw-cgi/eBayISAPI.dll?ViewItem&item=1234567890
could be rewritten with no loss of interface information (nor loss
of the convenient crude form of load-balancing that is accomplished by serving
some objects from www.ebay.com and other objects from servers
named like cgi.ebay.com) as
http://items.ebay.com/item/1234567890
This brought me more joy than it really should:
Welcome to MzScheme version 200alpha9, Copyright (c) 1995-2002 PLT > (+ 1 2) 3
Unfortunately, this v200alpha from CVS has a startup footprint of
2.4MB, vs. 1.6MB for v103. Will have to see if the size increase is due to
debugging info, more features loaded at startup, some kind of dynamic loading
overhead, or if the interpreter itself has somehow managed to grow that much.
If you build without --enable-dynlib, v200 is 2.1MB.
Got up at 5am this morning with the nagging feeling I should
take another look at the PLT Scheme tools. A skim of the MzScheme page, and a few minutes of apt-get install mzscheme
mzscheme-dev, and I'm playing around with it. The 1.6MB startup
footprint is respectable, although I imagine this grows quickly as modules are
loaded. (MIT Scheme, at least as packaged in Debian, has a startup footprint
of 40MB.) LGPL'd, pre-emptive multithreading, interfacing with C code, separate bytecode and native code compiler, available (homely-hooking) GUI toolkit,(non-CLOS-like)
object system, portable to Unix and Winblows.
Questions include: (1) Is it pretty much bug-free, and will it be supported? (2) how conservative is its conservative GC? (3) Can one of the PLT people encourage a student to write good GTK bindings so I don't have to? (4) Is MzScheme interpreter fast enough, and comparable in speed to most other good Scheme implementations?
OK, it's time for some rigorous quantitative scientific evaluation...
Searched the web for mzscheme sucks. Results 1 - 10 of about 64.
Searched the web for guile sucks. Results 1 - 10 of about 1,710.
Found MZGtk, which may be proof-of-concept of GTK bindings for MzScheme.
Here's an article on the coincidencedesign.com hoax.
Tarred up the source to T-Map and released it under the GPL.
Media Lab people: Medialabber is temporarily offline, while the servers we'd left behind to keep certain old Agents projects running are shuffled around.
If only Cray Research had had this guy as their chassis designer.
Getting carded twice this morning, when my purchases at the crunchy-granola co-op grocery store included one bottle of a French Merlot, reminded me of an earlier carding incident. (Aside on Cambridge wine resellers: I prefer the University Wine Shop near Harvard Square, although I don't make the long walk very often anymore, after I once had to return empty-handed when the person on duty wouldn't accept my out-of-state ID. They're still on probation.)
Definitely not of general interest, but I found some of the old OMT Explainer source and put it on the Web under GPL, as-is, for the curious future passerby.
Random Quote Time:
All truth passes through three stages.
First, it is ridiculed.
Second, it is violently opposed.
Third, it is accepted as being self-evident.
Arthur Schopenhauer (1788-1860)
Sigh. A second person just claimed they recently sent email
to my nwv@acm.org address that I never received. It may be that
acm.org's forwarder is bitbucketing some emails again. Please
update addressbooks to my cheesy vanity address, nwv@neilvandyke.org.
Since I'm concerned about the slow pace of Guile development and the uncertainty around eventual GTK 2 bindings for it, I (once again) browsed various other Scheme implementations yesterday. So many of the ones listed in the FAQ literally haven't been updated in years, and most of the remainder are either clearly targeted as teaching tools, or were written for educational or hobby value rather than production use.
One of the appealing things about Guile was its relatively small footprint (currently at startup, 1628KB and 864KB shared; with Goops loaded, 2296KB and 928KB), so that you could have a hundred or more long-running and loosely-coupled agent processes, each running in its own native Unix process, which would be a boon for rapid prototyping on one of my main projects.
I'm leaning more toward Python now, simply because it looks like PyGtk is making more rapid progress to GTK 2 bindings, although something in the Python or PyGtk implementation seems to result in perceptibly slow behaviour for even simple GUI operations (e.g., on my 500MHz Celeron box with fast X display and no GTK theme, I ran the PyGtk demo from CVS and there was noticeable lag when I rapidly clicked on different list items). Language-wise, Python has some elegance, but it can't really touch Lisp, and Lisp semantic and syntactic power does come in handy when you're trying to do rapid prototyping for research. One vote in Python's favor, though, is that Norvig seems to like it well enough.
I expect to start new research prototyping in a matter of weeks, and it currently looks like I'll have to commit to a high-level language implementation (Guile, a different Scheme, Python, Java, or a Common Lisp) based on whichever happens to have the working library support I need at the time I have to start coding. Too bad Dylan (with Lispy syntax) never took off.
With the proprietor's kind permission, I snapped a photo of the floor of Jerusalem Cafe. When asked if it was traditional art, she said that the floor was bad, so they did that. On a day that the Falafel Truck isn't in front of 77 Mass. Ave., walk up the street a few blocks for a spicier falafel sandwich and charming decor.
Today I was admiring a construction vehicle zipping down the street with a huge concrete object suspended from its jaw. As it went to turn right, some brilliant person who I suspect was an MIT student strode right into the street in front of the truck without looking. Fortunately, the truck operator stopped cleanly and saved his concrete from being smeared with MIT brains. I snapped this photo as the truck was standing still, presumably waiting for the object to cease oscillating.
While waiting for the grocery to open early Sunday morning, I browsed a bit on car-free cities. One of the nice things about Cambridge and Boston is that you don't need to own a car. Although one drawback is that, even if you don't own a car yourself, you still incur major quality-of-life costs from all the other people who are driving their cars.
One way to get the smallest taste of what the city might be like car-free is to visit the Charles River around Harvard Square on a Sunday in summer, when the road that runs between JFK Park and the river is blocked off the contrast is striking.
Of course this doesn't account for the cascade of disruptive changes benefits and costs that would occur if, hypothetically speaking, the People's Republic of Cambridge were to suddenly blockade its bridges, melt down its cars to useful materials, and replace the streets with wide grass-lined pedestrian walkways and bike paths.
If you think computers should be used and not heard, check out Piotr's page on Quiet and Silent PCs. I currently keep my 500MHz Celeron minitower and network gear on the floor of a closet, and run the cables under the closet door. When funds permit, I'll probably make one headless server box hidden away in some closet, and just use laptops as quiet and subtle workstations or X displays.
Weird; I am the first Google hit for blockfile beating the Junkbuster site itself.
Totally and completely and utterly apropos of nothing, Oregon Chai grows abundant within pleasant walking distance of my apartment, at such fine establishments as Harvest Co-op and Trader Joe's. Picked up a box for $3 just today. Mmm-mmm good.
After some headache trying to checkout
guile-gtk from Gnome CVS, getting really odd behavior, and one out
of ten attempts working, someone (who may wish to remain anonymous) educated
me as to the folly of the way I was doing it. Although the Gnome CVS Intro tells you to use anoncvs.gnome.org, this is a
very bad idea, as that hostname is round-robin DNS of several mirrors that are
not kept well in sync with each other. Insider Gnome developers avoid this
problem by getting CVS accounts for cvs.gnome.org.
I decided I wanted to be able to check out Gnome CVS code in the
same way that I would suggest to other people, and not have to tell them that
they'd have to acknowledge a caste system and get a cvs.gnome.org
account, so I'm sticking with anoncvs.gnome.org. The crucial
trick to doing this successfully, I am told, is to pick a single mirror and put
it in your /etc/hosts file. (Yes, this is a really naughty
kludge of us; you probably don't want to do it unless you already can see why
it's bad.) Of the three mirrors, I found that one was refusing all
connections, and another seemed to be missing modules, so I picked the third
one.
I'm hoping that either Guile or Python works out well for GTK+ 2 support. I suspect but am not certain that the FSF's embrace of Microsoft's C# and .NET will prove to have been a mistake, at least from the standpoint of the spirit of Free Software. In any case, Ximian as a commercial venture may benefit in the near term from being able to ride Microsoft's coattails on C# and .NET.
C#/.NET may very well eat Java's lunch. If Sun or IBM want serious backing of Java from the Linux or free software people, they may need to open up their licenses and GPL/LGPL a production-quality compiler, fast VM, and class libraries. The free software people who might be scared of C#/.NET and prefer to back Java are likely to also be scared by the Java-backing corporate entities that are still trying to keep too tight a proprietary grasp on core Java.
The International Vinegar Museum could be in your neighbor's garage or barn.
Coincidence Design appears to be a really clever privacy-relevant media hack. The site alone is believeable as business venture someone had thought out and decided was viable. But it appears the media-savvy author(s) left an 'accidental' hint (Google cache entry discovered at 3AM 10-Jan EST, if it's not there as you read this).
Released giguile.el 0.2.
Check out cool animated GIF of the day.
Released giguile.el. I'd previously outsmarted myself with clever function
renaming and loading tricks and symbol property munging before I realized I
could just use a simple defadvice after all. The code is
embarrassingly simple now. Next quick hack is to make
switch-to-scheme do a little more window management.
On a world-level socio-political commentary note, there can be no greater condemnation of the horrifying cultural pillaging and balkanization caused by the Euro (€) than the fact that that those Danes have commenced exporting cheap knockoffs of Swiss cultural treasures. The seeds of War are once again sprouting in Europe, mark my words.
I found ILISP 5.11.1's support for Guile kinda impoverished, so I uninstalled it and instead hacked
a little Guile-specific glue for scheme.el and
cmuscheme.el, which should be easier to extend. Here's a snippit
of ILISP config I was using:
(setq ilisp-*enable-scheme-easy-menu-p* t) (setq ilisp-*use-frame-for-output* nil) (setq ilisp-*use-fsf-compliant-keybindings* nil) (setq ilisp-bindings-*bind-space-p* nil) (setq ilisp-load-no-compile-query t) (setq ilisp-motd nil) (require 'scheme) (require 'ilisp) (defun nwv-ilisp-guile-hook () (setq ilisp-program "/home/nwv/guile/bin/guile")) (add-hook 'guile-hook 'nwv-ilisp-guile-hook) ;;(defdialect guile17 "Guile 1.7" ;; guile ;; (setq ilisp-program "/home/nwv/guile/bin/guile1.7"))
I'll probably post my little glue package, giguile.el,
soon; email if you want it sooner.
I fleshed out the EmacsWiki GuileIde page and related pages some more. Please add useful missing info.
My email server will be down today, probably starting shortly before 10am. Electrician is scheduled to replace all the fuseboxes in this aging apartment building with new-fangled circuit-breaker boxes today. I plan on being impressed when s/he manages to pull it off in one day without serious property damage or human injury.
Email server back online as of 2:30pm EST. Took about half an hour of repeated unplugging and re-plugging and cold-booting of various boxes in concert before the DSL bridge decided it wanted to actually accept Ethernet packets, seeing as how it had a perfectly good connection and all lights were green and all. Tense troubleshooting, as I've had a history of sudden long-term DSL outages.
Electricians arrived overly promptly at 9:30am, and replaced the quaint fuse box in our kitchen with a daring neo-rustic-industrial circuit breaker box. The philistine landlord said he's gonna have them put a "frame" on it, but I think the piece really works as it is, and that a frame would come off as incongruous or presumptuous, unless you were going for irony.
Ariel Rios released a guile-gtk tarball yesterday at the same time
I was wrangling with Gnome CVS. If you want to re-run this tarball's
autogen.sh on Debian Sid, you'll need the
gnome-common package or equivalent. Also, after some inadvertent
porting yesterday, I realized that Guile CVS had forked a while back, and that
guile-gtk uses the 1.5/1.6 release branch rather than the 1.7
head, so to get a Guile that works with guile-gtk, do something
like:
cvs -z3 -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/guile \
co -r branch_release-1-6 guile/guile-core
A quick Google search will turn up numerous enthusiastic supporters of nutritional supplements, but listen to The Other Linus and pop your vitamin C this winter. I've resumed doing a relatively modest timed-release 500mg tablet of C a day, plus a conventional multivitamin tablet. 500mg of C used to make me impervious to the common cold; let's see if it still works as well.
This evening I'm working on getting all the latest PyGtk and
guile-gtk stuff obtained and working with GTK+ 2 snapshot and the
latest Python and Guile (respectively). There appear to be non-obvious and
undocumented things that need to be done; I'll post a cheat-sheet with the
final answers if I get it all working before the frustration threshold is hit.
I'm hoping one of them impresses me as reliable enough to use for research
prototyping.
Thanks to help from gb and shaver,
my Galeon scrollbars now have the vaguely GTK-ish look of Mozilla
"classic" theme. Ended up using Mozilla 0.9.7 to select the theme,
then copying the chrome.rdf file from deep under
~/.mozilla/ to ~/.galeon/mozilla/galeon/chrome/.
If you've ever wondered how the Cambridge, Mass., weekly rubbish and recycling pickup schedule is affected by holidays, the Web can tell you. Don't let the visual design prejudice you; the page is actually kept up to date.
First morning of the new year. Nobody updated their weblogs, and the only person who sent me email late last night was vrms (and twice).
I used the relatively-svelte Mozilla-derived Galeon Web browser today, and found it generally superior to Netscape 4.x, except that it grew to over 50MB. When I have more time, I'll experiment with page cache size, disabling features, etc. Unfortunately, I'm concerned that the source code base is so imposing as to not be amenable casual space-optimization hacking.
The fire department had to deploy out front of my apartment twice today. This morning, the chief, an engine, a ladder truck, and an ambulance pulled up due to what appeared to be a minor kitchen fire or possible gas leak at the next-door neighbor's. This evening, a fire engine pulled up with lights and siren to respond to an incident on the other side of my apartment. The novelty of photographing fire engines is starting to wear off for me. I just hope, should I ever need the fire department myself, that the novelty of driving up out front my apartment doesn't wear off for them.
© Copyright Neil Van Dyke Contact