Skip to content

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

EJBs in the three tier system

This is primarily written as a basic primer for those CMP students on the same course as me that are struggling and or frustrated with Enterprise JavaBeans. I won’t give any course work specific info, but hopefully this may help at least a bit.

Firstly I should probably mention I have worked in a real software development environment coding EJBs and I’m also using the technology in my third year project, so there is a real practical use for it in the big bad world.

So, what the heck is all this EJB stuff?
Well Enterprise JavaBeans allow you, amongst other things, to get data from a database and manipulate it. Using EJBs adds an extra tier to your system architecture, which essentially cuts down on the amount of SQL and database connectivity code you have to write (see here for more info about web application architecture). You’ve got three main types of beans:

  • Entity beans – these represent tables in the database. They’re just a class with a few annotations which tell the EJB container to map between the table columns and the fields in the class.
  • Example:
    @Entity
    @Table(name=”YOUR_TABLE_NAME_HERE”)
    public class EntityName implements Serializable {
    private Integer id; //column 1
    private String name; //column 2
    private List<AnotherEntity> otherEntities = new ArrayList<AnotherEntity>(); //a one to many relationship
    public EntityName () { }
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY) //container generates id
    @Column(name=”id”) //here we tell the container the name of the column this field maps to
    public Integer getId() {
    return id;
    }
    public void setId(Integer id) {
    this.id = id;
    }
    @Column(name=”name”)
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    @OneToMany(cascade={CascadeType.ALL},
    fetch=FetchType.EAGER,
    orphanRemoval=true)
    @JoinTable(name=”YOUR_JOIN_TABLE_HERE”,
    joinColumns={@JoinColumn(name=”entity_id”)},
    inverseJoinColumns={@JoinColumn(name=”another_entity_id”)})
    public List<AnotherEntity> getOtherEntities() {
    return otherEntities;
    }
    public void setOtherEntities(List<AnotherEntities> entities) {
    this.otherEntities = entities;
    }

  • Session Beans – this is where you stick all your actual code which does stuff with the entities.
  • Example:
  • @Stateless
  • public class DoStuffSessionBean implements DoStuffInterface {
  • @PersistenceContext(unitName=”PERSISTENCE_CONTEXT”) //defines where mapping to database
  • private EntityManager entityManager; //entity manager allows you to insert, update and delete tables in the database
  • @Override
  • public AnotherEntity findAnotherEntityById(Integer id) {
  • try {
  • return entityManager.find(Location.class, id);
  • } catch(NoResultException e) {
  • return null;
  • }
  • }
    … (thats a pretty boring session bean, see entityManager.merge, entityManager.persist and entityManager.remove for more things you can do
  • Message Driven Beans, these are nothing to do with the database but are very useful for delivering messages for event driven processes, not really covered in the module we are carrying out though

Great, but how do I set it all up in the first place?
That’s half the battle with this sort of stuff. I use Eclipse IDE, you can create a new enterprise application which gives a nice structure to your project, NetBeans will also do this for you though. Its worth noting our lab machines have no facilities for developing EJB components as NetBeans doesn’t link to any EJB compatible server (e.g. JBOSS or Glassfish, it does have TomCat but this is only a servlet container so can’t do it), and the version of Eclipse is not Enterprise Edition.
So its down to using your own machines for development and then deploying on JBOSS when you’re done, or fiddle with the lab machines a bit… Eclipse runs out of a directory (of course you would ask a member of staff first before doing this in case we are not supposed to do this…)

OK what’s the point in doing it this way?
Aside from the benefits already mentioned, EJBs are very scalable due to session beans. Instead of opening and closing database connections specifically, the EJB container manages all this for you and selects a bean out of a pool of them which are ready and waiting to process the method you want to perform. Basically when you have thousands of users of a system, all heavily hitting the database it enables your web application to still respond quickly.

How does it fit in with the rest of the application?
Well, you use your session bean to gain access to, create and modify your entity beans. You can access the session bean from a servlet (using a JNDI lookup or dependancy injection – a simple @EJB annotation). There is some setup to do in the way of XML files, but IDEs can get you a long way in that respect.

Anything else?
There are loads of great tutorials but be aware there are a shed load of different ways to implement EJBs, so make sure at the very least its an example for EJB 3.0 you’re looking at. If something isn’t working out from one tutorial, take a look at some others and see what the most commonly used approaches are. 

I hope that very short intro is in some part useful to people. I have very little time to put into something like this, but I know there are going to be people tearing their hair out (to put it mildly) with this particular course work.

Stuff I’ve done and stuff I’ve learnt…

In the last few months I’ve been working intensively on my current main project. It’s easy to lose perspective on certain things when you’re working so closely to a particular project. So in a quick breather while one of my applications is building for the several hundredth time, I thought I would recap a bit.

Amidst finishing my degree I’ve been working on a project for what I estimate to be over 250 hours of development time alone. In this time I’ve come across many obstacles and new technologies. Here is a list of just some of those I’ve been using in recent months:

  • Constraint Logic Programming for practical applications such as resource planning and scheduling
  • Building custom widgetsets in Vaadin
  • RESTful Web Services
  • SOAP Web Services
  • More EJB based Object Relational Mapping
  • Google Calendar and Contacts Data APIs
  • Google Accounts OAuth authentication – which yes I have now got working, more info to follow soon
  • Google GMail API
  • Java Message Service (JMS)

And there is more to come as I move to going live with a product I’m developing from all these bits and pieces. This is not just a case of – ‘yeah I’ve looked at few code examples on the internet’, this is learning through application of these technologies to the extent that they work well with my software. I’ve not only learnt things, but learnt them without any assistance and integrated them together in applications. When I look back on all this, it makes me realise how much value I’ve accumulated as a developer in this time, and it also makes me feel much less like I’m wasting my last few months of studenthood.

Sure its been a utter slog at times with a mountain of information to digest and development to get through, but I think it is worth it in the long run.

When I look at the proportion of people who started our degree course who will actually end up being a software developer it is a little sad because so many had the potential but are unlikely to end up going into software at all. I’m not concerned for myself, those that have stuck it out and put the time in will in the next few years become incredibly valuable to employers. Its just a shame that so few will make the most of the opportunity, and it needs to change.

OAuth for Google Data API – not that easy to implement

Google are fantastic at building APIs, but their authentication mechanisms (while I’m sure are very secure) are not always the easiest thing to implement.

I’m working with the Google Data APIs at the moment for my project, for which an app needs access to google accounts, cue OAuth.

Anyone who doesn’t agree it is difficult to use need look no further than the exceptions you can expect if something goes wrong:

Yay! There’s no short-cut either. One thing to be thankful for is the fact that the ClientLogin authentication mechanism (really only meant for installed apps) can be implemented in two lines of code and provides a great way of testing web apps in the development phase. Unfortunately eventually you’ll have to implement OAuth if you want a properly secure web app for your users.

I will try and post some advice to others that need to implement OAuth once I figure it out. Even Google themselves admit in the documentation it is not the easiest of things to use, which does speak volumes. Supposedly however it helps make your apps authentication extensible if using other providers web services, although I’ve yet to check how many other web service providers use OAuth.

Vaadin web UI framework

Now that web applications require increasingly sophisticated user interfaces, nearly all web app developers have some experience of a user interface framework. Dynamic pages such as JSPs in Java EE and ASPs in .NET don’t allow for these richer user experiences. Delivering a range of features from simple text fields to full blown desktop – style applications is now possible through these ‘AJAX’ web technologies. There are many different approaches taken by these frameworks and platforms and I have blogged previously about some of the open source offerings such as OpenLaszlo, ThinWire and GWT.

Lately I have been using Vaadin which provides an excellent environment for rapid web UI development for Java developers. Vaadin is actually built on top of GWT, the principle advantage of which was that it required no hand-coding of javascript which is notoriously fiddly. GWT works by compiling Java code into javascript. Vaadin takes this concept a step further and renders javascript on the fly, essentially pushing everything the developer writes server side. This eliminates the need for RPC calls to deal with more complex features (not appropriate to be running on the client’s browser) such as object relational mapping with EJBs.

Essentially Vaadin allows Java developers to work solely in Java with whichever APIs and libraries they wish without thinking about what’s happening in the client and what’s happening on the server. In addition Vaadin provides some very slick, open source visual components to use in one’s application which certainly speeds up development time.

This approach is very similar to that taken in the ThinWire AJAX platform, however ThinWire unfortunately hit a lack of community support and current development has slowed right down. In contrast Vaadin, created by a Finnish company (previously called The IT Mill, now simply Vaadin Ltd), has a commercial backing from consultancy and support as well as a vibrant open source community.

For now, I think that suffices as a good introduction to the framework. Now I’ve worked with such visually and programmatically appealing platforms as this, I find it quite surprising there are not more development companies using these kinds of technology particularly if they are develping web apps and hand coding large amounts of javascript. A good starting point is the Vaadin component sampler which can be found here.

Taking Intelligent Architectures to the Cloud Expo

A week and a half ago I represented my software development organisation, Intelligent Architectures, at the combined Cloud, Linux and Open Source Expo. I was mainly promoting a project that has grown out of my final year university work. It was an interesting experience and a good opportunity for me to talk some people about this software.

There were several important things I learned while at the Expo:

  • While I’m not qualified to talk at length about it myself, it is abundantly clear that cloud computing confuses people. All of these people seemed plenty well equipped with the knowledge to understand technical concepts. The problem has to do with the blurred definition of what the cloud really is. I suppose in that sense it’s very fitting that much like the physical entities in the atmosphere that the word cloud represents, the meaning of cloud computing is similarly amorphous.
  • Software development in the UK needs to grow as an industry. Plenty of people talking to me were bemoaning the lack of quality developers and development companies that are based in the UK. Outsourcing happens a lot in the current economic climate, and while some developers abroad are genuinely offering value for money, many offer a false economy. There are many capable software developers young and old in the UK that have all the expertise and experience to deliver the absolute highest quality software. I think our industry needs investment and I also think the manner in which software is typically commissioned, developed and sold may need to change in order for the industry to grow.
  • The project needs a few things:

Knowledge Management Services becomes KMS-dev and KMS-apps

The experience of the Expo has made me realise that just offering consultancy or marketing a particular product to the target market is not necessarily the best way to get noticed.

To demonstrate the project further I now aim to have some more material online by the time the major development is finished. Its clear that some people are interested in the development platform itself, and some are interested in the applications possible to develop using the platform. Unfortunately the two sets of interested parties seem to be in most cases mutually exclusive. Therefore I’m going to split the online information into two distinct sections: KMS-dev where one can learn a bit more about the development platform itself and KMS-apps which will showcase the sample applications and as well as generating interest I hope to launch at least one of the applications as a subscription service.

Another problem I’m hoping to tackle by setting the target of making demo material available online is that articulating the project is not easy, as it doesn’t lend itself to a quick hard-sell. This links in with the second point I made above: Some people really don’t seem comfortable discussing the development of bespoke software to solve particular business problems. In my experience though, discussion of business problems is the only way to make progress and provide someone with something they really need. I could speculate endlessly on the reasons for this reluctance, but there is one important possible reason I can do something about:

People want to digest something in their own time that will provide a concise way of assessing whether a product or service can offer them some value. With this in mind over the next few months I hope to have to have the KMS website live. It will represent a new approach to marketing the development platform and the software derived from it, which I hope may resonate with interested individuals and businesses.

Intelligent Architectures' stand at the expo

The Expo itself was a good experience and it was interesting to see the range of vendors and organisations that attend such an event. It has to be said that this event was the only affordable option for a small organisation to attend in comparison to astronomical charges made by most other computing event organisers, and there wasn’t any real compromise on the quality of the event either.

Presence at the Expo represents another step towards taking what started out as a simple idea and turning it into a desirable product to bring to market.

Exhibiting at Linux and Open Source Expo 2011 in London

In my post last week I wrote:

I hope in the near future to bring exciting news about further developments in my project work

Well next week (2-3rd February) I’ll be exhibiting my software project  as Intelligent Architectures’ founder and chief developer. Find out more information about the expo here. This will provide a much needed opportunity for my project to get some exposure and hopefully develop links with interested businesses.

It was a rather last minute decision so I’m currently in the throes of organising things for the expo, but I am looking forward to the opportunity it provides.

The event is free if you pre-register so please do come along and say hello!

Software projects in the new year

Looking on to this new year, it seems it will be a period of change and uncertainty for me as well as ambition and opportunities.

Project

My university project is developing nicely, to the point I have a prototype demo and am in the early stages of marketing aspects of it as a commercial software product.  From the initial response, it seems there are various options I could choose in terms of turning the project into a commercial venture. While my ambition is to mould the software into a useful product based on a businesses needs and sell it to them, if I’m unlucky in finding enough direct support I will explore other options. I’m keen to bring logic programming to the enterprise application table and for people to realise the potential of this idea.

Mobile

My foray into the world of mobile application development has proved a mixed bag. It is exciting in terms of innovation opportunities but I don’t believe its commercially viable currently. Mobile apps, much like social-network style web apps, only really make good money in a minority of cases. Being in the right place in the right time and also very lucky is the name of the game. Nevertheless, a profit no matter how small should not be downplayed.

Currently my earnings from my three Android apps are of a scale that is enough to pay my web hosting. While that’s certainly not a lot of money, it is at least an alternative to incorporating advertising into this blog which I have resisted so far due to the intrusion on user experience that web ads cause. If I have satisfied a few people with my fairly simple mobile apps instead, I figure that’s a somewhat more satisfying way to pay for the ability to ramble on and publish it to the world, amongst other more useful material!

Pushing forward

Its easy to get demotivated if people aren’t beating down your door wanting to know about something you’re doing that you think is a great project. However the truth is I have a lot of encouraging things to be thankful for. Not least of all I feel confident I’ll have work of some sort when I graduate, which in at the moment counts for a lot.

Continuing to believe in and develop something has helped me to also develop personally in terms of my skills in expressing and presenting material, and in a loose sense (at the risk of sounding non-technical) improve my soft skills in business project management.

I hope in the near future to bring exciting news about further developments in my project work.

Programming… its really not that scary

It was only until recently that, when taking a step back from what I have been working on, I realised how dramatically my attitude towards programming has changed.

Four years ago I started out on a journey that transformed my anxieties about programming, something that now forms an integral part of my career choice. At that time, programming was something I knew a bit about, computers were something I knew a lot about. But I still had a lot of apprehension about whether I could gain an appreciation and detailed understanding of both.

Through a period of (at times) excellent academic tuition,  invaluable industry experience and sheer hard work, my worries about tackling technical problems slowly eroded, and my confidence in my ability has soared and I’m not ashamed to say it!

Now there’s phrases there like ‘academia’ and ‘hard work’ that people have extremely varied perceptions about. Probably some of what you think about those things is true, but a lot of it probably isn’t. By ‘hard work’ I don’t mean work that is really difficult to do, I mean a large volume of work that requires perseverance. I’m going to go out on a limb here and say… if you’re going to be a programmer, the number one attribute that can assist you is not intelligence, but perseverance. I don’t have an extremely high IQ, I don’t consider myself naturally academic, and I will never solve any of big problems facing humanity. However my academic achievements in terms the degree I am studying for, and practical achievements in terms of good quality software I have developed (and will continue to) can at the very least provide a factual basis for me to say, without fear of arrogance, I can program.

The more you practice, learn and progress the less impervious technical challenges will seem to you. This is incredibly liberating. If you’re anything like me this will mean the following changes will occur:

  • When you see a screen chock-full of code, you start to make sense of it by examining the structure instead of being frightened away at the first sight of it. Even if it’s written in a language you don’t know.
  • You’ll be much more inclined to dive straight in and alter it.
  • You start formatting things so that you can see more code on the screen at once, instead of leaving excessive amounts of white space
  • You’ll know when you need to step back from what you’re doing and make some notes and diagrams to better develop you’re ideas.
  • You’ll know at which point you should ask for help or the opinions of others (and where to go for the assistance depending on the scenario)

So my point really is in the title of this post. Am I selling programming short? I don’t think so because there’s many facets to it and I’m not saying its all easy and plain sailing. But when you’re told programming is not that scary enough times you really start to believe it, and for me that’s one become one of my main beliefs and as a result motivated me to learn so much in so little time.