Skip to content

Search Technologies… Lucene, Solr and the importance of ‘Search’

Reflecting the nature of trends in web user experience, my work as a developer has led me to be quite involved in the field of ‘search’. It’s fair to say I never fully appreciated how important information retrieval / search theory would become in my career, and what ‘search’ is really all about.

A few months ago I changed jobs and began working for ProQuest. Both here and at my previous employer, Open Objects, search technologies are a key part of the underlying software infrastructure on which their web based products are built. Generally this is the case for web applications which allow users to sift through large amounts of semi-structured full-text data (documents), and retrieve the specific information they are after with ease.

I think its no trade secret that a lot of [forward thinking] organisations to whom search is important are using or moving towards the use of open source search solutions, of which there are currently two major projects: Apache Lucene and Apache Solr. The former is a Java library which provides a wide range of indexing and searching functionality, and the latter is a self contained web application providing further functionality and opening up Lucene’s features over a HTTP based interface.

Its important to make the distinction between searching and fulfilling an information need. ‘Search’ is just a mechanism through which users find the information they need, and particular technologies and features provide a variety of ways they can do this. Some people speculate that the future of information retrieval may not look like ‘search’ at all. In fact there has for some time been growing interest in algorithms that use data continually collected from a number of sources to ‘learn’ and provide the user with the information they need.

You can use Solr without much understanding of Lucene’s composition, and you can also use Lucene without much knowledge of information retrieval methods. This is testament to both projects’ APIs. However the more you find yourself wanting to do in the search space, the more useful it is to develop an understanding of the concepts underpinning these technologies.

I think that’ll suffice for an intro to search circa 2013. Hope it was useful, more to come!

Book review – Masters of Doom

Masters of Doom: How Two Guys Created an Empire and Transformed Pop Culture

By David Kushner

I used to be a very avid gamer, and I would estimate I’ve spent thousands of hours of my youth playing the Doom and Quake games. They were fantastically immersive and exciting. But I haven’t seriously touched a game in years, not through any deliberate action nor is it something I’m particularly bothered about, I just naturally found less time for games. These days if I do have a few spare minutes its usually programming that I spend my time doing. But I do have one thing to thank this book for and that is reigniting my passion for reading, something that if I’m honest I’ve spent far less of my life doing than gaming.

This book covers in equal measure the social, technical and game industry related aspects of the history of id Software. It closely follows the lives of John Romero and John Carmack, two of the founding members of id Software that have gained incredible ‘rock-star’ notoriety. Though times have very much changed since they started out, this book still has some relevant themes which resonate today. The author carefully navigates the history of the company remaining neutral without casting any aspersions, leaving you to make your own mind up about the what can be learned from what happened. And ultimately though this neutral stance removes some of the tension and suspense, the story stands up as an enjoyable one nonetheless.

The book really gives you a sense of the success that these quirky ‘nerds’ had at a time when there was no Big Bang Theory and ‘nerd’ culture. They overcame some of the difficult times they experienced to not only develop amazing pieces of software, but become Ferrari driving celebrities in their own right (whether they celebrated their new found popularity or not).

Masters of Doom also reminds you of the fact that games were instrumental in the progress of new ideas like open source software and community driven software development. I almost forgot how many expansion packs and extra levels there were available online for these games, which secured them a much longer shelf life – I even made a few (pretty poor!) add-ons myself.

I can thoroughly recommend Masters of Doom, and as it has got me reading books again of all kinds (biographies, fiction and software related) I may well post similar book reviews in future.

CQRS and the Axon Framework

At its heart CQRS (Command Query Response Segregation) is a simple design philosophy highly suited to certain types of applications such as those dealing with reasonable size datasets, or event driven user interfaces. The aim is to separate the infrastructure code from the application logic, and also the create/update/delete (command) operations from the read (query) operations.

This in practice means asynchronous command processing and optionally separate infrastructure for command and query operations. Increasingly web applications are reasonable large scale and perceived ‘transactional’ behavior often involves multiple processes and calls to web services. This adds uncertainty and indeterminate periods of execution time to the operation.

The increase in service orientation (SOA), or servitisation as it is sometimes called, is clearly important to modern applications and carefully designed service architecture helps to avoid a nest of web service calls which may never return. However CQRS introduces a more realistic model which enforces data updates to be asynchronous, and encourages separation between command and query data, a pattern which may already be familiar or have already emerged from complex application designs.

