Skip to content

Android App: Organise yourself with Organisa Lite!

My new task management / to do list android app, Organisa Lite, has a few features I think some people will like:

  • Organise all your notes in a unique tree-like hierarchy
  • An innovative user interface where everything is managed from one screen – no clumsy flicking between multiple menus to get things done
  • Put notes under different headings called projects which can be maximised or minimised as required
  • Export the workspace to backup and use on other android devices – email your workspace and share with others
  • Update your Android calendar(s) with the dates that you put into Organisa Lite at the touch of a button

Organisa Lite is available from the Android Market and has now been reduced to £1.65, due to a slow start with downloads. I didn’t necessarily expect a high volume but want to get some feedback and start the ball rolling. I hope people enjoy the app and if they have any problems I’ll be happy to assist.

Android To Do List – Organisa Lite v1.0 is out

Version 1.0 of my first Android App called Organisa Lite has been released onto the Android Market. The app is a to do list / task management tool with facilities to export and share workspaces as well as update the Android calendar with the important dates and notes added. For more information, see mobile.intelligent-architectures.co.uk

Android date / calendar persistence

A lesson from my voyage into the world of Android app development: java.util.Calendar and the SQLite database timestamp datatype do not mix!

If having problems using the Calendar class(es) I would thoroughly recommend you instead instantiate a java.sql.timestamp and persist that to the database instead. This cost me rather a lot of time debugging an error for which I was quite sure the application logic was at fault. In fact Calendar.setTimeInMillis() and Calendar.getTimeInMillis() is rather unpredictable when one tries to persist and retrieve a date-time, particularly in the world of Android. The name of Timestamp is a clue and I should have thought of using the corresponding class to represent the date-time in my application… oh well lesson learnt!

Could the world of software be drifting away from everything else?

The Oracle lawsuit against Google for infringement of various software patents has sparked huge debate about software based litigation and indeed prompted many to question the overall nature of the software industry in relation to the context of the world in which we live.

At the crux of all major issues relating to the advancement of technology, which today is synonymous with software, is the chasm between those that know the business of software, those that understand development of software and everyone else. The more specialised and complex technologies become, the fewer people there will be that really understand them. Very soon there could come a point where it is absolutely pointless trying to legislate on anything to do with software, because no-one who invents laws, enforces them and legally represents people regarding the laws will understand what it is they’re trying to preside over.

This divide not only presents legal issues. The direction and effectiveness of future technologies are driven by people who work in the software industry – for better or for worse. Governments cannot hope to control their own systems if they do not employ people who have experience of the software industry. If they do not do this, then they run the risk of spending vast sums of money on systems that they have no idea will actually do what they want, if indeed they know what they want in the first place. Needless spending could become astronomical, and security flaws would become inevitable.

To my knowledge, it is said by Buddhists that if only a small number of beings exist on Earth who are currently enlightened then the world will be kept from destruction. The prevailing feeling is that there may come a time when this theory is to be tested in the sense that if only a handful of people in the world really understand software, the world may continue to prosper for a while, but if the number diminishes even slightly, it will instead crumble.

There is however an alternative to this future which can be seen. If computing and software are demystified by a more thorough focus on it in the education systems than currently exists, then perhaps the future generations will have a deeper understanding of software. The lawyers of the future need to understand software, the business people of the future need to understand software, governments of the future need to to understand software, and it would be of benefit to many more individuals around the world to better understand software. For this to happen the world needs to recognise that software development is not something that can only be learnt by attending lectures in computer science, years of software business experience, or by sitting in front of a computer for unhealthy amounts of time every day. Of course all those things help to becoming a good software developer, but to gain at least some understanding doesn’t require such dedication. In fact software development can be viewed as a mixture of problem solving skills (systems analysis and software engineering) and practical skills (programming). Software engineering and programming itself is something one can learn much about through simple practice. Theory of course helps one to gain a very deep understanding of the subject matter, but it is not essential.

