Monday, February 27, 2012
Three.js
Saturday, February 25, 2012
Bret Victor's Code / Drawing IDE
Friday, February 24, 2012
Rails Off The Rails
Giles does a pretty good analysis. The key point is that as frameworks mature they start supporting legacy users and applications who, in turn, have different requirements and values from those looking for a quick way to build new applications.
Permutations with Python Generators
I wanted to experiment creating different permutations of a collection of items. (In fact I'm working on some code for laying out shapes on a surface.)
Prototyping in Python to get my ideas straight I came up with this neat generator solution.
Wednesday, February 08, 2012
SpimeScript
These days, I'm thinking a lot about 3D printers, desktop manufacturing and software to create physical things.
Last year I did some art pieces using software to generate drawings for laser cutters and 3D printers, and I'm continuing along the same line. I want to move this stuff into the browser, and the combination of CoffeeScript and Raphael.js is turning out to be pretty good for this. (Did I mention I really, really like CoffeeScript?)
I also dabbled a bit with Prolog, wondering whether it can be used as a high-level description language for machines or other complex objects. The really interesting question is if you can use the built-in inference engine of Prolog to help with the design. (Aside, here's a silicon layout engine in Prolog) I haven't got very far with that yet, but I'm now considering how Prolog can be combined with or made to output OpenScad (or PyScad) code.
A couple of days ago Simon Wardley posted on his blog that he was searching for a SpimeScript :
So, I want to return to ... the formation of Spime Script. We're entering a phase where hardware will become increasingly as malleable as software which leads to a problem of choice - if I want to change the function of something, do I do this in software or hardware? The tendency today is obviously towards software because its more malleable but the future is never the past. However this creates a problem of skill - will I need to become proficient in both software and CAD / electronic design?
In reality both CAD and whatever software language you use, compile down to instruction sets and the function of the device is the interaction of these instruction sets - one which is substantiated physically and the other which is substantiated digitally.
Turning this on its head then why not write the function of what you want, the function of the device? Compilers can therefore undertake the complex decision trees (which is what they're good at) required to determine what element of that function is encoded as physical and what element is digital.
A future language is needed, something whereby the output is both physical and digital and I describe merely the function of what I'm after.
That's a really exciting vision.
Now, here's what I think is really important for a SpimeScript.
It should learn from HTML / CSS.
While HTML / CSS is a pain in many ways, there's a very interesting insight in it about design. That design comes in layers. It's partly about the separation of logical structure and visual style. It's partly about the cumulative effect of the Cascade in Cascading Style Sheets. It's partly about the fact that the browser has reasonable defaults for the geometric properties of logical structure. (Today, those defaults look rather out-of-date but there would be little to stop a browser manufacturer making their defaults look more like Readability or Twitter Bootstrap.)
So here's the main feature request for a SpimeScript. It should be possible to define the logical structure of, say, a machine and have some layout-engine give it plausible default geometric properties. But it should also be possible for designers to layer optional design hints on top of that layout in the form of extra constraints and have the engine deal with fitting them together.
As with the silicon design case, there must be some prior art here, but I'm not quite sure where it is. Electronic Design Automation maybe.
Sunday, January 29, 2012
SqueekNOS
The nice thing about this : everything is inspectable / hackable. All the way down.
Thursday, January 26, 2012
CoffeeScript
It's reminding me both of freedom that Python gave me when I first turned to it after Java. And bit of my experience with Erlang. ( If only it had Erlang's Actor model and pattern matching arguments ... )
The other good effect of this, CoffeeScript is making me more comfortable with investing my time writing serious logic on the browser-side. Which is where it should be, given the requirements of modern applications and that the browser is becoming the default GUI.
Programming in Go
Saturday, January 07, 2012
Horizontal Applications And Popular Data Structures
Tuesday, January 03, 2012
WaveFlavours
The main thing I'm doing is to have two wave-tables for a voice, and then slowly swap sample points between them to get a long-term evolution of the sound. I want to get a rich and ever changing timbre cheaply ie. without having to use filters or expensive FFT.
Wednesday, December 14, 2011
Chicago Boss
Tuesday, December 13, 2011
Monday, December 05, 2011
Defending Lean Startups
Surely all practical knowledge is anecdotal and, therefore, an unwarranted step from the particular to the universal. All advice in this “genre” (Tom Peters, Charles Handy, Seth Godin etc. etc. etc. ) comes with an implicit health warning. And anyone with any experience of the world will apply salt as a matter of course.
Should we hold that against Ries in particular?
So his models come from the software industry. OK. But someone else’s advice will come from banking, or food retail or oil or the military. Each with some parallels to your business but each with its own idiosyncrasies as well.
One thing you can say in favour of Ries’s bias is that more and more things are getting automated and so more and more of our world “is made of software”. Software processes are replacing other kinds of process that were embodied in administrative or managerial practices or hardwired into physical machines. In this world, improvements in software are often more effective than improvements in other areas.
You’re a coder yourself. You probably know your Mythical Man Month etc. You know perfectly well that software doesn’t benefit from heavy bureaucratic management. But that exciting and effective software usually does come from small, enthusiastic, “agile” teams.
So, if software is becoming an increasingly important factor in business. And software thrives under agile conditions, it would follow that business in general will probably benefit from agile.
Disclosure : I’m a software guy myself, so I’m totally down with the land-grab programme.
Monday, November 28, 2011
HackerType
Friday, November 18, 2011
Sunday, November 13, 2011
Mind Traffic Control Bug
Wednesday, November 02, 2011
CoffeeScript and Raphael.js
After a whole lot of faffing around trying to get the applet talking to my server, I'm realising that this is really NOT going to fly for a whole bunch of reasons. I wasn't really seeing Java as my long-term future anyway, but I've realised that it isn't even going to be the quick, dirty but workable prototype that I'd hoped. So, if I have to make a break, I might as well do it now and quickly. And look to the future rather than the past. So I've made a decision to rewrite with CoffeeScript and Raphael.js. (I'm generating SVG designs anyway, so Raphael is ideal.)
After a spending a couple of hours today, that's feeling like good decision. There's still the hassle of having to convert a lot of code, and it's a bit of a fiddle going backwards and forwards between the editor, the command-line compiler and the browser. But CoffeeScript feels like a good language. Obviously meaningful whitespace indentation is comfortable for a Pythonista like me, and I'm getting used to the Rubyisms without too much pain.
Not much in the way of debugging information, which hasn't bitten me yet, but might. Still, I'm positive.
Tuesday, October 25, 2011
RIP John McCarthy
Friday, October 21, 2011
Linux Commands For The Web
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
Friday, October 14, 2011
The Future of Arduino and Android
Verpa's Gmail lib
Thursday, October 13, 2011
RIP Dennis Ritchie
Monday, October 10, 2011
BEACHhtml on GitHub
So here it is.
Google's Dart
Looks awfully like Java with a smattering of CoffeeScript. I like the empty compact constructor and the one-liner functions. But I'm not sure what those colon ones are doing.
Presumably some jQuery-like action with the document.query().
Looks a little bit messy, but then Javascript has got kind of messy. Shame they didn't try to go for the CoffeeScript cleanness.
In a sense, it may be rather similar to writing Processing if they produced a decent IDE.
On the whole, I think I can live with it.
Some interesting evaluation at Lambda the Ultimate.
Friday, September 30, 2011
How GitHub Scales Its Culture
Monday, September 26, 2011
Shhhh ...
I re-installed the Google App. Engine dev, environment on my machine. I popped open the Mind Traffic Control codebase and looked into it. I was a bit overwhelmed at the clunkiness of some of the code (I've become a more concise Python programmer since then) but I realised I could still make sense of it.
I tweaked a couple of minor appearance bugs and refreshed the server.
It worked!
It's been a long time since I actually had a working MTC development environment.
I wonder what this means ...
Sunday, September 25, 2011
Google's "Future of Javascript"
Obviously I think this is the most wrong-headed thing I've heard in a while, and a worrying sign of idiocy within Google.
I'm not particularly concerned about the future of Javascript which I'm sure will be around long after Google's alternative is abandoned.
Tuesday, September 20, 2011
Trello
Thursday, August 11, 2011
Wednesday, July 13, 2011
Tuesday, July 12, 2011
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"</"+name+u">"
return s
# or there are no attributes, just inner
return u"<"+name+u">"+x+inside+u"</"+name+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.)
Wednesday, June 29, 2011
Thursday, June 02, 2011
Wednesday, May 18, 2011
Sunday, May 15, 2011
Friday, May 13, 2011
Monday, April 18, 2011
What I take away from these stories is that pushing out ugly prototypes of your products will not prevent you from building a world-class engineering organization in the future.
Monday, April 11, 2011
Sunday, April 10, 2011
Friday, April 08, 2011
?- X.
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
Thursday, April 07, 2011
I seem to have finally achieved some kind of fluency instead of fumbling around without knowing how to drive the thing. It probably helps that Erlang has accustomed me to the syntax and other conventions.
Monday, March 07, 2011
Trying to think of something fun to do with node.js now.
Also, what with getting into Urbi, "events" are clearly the trend of 2011 for me.
Sunday, March 06, 2011
Wednesday, March 02, 2011
Watch the tutorial video.
Absolutely packed with interesting control structures to handle the implicit parallelism and event-driven nature of the language. Several important ideas : free subsumption architecture (you actually run many different programs in parallel, each dealing with certain motors and sensors, but interacting with each other only through the body of the robot; "blending" modes which let different programs send multiple instructions to the same motor at the same time; "tags" which let you interact with (start, pause, stop) running processes by name.
Monday, February 14, 2011
Interesting to see the state of the art here. It's an improvement on XML ... but still, not as far forward as you'd hope.
Sunday, January 30, 2011
Friday, December 10, 2010
Monday, December 06, 2010
Friday, December 03, 2010
Monday, November 08, 2010
Wednesday, October 13, 2010
Food for thought.
(Of course ... people could just be excitedly writing iPhone apps.)
Saturday, October 02, 2010
Tuesday, September 14, 2010
A server error occurred. Please contact the administrator.
First time I've seen it is tonight, but if anyone else is seeing it and it persists, then please tell me in the comments.
Update : OK, seemed to have fixed itself pretty quickly.
Update 2 : Not that I seem to have a lot of regular users of MTC.
Tuesday, August 31, 2010
Monday, August 30, 2010
Saturday, August 28, 2010
Wednesday, August 04, 2010
Thursday, July 22, 2010
Added to my blogroll of course ... and I'll be following here.
Watch that space!
Tuesday, July 13, 2010
Now, if they'd also made it do Yahoo Pipes-like stuff, *that* would have rocked.
Saturday, July 03, 2010
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
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
Tuesday, March 09, 2010
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
Friday, January 22, 2010
Thursday, December 10, 2009
Wednesday, December 09, 2009
Saturday, December 05, 2009
I've no time to play with this at the moment, but it looks very cute.
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
Monday, October 19, 2009
Friday, October 02, 2009
Wednesday, September 23, 2009
Saturday, September 19, 2009
Friday, September 18, 2009
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?
Saturday, September 12, 2009
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
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.
Wednesday, July 29, 2009
Martin Fowler on Illustrative Programming
Dion Almaer on coding in more than 2-D.
Sunday, July 05, 2009
(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
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.