AS#Enumerable

AS#Enumerable is a port of the Ruby Enumerable API for Actionscript 2.0. It provides the following enumerable methods for use in your flash applications:

It's provided as a subclass of the native Array object, but if you want all native Arrays to inherit the enumerable interface (a la Prototype) just add:

Array.prototype = new Enumerable();
to your Flash application. Some basic sample uses of Enumerable:

var enum = [];
enum.push(0.2);
enum.push(0.3);
enum.each(function(item,index) {
  trace(item + ':' + index);
});
(Using each for basic iteration).
var enum = [];
enum.push({value:'foo'});
enum.push({value:'bar'});
enum.push({value:'camp'});		
var item = enum.find(function(item,index) {
  return item.value == 'bar';
});
(Using find to fetch an object from a collection).
var enum = [];
enum.push('foo');
enum.push('bar');
enum.push('camp');	
trace(Math.floor(enum.inject(0,function(strlen,string) {
	return strlen + string.length;
})/enum.size()));
(Using inject and size to fetch the average string length in a collection of strings).

Go ahead and grab the source code, which will find its permanent home at /code, should you want to check back.

See the prototype enumerable API doc for further documentation, as the usage examples are identical in Actionscript 2.0. Thanks to Sam Stephenson of Prototype for the JS port.

→ More articles in Development, Software
Post a comment (0)

#last.fm

[7:02pm] alex: Haskell users are all pretty nuts.
[7:02pm] johan: when the revolution comes they're first up against the wall
[7:02pm] alex: johan: Actually, they won't.
[7:02pm] alex: Haskell does not guarantee execution order.

→ More articles in Development, Software
Post a comment (0)

beck

it's not enough to just instruct a machine to do something that you need also to think about what will people read in what I write here, so it's programming more like a writer would write, than just thinking of a set of instructions for a machine.

- Kent Beck, OOPSLA interview

Kent has been the biggest single influence on my programming.

→ More articles in Development, Software
Post a comment (0)

craftsman

Sennett - The Craftsman

Sennett describes craftsmanship as "an enduring, basic human impulse, the desire to do a job well for its own sake". It's a great topic, which has come to my mind a lot with respect to software design. I have always viewed programming as a craft, amongst other things. There are reviews from The Times & The Guardian. I've ordered my copy. Grab yours.

→ More articles in Development, Identity, Media, Software
Post a comment (1)

zimmer

zimmer

Zimmer is one of our custom-made max/msp instruments which we use in Cacao. Click the image for a full-size version.

→ More articles in Media, Music, Software
Post a comment (0)

hAudio

This is the year in which hAudio ushers in the era of distributed music publishing and playback on the web. As enthusiastic as I am about OpenId, oAuth and DataPortability (the emerging protocols of the distributed social web), it's microformats that are going to be the building blocks of this shift in the short term. Microformats can be seen as "the nanotech of the semantic web" (Jeremy Keith) and the metaphor for usage is one of proteins and surface-binding. My hope is that this year microformats will have a big impact on media publishing. It's more than a hope because I will be dedicating some of my time to help make it happen.

→ More articles in Development, Semantic, Software, Web
Post a comment (0)

visiojunk

- 'Silverlight Architecture' schematic, Microsoft

This illuminating 'architecture' drawing from Microsoft manages to pack six (awful) logos and two pieces of packaging onto one stupid schematic. If you're in Microsoft's marketing department, can you please do us all a favour and take extended leave? Please? And leave Visio alone. It's not for you.

→ More articles in Business, Culture, Design, Development, Software
Post a comment (0)

sustain

Scant time for any kind of thought pieces on here this year. I offer this post as a snapshot of my thoughts on sustainability - a running theme for me of late.

Problem Statement/ Few organisations have managed to create sustainable work environments. Modern industry has largely failed to create sustainable processes.

Thesis/ Corporate models need to be re-invented because people do their best work in sustained group environments. This is true in all co-operative forms of expression (e.g. in most forms of design and engineering). Sustainable industrial processes are key to ecological sustainability and the health of the biosphere.

Myopia/ The 20th Century as a catalogue of short-sightedness. Industry rewards myopia as 'success'.

Percolation/ Sustainability is a timeless design challenge. Its largely unattended problems penetrate all of social life, from the individual through to the corporation and the body politic.

Capital/ Long-term profitability comes from sustainable development. Historically, only 1 in 10 public companies last longer than four decades. [3]

Current/ The notion that market success comes from organisations that hold sustainability as a core principle at all levels, from product design to organisational structure to development processes, is gaining currency.

Child/ The modern corporation, with a history of no more than 150 years or so, is a child in terms of the history of production.

Delight/ Delight as continual learning. No sustainability without some measure of delight.

Diversity/ Diversity as a key ingredient of sustainability. Preservation of diversity in the biosphere as a moral, social, and political goal as well as a commercial one. Preservation of intellectual diversity in a workplace as a purely commercial goal.

Settler/ A sustainable financial, social and intellectual living set-up over a nomadic and erratic one.

Fractal/ Sustainability has a fractal relationship to the Nietzschean notion of 'eternal return' (the ability to live your life as you would wish to live it out an infinite number of times marks the ultimate affirmation of life).

Performance Metric/ Team health. Relative happiness of those expending the effort.

Perspective/ Contrast the modern Perspex industry - dependent on petrochemicals and with a product impossible to recycle without releasing pollutants - to that of Murano Glass - a non-toxic, largely recyclable product that has been produced since 1291.

Growth/ Through the lens of sustainability, Head count in an organisation is not a valid marker for success.

HR/ Modelling people on resources is bad design. People are too complex to be modelled on any contemporary metaphor.

Fossilization/ Vertical power structures fossilize products.

Happiness/ Sustainability as a key ingredient of happiness. We want to be involved in activities that are fundamentally sustainable, because we can then afford to engage in them fully.

Cultivation/ People embrace sustainable forms of product development because everything it implies on a human level - a serious cultivation of teams, retention of people, corporate independence, building products people have a personal investment in - is desirable to the individual. This observation is in sharp contrast to the nomadic form of professional working that has become popular in the western world.

Rhythm/ Keeping motivated as a team over a period of not just months, but years. Preserving momentum.