Its no longer advisable for people to separate themselves from trying to understand software by claiming that it doesn’t involve them. Most people use software every day, and are in some capacity part of the software development process whether they realise it or not; their expectations and goals drive development. Project managers oversee software development, business users decide what they want out of software and end-users report bugs in software. But very rarely do these categories of people ever think about really what it is the software does, where it comes from and the platform on which it runs. At best some can outline the general principle of the software, usually by recognising the end result they get out of it. This leads to the kind of pseudo-technical speak that you hear described in marketing pitches for software and software patents. Unfortunately this type of talk obscures the real underlying technologies.

Think how restricting a world it would be if every profession were a black-box, just as software is to many people today. Imagine if we had no idea what it was a plumber did, could never figure out how a car works, and could not prepare a meal unless we were a chef. Think how much power each ‘professional’ would have over everyone else. Perhaps this will give a taste of how liberating it might be just to know that little bit about how software works.

I suppose the real challenge to tackle is the fact that software is dealing with the ‘virtual’ – telling a computer how to do stuff, often things that as intelligent sentient beings we may take for granted. The only advantage of computing power over human effort is that, if we can figure out how to tell them to do something, they can do it for us. As software is not a tangible physical thing, asking someone to try to understand it might to some seem as difficult as asking them to understand how a persons brain might work. But this is making more out of what it really is. Just like building something physical, software is made of nuts and bolts and tools can be used to put it all together. There’s no magic in it, and that’s the simple belief that allows some people to become accomplished programmers. Its just a little hurdle to overcome, which if everyone progresses beyond we may just find will stop software from drifting away from everything else.

Oracle claim Google Android infringement of Java Intellectual Property

http://www.bbc.co.uk/news/business-10961705

A worrying development that raises concerns about the way in which Oracle might proceed to treat technologies that use Java.

Presumably they are objecting to usage of similar programming patterns (or android compatible versions of Java API classes) that exist in the Java language?

A bird in the hand…

Lately I’ve been thinking about different types of software businesses and the strategies they use to make money. You might initially think: well that’s simple – write software, sell software, make money.

In actual fact the manner in which software companies do turn a profit varies incredibly. Some ‘startups’ make all their money out of getting investment for good ideas, and building up enough reputation to the point that they get bought out… before they’ve even made any ‘real’ money. On the other end of the spectrum some web developers work on very simple small projects and turn them over regularly and make money this way.

The problem is that lots of small projects tend not to pay that well and you spend a lot of time chasing jobs around. On the other hand if your plans are for a project that is too elaborate and involved you risk any potential investors losing interst and wasting much more time and money as a result. There’s no one correct business model for a software development company and I guess the answer is to use whatever seems to work for your particular line of work.

From advice I have gleaned I think the best way to proceed in any business is at least start by having simple jobs lined up which may provide repeat custom, and slowly starting out the larger projects which require more time and careful nurturing. That way you can ensure a profit for your business, while developing ideas that may one day help you hit to hit the jackpot…

The Android SDK – a quick run-down of the features and quirks involved in developing android applications

Firstly, in comparison to most other big tech companies google are great at helping developers get the most out of their APIs and software development kits. They obviously try quite hard to make developing applications using their technologies as straightforward as possible. However some of the features they do implement such as virtual testing environments, while clever, actually tend not to really be that helpful and often slightly buggy too.

Nevertheless I found it very easy to get started developing android apps using their developer site. The SDK and associated Eclipse plug-in they provide makes creating a new project from their template extremely easy and thankfully the template project is very minimal. This is definite boon as it can be extremely frustrating chopping out all the rubbish some Eclipse plug-in developers add to their template projects. As far as I’m concerned I always want to start more or less from scratch with this sort of thing.

With that said there is a certain app development pattern that you simply have to follow because of the way in which android apps get packaged and deployed on mobile devices. Therefore there are some concepts developers must familiarise themselves with and get used to because there is no alternative.

