31 July 2009


Hehe, had to giggle a bit when reading this (in my never-ending quest for semantic mapping of software systems architecture) ;

"The Open Group is a vendor- and technology-neutral consortium, whose vision of Boundaryless Information Flow™ will enable access to integrated information within and between enterprises based on open standards and global interoperability." (My emphasis)

To embrace "open" you would think that getting to the info would be, you know, just open, but no. There are free chapters available for you to see, just to make sure, you know, there's an engine under the hood, all you need to do is to jump through a few hoops, register, and ... ugh. So I bit this bullet, registered and I got the introductory guide to the TOGAF framework, but it reads as any other fluffy "use our framework, and all shall be well in the world" vendor selling you miracle cures out there. Disappointing, really. I could get the full thing if I apply for a 90-day personal license, but I don't think I'll bother as I react badly to fluff, and I definitly get an allergic reaction to having to register, revealing personal info and such, just to get to read their fluffy bits. What gives?

I think these people have completely misunderstood what "open" means, which is a shame considering that the content might be useful. But I say only might, as I would have no idea. Phft, open, my ass.

29 July 2009

Missing ontological serinity in the world of software systems architecture

Updates: See bottom, but also this question on StackOverflow.

Ok, so let me say from the get go that I'm a little bit upset. Well, maybe angry and bewildered more than upset, but nevertheless not happy. And it all has to do with the dingbat way we architecture our various computer systems. So, yeah, quite generic and not really something we can do much about.

Let's rehash. I'm a SOA junkie, an EDA pimp, and I hate by default the bullshit in any Enterpise camp that promotes their way of doing must be right. And by SOA, I don't mean no ESB bullshit, I mean a hard-core focus on services for architectural means. I build ontologically driven systems, and care deeply about semantics where most others don't give a monkey's bottom.

Lately I've had to rehash my knowledge on plugin architectures (both implementation specific and theoretical), how to modularise complex pieces of software, and implement an event-driven platform on which to run my systems. So I've been snooping around, and there's a ton of models and architectures to be found. But being found is not the same as finding what you're after, especially as I have a few criteria to my search; I want to find something that's generic, simple (but not simplistic), elegant (as in, does not suck) and extendable, an architecture that's event-driven, modular and open. Nothing. I've found nothing. Of course they all claim to be amazingly fantastic and super and great, but looking under the hood, if allowed, reveals yet another staticly created shared library stack with some hooks for your software to use, using some misnomer like SOA or EDA or any of the hundreds of other Enterprise bullshit terms out there.

So, I set my goals lower in the hopes of finding anything of value, even went and asked real programmers what I thought was a simple question, making it specific enough to hopefully muster some replies. Nothing. It seems everybody's got their own way to handle their own little piece of the universe, that people cling to their silos of comfort or something, afraid of what might happen if we all agreed on something. Even when you dig into large architectures, like my own Linux Kernel which I'm using to write this post, there's tons of layers and shared libraries that's hubbled together in a way that does the job, ok, but doesn't make it, in my eyes, an easy job to do, elegant to extend or easy to change.

I guess I should clarify. I'm knee-deep in ontology work for software systems architecture, a field that's almost chemically free of any active community, has a few scattered experiements that went no where (and I'm tempted to put ADL in that category, too), a few papers here and there that talks about it in very generic terms (either as abstracts to academic stroke sessions, or a white paper claiming to be the second coming of Jeebus!), but as to hard-core practitioners like me who want to inject a Topic Map with events of given types that matches certain ontological expressions and Topic Map fragments of certain types of architectual patterns, tough! You're on your own, kid.

So, what am I after?

Well, many things, but I'll try to be a bit clear here. I've cut down on my wants, to, in order to try to find others out there doing similar things. So. I'd like to see a simple event-driven software stack that scales ontologically, and isn't bound to any technology, company or otherwise religious platform. This means that the stack with its names and values work just as well for a small plugin as it does for a larger system like an extra-OS or a cloud, works for potato-peelers as well as online booking agents, database connection pools and kernel space memory managers, but also can grow and shrink with need, in such a way that all other parts of it when they need to can find out what those changes are. This digs into creating an upper ontology for information science, of course, but more importantly it means I'd like to plug software into various parts of a stack, so that everything - and I mean everything! - is an event listener. I know some micro-kernels work in similar ways but highly statically bound, but regardless these ideas are way past the cradle stage by now and need to have a greater exploration in the real-world.

So when I download an open-source package of sorts and try to find out what its stack of operation looks like, why is this information so hard to find? Or compare the Java event model and the .Net model. Or OSes. It seems it's very hard to agree on these things, but I doubt the state of things isn't because they've tried and failed, but because they haven't tried. It's a big world and this is a big field, yet this has not been tried in any meaningful way.

Sure, the technologies promoted through OASIS, ECMA and W3C in themselves have various solutions and tries to bind stuff together in a coherent way as not to confuse us too much, but even within their own stacks of proposals and standards there are huge gaps, great leaps of faith, and generally no clear direction. Even W3C who pushes the semantic web movement hasn't got anything to say on the matter. It's starting to drive me bonkers.

Ok, I'm done. My steam has gone out, but I'm not feeling any better. Off to do my own thing, like the rest of them. :)

