2005/05/27

Belgium / followup

A friend once told me: "The most complex object is the user". This is true.

I just told this same friend, who shares my frustration with Belgian paperwork, and a somewhat militant attitude:

If you want to invade Belgium, you have to fill out form "Inv-10-A", and attach annexes confirming compliance with international law, acknowledgement of the ICC, prove that the soldiers (and their translators) are fairly divided between French and Flemmish speakers, and agree to start the process of an economic impact assesment report (and have it reviewed approved by an invasion steering committee), after which (assuming the report is approved) you must obtain permits for the use of heavy and armored vehicles in built-up areas, permission to break the speed of sound over populated areas, conduct background checks and psychological assesments on your soldiers in order that they may obtain weapons permits, and notify the police so they can help ensure that falling rockets don't hit civilians. Then your invasion can commence, but only for 38 hours a week, and no fighting may be done on bank holidays or weekends.
I'm sure I've missed some steps. Probably all the steps involving lawyers and accountants. Oh well...

It's TRUE!

Business processes:

Having seen a couple of approaches to codifying BP's I've formed the following opinions:

a) Less code is better. Business processes evolve. Software delivered in waterfall doesn't. In XP, adding features etc. sucks when your data model is shifting under your feet. (see also: why BP's should be expressed in (e.g.) a scripting language, not in compiled files.)

b) More freedom is better. People will ask "why can't I do X" where X is "attach an Excel file to the approved version of a final report, if the accountant signed the books in the last weekly meeting" - and coding that in Java or even a scripting language is stupid.

c) Less structure is better. Structure should be emergent, then inferred, not imposed. Evolved structure is seamless. Imposed structure is rigid and inflexible.

d) The more users, the better. Network effects increase an organizations net investment into a solution, and therefore (hopefully) increase its net benefit.

2005/05/15

Art

I saw an interesting sculpture in this gallery by a guy called Russel West. It was as follows:

Thousands and thousands of keys had been fixed pointing outwards on a wireframe in the shape of a long cylinder. The appearance was as of a dense coat of metal scales on a serpent, which was accentuated by the shape of the cylinder, curving like the shape a snake makes with it crawls along. However, the curves were quite regular, like a sine wave, and as I recall, the ends were un-tapered, so the idea of a snake may just be me.

Nevertheless, the idea of a snake of keys, a key snake, has half a dozen different interpretations. That one is making me think a bit.

Quality/trust metrics in multi-user websites.

You have Karma, mojo, XP, etc. Wikipedia is an organic meritocracy. When it comes down to it, there are only two metrics on the web that make sense.

- Time. Time devoted to the site, online presence, GTKY, etc.
- Money. Subscriptions etc.

Money is difficult. People who subscribe to get special features creates separation. Ads get blocked, and reduce coherence. I think the solution is found in what the subscription represents. It says "I value the site such that I give $xx a month to make sure it stays around". In exchange for that, the site should value them right back, acknowledging the compliment and returning it somehow, for example listening to their feature requests, feedback etc. The subscription shares some features with owning shares in the site, just in reverse. The dividend the user gets from the site is what made him subscribe.

2005/05/09

Aaaargh: please, no:

So, this GoogleWatching article on Fortune is pretty good, right up until it says this:
Certainly the search game is still in its infancy. Only a fraction of the content available online is actually searchable. For instance, even subscribers can't search current and archived issues of the Wall Street Journal or most other publications with a search engine; you have to go to the publication's site. This suggests that the search engine that can get the world to list premium content on its platform will have a leg up on the competition. Microsoft has plenty of money to buy the rights to such content; it also owns powerful digital-rights-management software, which helps copyright holders control who uses their products and how often. Those should be advantages in negotiations with companies worried about losing control of copyrighted text, music, and video on the Net.
That is so wrong. (a) Google Desktop already searches your cache, whereupon all the web-based content to which you subscribe (and have surfed) may be found.

B) Most importantly, take one look at the hoops that MS, Sony and Apple have had to contort themselves into to make the content cartel happy. For what? Strategic positioning, and in Apple's case, first mover advantage.