If you’ve used GWT you’ll notice there are some similarities in the SDK style. The Android SDK does try to do a bit too much for you: it generates the resources (‘R’) class on the fly for the purposes of updating Eclipse’s auto complete facility and to avoid IDE compiler errors. Which on one hand is a good thing, but I think that this, in combination with other automatic actions it carries out under the covers while your writing code, contribute to the fact that it seems somewhat buggy. Anyone who regularly uses Eclipse will know that from time to time it gets itself into a state of confusion, not surprising when you consider that it is constantly compiling code as you’re writing it to pick up compiler errors on the fly.

Also provided with the SDK is the facility to test your apps on virtual android devices. This is a very useful feature but occasionally you will find it gets itself into a state where you have to close the virtual device and start it again. This does take some time and I actually found it quicker to build the apps using Apache Ant and copying it across to a physical device connected by USB. This brings up some additional points  - the USB debugging feature was not possible with my device as the number of drivers for different platforms is fairly limited. But in actual fact its probably a more useful and realistic test to simply copy your apps (using the debug .apk which you can build with the ant ‘debug’ task) to the device and install them and run them properly.

I should probably mention that the supplied ‘tools’ which live in the SDK directory where you extracted the SDK to, include a useful tool called ‘android’ which allows you to generate an empty project. This allows you to edit and build runnable .apk files without using the Eclipse plug-in and indeed in any other IDE you may choose. Building the project is possible as mentioned using the Apache Ant script which the android task generates for you. This ability to generate a bare-bones buildable project is probably the most useful feature of the SDK in my opinion. Other platform tool developers could do well to follow this example, I know of plenty of open source projects that could certainly benefit from such a feature as much of the learning curve is often just getting everything organised so you can run anything at all.

I think this would be a convenient point to break my analysis of android development platform until I get a bit more used to it. Apart from anything else, I need to reboot my machine because Eclipse has become well and truly stressed out by the whole thing! Still its all good fun…

Developing Android Apps… step 0.1

Hello World on Android

Well, from tiny acorns mighty oaks do grow… I really should be asleep, but here’s a screenshot of my new Android tablet (an EKEN M-001) running my first Android application.

I will leave any comments on the development SDK till later. Generally seems quite painless to write small applications, complying with Android standard app architecture and following an appropriate UI style might take a bit more getting used to.

Is leaving an online legacy a good thing?

Although this may be somewhat morbid subject matter, it is an important issue relating to todays socially networked and internet centric culture in highly developed countries.

To begin with you might think that the fact that your online presence is likely to outlive you is a somewhat comforting one – after all most people would like to think they would leave behind some form of legacy when they die. And of course people can pay their respects by emailing relatives from anywhere in the world, creating tribute web pages and leaving facebook messages etc. However it is worth considering that for some people an enduring reminder of a loved one’s death may not in fact be very comforting, particularly if they died in tragic circumstances. I recently read an article about two obviously very bright but also terribly troubled researchers in the field of Artificial Intelligence. Both sadly commited suicide around a similar time a few years ago, although neither of the events were linked or seemingly related. Both these bright young people most likely believed strongly in the great ability of the internet to allow ones achievements to live on. But you have to wonder whether, for the families and friends that were affected, certain reminders of such tragic events are quite painful to have to deal with.

Not only can other people leave both positive and negative comments about a person online, social networking sites like facebook that are not under the full control of the family or friends present issues like dealing with the removal of personal information, and stopping unsensitive things happening such as ‘suggestion’ type services which ask one to interact in some way with a person who is no longer alive.

As life with a heavy online presence becomes increasingly normalised, the superficial advantages on the surface give way to expose some much more serious issues which we deal with on a fairly regular basis in real life but which are uncharted territory on the internet.

This all links in with the privacy debate surrounding the internet as a whole which I feel is set to become one of the huge legal and political issues relating to the computing and technology industry, and I can only hope that such issues are not ignored by software giants, policy makers and politicians and the public at large in favour of the reward offered by advancing the online world.

