Monday, February 27, 2012

Three.js

Bloody hell! Three.js is cool. And CSG.

What can't you do in the browser these days?

Friday, February 24, 2012

Rails Off The Rails

Seems like the same thing has happened with Ruby on Rails as happened with, say, Zope.

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

Here's something neat.

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

SqueekNOS is a project to create an operating-systemless Smalltalk. Ie. one where the Smalltalk machine replaces most of the operating system (apart from a small kernel I guess).

The nice thing about this : everything is inspectable / hackable. All the way down.

Thursday, January 26, 2012

CoffeeScript

Just a note. I am really, really liking CoffeeScript now.

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

Very interesting video about how to program with Go language.

Saturday, January 07, 2012

Tuesday, January 03, 2012

WaveFlavours

So, slight Christmas / New Year's diversion from my main projects - I've been writing a wave-table synth in the last few days. Code (C++ using Maximilian) is here.

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.




Tuesday, December 13, 2011

UI Stencils

Clever idea. Stencils for UI designers.

Guess you can make your own with a laser-cutter.

Monday, December 05, 2011

Defending Lean Startups

Got into a long comment on Nick Pelling's blog. He's sceptical about Eric Ries. I'm fairly neutral, but here's my response to Nick.

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

Possibly one of the more hilariously idiotic things I ever saw online. Impress your friends with fake coding skills. WTF?????

Sunday, November 13, 2011

Mind Traffic Control Bug

A recent change in Mind Traffic Control introduced a bug preventing those who weren't already logged in from logging in. This is now fixed.


Wednesday, November 02, 2011

CoffeeScript and Raphael.js

I've been working on a project based on some of my recent artistic works. I thought I'd do it using a Processing sketch embedded in a web-page. It's not that I was particularly happy with Java applets (in 2011!) but I figured I'd make use of the Processing code I already had.

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.

Friday, October 21, 2011

Linux Commands For The Web

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