But the idea that yet another successful hi-tech company should kow-tow to content owners to maintain a competitive edge is completely wrong. Google has and maintains it's edge through bona-fide innovation. As Cory says, when's the last time you saw an innovative DVD player?

I'm incoherent right now, but this is not funny.

2005/05/01

Thoughts on AOP

Not that I've used it or anything.

I've read up in the C2 wiki and looked at various examples. I believe I understand the theory relatively well, and beneath all the new terminology AOP appears to do two things:

1. Adds a transparent event model for access/modification of methods, variables & objects. I believe that Ruby can do this without the after-the-fact style of bytecode modification, and AOP applies this to 5GL's (or whatever you want to call Java, C# etc.)

2. As per the promotional material, provides a new way of separating cross-cutting concerns. Of course, multiple inheritance could do this :-) As has LISP and it's progeny. I imagine the relevant newsgroups are overflowing with scorn at the world of Java for having re-invented yet another feature LISP has had since the Epoch and before.

Anyway, my point is, that AOP is clearly accomplishing two different things here. (Maybe these concerns should be separated :-) The first is obviously valuable, and something that pure Java misses. The second is also valuable, but as per Koppen and Stoertzer, is ideally accomplished without resorting to meta-programming and code weaving, which are cool techniques, but render affected functions unfaithful to the source code from which they were compiled, which is never cool.

Right now, AOP is an add-on to Java, but I'd like it to become more fully integrated with the language before using it heavily. PCDiff is very cool and the 2nd plugin I'd install (after ajdt) if/when I start doing AOP.

2005/04/23

Mp3Blogs + rss = your own Internet radio

Following up from this post which makes things far too complicated, I realised it would be simplicity itself to create a website that allowed users to create their own m3u playlists from the combined RSS feeds of MP3 blogs they choose, that could then be updated every 4 hours or so. People can listen to these M3Us just like people listen to Internet radio.

M3U is the simplest playlist format ever, so this would be really, really easy.

2005/04/21

The whole offshoring thing:

Yes, it empowers giant megacorporations to fire hundreds of drones.

But how many people understand this: If you have a normal job, and no extra special commitments such as a family or a house, then you, yes YOU, can also hire programmers in far off countries.

What does this mean?

It means, that by virtue of being born in a rich Western country, you could manage a team as a hobby, in your spare time.

The same kind of gap between the West and Rest that makes corporations offshore whole departments also lets you compete with said corporations in your spare time.

Interesting, hmm?

2005/04/11

Everything old is new again?

I read C4L's blog, and one of the things he's good at is skewering hype. In the process, he's pointed out some interesting similarities between new and old technology:
  1. REST and POX
  2. AJAX and DHTML
  3. SOA and Web Services
  4. PubSub and Push Content
  5. Tagging and META-tags
In each case, something has definitely changed, to make cool that which was uncool and new that which was old. What is it?
  1. REST is arguably a well-thought-out subset of POX that doesn't suck. POX + design patterns + exploiting HTTP's natual shape. What changed? Google showed us what was possible, and proved it could be done in the wild, outside of intranets.

  2. AJAX is arguably a set of design patterns that use DHTML but don't suck. It came about after new school web design gained mindshare. Only after the browser technology in Gecko and Opera caught up with the standards and showed us what was possible, and only after people started validating, stressing on semantic XHTML, and using CSS to the full, did people truly begin to accept and explore the power of JavaScript.

  3. Web Services is a small collection of good standards (SOAP 1.1, WSDL, UDDI) floating in a sea of untried, unimplemented, vendor-specifc and overly verbose (even for XML) 'standards' (SOAP 1.2, WS-[*]).

    SOA is WSs minus the suck: it's a philosophy that brings order to the chaos, built around the idea of presenting a unified model of your data upon which processes can be built & designed.

    WSs don't suck, but has suck potential, and SOA recognises that there's more to the special sauce than protocols or standards, and adding new ones doesn't help.

  4. Push was crap. An unmitigated disaster, foisted upon unsuspecting analysts by dotcom droolers and entertainment hype-droids trying to turn the 'Net into a big, dumb television.

    PubSub, in contrast, multicasts and pointcasts data that people actually want in realtime, such as RSS feeds, as opposed to that which would rightly expressed in a collection of banner ads, where geeks can safely ignore them.

  5. The difference between tagging and meta tags is transparency and control. Meta-tags are not transparent to the end user, but hidden away in the source. Meta tags are HTML-centric and intrinsically per-page, whereas normal tags can be per object, no matter the layout.

    The control issues where Technorati may have slipped upa little. Tags are nice bceause they're per-site, and each site has absolute control over their architecture. This is why I believe Flickr and del.icio.us work so well. With Technorati, they surrender this control to external users. We'll see how this works out.