Staying on the ball at work… keeping your mind fresh

It’s important to be aware of your productivity at work and the factors that can affect it. I thought I’d share some tips I find particularly useful as a software developer to be aware of, although these can apply to countless other jobs.

Any work can be potentially mentally taxing, but software development can be a particularly cerebral activity requiring a lot of concentration. Every programmer will know how difficult it is sometimes to juggle system architectures, models and concepts as well as more specific programming language related constructs and syntax. The complexity of these tasks can be comparable to solving mathematics problems and manipulating scientific theorems. Any intense thought processes take their toll on your energy and occupy your mind, and the more they do so the more difficult solving problems can become. When you add into the equation any work or home related stress and project deadlines that may crop up,  this can become all a bit much and even affect your wellbeing. Here are some tips for keeping your head fresh at work that hopefully may prove useful:

  • Take regular breaks – this is probably the single most important piece of advice to follow to increase productivity and your wellbeing too. It can be difficult to adhere to this particularly when a problem presents itself, however this is exactly the sort of situation where a break is most beneficial. If you can arrange to have a short break every hour or two, it will help to alleviate fatigue and can give you a fresh look at your work. Sometimes seeing a problem from a new perspective is exactly what you need to advance with your work.
  • Make notes – no matter how intelligent you are there is a limit to the amount of information you can keep in your head at any one time. The chances are that the more you try to remember, the more things you will as a consequence forget. It’s much better to make a few notes either electronically or physically to remind you of things you need to do or be mindful of in relation to your work. Sketching diagrams and scribbling down your ideas can also help where design is required or you are having trouble understanding something in particular.
  • Communicate – this is both important to do in order to share ideas and obtain assistance from others, but also simply to keep socially active and avoid feeling isolated from your colleagues. Software development can often be a somewhat solitary activity where words are rarely spoken amongst people. However for most people, the less you interact with your work peers the less pleasant your work environment may seem to be. The odd conversation can help to lighten the mood and boost your confidence in the work you are doing.
  • Pay attention to your working environment – this one is carefully worded because there are several potential issues here. Firstly, the physical surroundings in which you work can have a big impact on how you get on at work and your feelings about your job as a whole. An ideal environment for many developers would probably resemble their own desks in their own rooms at their own homes. Really what I’m saying is that its a matter of personal preference and so any opportunity to improve your surroundings to your liking should probably be taken. If you feel comfortable and relaxed you’re probably going to work better as a result. Also though, there are aspects of your work environment beyond your control and so it is worth being aware of how you feel about these aspects. These external environmental factors can be poignant enough to make you feel very negative about things. If this is, or has become, the case then you really need to monitor the situation and consider your options to improve the situation or remove yourself from it entirely. Remember that work is not a selfless act, you do it in expectation of something in return, and if it is not providing for you what you need in any particular aspect it is time to consider moving on.
  • Monitor your physical and mental wellbeing – these things are affected by so many factors I could not possibly list all the things to watch out for. But be aware that everything from your working hours to your diet and leisure/hobby activities can affect your physical and your mental health. It is easy when you’re working hard to ignore how you are feeling personally and your health in general. However one of the most important things in your life is your health so you need to avoid causing yourself any harm and take any problems you may be experiencing seriously and talk to a doctor about them.

At times you may have to actually force yourself to be mindful of these things, it is easy to forget or ignore them – we all do it! However it is worth it in the long run to be happy when you’re not at work and at the very least content as often as possible when you’re at work. And the more this is the case, the more productive you’re likely to be.

Hacking spam bots and web crawlers

Unless you’re someone that actually writes and benefits from these things, you could look at the vast quantity of unsolicited rogue bots and web crawlers as a huge nuisance. However even if you are on the receiving end of such unrelenting software, you could also view it as an opportunity to turn the situation on its head. It occurs to me that like any website that bots may themselves hack in order to extract or publish information, one could develop a website or web application to hack the bots themselves in a multitude of ways.

