Can’t remember if I saw this before, or if I posted it, but it’s beautiful.

One of my favorite business model suggestions for entrepreneurs is, find an old UNIX command that hasn’t yet been implemented on the web, and fix that. talk and finger became ICQ, LISTSERV became Yahoo! Groups, ls became (the original) Yahoo!, find and grep became Google, rn became Bloglines, pine became Gmail, mount is becoming S3, and bash is becoming Yahoo! Pipes. I didn’t get until tonight that Twitter is wall for the web. I love that.

Marc Hedlund via Coding Horror

Been browsing some interesting discussion over at Quora on how they built their site.

It’s basically Python and Pylons. But this is cool. They don’t use a templating language.

Here’s developer Charlie Cheever :

What “templating” means to most people is a way of having the developer write out HTML basically the way that you would send it to the browser and then having a way to include a few things — typically variable substitution by using special tags lik or similar.

In our case, no one writes any code that looks like HTML/XML literals, so there’s nothing in our codebase that really matches what most people think of as templates. We do have view code but that interleaves calls into the model and application logic along with a Python code description of what the HTML for that component should be, which is different from templates which are usually based around the ideas of separating logic and data fetching from this.

This sounds like an approach I’ve been favouring for a while. I did it in Mind Traffic Control, some other unreleased SdiDesk in Python experiments, and I do it in some Javascript I’ve written. People think that you should separate HTML from code because HTML is the domain of designers and code is for programmers. But I think HTML is the realm of data-structure (designers should stick to CSS) and part of the programmers’ remit.

The way a programmer (or at least, this programmer) wants to express complex data structures is with function composition. So here’s an example of my html.py file.


# HTML library
# basic level

def tag(name,x,*argv) :
if x is None :
return u"<"+name+u"/>"
if argv != (None,) :
inside = u''.join(argv)
else :
inside = u''
if isinstance(x,dict) :
# we're passing a dictionary of attributes for the tag
s = u"<%s " % name
s = s + ' '.join(['%s="%s"'%(k,v) for (k,v) in x.iteritems()])
s = s + u">"+inside+u""
return s

# or there are no attributes, just inner
return u"<"+name+u">"+x+inside+u""


# Now we'll actually make some tags
tags = ['html','head','body','script','p','div','table',
'tr','th','td','ul','ol','li','dt','dd','h1','h2',
'h3','h4','h5','h6', 'style','pre']

loc = locals()
def setit(loc,t) :
loc[t] = lambda x=None,*argv : tag(t,x,*argv)

for t in tags :
setit(loc,t)


# Use like this
html(
head(),
body(
h2("Header"),
p('para1'),
p('para2')
)
)


But I did start to wonder, given the prevalence of templating languages and some of my recent experiences as a Django developer, whether this wasn’t just me being wilfully perverse / crazy. I admit I’m kind of relieved to read that Quora are doing something similar. Maybe I wasn’t so mad after all.

Bonus link : Decomposition by language is probably a modularity mistake. (Written back when I was more confident.)

The Smart Disorganized reboot is still in progress ….

Today, a sad story about GeekWeaver.

A couple of weeks ago I needed to revamp Gbloink!’s web presence. Quickly. And, I was in no position to do it in GW. So I fired up a copy of WordPress and made : Gbloink!

I also needed a new OPTIMAES site. And one for Gisel.

You spot the trend? The answer to “how do I knock up a decent-looking site? fast?” is to use WordPress. I’m seriously thinking of doing it for my own homepage too.

Obviously, these are the kinds of scenarios for which I envisaged GeekWeaver. So what’s gone wrong?

Several things :

– I got over-ambitious. The basic GeekWeaver as templating language, worked great. But I wanted to make it into a full sophisticated Lispish sort of a functional programming language. That side-tracked me into several attempted rewrites before I shelved it with other unfinished projects.

– The OPML Editor worked great in Windows XP. But was horrible in Vista. And now I’m using Linux most of the time. I can run it under Wine, but it feels clunky to do so. So I don’t have a decent OPML editor. There are still, surprisingly few outliners in Linux, and still no convenient outline editing widget for the browser.

– Great templates are the real win. An earlier version of GeekWeaver shipped with decent free template I got from somewhere or other. But I’m not a good HTML / CSS designer and I could neither adapt it to my changing requirements nor really design another. I guess the answer is to work with a designer. But as one of the proposals for GW was to make web-design more “programmer-friendly” (by introducing the programmer’s favourite tool, abstraction, to HTML) that’s rather a contradictory point. Chalk one up to web-designers and one against GeekWeaver.[1]

– Moreover, it’s hard to compete against a rich ecosystem like WordPress. Among thousands of templates and plug-ins from dozens of contributors, are some pretty damned good ones.

– Also, while GW had a couple of sprinkles of syntactic sugar to make authoring XHTML / XML in the outliner a rather pleasant experience, the outliner is merely OK for CSS and not really all that good for javascript. (For a real programming language, it’s useful to have the standard syntax checking, bracket counting, line numbering etc.) As web-pages are increasingly made of CSS and javascript over and above the HTML, GW is decreasingly useful. To do GW properly, the editor needs to be both a good code-editor AND a good outliner.

So is GeekWeaver a failure? Am I abandoning it?

Well, it’s not yet a success, I’ll agree. 🙂

I still *believe* that there’s a niche for a GeekWeaver-like language : something with the quick and dirty characteristics of early Perl or PHP; that let’s you get a lot done quickly; and who’s philosophy is “templating” at a granularity above the individual page or file. There’s no reason that, if I had time and another burst of interest, I might not make further progress taking GeekWeaver in that direction.

But I now have a (more than) full-time day-job writing social software in Python[2] which leaves little time (or inclination) for a lot more experiments in python for web-site making. So GW is definitely on hiatus while I pursue other projects.

Nevertheless, I’m always coming back and thinking what I should do with it. You never know when inspiration might strike again.

[1] This raises another sceptical doubt. Allowing you to define abstractions is meant to make things easier. If it doesn’t make “web-design” easier, am I barking up the wrong tree?

[2] In fact, I’m working with Django. Which brings a lot of other concerns and ideas. It was easy to see how GW could compile down to PHP. But would it make sense to try to compile it down to Django?

This is an absolutely brilliant summary of the virtues of PHP.

The important point is that these virtues aren’t going away. By comparison this seems to miss the point. In 2020 we won’t be programming the web with an advanced Python framework (wonderful as python is). We’ll have something which does what PHP did for CGI or Processing does Java, ie. wrap a purpose built, sophisticated back-end (something like Google Application Engine) in a light, domain-specific language. That language won’t look like PHP. It would be nice if it looked like Python, but I suspect Javascript is a more likely model.

But it will retain the virtues of PHP : none of this fussy separation of presentation and logic; easy discoverability of where URLs go; fast iterative development; big built-in library etc.

(Hat-tip, BillSeitz for the links)

OK … everyone who’s wondering why I’ve been so quiet and apparently unproductive lately … very soft (in little more than a whisper) announcement …

GeekWeaver is a mutant cross-breed of outlining, wiki-attitude, templating and some duct-tape that would like to be a programming language …

tell you more soon …