Axon Framework

The Axon Framework is a Java CQRS application framework which provides all the hooks for effective CQRS design. The framework should fit existing infrastructure technologies, such as Spring, JPA and JMS. Production applications using this framework are starting to appear and its popularity continues to grow. Though the Axon provides an easy way to structure an application, it is possible ‘roll your own’ framework, and many existing applications that use messaging technologies probably do. The advantage of Axon is that it has been carefully thought through by those used to CQRS design and helps to enforce a specific pattern for developers to follow.

The future of software design?

It is likely that we’ll be seeing more applications adopting a CQRS architecture in the coming years. Ultimately this may be of particular benefit to applications where data may be updated and viewed by multiple users and this relies on external services. We will probably start to see an increase in web sites and web apps which update when events are processed. With the advent of HTML5 features such as WebSockets this becomes even more seamless as the client’s web browser will no longer need to poll to pick up changes, rather they will be ‘pushed’ to the client. Though there are a lot of challenges with larger scale applications, hopefully carefully implemented emerging design patterns such as CQRS will make like easier.

What do you want from life? – the question we should be asking post economic disaster

Its a heady, deep and widely avoided question – what do we really want from life? As the world is gradually recovering from economic disaster, I argue this question becomes increasingly more important to ask both yourself, those around you and ultimately force politicians to answer for themselves too. A healthy economy is too fluffy a term, and means different things to different people.

I think there are two reactions one can have to economic hardship – worrying solely about money which generally leads to a shift in priorities causing a fixation on material goods, or concern about how we got here in the first place, ultimately a very difficult question to answer. There’s a great opportunity emerging from a recession for my generation and those younger to assess their priorities in life, and for this to have a wider impact across communities. To my mind social well being, environmental reform (of both the natural and man-made environment) and striving to do a good job should be high on the list. In my view when you get these ducks in a row in your personal life, you and those around you tend to live a happier life. I’m a firm believer that the relationships you build and way you behave has an impact on how life pans out for you. Apply these priorities on a larger scale to society and the world would be a better place.

We all know the world economy has a fundamental floor called credit and there is nothing we can do now to remove that carcinogen from the pool of risks associated with capitalism. But if we focused on (to use a turn of phrase often used by legendary programmer John. D Carmack) doing the right thing, perhaps life would be a lot better.

JSF 2.0 – converting objects without a Converter

As is so often the case, the best solution is also the simplest. I’ve been developing a personal web app, using JSF 2.0 for the presentation layer. I’m used to creating custom Converters using the @FacesConverter annotation to carry out the conversion from String to Object format and vice versa. This is useful when the String representation and the Object are loosely coupled. For some reason this particular converter was proving problematic. It wasn’t until I happened to implement a toString() method on the object that I realised, in many cases this is all you need: http://docs.oracle.com/javaee/6/api/javax/faces/component/UIOutput.html (for an explanation)

So ultimately in your code, all that is required is:

<h:selectOneRadio value="#{backingBean.myChoice}">
  <f:selectItems value="#{backingBean.yourCollectionOfItems}" />
</h:selectOneRadio>

So many Java libraries make use of the basic object methods (toString, equals and hashCode), and so those wiser Java lecturers and developers weren’t lying to you when they said make sure you always implement them!

The Future of Social Networking

This was an old post I vaguely remember starting aimlessly which quickly turned into an essay, I decided it was time to dust it off and see if some of my musings and gripes about social networking are still relevant over two years later!

One could write a diatribe about social networking and the continued popularity of Facebook, so I’ll try my best to stick to the point. What I want to discuss is the users perspective of social networking. When people discovered Facebook, most people thought it was great, and its not hard to see why; with such a huge membership it is easy to connect and communicate with friends across the globe. After the initial honeymoon period, concerns started to be raised about the direction Facebook was being taken. Firstly in terms of visual appeal and secondly in terms of privacy policy. Currently most Facebook users now realise, the design of the system is beyond their control. While the content was very ‘web 2.0′, the interface was not. Continue reading ‘The Future of Social Networking’ »

Maven failing to download dependencies

Recently I’ve been using Maven for the dependency management of Java projects. When trying to build projects from the command line I found Maven had problems downloading certain files… it would stop at a certain point consistently and refuse to go any further. The fix I found, thanks to the ever useful StackOverflow, was to add the following option to your mvn command call:

-Djava.net.preferIPv4Stack=true

I think this a bug which occurs when using certain versions of the JVM and Maven together, which at a guess would be due to the implementation of the IPv6 stack in the JVM. Whatever it is, blogging this cure will hopefully save some of the Maven-ites out there some time!

What it’s like being a software developer

Gathering dust in the ‘draft posts’ section of my blog for far too long, here’s some observations about who we are and what we do:

  1. Very few people that we don’t already work with understand what it is we do.
  2. We can be a ‘rock star’, an unsung hero or a complete failure from one day to the next. It all depends on how our code performs at crucial moments in time, and who notices.
  3. We quickly learn to be paranoid and plan for when things go wrong.
  4. Amongst us are people that build things that can be: productive, useful, fun, boring, vital, harmful and everything in between.
  5. We wander between two worlds; the virtual where everything could be possible, and the real, where the laws of physics and socio-economics apply.
  6. People expect code to be infallible and humans to be fallible, however it is often forgotten that, presently at least, humans write code. A developer can try to circumvent human error by treating all applications they deal with as crucial, but this is not foolproof. A manager can circumvent this human error by remembering this is the case.
  7. We work in a profession with a perceived level of complexity that makes it very easy to bullshit people… and it’s scary to think it does go on, though I’ve been fortunate enough not to encounter this.
Most importantly though:
8.  We work in a profession where we get to work with great people and interesting new technologies with many challenges awaiting us. We can use our creativity and our skill to produce fantastic pieces of software, which help many people do things; easier, faster, better or that they simply could not do before… and generally, that’s why we do it.

 

[I hope to be back blogging some proper dev stuff again soon!]

Top 5 irritating UX trends

Time I think for an indulgent digression on user interface design. Firstly I should make it clear, I’m not a designer… but I have been responsible for implementing plenty of designs and using a bit of my own creative inspiration for user interfaces. Also this is pure personal opinion, though I’ve discussed these features with others who agree they are problematic.

5. Chunky buttons

The rationale is that presumably the bigger you make things, the more obvious the area you have to click in is, this seems to hold particularly well in relation to sites that are selling something (they really want you to click on the big ‘Buy Now’!) Allow me to illustrate with a simple example:

I feel like I’m being assaulted by this web site, and there’s no way I’m clicking that big button the first time I’ve entered the landing page of this site so why does it even need to be there?

4. Massive menus AKA ‘MegaMenus’

I’m referring to those huge expansive menu’s where the categories are listed fully expanded with sub items, generally in no particular order taking up the whole width of the screen.

You may have gathered by now that I don’t like excessive use of screen real estate!

3. Unnecessary animation

A fairly generic one, but it does irritate me when an animation on a page doesn’t convey any real meaning. I get menus that slide out from where you have to hover to make them appear. I don’t get an arrow that rotates 90 degrees when I click on it to expand a node… what’s wrong with the old school plus and minus?

this is just an image... but you can see this little guy working on google groups

2. Confusing galleries (where you have to click on the image to get it to go away)

Title says it all really, the first time I saw these I didn’t know what to do to hide the image. I click on a thumbnail, the large image is displayed but no cross is presented – I instinctively try the ‘escape’ key but that doesn’t work either. Eventually I figure out, you have to click on the image to hide it. That seems to make more sense on a touch screen, when I’m using a mouse it just doesn’t seem intuitive. Maybe it is just me being stupid, but I’ve since seen many other smart folks having the exact same problem, so I don’t feel so bad.

1. Instant search

This needs no introduction: you start typing in a Google search and ooh – there’s the exact page you’re after, but… you carried on typing, D’oh! So you lost that search result and have to back space and wait for every previous instant search result to check for the page you’re looking for.
I know, you can turn this feature off on Google, really the problem for me is that I actually genuinely like the idea. I think implementations of this feature have improved over time and suit some sites very well. The thing that I think is lacking is integration with the browser’s ‘back’ button. I wish I could get the previous search results back in a straightforward way like this.

Summary

Well there you have it, a fairly unintelligent rant about my gripes with some of the popular user experience features we see today. I’m sure everyone has their own issues they face with certain web UI components and I’d be interested to hear others’ experiences.

And now for something completely different – meadmaking!

Every once in a while its good to indulge in some of your alternative passions. In the spirit of new beginnings I have started this year well by brewing some mead!