Update: Ok, it seems I'm not getting my message across. Let me create a simple (and wrong) example ;
  • SOA : Start
  • SOA : Configure
  • SOA : Map
  • ENV : Start
  • ENV : Configure
  • ENV : Map
  • APP : Start
  • APP : Configure
  • APP : Init
  • APP : Connect
  • APP : Perform
  • APP : Teardown
  • ENV : Teardown
  • SOA : Teardown
Here we got an application session events where SOA is, er, SOA, ENV the "environment" (whatever that should mean), APP is an application, and so forth. This list should be HUGE! Think of all the interesting events one could generate from you turn the computer on until someone gets Rickrolled on the other side of the planet! I want to map environments, systems and eco-systems, with labels. In some regards it's an enumerated list of points that any computer system traverses on its path from being loaded into memory until it leaves it. And possibly then some.

I want to map the software system world! I want to know what people call their various points on the software stack, what they call their events, how they see them work together, how they forsee workflow interactions, how they define system integrity, thoughts on implementation, named entities, the works.

I can find heaps of this stuff, but none of it is globally agreed upon, it's all tucked away in projects or companies, it's their own version of how things should be and what happens. Even big players such as Sun / Java and Microsoft / .Net have very different event models and ontologies, and they are not compatible in any meaningful way. I would expect some parts of CORBA had done work in this area, but what I've seen is very transaction oriented where clients already know the ontology and uses CORBA to travel through rather than be defined by.

As an example of the closest I've found so far in the realm of mapping machine-parts ("machine" here is "software systems") is the Open architecture computing environment which tries to define up the most important parts of software systems (although the final version was released in 2004 ... these things can be considered to be final? Where's the clouds?), but lacks the ontological and semantic definition, has no event or message structures or standards, nor does it have any notational value or end-points which, admittedly, I could spend the next couple of weeks doing, but let's see what else is out there.

Making any sense?

Update: To be even more specific, trawling through IPC is really what I have been doing for the last few days, but getting to the core ontology of all of this is soooo painful. Surely someone out there have done something like this? I've even gone through POSIX trying to gleam what nuggets I could find, but the system level of that beast is just so low it's not funny. Promising is the DBus architecture and event stack, but this again is very low-level, covers only a fraction of the software systems, and is littered with duplication of complexities.

Anything else I should hack at? Yes, I've gone through the most of the WS-* stack as well, digging into past knowledge I had hoped to never see again, but here as well as most other technologies out there they seem to be obsessed with being so flexible that they forget to be defining. So, we get a lot of scaffolding and frameworks that you can extend and define your stuff in, but no clear definitions of what the world looks like. Even an obvious contender like WS-Events and the less-know WS-Event from Hewlett-Packard have nothing more than a functional approach to defining and registering events but that's it, leaving the defining to some semi-ontological layer.

But I'm still convinced lots of people have done this sort of work, especially in these Semantic Web haydays. Browsing through the thousands of OWL ontologies in Swoogle for 'software architecture' (which doesn't really cut it, but is the closest term that yield results) leaves me just overloaded. Sure, the OpenGroup SOA ontology for example, does provide me with, eh, lots of interesting stuff, but again it's a special domain (SOA, obviously) using a certain moniker (service orientation, which sucks when you want to define events across operational stacks).

Argh! Can you tell I'm going bonkers?

28 July 2009

A submersive state of mind

Sorry for the low blogging of late. I've hit the opposite of a blog-drain; I'm in a state where there's simply too much to write about, and instead of just exploding with it I retract into myself think I should mull on it a bit before I pop it out. Today is one of those popping days, and I want to talk about something that has been new to me for the last 5 months or so and has proven itself to be a mixed bag of pro's and con's ; working from home.