Consultants/ Companies are unable to cultivate specialized knowledge in all their interest areas since they are not modelled on self-organizing, adaptive organisms. Cue the age of consultants.

Abundance/ What industry calls 'innovation' is creative abundance. How to sustain creative abundance whilst meeting short-term needs (i.e. not going bust).

Democracy/ Democracy itself is a sustainable (political) process. Its principles can therefore be used as building blocks to other sustainable (commercial) processes.

Specialization/ Mechanisms by which specialized knowledge can be spread across organisations without people needing to leave: meet-ups & co-working locations. A consultant eco-system is ultimately problematic for product, departmental & organisational development.

Catalysis/ A horizontal structure hybridized with vertical paths of responsibility elected and erected on-demand. Encourage natural catalysis, intervention.

Co-operation/ Distributed ownership of an organisation feeds accepted responsibility.

Cycle/ Cycles are natural rhythms. Intelligence is a function of feedback bandwidth and quality. Sustainable development as an iterative cycle.

Command/ Companies continue to be based on military-inspired structural models. Tyranny over democracy. Command/divide (and conquer) is still the primary metaphor for conduct. It's an uncompetitive model for a free market.

Atomization of intellect/ An explosion in freelance working has been brought about by the problem statement.

Adaptivity/ How to create a team and process with the capacity to consistently develop not just one great product, but any great product in a given field or even multiple fields.

Self-Organization/ The people that compose a company should be able to shape their organisation's structure, with built-in review processes.

Retention/ Sustainable systems absorb nutrients and release others to nourish wider cycles that are indirectly beneficial to both the system and other co-dependant systems.

Autonomy/ Building a framework of services and tools that allow any new project in an organisation to get off the ground quickly.

Flourish/ Success as an execution of the model abiding by the principles of sustenance. A company as an adaptive organism that doesn't just survive but flourishes.

Accepted Responsibility/ "No single action takes the life out of people more than being told what to do." [4]

Nutrients

[1] Cradle to Cradle: Remaking the Way We Make Things, William McDonough & Michael Braungart, North Point Press

[2] The Ecology of Commerce, Paul Hawken, Collins

[3] Leading By Omission, Ricardo Semler, MIT School of Engineering Talks

[4] Extreme Programming Explained, Second Edition (accepted responsibility), Kent Beck with Cynthia Andres, Addison-Wesley

[5] Scrum Et Al (iterative development), Ken Schwaber (Google Talks)

[6] Small Giants: Companies That Choose to Be Great Instead of Big, Bo Burlingham, Portfolio Hardcover

[7] Birth of the Chaordic Age, Dee W. Hock, Berrett-Koehler Publishers

[8] A Thousand Years of Non-Linear History, Manuel De Landa, Zone Books

[9] Cybernetics: or the Control and Communication in the Animal and the Machine, Norbert Wiener, The MIT Press

→ More articles in Business, Development, Software
Post a comment (0)

automata


CA/6CA/5CA/11CA/4CA/3CA/2CA/1CA/7CA/8CA/9CA/10CA/11CA/12CA/13CA/14

Studies in Cellular Automata

Using a Cellular Automata program I wrote a couple of years back. Click on a thumb for a larger version.

→ More articles in Design, Graphic, Software
Post a comment (0)

homogenous

Three of the following interface elements are from the new look Delicious, and the other three are from Flickr.

delicious redesign

delicious redesign

delicious redesign

delicious redesign

delicious redesign

delicious redesign

→ More articles in Design, Graphic, Software
Post a comment (1)

stop

If you stop coding, you stop learning.
Kent Beck, Smalltalk Best Practice Patterns

→ More articles in Development, Notes, Software
Post a comment (0)

photosynth

Live demo of Photosynth (Microsoft Labs) from Ted.

→ More articles in Design, Development, Semantic, Social, Software, Web
Post a comment (0)

zim is born

Zim - the outliner for Firefox which I've been working on (more here) - now has a home at zimoutliner.com. Free user accounts are now available (store upto 50 lists). Other features I've snuck into the public release:
  • OPML Export
  • Autosave
  • Contextual navigation
  • Bundles

For those of you who use lists to organize your life - whether it be with OmniOutliner, scraps of paper, stickies, text editors, notepads - I suggest trying out Zim. Signing up only takes 10 seconds (note: it only supports Firefox right now).

You can head over to the public changeblog for more information, on-going progress reports on development and your chance to submit feedback and bug reports.

→ More articles in Apps, Design, Development, Software, Web
Post a comment (0)

people-ready

Developers, developers, developers just found a new platform. It's a pretty major breakthrough for social software on the web. Credit to Facebook for their innovative and forward-thinking implementation. Overview here.

→ More articles in Architecture, Development, Social, Software
Post a comment (0)

buckets.

Julian wonders at my desktop-as-bucket methodology. My desktop gets scrubbed periodically, everything on it is temporary and I don't spend any time ordering it or cleaning up. Accessed from the command line, the number of files doesn't really bother me, and on the whole I feel pretty good about this use of the 'desktop'. In contrast, my actual desk is usually clear of objects:

→ More articles in MacOSX, Simple, Software
Post a comment (0)

zim is an outliner.

OK casual blogosphere cruisers, Twitter loiterers and general ADD infected youth: The executive summary here is that Zim is an outliner, and if you're lucky enough to have fired up this blog entry in Firefox, you can try out this working demo.

And for the rest of you (all 3 of you), let's talk why Zim:

Over the past couple of years, the most important personal productivity tool I've used has been OmniOutliner on OS X. The open-ended nature of the tool means I use it for a range of things, from task lists to meeting notes to presentation plans. It works well with my brain, to the point that I rarely actually think about the software, I just find myself using it in all sorts of situations. Most excellent functional design strikes me as 'boring' to talk about (there's not much to say about something that works so naturally), and OmniOutliner is no exception. If I were to describe OmniOutliner I would say it is

Quadratisch. Praktisch. Gut.

Which also happens to be the tagline on these little quadrilaterals of brilliance I eat daily.

The personal productivity tool of choice for Mac users right now is OmniOutliner Pro with a GTD plugin called Kinkless. I find the whole thing fiddly, opting to stay with an ancient version of the original OmniOutliner, which on the face of it contains nothing more glamorous than the ability to add multiple columns and export your lists in a couple of formats.