Mead is a wonderful honey wine, with arguably the longest history of all alcoholic beverages consumed by man. As a way of recording my attempts at producing a fine quality drink, here are a couple of recipes for meads I’ve recently finished bottling:

Medium Sweet Mead

Makes 2 gallons.

3x 454g Tesco Pure Clear Honey
2x 340g Tesco Finest Orange Blossom Honey
2x 340g Gales Blossom Honey Clear
(2.72kg Honey in total)

1.5L hot water
4.7L cold water

4 tsp sugar, 1 tsp yeast nutrient, 2 tsp yeast

Ferment with high alcohol wine yeast for at least a week, then rack and leave for 2 weeks for secondary fermentation. Wait until all signs of fermentation have stopped, racking periodically as desired, then bottle. Ideally age the mead for at least six months in a cool place.

Medium Sweet Spiced Mead (Metheglin)

In the secondary fermentation phase add the following ingredients per gallon:
1x cinnamon stick
1 inch root ginger thinly sliced
2 tsp nutmeg
1 – 3 cloves
1 – 2 tbsp freshly squeezed lemon juice

When it comes to bottling or if racking for a second time, strain through a sieve or if possible wine filter.

Medium Sweet Berry Mead (Melomel)

In the seconday fermentation phase add the following ingredients per gallon:
Roughly 3/4 L raspberry and cranberry juice.

Tasting notes

You can tell a lot about how a mead will turn out from the aroma and and taste of the honey(s) you are using. Out of those used in this batch I have to say my preference was for the Gale’s Blossom Honey. While it is only a blended honey it was lacking the harsher characteristics of the other honeys and might well make a good base honey or starter for a new meadmaker to try. Sweeter meads have more character than dry meads, but due to a higher honey content they can also take on some of the less pleasant flavours of the honey. Therefore they probably benefit much more from the ageing process than drier meads.

From an initial taste the metheglin has a lovely warmth to it, a nice after-taste and a very unusual aroma. In terms of the quantity of spices used these are good experimental amounts, certainly enough to pick out the flavours but not so strong as to be overwhelming. The melomel is a rosé colour and tastes very fruity, not dissimilar to a fruit liquor or fortified wine.

It will be interesting to see how well they age, if any lasts long enough to find out!

It doesn’t have to be the cloud vs software

The word cloud used in the context of technology evokes a conflicted reaction from me. I am simultaneously both compelled and repelled by changes in the technology industry under the banner of ‘the cloud’.

It’s important to be clear about what I am discussing here. In its rawest definition cloud computing means technology delivered over the internet. Essentially the term cloud is used interchangeably where we might have once simply talked about internet or web based products.

Many vendors offer different types of cloud services under different umbrellas (most popularly Software as a Service, Platform as a Service and Infrastructure as a Service – SaaS, PaaS and IaaS). The vast majority of these services, are essentially software of one form or another, usually sold on a scalable pricing model – out with the software licence, in with the pay as you go business model.

The end goal of using cloud solutions is that every bit of technology used in an organisation is handled and exists remotely. That means you use virtual computers, virtual servers, and web applications for everything. It also should mean that all software you use is easily integrated through the vendors’ use of open standards which allows for easier sharing and use of information.

The cloud vision is one of a brave new world where things are available everywhere at any time, all through the internet. The ultimate message from some vendors is that software and its development is irrelevant to users, and all they need know is that they are using technology ‘in the cloud’.

Its a really nice picture to paint, and one that is causing a big growth in provision and use of cloud technologies. The discerning reader may feel that there is a ‘however’ hanging in the air. This ‘however’ is about the reality of what software is and how it has been developed and provided for decades (a long time in the IT industry). These business models and technologies are nothing new. Whether things exist on-site or remotely, and whether they are physical or virtual, the problem domain is the same. Remember those open standards I mentioned that helps this technology to be easily integrated? There may be no surprises that vendors in fact aren’t adhering to them. Web applications are, both visually and behind the scenes, not all that different to desktop applications – they still have to solve business problems and do all the same things they did before, they are just delivered in a more accessible and scalable way.

