Thursday, July 22, 2010

ThinkLinkr, another pretty slick web-based outliner.
Finally, Oli resurfaces with a blog about Semantic Programming, SemProLa and issues of programming the semantic graph.

Added to my blogroll of course ... and I'll be following here.

Watch that space!

Tuesday, July 13, 2010

LULZ : Did Google just re-invent Visual Basic?

Now, if they'd also made it do Yahoo Pipes-like stuff, *that* would have rocked.

Saturday, July 03, 2010

Mark Bernstein :

It's easy to add generality to a spec. It makes you look really smart, especially when someone else is going to do the coding. But too much generality too soon makes the code age prematurely; you can get old, brittle, confusing code that looks like it's yellowed with age, even though it's not even finished yet.

Wednesday, June 30, 2010

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?

Thursday, June 17, 2010

Monday, April 19, 2010

I think TidyLines is the best browser-based outliner I've seen. At least in terms of how it feels at the keyboard.

Tuesday, March 09, 2010

I certainly like the look of CoffeeScript.

Not quite sure what it's for yet. Is it just a nicer looking syntactic sugar on top of javascript? Or are there some powerful abstractions that simplify doing larger scale js work? (a la jQuery?)

Tuesday, February 23, 2010

XHP actually looks pretty cool. On the surface, it's just a cleaned up PHP. But the cleaning up (putting XML into the language) actually gives it some of the character I was hoping for in GeekWeaver.

Thursday, December 10, 2009

Giles Bowkett has a profound and entertaining blog-post, starting with some thought-provoking criticism of Joel Spolsky and Paul Graham; and then moving on to other questions of business models for blogging programmers.

Wednesday, December 09, 2009

Saturday, December 05, 2009

Another thing that I saw recently that looks pretty interesting : Fossil, a kind of source-control system with built in web-server and trac-like wiki and bug-tracking, all in a single executable file.

I've no time to play with this at the moment, but it looks very cute.
Wow! Dan Bricklin has still got it.

This is a really nice twist on the mobile notepad / todo list app. The UI looks brilliantly well thought through.

Thursday, December 03, 2009

Saturday, November 14, 2009

More of Joel Spolsky's smart understanding of "social software" as both social and software. Now StackOverflow evolves to become a smart online CV for recruiters.

Wednesday, September 23, 2009

Saturday, September 19, 2009

Funny advert just popped up on a Google search :


Work in IT within weeks
Become a Microsoft Engineer Earn £35K+ No Experience Necessary
WARNING - this blog is going dark ...

Friday, September 18, 2009

To return to a theme I started many years ago, I commented on this excellent article about why web-site development has got so damned hard. (And remember when we all thought of web-apps as lighter and simpler than desktop apps? What happened?)

Anyway, here's my comment.

I think the problem is less the multiplicity of programming languages, than our insistence that we should always be separating our languages in different places.

This goes against the basic tenets of cohesion and coupling. We cluster unrelated activities together because they happen to have the same syntactic sugar, while separating tightly-coupled activities because half of them happen on the client and the other on the server. Why the hell should this implementation detail have to be reflected in our architecture?

What I'd like, controversially, is to be able to mix-and-match the languages within the same source file, grouping together the python, javascript, html and sql that actually has to work together in one place. I have no trouble dropping into regular expressions or similar DSLs from inside my main code, why should dropping into a layout or query language be different?

Monday, September 14, 2009

WARNING ... SmartDisorganized reboot coming ....

Saturday, September 12, 2009

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)

Saturday, August 22, 2009

Sunday, August 09, 2009

A quick thought ... working with a lot of Django and Pinax at the moment, I'm seeing a lot of use of Python's varargs. Functions that just take *argv, **kwargs

I find I don't like this. I want to see argument lists as explicit as possible. I feel uncomfortable and a bit lost. I feel unprotected when the compiler can't even check the number of arguments I'm sending.

So I wonder if this is legitimate. Or isn't it analogous to the case of static typing? Varargs give more flexibility than fixed arguments. Much as dynamic typing is more flexible than static. So why shouldn't I prefer the power and flexibility over restriction and security in this case?