Over the last couple of weeks i've been playing with the idea of a browser-based Outliner not unlike DECAFBAD's XoXoOutliner. So here's a working demo of Zim (Firefox only), and here's the javascript source. Right now it's all pretty basic, so bear with me. I'm building it for a few reasons:

  • To come up with javascript design patterns that don't suck.
  • Because OmniOutliner is proprietary.
  • Because I live in my browser.
  • Because I use multiple computers daily.

On the short-term todo list for Zim you'll find such nuggets as:

  • Proper undo feature
  • OPML import/export
  • Drag'n'drop node functionality
  • web/email publishing (good for sharing meeting notes)

And longer term daydreams include:

  • Hyperlinks and rich-media support
  • Actual user accounts
  • Multiple columns & column types (e.g. 'date')
  • Multiple projects
  • Overview page with 'next actions'

Zim will never be an application with many features, and you can expect it to come together slowly - it's a 'weekends' project after all - but with a few social touches and some attention to detail, it could grow into my substitute to OmniOutliner in the long run. No public trac/svn for now but I will shout here if it does happen.

→ More articles in Apps, GTD, Simple, Software, Web
Post a comment (1)

last.fm at fowa


Flickr phonecam shot from govan depicting me fumbling with a presentation remote

First of all thanks to everyone who gave their support at the Future Of Web Apps conference in London last week. I had an amazing time and met many awesome people - absorbed lots of energy and enthusiasm and gained some interesting insights. Thanks again to Carson Systems for having us on stage and even letting us drag our last.fm sound-system over to the conference to stream FOWA group radio in the foyer of the Kensington Conference Hall...

Matt & I spoke on the first day, on the topic of 'Lessons from the Building of the World's Largest Social Music Platform'. Corante has written up some notes, and someone even posted a great mindmap of the talk.

2 slides I particularly enjoyed presenting:

  • Demonstrating osmotic communication through our internal wonderbot, irccat. In response to one of the questions on the day, our CTO RJ has open-sourced our implementation of irccat so you can start playing with it. To clarify - we use irc as our internal comms channel, and all aspects of our company absorb information through it.

last.fm at fowa.

  • Attention as filtering tool for user-generated content, in the context of tag cloud moderation. The talented heiress Ms. Hilton was used as an example.

last.fm at fowa.

Other bits and pieces - I referenced this Fred Wilson blog post on the future of media with respect to the monetization of attention data. Also someone in the audience brought up the principles of the AttentionTrust, set up by Ed Batista and Seth Goldstein. If attention data is going to be critical to your web app (and I would argue that it should), then I encourage you to read Seth's entire blog archive on the subject of attention. I know I pretty much have.

My personal highlight was hearing Bradley talk on Flickr interestingness and Yahoo! Pipes (which caused quite a stir in the last.fm office last week). I was particularly bummed out about missing Simon's openID presentation on the second day, as it was ace by all accounts.

A podcast of our presentation will be up soon, but in the meantime download the slides - 'Lessons from the Building of the World's Largest Social Music Platform' (pdf)

→ More articles in London, Social, Software, Web, Web2.0
Post a comment (0)

better late than underslept

Well, it's taken a while, but Google Reader's social features are finally taking shape, though their sharing feature is essentially a 'reblog' feature, simply publishing all the items you want to share on a public page - here's mine. The feature would be better off targeting your gmail contacts and allowing you to share an article with a specific person/group (either via email or via the reader) - after all, 'share' and 'republish' are very different things.

The obvious tagging feature is there, but no powerful tag navigation method is on offer and the search facility is ironically non-existent. So there's still a lot of work to do on the navigation front - the most crucial design problem for a newsreading app. I think the navigation itself needs to have a social dimension (tag-driven content drawn from 'pools' of articles, not just your own explicit subscriptions).

Interesting to note the attention data is now pretty much collected real time, and a lot less crudely than in the first generation of browser based RSS readers - as you browse a particular feed, scrolling through the articles makes the feed 'articles read' count go down article by article, meaning that the reader knows if you really have set eyes on an article or not. Google's concerned with capturing accurate attention data - and it's beamed back at you on the reading habits page; right now an interesting set of trends, but pretty useless until the reader starts recommending articles/feeds based on the data. Kind of like our last.fm profile pages - pre-radio, pre-recommendations. So with a pinch of collaborative filtering and more interface nous, Google Reader is set to be quite a big product. As it is, Gmail still seems to be losing the interface wars against Yahoo! mail (i find Gmail incredibly efficient myself), so it'll be interesting to see how the newsreading attention is distributed amongst the big players. It also depends if they can ever recover from their disastrous first impression (the first version of the Reader was truly a shocker and put lots of people off, myself included).

Whilst i'm not using Google Reader (I use Clippr and NetNewsWire), I've become a regular user of google notebook of late. Very quick to use, and comes with a firefox extension. May have something to do with using 4 computers on a daily basis.

→ More articles in Design, Development, Social, Software, Web
Post a comment (0)

one click audio publishing

Cristian Vogel, of super_collider fame, has just put his entire new record on Last.fm, straight from the mixing desk - unmastered. So go check out the Night of the Brain previews. Great to see established artists utilising the network in a way that shortcuts the traditional publishing process and gets music direct to the listeners. Nice one Cristian.

→ More articles in Networks, Publishing, Social, Software
Post a comment (0)

last.fm chart arcs

last.fm chart arc

One of our talented data miners, Martin, put these chart arcs up on our data playground last week. They show chart positions and movements of artists in our profile, along with popularity information. Turns out i probably have the least 'mainstream' taste of any of the last.fm staff. For further explanation and all the staff chart arcs, visit the last.fm chart arcs page on our playground.

→ More articles in Design, Development, Infosthetics, Music, Software
Post a comment (0)

vote for last.fm

Well we're up for the 'best music community' award at the upcoming BT Digital Music awards - it's people's choice so vote for us!

Reasons why we might be the best candidate in the shortlist:

  • We're not owned by Rupert Murdoch
  • We're not a glorified download store
  • We're passionate about social software in the widest sense
  • We've been commited to our community for years now (we're not hopping on the social network bandwagon)
  • We actually innovate
  • We're nice