What about companies that are offering to take care of all your technology by ‘taking your organisation to the cloud’, removing the need for any involvement in software development entirely and the choice of software utilised? Well the problem is that you end up with very general all-purpose solutions which implement many features that different customers want, which others may not. There is good reason that a lot of business software is still designed and developed in consultation with an individual customer, because they have very specific needs. The more you clutter software up with irrelevant features, the harder it is to use and therefore the less marketable it becomes. What you end up if you try to do everthing for everyone is something that is paradoxically very general but complex. If you envisage how customers belong to different portions of a Venn diagram (think Google+ circles if you prefer), you start to realise that actually, you need the flexibility to accomodate the very varied target market. Or you need to provide a niche product which is of course what many software companies have done succesfully in the past. In my opinion this latter option is a much better way for cloud vendors to work.

My conclusion then is that the way forward for ‘the cloud’ is to stop thinking of it as a magical all encompassing environment for your technology. Instead I strongly believe there should be a varied vibrant market of ready made cloud solutions which aim to solve particular problems, and also businesses which offer a bespoke cloud solutions. Essentially I’m proposing a much simpler view of the cloud – take the software and IT industry as it currently exists and push as much as is beneficial out to the internet. But don’t try and reinvent what software and IT is, otherwise you risk throwing away every bit of it that has evolved thus far and needlessly introducing uneccesary change into customers’ businesses, which they could come to resent you for.

Dennis Ritchie passes away… Paying tribute to the unsung heroes of technology

In recent days Steve Jobs’ sad death has been heavily covered by bloggers and the press, along with summaries of his life achievements. Another key figure in the development of the technology we all use everyday has also sadly passed away recently. Dennis Ritchie was best known for being the creator of the C programming language.

Tributes flooding in on Hacker News provide an excellent insight into his impact on the world around us:

There are several billion people using many billions of devices every day. From the code in your microwave to massive computing clusters, virtually all of our software can trace its ancestry back to this man’s intellectual output. I’m eternally grateful for his life and contributions to humanity. – steveb

One commenter summed it up for all those programmers out there:

 #include <stdio.h> main() {   
 printf("goodbye, world\n");  
} - bootload

It is worth remembering that while there are many individuals who have made high profile contributions to the industry, there are scores more who either due to personal preference to lead more private lives or the nature of their work never get much recognition the public domain. So not only would I like to pay tribute to this great man, but also to all those out there without whom the world would be a very different place. So a warm thank you goes out to all those people, their families have every right to be proud.

Moving on

Very soon I shall be joining a new company, Open Objects, in Cambridge and moving to the area. I am forever grateful for the experience gained at my previous employer and I wish them all the best for the future. I’ll be moving to the area with my lovely girlfriend whom I’m proud to say will begin her graduate job in Cambridge also.

I look forward to this new chapter, and hope to continue blogging about development and the tech industry in the future.

As an aside I’ve recently been working on some of the security aspects of web applications and I came across this nice article introducing a novel cryptography technique which reinforces the fact that some of us techies can relate our work to the real world and common social experience!

Disoriented programming

github enables open source developers to collaborate effectively

Here’s a little something to chew over – what would happen if we removed the structure and constraints imposed on the working developer? Would everything descend into chaos and be wholly unproductive… or would great things emerge with natural order from the lack of burocracy and politics? There has always been much discussion of Google’s ’20% time’, allocated to developers to work on whatever they want. It is difficult to analyse how or whether this works in practice, but there are some great examples of work done purely because it is the developer’s choice in the open source and philanthropic spheres.

Some of this unstructured work glues together the many systems we take for granted every day, and often those responsible deliver quality unrivalled in the corporate world without receiving a penny in return. With an increasing buzz around tech startups, social media and ‘cloud’ technologies, some organisations are beginning to implement different approaches towards their software development practices, and a few are making good money from it. There is a definite likelihood that developers who have been working for large firms for some time inherit quite a blinkered view of the problem domain on which they are working.

While I don’t necessarily agree that the product centric world of venture capital seeking startups is the way forward for entrepreneurial developers, I do think exploring new avenues for building innovative and useful software is important. When one begins to analyse the reasons for highly structured development approaches, it is obvious that it is for the most part a direct result of the way in which business is commissioned and carried out, so it is very likely a different approach to both business as well development is necessary for the change to be successful.

With increasing regularity I find myself turning to open source software to solve problems I’ve encountered. The pool of resources publicly available at sites like GitHub is growing rapidly, as are businesses founded on open source technology. Not all open source development is disorganised or lacking in structure but the work is certainly distributed and grows very differently to traditional closed source software.