Update : Of course, this is the way that GeekWeaver works, where there's no explicit definition of the list of arguments passed to a reusable block. I've been unhappy with that there too. Thinking that I should add positional explicit named arguement lists. But if this kwargs thing is a trend, then GW should probably be left as it is.

Sunday, July 05, 2009

Nowdothis is awesome!

(hat-tip @adrianh)

Of course, if it becomes massively successful and famous I'll be ... kind of ... you know ...

But I really do wish it well.

Sunday, June 28, 2009

Saturday, June 27, 2009

My day-job means that I now have a github account.

And I have to say, I am very impressed by it.

I decided on bzr last year as my distributed source-control system, mainly because it felt so similar to svn and it was written in python. In comparison, git is still bloody confusing. But bzr seems to be losing momentum (hg is the pythonic candidate in the race) and git-hub with its YASN-oriented social approach to source-hosting feels way ahead of other repo-hosting services like Launchpad and Google Code or running my own Trac-SVN solution.

So, I'm quite likely to switch my projects over to github in the near future.

PS : Oh, and if felt really cool to just fork my own repo of Folknology's Reactored. Encourages me to start playing with it.

Saturday, April 25, 2009

Tuesday, March 31, 2009

These guys just spammed me, so I'm not sure why I'm giving them publicity.

But All Dropping Domains is kind of interesting.

Tuesday, March 17, 2009

Zed is so on the money here :


Then I went to another event at SparkSpace, which is a fairly nice coworking place in midtown. I walked in the door and some guy (one of the hosts I guess) asked what I do. I said, “Well, I’m a programmer but I…” Then he cut me off and said, “Oh! Everyone’s always looking for techies. I’m sure you can find some great ideas here to work on.”

Yes, because I don’t have any of my own ideas. No, you see I’m a fucking nerd because I code. Never mind that I’ve traveled the world, survived horrible events, built myself up from nothing learning to fight, love, pray, and survive despite numerous obstacles that would make this little maggot piss his fucking pants.

I fucking code so I’m not a man anymore.

You see people, the alpha males have business degrees. They can be fat and pasty, pretty boy douchebags, or even ugly serial killers, but if they have an MBA from a 6 month “executive program” then they’re ALPHA. They have the ideas. They have the balls. They’re full of testosterone. Now me, I learned to actually do something with my brain besides take people’s money, which means I’m not a real man. My ideas don’t mean anything and I’m just supposed to let the adults talk. I’m BETA, and only some shit fuck rich boy (or wannabe rich boy) with his fucking pop-up collar and cheap suit can truly lead.

Thursday, March 12, 2009

Strange case of paper and pencil "beating" computers.

Personally I love my paper and pen. And I love my computer. When we finally get a computer interface as cheap, portable and flexible as my paper-notebook, then I'll be happy.

Thursday, February 26, 2009

Yes. Atlas is also pretty damned cool.

I'm not, personally, quite so excited by this as I am by Bespin. But it's nice. Particularly how you program the sizers by clicking on which edges are glued and which not. And the connection of the panels in the screen to controllers on a special bar is good.
It just occurred to me ...

Bespin's back-end server. Google Application Engine. Enso.

Python really is what the cool kids are doing these days, isn't it?

Python + javascript, of course.

Wednesday, February 25, 2009

Bespin



This is it!!!! Editing moves to the browser.

The future has arrived.

...

Update : LOLZ ... the hierarchical code-browser is a steal from Smalltalk. (Of course!)

Monday, February 02, 2009

Worth reading "Where's your data?"

Remember, your Mind Traffic Control data is easily exportable. Just go to : http://mindtrafficcontrol.appspot.com/exports (Via the "Export Data" menu item) and choose whether you want your data exported in CSV format (which you can import into Excel or EditGrid etc.) or OPML (which can be read in the OPML Editor or (less conveniently) in any XML editor).

Tuesday, January 27, 2009

Bruce Eckel on Grass Farming

Update : (Hat-tip Folknology) Michael Pollan talk at TED

Update 2 : I wonder, actually, if "grass farming" could be the new "pattern languages"?

What I mean is, patterns gave us a new way of thinking about the architecture of large software systems, and in particular thinking about their dynamics.