Update: We won this! Thanks to anyone who voted through this here post.

→ More articles in Development, Social, Software
Post a comment (1)

scrummery

I've been pushing for the adoption of scrum practices at last.fm of late (with some success!). Julian pointed our team to this Google Tech Talk from Ken Schwaber over at google video. It's a great talk - my personal highlight:

Scrum works with idiots... uniformly they will produce crap every increment... everyone knows where you are all the time...

For startups exiting the frenetic growth phase and trying to settle into an environment of sustainable software development, i can't recommend Scrum highly enough - it's used throughout Amazon, Google and Yahoo!, as well as smaller firms. Scrum comes from Schwaber and Sutherland, two advocates of the original agile manifesto.

I hadn't noticed that Google provide a range of ace tech talk videos, well worth browsing through.

→ More articles in Development, Software
Post a comment (0)

dialog

dialog box rules ok

From songbird.

→ More articles in Design, Development, MacOSX, Software
Post a comment (0)

paris hilton tag cloud.

paris hilton tag cloud.


On last.fm. Why such hate?

→ More articles in Culture, Social, Software, Web
Post a comment (1)

users users users.

users_users_users.gif

'peopleready' is Microsoft's latest marketing campaign. Balmer wanted to call it 'users users users' but the younger heads wouldn't let him. They blushed and left the room. Once at their desks they booted up their Ubuntu/OS X dual boot Powerbooks, the ones with the DELL stickers to block the glow, and got on with some real work.

Isn't it funny how Apple's HCI guidelines have over the years become a landmark piece of technical literature whilst Microsoft's guidelines (pictured above) don't seem to get referenced at all?

Microsoft have some good products, but people-ready (or user-centric) is not a term you can use to describe their software design practices. Feature-centric is a more apt adjective.