The real boundary I’m trying to draw here is between work a developer has to do, and work a developer wants to do. I believe that in the latter case the results speak for themselves.

…You can find me on GitHub here.

The real cost of student debt

I recently graduated from university and began full time employment in the software industry. The discussion over the rise in tuition fees that has taken place in the UK and the general situation of having just finished a degree has got me thinking about attending university and its financial viability.

My own opinion is rapidly heading towards the conclusion that university at the very least does not offer a majority of people any kind of financial gain on balance. It would seem to me that for most people the only real ‘career-wise’ benefit of getting a degree is to be found in the opening of a few extra doors in terms of career progression over the lifetime of the graduate. However this is dependent upon the perceived quality of the the degree and university in question.

The real debt students face is not simply due to the tuition fees they must pay back, but includes the extra cost of living supplemented for most students by the maintenance loan available. This loan provides only a fraction of the amount of money necessary to survive a very frugal lifestyle in student accommodation with current food and service prices, and the debt will never be underwritten. Additionally there is the non monetary costs of the time and efforts invested in studying, which for a decent degree I would argue are often greater than the time and effort required in most entry level jobs.

Of course even though university doesn’t offer the guarantee of overall monetary gain, it does offer much more besides this in terms of life experience, intellectual stimulation, and an opportunity to expand one’s social horizons.

I decided to undertake my degree after a false-start at another university followed by a period of working in a ‘proper’ job. This helped me to appreciate more about what attending university can offer. When I look back on my student days, I can honestly say it was extremely worthwhile even if it hadn’t given me any advantage in terms of earning power and employability. But that was largely due to people met and experiences had that money can’t buy.

In my mind the question to ask about rising tuition fees is not will it offer more earning power to future graduates, but what is the money really being spent wasted on?

meetingShed beta continues…

Time for a quick update on meetingShed and how the beta phase is going. New visitors to the site are on the up, this month seeing over a 50% increase in genuine traffic. The feedback received has been very useful and we are still looking for more so please keep it coming!

That said the uptake of new users has still been slow, and we are working to spread the word about meetingShed further. Refining the application is still an important aim but the response to feedback obviously has to be scaled depending upon the interest received.

A sustainable and long term approach is being taken to this project and we hope to create something lasting that becomes important enough to users so that they keep coming back. We hope to please users of calendar and scheduling software with the simplicity of meetingShed and its integration with Google Calendar. Do not hesitate to shoot any questions or criticism to:

support[at]meetingshed.com

Are all standards inherently flawed?

In the world of software development when you come to implement something for real, using technologies that are supposed to conform to open standards, it is very often the case that those technologies  are not quite as rigidly standardised as you might have hoped.

To put this into a wider context most computer users would relate to – I’m willing to bet most have come across the odd device that somehow doesn’t seem to work when plugged into that fantastically universal and seemingly completely standardised connector called USB. The reason for this is some way down the line either the device manufacturer or the computer manufacturer have deviated from the standard. Naughty manufacturers, may be the initial response of a frustrated user, but we shouldn’t go around making assumptions that it is necessarily their fault. I say this because in reality, when a technology is implemented you have to deal with the complexities introduced by real world problems. I refer to the diagram in this post to give an illustration of what I’m getting at.

the sims model of standard decay in technologies!

A quick example in the Java world – The Enterprise JavaBeans technology in combination with Java Persistence Architecture is supposed to provide a layer of abstraction upon database interaction, known to developers as object relational mapping. The holy grail of object relational mapping is for the developer not to have to worry about issues relating to the particular relational database they are using and the application server on which their code should be running. The EJB technology is supposed to meet this goal. In reality there are inevitable implementation issues such as primary key generation options available differing depending on the database and entity relationship declarations working differently on different application servers.

Of course such a technology as EJBs shouldn’t be overlooked as a result of these flaws, because in fact the level of standardisation and generalisation involved is a great achievement in itself.

The inherent complexity of implementing technologies makes me wonder whether standards shouldn’t be defined up to a clear agreed point, beyond which vendors that implement a particular technology should define a layer which sits between the standard and the non-standard sections of the implementation which behaves according to… the vendors own standard (for an interface between standard and non-standard features!).

A simplified version of the circuitous argument above: standards should perhaps be more rigid and less ambitious, and any non-standard shenanigans should be extensions to the standard implemented, rather than modifications.

University project complete, outlook on current affairs and lessons learnt over the last few years