I don't know why, but I have far more vitriol for old-skool Push than for any of the other dead ideas.

2005/04/09

In. Cred. I. Ble

World Winds is a masterpiece.

The amazingness of this wonderful piece of software cannot be overstated. Direct zooming into 3D elevations of mountain ranges. MODIS event overlays. WMS integration. This is mindboggling. In Snow Crash, thought this type of thing would be available only to rich people able to pay. We have if for free. Mindblowing.

2005/04/03

Building APIs & object models for the rest of the web

OK, so XSD defines data structures, and the data structures <-> object debate is an old tarpit I'm avoiding for as long as possible. Neither is it news that schema-compliant structures can be produced by applying XSLT to XML.

However, why not produce Objects by applying ECMAScripts to HTML pages? One function defines a class and scrapes a document to extract the instance data from a web-page, a little like GreaseMonkey. Document hyperlinks become typeless references. Document forms define operations.

The rationale is behind this is that a lot of websites (e.g. Wikipedia) are broadly similar in markup structure to the extent that screen-scraping them is really, really easy (ignoring the API that obviates the need for that in this case and others).

The use case is anything that needs objects provided by 'web services' - definitions from dictionary.com, search results from Google, bla bla bla. In time such a system could theoretically provide models and API's to large portions of the web.

Of course, it's much easier in a scripting language that supports dynamic type construction. Also, someone else has definitely thought of this before.

Applying RBAC & DTE in OOP environments

Brainwave #1: SE Linux has a very cool permissions model that treats all objects within the OS as nodes in a directed state graph.

To briefly summarize, permissions are granted and/or denied based on who(user,process) is trying to access what(inode,socket) and from where.

The model is so cool that MS had themselves a gigantic hissy fit and wailed on the NSA (among others) for equiping the Linux community with a security model that beat its own commercial offering hands down, for free.

What's interesting, however, is that it should be possible to extract the model and super-impose it on the Java object model, or that of any other OOP language for that matter.

Of course, code injection is generally less of a worry in managed environments than in binary ones, so the idea may not be all that valuable until (or if ever) we start evaluating untrusted logic on the server. (Highly unlikely, due to the halting problem, but still.)

2005/03/08

The EC continues to amaze and disappoint me.

Ever since the EC tried to pass the patents directive onto voting at the Parliament as an A-item at a Council of Agriculture and Fisheries, for some reason I assumed that they'd sunk about as low as they could go.

Not so. In the face of overwhelming opposition from the democratically elected Parliament to this corporate-brought directive, what does the CoM do? They ignore them. And try again. As we've thanked the Polish, Dutch and Germans, among others, we now have the Danes to be grateful to for telling their Commission representative to, you know, represent them. And even then the Commission ignores them. Unbelievable.

Software patents delenda est.

2005/02/26

Fosdem '05: GCC 4 + Java

At the pre-party drink I met up with Matthias Saou, who maintains freshrpms.net and is fairly knowledgeable about the current state of the Linux kernel and GCC. He told me that GCC 4 will soon be able to compile Java direct to native code, and not just as a kludge, but in a real, competent implementation.

This is absolutely fantastic if true, 'cos it means that I can directly compile my Tomcat to run on my VM. Right now I have like 6/128MB memory free 'cos the JVM allocs so agressively. This is very, very cool, especially if you consider that automatically deploying native compiles to GNU/Linux from an Ant script is no more complex or involving than doing the same to class files.