It seems that if we take the idea of grass-farming seriously, we're really talking about understanding the symbiotic relationships between species (and lets translate that to software-systems / agents) and finding ways to tune the interactions between them for improved performance (or resilience if that's what we prefer).

It's a bold but simple metaphor which I think inspires a lot of productive thinking. Perhaps not as rich as Alexander's work, but still a powerful idea to muse on. And I can imagine people starting to document the various symbiotic interdependencies using patterns.

Friday, January 16, 2009

Dave Winer back on Instant Outlining.

Would certainly be interesting if there was some movement on this. And some development of the OPML outliner in this direction.
Ian Bicking on Python and Woonerf. A new pattern?

Tuesday, January 13, 2009

This is possibly the best StackOverflow thread ever (on the quirks of Python closures)

Wednesday, December 24, 2008

Tuesday, December 09, 2008

Titanium is the free-software version of Adobe Flex / AIR?

Sunday, November 30, 2008

ExtJS has a TreeGrid
A couple of great videos via Zbigniew

Avi Bryant's powerful spreadsheet editor that remembers changes that you make by hand and can apply them in bulk to the rest of the lines in your spreadsheet. Note that Avi's a Smalltalk guy, and a more primitive version of this (repeat last replace) has been in the Smalltalk environment for decades. Cool to see that Smalltalk ideas are still proving revolutionary 30 years later :-) (And cool of Avi to keep discovering them and taking them further)

Another way of doing something similar : Mass Edit which puts simultaneous editing cursors under the user's command. Very clever. That's from a video by David Huynh who seems to be involved in a lot of other neat research, like this mashup tool.

Thursday, November 27, 2008

A Platform Wars post on spreadsheets.
Not making as much progress on SdiDesk.NET as I thought I would. How can Visual Studio 2008 be soooo S-L-O-W? I swear it takes between 30 seconds and minute both to start and stop(!!!) my program executing.

At least with punched cards you knew where you were.

Tuesday, November 25, 2008

Jocelyn Paine is one of the more interesting thinkers about evolving spreadsheets. Here's some recent stuff about components in Google Sheet.
StackOverflow discusses how to keep notes about programming projects : paper notebooks win hands-down.

Monday, November 24, 2008

Bill Seitz :

One Product Management rule Of The Day, that I try to impose, against resistance from most people, is Tasks that aren't crucial don't become more important with age. (Of course, if you have a paying client, "crucial" may be filtered via the Golden Rule.) Every task that takes more than 30min (even less?) should be evaluated against "is this the most important thing to do now?" (FoCus). Go ahead and stick that item on a To Do List. But it's ok if it sits there forever.
A blog written on Google App. Engine.

Thursday, November 20, 2008

More playing with online spreadsheets.

Here's a cute example. This is an EditGrid spreadsheet that pulls book data from Amazon (including price in dollars), currency data from Yahoo, and then calculates the price in pounds of the books. It's a "calculator" meaning that I've set up only one field to be editable (the search term for the book, in the white cell) and you can change this in your local copy, without it changing my original.

Looks like spreadsheets really are evolving to be the online user-programmable dashboards which people can use to create and publish their own mashups and other software. Very exciting.

Tuesday, November 18, 2008

So I created a CollabFinder profile.

Now, what would be really smart would be a way to import my StackOverflow rating into it.
It's definitely SdiDesk week this week. Watch the repository.

Wednesday, November 12, 2008

PythonCard, the Hypercard / VB-like python development environment maybe being forked and revivified.
Interesting new Subtext programming language presentation. (Schematic Graphs)
Quick answer to the guy who used yesterday's Form Experiment to ask what's happening with SdiDesk ...

Here's the status report :

1) In the last couple of weeks I quit my job and moved back to the UK ... which has been taking up quite a lot of my time and energy.

2) Once we've settled in, I hope I can get some time to focus on my projects ... including SdiDesk (and GeekWeaver, MTC etc.) The good thing, no more distractions from my previous demanding day-job. The bad thing, after a brief holiday I need to find work in the UK. (Offers, tips and suggestions are, of course, welcome)