Now I’m not suggesting for one second that someone cause malicious damage this way (hacking in my dictionary defines a very wide set of computing practices, not necessarily with bad intentions). However there are interesting possibilities with this kind of reverse hacking, including spam prevention, SEO manipulation, and identification of bots and their method of operation.

Personally I don’t have the time or need at the moment to investigate these possibilities, but I thought I’d provide some food for thought – nuisance bots could actually be a useful resource.

EU plan to make technology more ‘open’… Is legislating on technology realistic?

http://news.slashdot.org/story/10/07/01/160239/EU-Plans-To-Make-Apple-Adobe-and-Others-Open-Up

It seems the EU are interested in introducing legislation to make big tech companies open up their technologies by using standard formats and interoperable interfaces. On one hand this vision of the future seems like a bright one, but on the other there is a big question as to whether it is really realistic to do this and how on earth the rules relating to this interoperability would be possible to define.

Trying to legislate on technology related issues is an extremely difficult thing, largely because only a very small minority of people will fully understand both the technology involved and the legal consuquence of imposing such legislation. This is why law suits involving technology companies are so horrendously expensive. There is also the issue that technology has been a world-wide market for some time now and it is impossible for the EU to introduce laws that affect distrubuted systems which operate outside of Europe.

One slashdot contributor summed up my feelings on the subject with the following comment:

What? (Score:5, Insightful)