As of the beginning of this year I started to work for Free Systems Technology Labs, an Indian company bent on doing funky stuff the right way with the right people (I had to say that, didn't I?), and as such I now live in my wife's home-town of Kiama, a couple of hours south of Sydney, Australia. We moved here from Norway at the beginning of the year for a number of reasons, but being closer to (my wife's) family also with little kids and the nice climate were two strong contenders (but we're still talking about moving back to Norway someday... or somewhere else entirely, wherever fate and lust drives us, really).

Kiama at dawn Working from home can be boring, I know, but we're actually living in a 1880's built old two-storey farmhouse, verandahs all along the house, with some of the best views in town. Here's a pic I took last evening before finishing up work for the day. Yes, it can be hard concentrating on hard-core ontologies and magic Tuple-stores when you can stare at the sea for hours, and it doesn't help either that there's a number of comfy chairs with fluffy pillows right outside my French-doors that leads out to the verandah. Especially on a nice sunny day. Like today.

So, in order to break up my day I've got a schedule of sorts. First, after the kids are out the door for school and breakfast is tidied up, if I still got tea left I bring it upstairs to my office. Now here's a crucial part of my day; do I sit down and get started, or go and get dressed? Ah, the number of times I've written important emails or talked on Skype in my underwear. Well, the sensible thing to do - and, really, what I try to do every morning - is to get dressed. I know it sounds pathetically lame to lament over this, but it's so easy to just get going. I'm not going anywhere, right?

Amaki Cottage Cafe Well, that's the thing. Part of my schedule, which I don't do absolutely everyday, but every so often, is to go to my local coffee-fixer-upper-place. I gives me an excuse to get dressed, and makes for a nice 2 minute (!!) stroll down the picturesque Kiama town-houses, all the way to the bottom of the hill to get my double-strength coffee, double-strength chocolate Mocha. Some days when I do my walk on lunch time, I might even get one of their amazingly yummy salmon on Turkish-bread, and just stroll another minute down to the park, sit in the sun on the grass, and enjoy the serenity.

Of course, too much serenity is kinda boring, especially when your mind is racing with ontologies, event-models, dual-stored Tuples, or worrying if I need to consider using Bessel functions for subject equality in the Topic Maps Reference Model, it can get a bit busy in my head. Thankfully when the day is over I've got a way to kinda deal with all that, but during the day itself it's sometimes hard to focus on just one thing and one thing alone. So I need to schedule even such things.

I do have a schedule, though. 9am - 10am is the time for all things not specifically work tasks related, such as emails, news, blogs, etc. At around 10.30am till about lunch I do the more practical things about my work, such as coding, writing, testing, dowloading and installing, meddling, fiddling, prototyping and breaking my machine. Then I have lunch, quite often with my wife who downstairs somewhere chasing Samuel around, trying to stop him from getting into stuff he shouldn't. And then after lunch, at about 1pm, I fix my machine and do more thinking-related stuff, hold meetings (mostly through calling through Skype at around 2-2.30pm when India is getting into the office), write emails, and try to come up with plans, thoughts for the next day, and scheming in general.

I try to follow this pattern as much as I can. It's a lonely job in many ways as I don't have that office intermingling that I love. So, to keep myself sane I go places. I often go to the Kiama Library where I meet up with Tim, the crazy-fun-beardy local IT librarian. I sometimes meet up with a few guys I know around the place (not that many) and even got to meet up with Murray Woodman from Sydney the other day. As often as I can, at least once or twice a week.

And then, just like in over a week or so, I go to India (Bangalore mostly, but sometimes Mumbai) for 10-12 days to do an intense stint of socializing, hacking, planning, talking, planning, teaching, drinking excellent Chai tea, more planning, around the clock until I don't know what day it is (which suits, given the jet-lag). Then back home for another 2-3 months of working from home again.

Jones' Beach, Kiama It works. It's not perfect, but it sure beats living a crazy stressful life in a big city where you don't have control over your surroundings. Here, if I'm stuck with something and need a break, I put on my slippers, open the door, and walk 4 minutes to the beach. All is well, and when I get back I know for sure that implementing the Bessel function in my Topic Maps Reference Model is an excercise for the modeler and the TMDM engine, not for the technical implementation itself. Problem refreshingly solved.

Oh, and do come and visit. I'll buy the coffees.