3) SdiDesk was converted to VB.NET this year. And the source-code in progress is available on Google Code.

4) I am NOT a VB.NET programmer, and frankly, from the little I've played with it so far, I'm not very excited about getting more involved. I admired VB exactly because the combined language + IDE made Windows programming mindlessly easy. Throw away that virtue (as VB.NET seems to have done, and I'm blaming the new, incredibly sluggish and cluttered VS2008 as much as changes to the language) and it has little to recommend it against other languages.

5) On the hand, I'm a pragmatist and often able to find something interesting pretty much anywhere. I also know that in a recession I may not be able to be too fussy when it comes to getting a job. So I will be spending a bit more time over the next month or so tidying up the VB.NET codebase, fixing some egregious issues, and making an installer. It's going to be useful to me to be able to say that I can operate in the VB.NET world, and produce working products.

6) Longer term, my preference and commitment is still to a Python SdiDesk-like thing. And most-likely a Python server with UI in the browser (javascript etc.) I've cooled towards the idea of Flex (mainly because my trial copy expired and I remembered all the problems of depending on proprietory software)

The attraction of anything other than the browser has always been the vector drawing in the network diagramming part of the software. But I'm sure that if I just wait a little bit longer, the browser will eventually be able to handle this too.

7) As always, I'm not unaffected by user feedback and other things going on in my life :-) ... if there's suddenly a surge in interest or demand for a VB.NET SdiDesk then I may reconsider.

8) Joe Question asks : "how risky is it to commit myself to SdiDesk.NET then? What about all my pages?" Answer : SdiDesk.NET reads your existing PageStore files. There may be some issues with the size of the diagrams, but everything works. If it doesn't, tell me.

However, you can't even try SdiDesk.NET currently unless you're a VB programmer because it's only available in source form. There will certainly be a build for end-users this year and it will read your existing PageStore. The main reason you want this is if you're an existing SdiDesk user who has moved (or will move soon) to Vista where the old VB6 version won't run.

I'm always committed to upgrade compatibility. You'll be able to move your existing SdiDesk pages to SdiDesk.NET, and you'll be able to import them into a future Python version.

Friday, October 24, 2008

Good overview of PBWiki's corporate wiki business.
Age distribution of StackOverflow users (hat tip mfeathers)

I mentioned that I think StackOverflow is totally amazingly wonderful, right? :-)

Tuesday, October 21, 2008

Interesting. Reia's Tony Arcieri debunks Erlang's "single assignment" propaganda.

I guess someone could argue that once you have multiple assignment you're going to be more tempted to write a longer chain of actions as a sequence of statements rather than composing it out of multiple functions ... and this may be a bad thing.

But I've ranted often enough against languages which think its their job to constrain programmers that it better not be me who makes that argument.

Update : I'd like to see Frederik's question about closures (in the comments of that blog-post) answered though.

Update 2: Ulf Wiger points out that it got answered by Robert Virding later in the comments.
Follow on from yesterday's "Python / Haskell crossbreed" post. Both Al "Folknology" and Gleber point me at the Reia programming language. A Python / Ruby like scripting language on top of the Erlang Open Telecom Platform (Erlang's parallel virtual machine).

Very sweet ... I've subscribed to the mailing list to find out more.

Monday, October 20, 2008

Prediction I made :

I predict that in five years time, the hot language will either be a version of Python which has adopted ideas (Pattern matching arguments, Monads, immutability etc.) from Haskell; or a Haskell-like language which has borrowed some syntactic sugar from Python.


Don't know if I entirely believe that, but it's a good conversational gambit. And there's a certain logic to it if you look at the languages visually.

I'm personally, more into investigating Erlang at the moment, mainly because it seems more practical. The fast, parallel virtual machines are here and ready to go. But I could see myself looking back at Haskell too if it seemed to be gaining momentum.

I guess I also like the Erlang story on concurrency through message passing rather than transaction memories. And perhaps the whole typing thing is overdone in Haskell, although I can certainly see that it buys you more in that context than in, say, an OO language.