by jim_v2000 (818799) writes: on Thursday July 01, @12:59PM (#32759272)

“Any kind of IT product should be able to communicate with any type of service in the future.” [EU]

What does that even mean?

Indeed defining what any statement so sweeping as that above really means is impossible and the statement reflects a chasm between recognising the intention for good in this proposal and understanding the reality of what it actually entails.

Virtual Machines – the open source way

Today I spent a few minutes checking out VirtualBox which is Sun/Oracle’s  open source Virtual Machine (VM) system which is free for home use. Once downloaded you can visit http://virtualboxes.org for a large number of OS disk images which are relatively easily installed. I did have to edit the XML file it puts into your user profile, I will see if there is an easier way to do this or if these instructions are provided somewhere obvious and if not post the relevant info up here.

What VirtualBox enables you to do is host any number of VMs which can be launched on your desktop as required. For those that are uninitiated VMs are very clever software virtualisations of physical machines

. They have applications ranging from a home user trying out a new OS such as a linux distribution, to software developers using them for testing and simulation of distributed software.

The system compares well and has many similar features as the most popular VM products from VMware. As far as any detailed analysis goes, as yet I can’t really offer an opinion, I’ve not enough knowledge of other VM products and haven’t used VirtualBox enough to really say anything much. From initial impressions it seems to compete well. Here you see a screenshot of VirtualBox running a Damn Small Linux image.

Mobile Devices – niche products versus. the features checklist

By now really, much as I have a dislike for gimmicks, I cannot deny that mobile devices are a ubiquitous part of everyday life. Nearly everyone in the UK has a computer on their person, and that computer is likely to have a powerful processor, an updatable Operating System, numerous pieces of software, several databases, some form of internet access and probably many other features.  These things are useful in a multitude of ways, and I think the real test as to whether they are a pointless gimmick or not depends on the user’s usage of the features.

What is somewhat frustrating though is that because mobile devices reach such a wide audience, they often fail to accommodate for a particular section of society. Most mobiles are marketed at the broadest range of individuals as possible, and as such attempt to do everything they possibly can as well as possible, prioritising only the features that appeal to the majority of the market. This leaves people with an amount of choice that is paradoxically both incredibly broad but also guilty of not catering enough for specific niches. Why do we need a netbook that touts potential for ‘multimedia’ usage as well as internet usage? Some folks might be quite content surfing the web and reading plain old text without watching videos as well! And the two are a very different purpose: compare e-readers with iphones (and ipads) – the design is deliberately different. So why are there hardly any web-readers? At best one can find a handful of  good quality ‘Mobile Internet Devices’ which aren’t phones and don’t focus on multimedia delivery.

I’m not against mobiles that can do everything, but sometimes I might want to buy a product for a more specific purpose – because a phone just can’t do everything as well as a product designed for a specific purpose.

On the software side, I agree that people want choice more than anything. But the problem is real choice isn’t a lock-in operating system or an App Store which is designed to turn the people who made the hardware a tidy profit. I’m happy to pay for software but I want to feel I’ve chosen the software, not that someone’s chosen it for me. And I want to at least have the option to tweak under the hood, and again if necessary I’d pay a small premium for an optional OS that offered such flexibility.

Its a shame that because the success of different types of mobile devices is driven by the mass target market, new innovation tends to emerge rarely. When it does happen it often becomes quickly absorbed into the ever-growing list of features that any new mobile device seems to have to implement in some way. Using this mobile features ‘checklist’ to develop new products gets in the way of any really creative developments which come from trying to solve a more specific problem on its own, or implement something in a better way by focusing entirely on it. I can only hope that more specific mobile devices will co-exist and thrive alongside their more all-encompassing cousins.

The importance of communication

The last few days has provided an interesting lesson in the importance of communication when designing systems and developing business ideas. By now I’ve had chance to discuss some of my own ideas with a variety of people and its proved very useful both from my point of view clarifying what I’m attempting to achieve and also receiving feedback from an outside observer’s point of view. Talking to someone, no matter who they are about a problem, whether its a business problem or a life problem always seems to help one way or another. In this case its a business proposition and it has been worthwhile to air my ideas that have been rattling round in my head for months. Without this outside involvement, you run the risk of becoming so closely wrapped up in what you’re trying to achieve that you may be taking a dangerously blinkered view of the whole thing which can be bad – even if what you are working on has the potential to be an amazing solution to a difficult problem. Sometimes it can even be the case that you don’t know, or aren’t focusing on, the good points of your solution because your too busy ironing out the faults you’ve identified because you know the subject matter so intimately.

I’ve found people can be surprisingly approachable about discussing things you may wish to achieve as long as you have enough material to talk about and believe in what you’re trying to do.

I think communication is a trick some people do miss which causes problems long term in business and in one’s personal life. Even if you’re not the most confident of individuals, discussing something on the internet can be a useful tool. Sometimes you can reach the exact types of people you’re looking for to discuss something on the internet, although of course the opposite is also the case (but even this might help you to decide that perhaps your target audience differs to the audience you originally envisaged).

So there’s a bit of food for thought for anyone thinking of developing their ideas into something productive; its worth approaching and discussing them with the relevant people, after all you’ve nothing to lose.

A bit of positivity

It seems my blog is receiving a fairly respectable amount of hits, considering the specific and nerdy nature of some of the posts which is nice to know. If anyone reading does have feedback or is interested in further information about any particular topics please do let me know. There are a few things I’m currently working on, including Prolog and Java interactions via the web. I am hoping to offer some contribution to the SWAPP API for SWI-Prolog, while I am working on a commercially oriented project that makes use of the API. I also hope to generate some commercial interest my project and pitch it to interested parties. At this early stage I don’t want to give much away, and indeed the project has some way to go yet anyway, however if anyone is interested I’d be more than happy to discuss the project with them.

Exams are nearly over, which is a great relief and the sun is shining here in Norwich. Things can indeed only get better as in a weeks time I will be making my way to France for a holiday with my lovely girlfriend and my housemates who will all be graduating this year. Bon voyage!

Google you’ve changed!

Interestingly Google have not only altered their look recently, they’ve changed some aspects of the core functionality too.

Unfortunately for me this means some of my web-sites don’t seem to get listed as highly as they used to and my inevitable bias is telling me that this change is bad!

In fact, I can’t help but point out a few criticisms:

  1. Aesthetically everything seems to be aligned to the left hand side and leaves a massive gap on the right – why not fill the space instead of giving me ‘blah blah blah…’
  2. The screen doesn’t resize, its fixed to your screen size so if you make the window smaller it doesn’t wrap the text.
  3. More importantly searches seem to be ordered differently, something I wouldn’t mind too much (as I’m sure its a very difficult job to please everyone with the search ordering), however the options on the side menu allow you to search for everything apart from just plain old web sites. Perhaps they just aren’t web 3.0 enough to be considered important these days?
  4. Why have we got two menus which seem to do the same thing now – one up top as has always been, and one new side menu which only seems to be different because it has a pretty icon beside it?

The more I think about it the more I’m starting to consider alternatives, and that says a lot: The fact that I’m prepared to waltz over to bing or altavista is quite a paradigm shift, especially as I generally use Chrome as my browser of choice and generally largely support Google’s end-user services.

I am confident if I have a little to say on the issue plenty of people are completely up in arms about it and this will not be an issue that will easily disappear.

Personally I just want Google’s search engine to be what it has always stood for – a simple way to find web sites. I don’t really care about customizing the look, and its much higher on my priority list to find the most relevant web site I’m looking for, not the page or specific content such as images, blog posts and most certainly not updates/tweets. And before anyone would suggest otherwise – I am a young person and I’m sure I can speak for plenty of us when I say I’m really not interested in gimmicks like twitter.

Apple really love a lock-in

Picture the scene – you’re at your favorite bar or pub, everyone’s cheery and the drinks they serve are superb. Last orders has been called and you don’t want the night to end: along comes the manager and guess what – he’s declaring a lock-in, fantastic!

But then consider this rather different scenario – you’re in a dingy back-street hovel of a hostelry, the beer they serve is stale. The night was looking alright when a lovely looking member of your preferred sex shows up and flashes you a smile. But they’ve gone home early, and you’ve no reason to stay – you just want to be tucked up at home and watch your favorite DVD to cheer you up. Unfortunately for you: along comes the manager and guess what – he’s declaring a lock-in, oh dear!

When I heard that Apple were not supporting Flash on the iPad I was somewhat dismayed, I was even more surprised to learn that they don’t support it for the iPhone either. It’s not that I care hugely about having Flash support, what is concerning is not having the choice and being subject to a technology lock-in. It’s a sad state that the health of a technology is not determined by its technical brilliance or its popularity, but by whether it is supported by the big players in the market. Personally I think if there is one overriding thing that rational people want out of a computer it as much freedom as is completely possible. Everyone knows what bad software and hardware look like, because they’ve all experienced ‘an unexpected error’ occurring, and we should have the right to say – no thanks I’ll use an equivalent product because its more stable (or offers more features or just because it looks pretty!). What’s the solution? Well if you like freedom, do shop around because your purchase is more than just a shiny product [which is re-branded old technology that doesn't come with a proper keyboard] – its an investment in the producers ideology.

As a caveat to this post – I’m not saying Apple is a bad company, or that their products are bad. I wouldn’t want to put those words in people’s mouths, I’m just advocating considering the overall philosophy of the company you are buying from and whether it matches your needs.

OZ – the vastly different programming language

I finally took some time recently to inspect a language I’d been intrigued by for a while. That language is OZ, the implementation of which is called the Mozart Programming System. It is a self described multi-paradigm programming language. This concept both arouses curiosity and suspicion in me. My curiosity being that there is a possibility that elegantly merging different styles of programming could create a very powerful development environment, my suspicion being that this is a very difficult thing to do without leveraging existing languages and there is also a danger that you pollute all that is good about the separate programming paradigms you are trying to incorporate.

Nevertheless I tried to be open minded and receptive of the platform and relate it to possible uses I can see emerging for it. However after some inspection I can only conclude that while the intention is good and a lot of hard work has obviously gone in to Mozart, the current version has many areas in which it could be criticised. Firstly and most notably, the language is very unlike any other language you may have used previously, which I suppose is what you would expect if you were trying to merge so many different ideas. However this is instantly going to turn many less fastidious programmers off. I actually think this may be the intention in the sense that the authors of Mozart are not aiming at a mass market. Unfortunately I can’t help thinking this is a bad move if you want to drastically change people’s opinions. A better strategy might have been to gently break people in to new programming constructs in the context of familiar scenarios. Even in the fast moving tech industry it takes a long time for people to move on from the recognised norm. Another issue I can see which will not help adoption of the language is its lack of really practical usage examples and of familiar API features. For example when looking at a promising ‘servlet’ implementation in the tutorial I was a bit disappointed when the code was essentially transformed into a CGI script for installation on a web server. This is old technology and leaves one wondering – where is the .NET and Java EE competition in Mozart? Software industry developers want to know about data exchange and persistence and how they can deploy their applications. As far as I can see these are somewhat neglected areas. From a theoretical point of view some of the benefits offered by a multi-paradigm language seem attractive and no doubt the Mozart platform does have some very real uses. I just can’t see how it can compete on all frontiers, particularly web  based business applications.

My final concern is that in combining programming paradigms you risk polluting the very nature of them. Object-oriented programming is not just a means to an end, it is a view of how to model abstractions of real world entities: as objects containing data and operations which govern themselves. Logic programming is not just a convenient way of expressing logical statements, it provides a domain in which everything is represented in predicate logic. The question is can you really combine such differing views on the ‘problem domain’ (or ‘universe of discourse’ as it is sometimes called) and do you lose anything in the process? Without more examples of Mozart programs written in the intended manner it is difficult to tell.

I may be missing a big chunk of the puzzle, perhaps multi-paradigm programming really is the way forward. From my own perspective though I think the interoperability provided by web services is where programming is going in the future and I value common communication standards between languages over combining language features in one monolithic place. However it is a very interesting language and a provides genuinely different approach to programming. The platform is clearly mature enough for anyone interested to develop useful applications with, but it is a big investment in terms of learning curve and probably also in time spent writing your own APIs.

Relationship between the government and the software industry

So a general election has been called in the UK and party political campaigns are well underway, which has made me think about many issues related to how I will use my own vote.

In the back of my mind though there is a subset of these issues that is entirely related to my line of work, and they’re growing concerns that are unlikely to be mentioned much in the run up to the election.  The government can have an impact on the software industry and vice versa in a number of ways:

  • Governments regulate the way businesses operate and are instrumental to passing, maintaining and enforcing laws relating to issues such as intellectual property (a contentious issue in software)
  • Software development for government funded organisations is largely contracted out to private software companies, sometimes to disastrous results
  • In an increasingly inter-connected world software security means national security

One of the most important issues over which I feel government could affect change is the wasted spending on scrapped software projects. Software that is designed, developed and deployed in the correct manner can actually save money by improving business processes and reducing administration costs. But all too often government organisations such as county councils, the national health service and the ministry of defense have been seduced by software companies that plainly have been unable to deliver. These canned projects account for millions of pounds of loss due to:

  • Lack of understanding of what is required, of how to approach the problem and of the technology involved itself
  • Over-optimistic estimates of the time and monetary costs as well as under-estimating the skills and expertise required
  • Poorly thought out system design and architecture
  • … the list goes on

What I feel the government and government organisations really need are experienced people who can understand the software development process and have some understanding of modern software technologies so they can recognise what they require and can determine whether a consultancy can deliver.

The more you think about it, the more numerous other issues where software and government policy meet seem. Security is another key area that is and will increasingly become important. It is not a sensationalist view to assume that the internet is now seen as a platform for criminals to operate, and indeed on which to organise and carry out attacks.

Perhaps one day soon the government will need a whole new department of people who are part software expert, part politician. I’m in favour of such a development in government if it means there is someone there to make intelligent, rational decisions about the strategy under which software is employed in government organisations.