To paraphrase Spolsky (once a program manager on the Excel project, one of MS' most notable success stories) - empathy is the hardest thing to teach a programmer. The MSFT/AAPL divide, in terms of software engineering attitudes, is an instantiation of this fact on a massive scale.

Try this for over-engineering - Windows Vista ships in 5 editions, including 'Business', 'Enterprise' and 'Ultimate'. They should add a 'Leviathan' edition to round it off.

→ More articles in Design, Observation, Simple, Software
Post a comment (0)

g$$gle

It's been a strange week for me & the GOOG. First, Rob pointed this out in the new Adwords API T&C:

3. Inspection for Compliance.

1. User-Interface Inspection. You agree that Google may inspect your AdWords API Client user interfaces up to 3 times per calendar year. Any such inspection must be during normal business hours. You must allow Google to visit your place of business, or inspect your AdWords API Client in some other manner agreed between you and Google, within 7 days after notice from Google that Google desires to inspect your AdWords API Client interfaces...

2. Systems Inspection. In addition to Google's rights under Section IV(3)(a), at Google's expense (except as set forth below) Google may appoint (subject to the below) a Third Party inspector (the "Inspector") for a systems inspection, only as set forth in this section, of your AdWords API Use...

Que? For the pleasure of talking to you we get a day trip from an 'inspector'? Whilst i like catching up with GOOG folk to talk falling stock and vint cerf's breakfast habits, i think this is over-stepping the mark a little. Both parties using an API can pretty clearly discern who's playing nice and who isn't without visiting each other's premises and inspecting products.

This came with the news that the Adwords API has a new 'feature'. Usage is not free anymore! The old quota caps system has been replaced with a pay-as-you-go type deal. Coupled with the fact that google doesn't provide test accounts, this could mean that if you're developing an Adwords client for your app you'll be spending every step of the way. Still got to wait on this, but it sounds both more flexible and more costly.

Finally, Google Calendar came along, with great desktop UI touches like cell dragging to define event duration:

GOOG calendar

And google map integration and all sorts of other treats.

And suddenly everything is ok again with me & the GOOG and i forgive them and they can send inspectors to my house to question my family about my API usage and i'll even make them continental breakfast. With fresh croissants. On a Sunday morning.

→ More articles in Development, Services, Software, Web
Post a comment (3)

we fall into patterns quickly.

DesignPatternsAdapter.001.png

Each week the four of us sit down and throw patterns in each others' faces. Last week i threw adaptor. Things got messy - the pdf presentation the only remaining evidence. UML is not evil btw. Big revelation. Growing pains.

→ More articles in Design, Development, Software
Post a comment (0)

newsreader wars.

A Wired article entitled Man VS Machines examines the nature of newsreaders right now (Digg, Newsvine et al get a mention) and loosely categorises them into those that favour (AI) algorithms and those that leverage their user base to create semantic links between data. This is a false dichotomy, since both approaches should complement each other - how? Leave content classification & creation (data architectures) to the user, and the rest to the machines. The challenge lies in hybrid approaches.

From a technical perspective, the challenge equates to 'how to use the user base'.

The conflict the article alludes to is the same one evinced in Last FM Vs Pandora and can also be articulated as the AI VS AAI (Artificial Artificial Intelligence - a phrase coined by Rael from O'Reilly) debate. The supposed battle-ground is social software. I'd like to reinforce that the approaches are not mutually exclusive and that the future of social software rests in hybrid approaches, where human agents can consult non-human agents for search, data analysis (mining, visualization) and forecasting; all of which will require the breed of algorithms that are being thrown down the 'machine' end of the debate. Heavyweight AI (like highly refined NLP) is a waste of time at this stage though. It's an academic black hole.

→ More articles in Observation, Social, Software, Web
Post a comment (5)

Gigr.net

Gigr.net is a community driven gigs portal built on Ruby on Rails. It already talks to audioscrobbler & itunes (to pick up your listening habits) and exports iCal calendars / RSS feeds with shows involving the bands you're currently listening to. It's heading in the right direction by learning to talk early on. What i mean is that this kind of service gains value by playing well with others and that's precisely what Gigr has set out to do. Solid import/export options already.

Anyone can upload information about shows/artists/venues. Username/email is all that's required to sign up for free. Do it. It's just getting off the ground but there's already a ton of shows in there.

Note: If you're a Rails developer then get talking to Ernest about access to the SVN repository. This is just the kind of service that could wind up embedded in something like the last.fm service.

→ More articles in Apps, Networks, Services, Software, Web2.0
Post a comment (0)

changeset pwnage.

Caught this whilst browsing the trac timeline at work and almost fell off my chair laughing.

→ More articles in Development, Software
Post a comment (0)

On Frameworks.

Context beats consistency. Reuse only works well when the particular instances are so similar that you're willing to trade the small differences for the increased productivity. That's often the case for infrastructure, such as Rails, but rarely the case for business logic, such as authentication and modules and components in general.
- David at Loud Thinking.

A framework is a framework, no more no less. Its downfall is the inclusion and creep of business logic - no matter how implicit (e.g. authentication) - into its domain. On the broader question - is re-use overrated? - i am always wary of speculative generality and counter-productive reuse in code. As one commenter to David's article points out,

Programmers have an irrational fear against throwing code away.

→ More articles in Apps, Development, Notes, Software
Post a comment (0)

play/create


The mandatory 'about' screen - What i really wanted to see was a long list of egomaniacal software engineers' names. And a license key number. Listen software, I own you damnit.

Experimental software like quicksilver is exactly why i'm staying on the Mac platform for good. Right now i'm looking at about 87 plug-ins, and sure, functionality and design is completely hit and miss, but when it hits it's like a bolt of energy out of the blue.

It's going beyond a productivity app. It's play, in the philosophical sense,

Derrida's play is a process, a movement elsewhere, a movement outside and into some other sphere, a sphere unknown and unrecognizable to the system that engenders the play. In play, there is also the projection of a problem, a problem that becomes the real subject of analysis, a problem that takes the place of the product or situation that incites play in the first place.

- Ian Bogost

Quicksilver is a prime example of why consistency is overrated in the world of software.

→ More articles in Software, mac, os, quicksilver, x
Post a comment (0)

RSS Readering

Caught up with Corante head, social network expert and organiser of the Symposium on Social Architecture, Stowe Boyd last weekend on Skype to discuss Clippr following his great post detailing a frustration with current RSS readers.

More interest like this might even convince me to deploy and open up clippr to the public in a more scalable manner.

Must. Find. The. Time.

→ More articles in Networks, Social, Software, Web2.0
Post a comment (0)

Offline.

I"m convinced the next big step for web browsers is implementing offline mode.

So what's required? A local caching framework that server-side applications can hook into, allowing you to, for example, read and compose gmails whilst in transit, browse your rss archive in your browser, etc. This will lead to the inevitable. What's the inevitable? The inevitable is the day when home users will swap most of the applications on their desktop for their web browser.

→ More articles in Development, Observation, Software, Web, Web2.0
Post a comment (0)

Last.fm

Doing good stuff on the social software front - Last.fm. I popped by their office last week and liked what i saw (and i don't mean their fusball table, piles of CD's or digestive biscuits). Their set up is quickly becoming a data mining playground. In the form of the Audioscrobbler iTunes plug-in, this lot has wisely set up a data harvesting ethic that could hold big value for the music industry in the near future. It could also deal me tailored gig listings i'll actually use. Now that's something.

→ More articles in Networks, Social, Software
Post a comment (0)

Amator

Paul Graham voices about 80% of everything i think about Business. The other 20% goes on this blog. Check his latest speech.

Splitting work and life is one of the key tenets of professionalism. This, i am convinced, is one of it's main mistakes.

The semantic root of 'work' in French ('travail') is the Latin word for torture. The Latin root of 'amateur' ('amator') means 'lover'.

If you don't love what you do, don't do it.

→ More articles in Culture, Development, Notes, Software
Post a comment (0)

Moving Places

If you're looking for a flatshare in London in the near future make sure to bookmark Move Flat, which really just gets it. Julian, creator of Moveflat.com, understands the process. He's been there.

Here's what he says on his site:

This site is about not making journeys across London to look at something that turns out to be a complete waste of time.

That is what the site is for.

I'm not interested in running a property site where anyone can post anything.

That's because it really isn't very interesting for me to do it.

What's interesting for me is to use the internet to change things.

So I'm interested in ads that are interesting for people that are looking on the site.

That means the ads have to contain useful information for people that are looking for somewhere to live.

That means I am refusing between 20 and 30 ads a day on this site, every day.

... what has become important about all internet sites is trust.

Couldn't have said it better myself.

The only other internet service for Londoners that comes close to Move Flat is CraigsList UK. CraigsList is number 1 in NYC but still relatively unknown in London, so spread the word - it's like an internet Loot that works 10 times better and is run by nice people.

→ More articles in Networks, Social, Software, Web2.0
Post a comment (0)

Flock's Shelf

I'm posting this entry from within the all new hyped up OSCON'ed to hell and back Flock browser. It's got integrated blogging, bookmarking (del.icio.us) and flickr services. But the best innovation in Flock (most of it is just web services) is the 'shelf', a container for dragging and dropping images  and text during browsing. It acts like a halfway house for all these services. It's duh obvious, but good ideas always are.

Flock is built on the mozilla code base. So get XUL'ing kids.

→ More articles in Networks, Social, Software, Web2.0
Post a comment (0)

Language Oriented Programming (DSL's)

I can't stress the importance of Sergei Dmtriev's words enough. What he's saying doesn't sound particularly revolutionary to the average developer, and sure, the idea of DSL's is not so new, but their importance in the near future - one in which programming becomes more and more of an everyday activity for a larger portion of the population, in which project lifecycles shorten and software development activity multiplies - can't be overestimated. I know that since taking a look at Rails i've had the feeling that domain specific languages are critical to my future in software development.

It all boils down to the fact that programming languages strong in meta-programming (can you say Ruby?) are going to gain strength in the kind of phase we're in - one where programming is seeking the human, for productivity's sake.

→ More articles in Apps, Development, Software
Post a comment (0)

Clippr.

clippr screenshot.

OK so google have announced Google Reader, which is an RSS client for your browser. The best way to introduce Clippr is as an RSS reader i built that shows up Google Reader in most departments. It feels good to be ahead of the google this time ;)

I built Clippr as part of my dissertation over at Imperial. It's social software for the web. I use it everyday - it's become one of the most important apps in my browser, which i guess is enough reason to tell you a little more about it.

First off, a one-line description of Clippr:

Social bookmarking meets RSS feeds. A great way to discover, archive, create and share articles online.

OK, now for the details.

Overview

Clippr bears some similarity to the social bookmarking tool Del.icio.us, in that it allows users to tag and archive content from the web. However, where del.icio.us revolves around the concept of the 'bookmark', Clippr's main building block is a 'clipping'. A clipping is either a textual excerpt taken from a webpage or an article from an RSS feed. Both these types of clippings are treated in the same way by Clippr.

Why would a user want to take clippings?

clipping_dropdown.jpg

Clippings are like a fluid bookmarking strategy for the web 2.0. They're a replacement of the bloated 'temp' folder which sits in everyone's browser bookmarks. They acknowledge the kind of transitory interest in numerous topics that the web encourages in users, as well as the fact that users are increasingly browsing by RSS feed. Clippings are a replacement of the bookmark per sé, in that they are represented as RSS articles and not simply as hyperlinks. Put simply,

Clippings tie a user's bookmarking activity to their RSS reading habits and provide a richer definition for archiving web content than a bookmark.

What's the big deal about folksonomy? It's just labels.

Um, yeah, like what's the big deal about computers, they're just big calculators. OK.

Folksonomy is a faceted, emergent classification strategy. It's the natural classification strategy for networked media, in that it addresses directly the fact that,

In an information retrieval system, there are at least two, and possibly many more vocabularies present. [14]

One of the main advantages of Folksonomy is that,

Since the organizers of the information are usually its primary users, folksonomy produces results that reflect more accurately the population’s conceptual model of the information. [35]

For more on folksonomy - and the sources of these references - check my dissertation.

What's implicit social software?

Social Software can perhaps be summed up as software that recognises the most important component of it's system is the user-base. If social software wants to do smart stuff, it does so by aggregating the intelligence of it's user-base, in terms of the data captured by the application during usage.

Implicit social software means getting rid of user profiles and user visibility in general and just letting the app use the aggregated information to work out relations between data. Like this the application functions like a single-user desktop application without all the distractions of social networking, but draws on community intelligence to help the user navigate the data architecture created by the user-base.

Text-analysis is rubbish, it gives me google adsense ads about detergent when i'm reading about the SOAP protocol

True. Clippr acknowledges the user-base as the central component in it's classification strategy. The system performs text analysis on incoming articles from user subscribed feeds, which it uses to extract keywords and top stories from the fresh crop of articles. Then, whenever a user's tag coincides with a keyword extracted by the system, all articles with that keyword are shifted over into the tag-space. This is a crude automated classification strategy which reconciles text analysis and tagging - it works pretty good.

Moreover, Clippr analyses tag intersections to recognise related tags, and presents these to the user as they search for articles. It's more subtle than del.icio.us in this respect, in that it quantifies the similarity between tags, in terms of intersection magnitudes.

So text analysis needs to be combined with context analysis to be effective at picking out similarity between documents, and that's what Clippr does, by letting users provide contextual information and analysing it.

Folksonomy is an uncontrolled mess. Jack says 'web', whilst Jill says 'internet'

True. Wordnet can be used to reduce the tag space by recognising synonyms, hypernyms, hyponyms and compound terms, but it has limited performance with a completely uncontrolled vocabulary. Acronyms and neologisms abound in tagging. A lot of this is still unresolved and impacts the performance of search in folksonomy.

Show me the money

Here's the feature list:

  • OPML import/export of feed subscriptions. Folders are flattened to tags and imported automatically into Clippr.
  • Firefox plug-in and bookmarklet to facilitate clipping stuff from your web browser.
  • Tag clippings, tag feeds, tag like a demon.
  • A community oriented article base formed through user subscriptions, refreshed periodically. Full text RSS/RDF/ATOM formatted feeds are supported.
  • Text analysis (article clustering) on incoming articles, in order to extract Top Stories and article keywords.
  • Context analysis (tag clustering) used to recognise related tags.
  • Change your tags whenever you want. Clippr handles merging/splitting of tag-spaces.
  • Power editing using batch actions thanks to a gmail style dynamic dropdown.
  • Tagging combined with keyword extraction to produce automated classification of articles. Text analysis and folksonomy reconciled.
  • A search engine supporting a query syntax for folksonomy - search by tag (intersection/union), feed, keyword or any combination of these. Implemented as Live Search for desktop style responsiveness (it behaves like Apple Mail search - wipe the search field and return to where you were)
  • RIS export for using web references in bibliographies
  • RSS export of your Clippings archive.
  • Mail an article to a friend or recommend it to a fellow Clippr user.

Ok, let's try it out

You can't. It's not public right now because it needs a dedicated server to run and i can't afford to run and maintain one. If you want to help me setting one up, please get in touch with me.

More information

Here's a quick presentation and here is my dissertation in full. Source code (ruby/javascript) to come.

→ More articles in Apps, Development, Social, Software, Web, Web2.0
Post a comment (5)

On language design.

Kernighan & Ritchie's original C manual was under 300 pages long.

PHP declares over 3,000 built-in functions.

Take a guess at which is more powerful.

Ergo:

array_uintersect_assoc -- Computes the intersection of arrays with additional index check, compares data by a callback function
array_uintersect_uassoc -- Computes the intersection of arrays with additional index check, compares data and indexes by a callback functions
array_uintersect -- Computes the intersection of arrays, compares data by a callback function

Design by commitee is tough.

Being a large open source project is tough.

A programmer's main activity is design. His tools should reflect that.

The distinction between native 'types' and objects makes for an amorphous pool of native functions:

There is inconsistency in the naming, arguments and return types. Most of these criticisms are documented by wikipedia.

Most don't think twice about these issues until they start with C and Ruby; both masterclasses in good language design.

Matz designed Ruby. He says,

One way is by looking at what can be done with that language. The other is by looking at how we feel using that language—how we feel while programming.

Dennis designed C. He says,

C is not a big language, and it is not served well by a big book.

Rasmus invented PHP.

He is coming to our local pub for a drink this week.

→ More articles in Design, Development, Observation, Software
Post a comment (0)

Busy

Wow. I had plans to post a lot of things on here, but for now, general busyness has overloaded all these into bullet points in an OPML file somewhere. Speaking of which, OmniOutliner is the most critical productivity application ever made, by virtue of it's complete open-endedness and masterful key binding intuition. It's a work of art.

So what's changed round here? My dissertation on social software and the World Live Web is done & dusted (more in subsequent posts), my love affair with Ruby has blossomed (more - so much more - in later posts), i'm now working as an application developer in PHP5 and my ears are filled with podcasts (Open Source & PHP related), courtesy of itunes 5, making my commute to work almost bearable.

Elsewhere the gang of four, kernighan, knuth and hofstadter are illuminating the corners of my days.

→ More articles in Development, PHP, Social, Software
Post a comment (0)

Clippr

Social software. A scrapbook for archiving, sharing & organising clippings from the web. Find out more here.

→ More articles in Projects, Software
Post a comment (0)

Yummy MT

I coded this quick del.icio.us plug-in for Movable Type publishing software. More information here.

→ More articles in Development, Projects, Software
Post a comment (0)

Flickr and the mass ID Suicide

Flickr is not a service, it's a social network. When people join a network, they seek community. Up until its Yahoo! acquisition, the services that Flickr offered for photo management also happened to be top quality; utilizing the latest technologies, offering a generous API, good cross-browser compatibility and a continuous enhancement of features through Beta. Just as importantly, the environment was cosy, with Flickr staff both good humoured and responsive to user feedback and groups of users forming genuine visual links between their lives. The small group of people who built Flickr obviously loved what they were doing. The broad but niche community of users obviously loved what they were communally accomplishing.

What happens when this gets assimilated into a service for a larger company like Yahoo!? Well, you get softly spoken demands to open a Yahoo! account in order to benefit from continued (paid for) Flickr services, followed by a lot of user paranoia, some clarifications, a Flick Off anti-Yahoo! user group and a lingering (perfectly valid) question,

I don't use any Yahoo! services. Why should i sign up to their network?

This is the question coming up again and again. It shows the psychological influence a popular network like Flickr has on its members. The attitude towards Yahoo! can be summed up as,

I don't belong there. I belong on Flickr. The two are miles apart.

In a tight network such as Flickr, membership to the network has real meaning to it's participants. It is a place with ethical co-ordinates and aesthetic values. It is virtual and yet it is not - Flickr had to pack bags from Canada and move to Silicon Valley. All acquisitions are symbolic, as well as physical/business transitions.

The Flickr team say the Yahoo! acquisition will allow them to integrate a lot of services including payment, but i must admit i'm all for successful startups resisting the temptation of acquisition, seeing a product through version 1.0 and pulling in resources independently. I'm also all for social networks not hankering after boundless growth - it can impede the social quality of the network for a lot of users.

Assimilation is certainly not the only option, since well crafted API's and strategic partnerships can deal with integrated services without a loss of corporate identity (if there's one thing Flickr had and is slowly losing, it's a strong identity around which a meaningful community can evolve). I'm suggesting resisting the lure of scaling up and putting the focus on increased features, finely graded account types and integrated services as a means of avoiding acquisition.

Perhaps the results of the David VS Goliath 'tag-fight' sum up the user-base's stance on the acquisition better than anything else.

More on Wired.

→ More articles in Networks, Social, Software
Post a comment (0)

PHP5

PHP5 is going to be the focus of much of my time in the coming year, this much seems certain. Ruby on Rails will take years to reach PHP's level of ubiquity with web hosts, who still seem in the process of upgrading to this new version of the language.

PHP5 features a complete rewrite of the object model. It's OOP support is so broad it seems more pertinent to point out what common OO features it doesn't implement, as opposed to which it does:

  • No C++ style templates
  • No metaclasses
  • No namespaces
  • No operator overloading

Other than this PHP5 seems to have the works. Plus a lot of MySQL/XML features i haven't gotten around to yet.

Adam Trachtenberg is the man to spill about PHP5, here's an overview of the language's new features, and here's his blog, which should be a mandatory RSS feed for any PHP developer. I also had a chat with Ed Lecky-Thompson last week, who's contributed to the Professional PHP5 title. Looks solid too, though i haven't read it yet.

Hopefully this'll all help move PHP developers away from the procedural and into strict OOP for the bigger projects, where frameworks can be built, design patterns effected, and many hours browsing tangled procedural code & rough testing methods avoided. That said, it's important to retain the rapid development capabilities that procedural PHP encourages - this sets it apart from languages like Java, after all.

And if there's one thing PHP does not want to be, it's Java.

→ More articles in Development, PHP, Software
Post a comment (0)

Online Accounting

So, online accounting software is going to start pouring out. So far, financial application powerhouse Intuit have Quick Books Online which doesn't work on a browser running outside of Windows. This oversight astonishes me - Web Apps are by their very nature cross-platform, all that's required is a sensitive approach to javascript and CSS and a slightly longer Test cycle. A lot of small businesses are using Mac. Among the other contenders we have Bill My Clients which integrates with Paypal and Blinksale which wins the GUI war but has a restricted feature set (it's an invoicing tool above all else). They all come in at about $12/month. All these services wind up being cheaper for Brits than our American counterparts. Needless to say they all support Pounds Sterling.

Surveying this software i get the distinct impression i'm beating around the bush. What we need is a comprehensive collaborative spreadsheeting package for the web. Winner takes all.

→ More articles in Software, Web, Web2.0
Post a comment (0)

Be Heard: How to fax your MEP's online

Yesterday afternoon i wrote to all my local MEP's (about 10) using the most excellent Write To Them (UK) site, which stefan over at whitelabel helped to put up a while back. It makes it easy to fax/email all your local representatives. On Mac OS X you can also fax any pdf out to whichever number you please (check 'Print' in any application).

What was i faxing all these people? My views on the European Software Directive which is up for the vote at the European Parliament this week. Tomorrow (Tuesday 5th July) to be precise. I had to cram it between a load of work so i only had to time to write this, but hopefully it will be read by my local reps, because i'm a member of their constituency (it's pretty pointless faxing/email any rep outside your constituency - you will largely be ignored):

anil bawa the trot, woodcote road epsom surrey KT18 7QS Phone: [MY PHONE NUMBER] Email: anil@quotesque.net

Monday 04 July 2005

Dear [MEP'S NAME],

I am writing to express my concern regarding the Software Patents
Directive, as approved by the European Council of Ministers, which is
up for a vote either on Tuesday 5th July, or the following day.
I believe the directive could have severe consequences for those
working in my field of software development.

It will particularly threaten the growth and existence of startups and
smaller software companies, which would otherwise see a very fruitful
period over the next ten years.

I am a young, self-employed software developer and British Citizen. I
have ambitions and goals whose very existence are threatened by this
directive, for needless and economically unsound reasons. I believe the
Directive could crush what may turn out to be a wave of entrepeneurial
activity in the field of European software.

I would urge you to consider the position of the foundation for a free
information infrastructure ( http://ffii.org/ ) on this issue, and take
a quick look at the history of Software licensing, where
straight-forward copyright has worked thoroughly well so far.

In particular, I am writing to voice my support, as a professional in
this field, to the proposed Buzek-Roccard-Duff amendments to the bill.
These are summarized at

http://wiki.ffii.org/AmPlenSummary05En

And can be seen in full on the European Parliament page

http://www2.europarl.eu.int/sce/server/internet/amend_motions_texts/
sce_amend_motions_texts_main_02.jsp?ref=A6-0207/2005

Thanks for your time.

Anil Bawa


→ More articles in Culture, Social, Software
Post a comment (4)

Yummy : A Del.icio.us plug-in for Movable Type

Sure, several of these plug-ins already exist. Mine has the following advantages:

  • You don't need to know any code to get it working.
  • It uses the RSS feeds, as opposed to the potentially volatile Delicious API.
  • It caches feeds locally so you don't suck Delicious' bandwidth.
  • You can easily filter by tag and username.
  • I wrote it

OK, so i did it as a small exercise in Perl, but if you use Movable Type it's a great
way to keep all your links upto date and in order, since the numerous Delicious browser plug-ins make it so easy to store bookmarks as you browse. The links on the left-hand right-hand side of the index page here at quotesque.net are all tagged 'sidebar', for example.

Download

If you find the plug-in useful or even like it, then a simple 'thank you'
is always appreciated. If you use the code then include a reference to me.

Requirements

This plug-in is tested on Movable Type 3.16/3.17.

Should work in 3.0, 3.01D but haven't checked.

You need the XML::RSS::Parser perl module. It's available to download
free.

Installation

To install, place the Yummy.pl file in your Movable Type 'plugins'
directory. If you do not have a Movable Type plugins directory, create one,
then put the Yummy.pl file in it. Refer to the Movable Type documentation
for more information regarding plugins. So make sure Yummy is here:

MT_DIR/plugins/Yummy.pl

The functionality in MT-Yummy requires the use of the LWP::UserAgent,
HTTP::Request and XML::Parser modules, so you'll need to make sure they are
installed on your web host. These are very common modules.

Yummy additionally requires the XML::RSS::Parser module. This is less common.
Get it from the URL above (cf. Requirements). Unarchive it and place the 'RSS'
directory within into

MT_DIR/extlib/XML/

The first part of the package name (in this case, XML), indicates the directory.
If the 'XML' directory doesn't exist in your 'extlib' directory, then create it
before uploading the "RSS" directory.

Last but not least, you need to make a new directory called 'yummy' in your MT root directory:

MT_DIR/yummy/

And you need to set the permissions on the directory to 0777. Your ftp software
should give you a way of setting permissions. 0777 means anyone can read/write/execute in that directory.

Using Yummy in Movable Type Templates

Three usage examples. From basic to advanced:

Basic:


<MTDeliciousLinks username="Hasselhoff">
<a href="<$MTDeliciousLinkURL$>"><$MTDeliciousLinkTitle$></a>
<br />
</MTDeliciousLinks>

Including this code in your MT template will display a list of links from
Delicious user "Hasselhoff", with one link on each line. Because "lastn" has
not been specified, it will by default retrieve only the last 20 links posted.

Pretty Basic:


<MTDeliciousLinks username="Hasselhoff/groovy" lastn="15">
<a href="<$MTDeliciousLinkURL$>"><$MTDeliciousLinkTitle$></a>
<br />
</MTDeliciousLinks>

This looks like the last example, except it retrieves links which user
"Hasselhoff" has tagged with the keyword "groovy". Like this you can display
categorised link lists. It also specifies how many links - the last 15
posted by date.

The Good Stuff:


<ul>
<MTDeliciousLinks username="MyUsername/kraut">
<li><a href="<$MTDeliciousLinkURL$>"><$MTDeliciousLinkTitle$></a> 
posted by <$MTDeliciousLinkAuthor$> on <$MTDeliciousLinkDate$></li>
</MTDeliciousLinks>
</ul>

Ok this one has the works. It prints a bulleted list of links tagged "kraut"
by user "MyUsername", including the person who posted the link and the
date it was posted on.

Hopefully these illustrate how you can use Yummy to manage your link
lists, blogrolls etc on your Movable Type site. Coupled with the numerous
Del.icio.us tools, this is a very convenient way to keep your categorised links fresh.

See the readme in the downloader for more info.

→ More articles in Development, Perl, Software
Post a comment (3)

barclays powermode

An application I built to monitor building infrastructure for this bank. A distributed system of sensors sending real-time input to a flash front-end. Working through Tela Ltd. in the docklands.

→ More articles in Projects, Software
Post a comment (0)

SND

Back when Actionscript 2.0 was new, I built this compact mp3 playing component for licensing on various existing sites. In Flash. Here's an example.

→ More articles in Projects, Software
Post a comment (0)

Kontent

A group blogging project in the form of a web services mashup built on Movable Type. Includes shared events calendar, flickr photo galleries and delicious links. Dealt with digital culture in London, UK. Ran from 2001-2005.

→ More articles in Projects, Services, Software
Post a comment (0)

Project Coco

A BT ventures project. I managed the development of a product concept & prototype for this fully immersive chat environment aimed at pre-teens.

→ More articles in Projects, Software
Post a comment (0)

Redux Desktop

For a period of two years, I made up one half of Redux Desktop, a london based web design/development firm. Working with Sheikh was great (he taught me everything i know about Trade Gothic Bold Condensed No. 20) and we saw a bunch of interesting projects through to completion.

→ More articles in Projects, Software
Post a comment (0)