But I'd really love to see someone come up with mashup of the best bits of Python, Erlang and Haskell. It would *look* more or less like Python, although would find some-way to do multi-line lambdas etc. Like Haskell and Erlang it would have pattern matching arguments, functions defined over several definition statements, and immutable state. Like Erlang there'd be processes and messages as standard. Like Haskell, monads. Classes might be more like Haskell.

How might a language like this look?


class Tree(val,left,right)
def size(None) : 0
def size(Tree(_,left,right)) :
1 + size(left) + size(right)


Note that what's in brackets after the word Tree is neither a super-class (as in Python) nor a list of types as in Haskell nor a definitive list of field names. It's something more like information that a Tree is a tuple of three elements. And that by default they're called val, left and right.

These default names for the elements of the tuple can be over-ridden in functions which deconstruct a Tree using patterns. For example, the size function doesn't care about the initial val element and so leaves it blank.

I just thought of trying to make size a method of the class Tree. The syntax might then look something like this :


class Tree(val,left,right) :
def size(Tree(_,left,right)) :
1 + left.size() + right.size()


Where, obviously, the object itself is still (as in Python) explicitly passed as the first argument to the method, but instead of being called "self" we pick it up with the pattern of another Tree constructor and so it gets broken into _,left and right.

But where do we put the None / empty tree clause? My first thought was something like this :


class Tree(val,left,right) :
def size(None) : 0
def size(Tree(val,left,right)) :
1 + left.size() + right.size()


But that's not quite going to work. If this really were a more statically typed language like Haskell, and we knew that left and right were always Trees, this would be OK. But as we're trying to go for Pythonic duck-typing we have a problem. We would still like left.size() to mean, "pass the method selector size() to the object left" and then let the class of left decide how to handle it. But where left is None we have no idea which class to use to call. We could have a multitude of classes which define size(None); which would we pick?

Note that this is not the pattern-matching's fault. We'd have the same problem here :


class Tree(val,left,right) :
def size(self) :
if self is None : 0
else :
1 + self.left.size() + self.right.size()




We could get around the problem by disallowing methods which take a single None argument, effectively forcing the programmer to write something like this :


class Tree(val,left,right) :
def size(Tree(_,None,None)) : 0
def size(Tree(_,None,right)) : 1+right.size()
def size(Tree(_,left,None)) : 1+left.size()
def size(Tree(val,left,right)) :
1 + left.size() + right.size()


But this starts looking somewhat clunky.

We might make it a bit less awkward by providing conditional evaluation to the left and right subtrees. Based on Python's current conditional expression syntax that would look something like this :


class Tree(val,left,right) :
def size(Tree(_,left,right)) :
1 + (left.size() if left else 0) +
(right.size() if right else 0)


Or maybe we have to accept a static type system closer to Haskell's. Perhaps the types, in this case, contribute to Haskell's terseness.
Alternatives to Google Application Engine
Hey. I wonder what YML is.

Sunday, October 12, 2008

DesktopZen :-)
I'm expounding my usual "late-bound" tabs model of IDEs again, over on StackOverflow.

... late binding between the buffer in the editor and actual concrete thing you're working on, gives the editing environment more flexibility and power.

Think this is out of date? One place where the idea is back with a vengeance is in the browser, where you don't have 1-1 correspondence between tabs and web-pages. Instead, inside each tab you can navigate forwards and backwards between multiple pages. No-one would try to make an MDI type interface to the web, where each page had it's own inner window. It would be impossibly fiddly to use. It just wouldn't scale.

Personally, I think IDEs are getting way too complicated these days, and the static binding between documents and buffers is one reason for this. I expect at some point there'll be a breakthrough as they move to the browser-like tabbed-buffer model where :

a) you'll be able to hyperlink between multiple files within the same buffer/tab (and there'll be a back-button etc.)

b) the generic buffers will be able to hold any type of data : source-code, command-line, dynamically generated graphic output, project outline etc.

Saturday, October 11, 2008

Thursday, October 02, 2008

George Monbiot has a good piece on pursuing the work you want.


So my final piece of advice is this: when faced with the choice between engaging with reality or engaging with what Erich Fromm calls the "necrophiliac" world of wealth and power, choose life, whatever the apparent costs may be.