I’ve finally completed the lion’s share of the work and submission for a large university project today and as one tends to do when they have exam revision to be done I am reflecting [procrastinating] on life in general. This post will start with an abstract and possibly largely irrelevant outlook on the world today, and progress to talk about actual things I’ve discovered through the course of the last few years.

A perceived observation one could make about both international and national (UK) current affairs this year is that things are, at least in part, chaotic. I’m a big believer in choas. That is to say the literal sense of the word, and that I believe that the world seems to behave in a completely random and chaotic way. But there are obvious signs that order emerges from this chaos. Sometimes that order seems to be very meaningful. This is a somewhat philosophical, and potentially theological area of discussion as some believe these ordered events are governed by physical laws and others from a higher power. I plump for the former. Though I’m willing to accept the latter is a possibility I find it less compelling.

Anyway the point is, governments are being overthrown overseas and here in the UK we certainly have a chaotic political environment. Such chaos can lead you into thinking quite pessimistically about the future of the world that may be inherited by the young generations of today (such as myself) and the younger generations yet to come. The desperate eyes of those struggling to make ends meet in a precarious economic situation would dampen anyone’s spirits. The important thing to remember is that order will likely emerge from this chaos and that it has the potential to be much improved on the order that existed before. I think that outlook allows one to see a glimmer of hope and even excitement at what could eventually be. As I graduate very soon, the feeling of entering a brave new world is somewhat amplified.

So with that said (and most readers probably wondering what on earth I’m on about) I thought I would summarise some of the lessons I have learnt in recent years that might help in moving forward:

If you want to build or achieve something, and haven’t yet started, begin now or abandon it entirely.

It is very possible to get sick of something you once loved doing. Attempting to turn something into a successful business is quite likely to suck the fun out of it. There will always be obstacles to overcome and if you try push through them too quickly by working too hard, you’ll get sick of what you were trying to achieve. At that stage you really need to take a step back and some time out, because you’re in danger of screwing it up. After some time you may well get back into a place where you love doing it again.
(I’m always sceptical of  people that are overly passionate about their business… it probably means they haven’t hit any of the many inevitable problems they face yet).

People don’t care about products. Very few end users of products such as web apps really have much concern for those that they use. No one product is a panacea for life in today’s world. If it disappeared for some reason a large chunk of facebook’s user base would probably be mildly frustrated for a moment and then just get on with their lives. And this is a big tech company we are talking about.

If you want progress, it helps have patience and be prepared to change.

We live in a culture where praise is massively outweighed by criticism, take it seriously when people say you’ve done a good job and use positive feedback to figure out what you’re fantastic at doing. Take on criticism as well, but don’t forget that a few words of praise being so rare is worth an awful lot.

Well that’s about it for now. I wanted to make this a fairly general post accessible to a much wider audience than my usual. Sometimes its important to take a breather and unload what is on your mind, and hopefully you might find some part of it interesting. I’ll be back soon with an introduction to programming using Prolog, a mouse and some cheese! Look out for that soon. In the mean time for me and probably many thousands of others across the country at the moment, it is back to revision :(

meetingShed – easy meeting scheduling with Google Calendar

Today is the beta launch of my hosted web app called meetingShed. It is a tool for scheduling and booking meetings (and other events) which uses people’s Google Calendar data to find acceptable meeting times.

Some of the features include:

  • Google Calendar integration
  • Import Google Contacts
  • Narrow down time slots and avoid double bookings based on attendee and location availability
  • Notifications by email
  • Assign positions for a location using Google Maps, allowing all attendees to receive a map in the notification email

The app is now live and can be tried out at www.meetingshed.com

The scheduling functionality uses the KMS-dev development platform for logic programming.

I urge anyone reading to please give it a go and any feedback you can provide would be gratefully received!

KMS-dev: development platform for logic programming

KMS-dev, a platform for integrating SWI-Prolog software components with web applications has now been released as Open Source Software.

The platform uses a Java based web service interface to allow communication with an SWI-Prolog instance.

Logic programming is a powerful programming paradigm, offering benefits of decreased development time and increased code readability and modifiability. It is particularly effective for software involving decision making and constraint satisfaction.

We hope the platform will benefit from contribution by the Open Source and Prolog community and we welcome developers to try it out.

A quick start guide, further information and the KMS-dev platform download are available at:

kms.intelligent-architectures.co.uk