Skip to content

Why I have warmed to Prolog

I’ll be honest in that I used to find programming languages which involved a very compact looking syntax somewhat scary to think about. It is hard to interpret shorthand-style languages. However having got to know the syntax and general mindset required to program in Prolog I now find it quite straightforward, and dare I say it reasonably enjoyable.
There are a few more important factors that come into play in my fondness of the language:
  • Programming Logic (ProLog) is exactly what it says on the tin. There are no frills, and no other programming paradigms mixed in which I count as a huge advantage. Most other languages that implement First Order Logic / Horn Clauses seem to try to be a jack of all trades and as the proverbial goes they end up being master of [insert-expletive]-all.
  • It has a very cerebral feel to it, allowing a developer to implement quite complex, intelligent, procedures in relatively few lines of code. The challenge is more about the problems you are trying to solve rather than implementing a whole framework of APIs to produce a complete systems solution.
With this in mind, I intend to not let the AI theory and Prolog programming knowledge I am currently rapidly acquiring stagnate and become a fond but distant memory.
AI and logic seems to have hit on times of slow progress and relative disinterest, which I believe is a great shame as it has a wider and more practically-tangible potential than it is often given credit for.

Making AI accessible

I’ve been thinking a lot lately about AI and how it can be applied in different spheres of computing. Surprisingly despite the usefulness of logic and AI techniques, languages like Prolog are often neglected by developers.

Interestingly SWI-Prolog has many libraries making it pretty much ready for use in a distributed environment, and it wouldn’t seem to hard to implement a form of web-service using the Prolog engine to make logical deductions. In fact I’m working on a specification for a system which would make knowledge/intelligence based software more accessible to end-users, potential business adopters and software developers alike.

It will be interesting to see how things pan out with this development, I hope to be able to have a demonstrable system which can show the potential of intelligence based software architecture.

Prolog and artificial intelligence

Time I think for a bit of variety. I’ve recently started lectures on the subject of artificial intelligence and AI programming, and I have to say I find the whole subject thoroughly interesting if somewhat mind-melting if you think about it too much. There are applications for intelligent systems in the spheres of business and entertainment including game-playing, path-finding, robotics and expert systems.

The programming language we’ve been studying for this module is Prolog which takes some getting used to. We were given further lectures on propositional and predicate logic before we started the Prolog work and this has probably helped to understand the reasoning behind a Prolog declaration and procedure.

A brief point I’d like to make is that many introductory tutorials  will name their variables and predicates (functions if you like) with such helpful convention as X, Y, Z / A, B, C and P, Q, R. Needless to say this doesn’t help to convey much understanding about the operation of such functions. Prolog programming does indeed require a massive shift in perspective from programming in many other languages, and many built-in predicates are defined in this way so it is important to be able to see X, Y, Z for what they are in relation to the application of the predicate. However it might do well to describe your own identifiers more clearly. For example I found it much easier to write a function that finds the maximum number in a list using: CurrentMax and Max than X and Y!

The message is simple, but it might assist those who are struggling to understand more complicated aspects of the programming such as when lists and elements from those lists are utilised. e.g. [X | Y] can become [Element | List].

EJB persistence in a ThinWire web application

So it seems a ThinWire web application can quite easily be integrated with more advanced Java EE features. In the screenshot below you can see an updated version of my testing environment. The application now has a screen to query and update a MySQL database via a remote EJB session bean. This shows that the business logic (in the EJB-JAR) can still be highly separated from the user interface (the web application WAR).

After spending some time now using the ThinWire RIA platform I can honestly say it is definitely a mature and powerful tool for building web applications that require complex user interface features. While my test application still does not extensively test every feature one may require, it shows ThinWire is a highly viable candidate for developing business applications.

Additionally this has been a useful learning experience from my personal point of view, as a good example of deploying an EAR (Enterprise Archive) carrying a distributed system using sophisticated persistence architecture.

ThinWire progress

Over the last few days I’ve been working on developing an application designed to assess the potential of the ThinWire RIA platform as a tool for building production quality rich web applications.

The platform makes producing an application from scratch relatively effortless. There is some initial set-up involved – including removing the Mac files and folders from the ThinWire installation if you’re using Windows (there must have been a better way than the route I took which was to manually delete every one). But I found creating a buildable and deployable application, with an associated Eclipse project, was a very rapid process. The sample applications are fairly sensibly structured in order to give you a very good idea as to an appropriate development pattern to follow.

I now have an application in a healthy enough state to start testing things like persistence of entities to and from a database. It will be interesting to see if there are any behavior quirks due to the design pattern of the platform or if, as claimed, it really can cope with any Java feature you would wish to integrate into your user interface.

Building a ThinWire application – prelude

The first important note to make about the ThinWire RIA platform is that it comes with fully buildable example applications. By fully buildable I mean straight out of the box you can delve into the applications, alter and redeploy them. This may seem like a commodity where learning a new platform is concerned but many others only include code snippets or non-deployable examples that function in an unrealistic environment solely developed for testing.

Some nice things that you get include a ready to start apache tomcat application server, but also more usefully an apache ant build script for both example applications.

The build script is an excellent addition for any developer looking to rapidly develop deployable and fully functional applications. As far as I can see from examining this script and building my own test app out of it the build and deployment procedure is one of the most straightforward I have come across for an AJAX / RIA platform.

I strongly recommend developer who has never used an apache ant build script to develop and deploy their applications to look into it for future applications they may develop. IDE based deployment tools can only go so far to helping you develop and implement a web application.

Deliberating as to whether AJAX is actually a future-proof term

After thinking about my previous post for a second I realised that it is questionable as to whether it is really appropriate to use the term AJAX for many of the new ‘Rich Internet Application’ (RIA) platforms. All this jargon is harmful to the general perception of such technologies due to their inaccessibility to the uninitiated.

So in relatively simple terms an RIA is essentially just a web site transformed into a more complex web application through use of many common application user interface features such as trees, lists, calendar date pickers etc. But AJAX is a term used to describe the technology behind many of the original platforms that provide these rich user interfaces – Asynchronous JavaScript And XML. My problem here is with the XML part of the acronym as many of the newer platforms, to my knowledge ThinWire included, don’t actually directly manipulate XML in the user interface. Or at least its not part of the core functionality of the RIAs mechanism of operating. Sure you might be able to do stuff with XML data within the confines of the platform, but then you can also do stuff with many other data formats too and it would be nonsensical to list all these in an acronym describing the nature of how the RIA actually works.

Of course dropping the AX leaves ‘AJ’ which is not as audibly pleasing a word. AJ also could be prey to a similar fate as the XML in an (unlikely but possible) shift away from JavaScript as a browser language, and additionally a term describing that browser language says little about what it is used for anyway. I am coming round to the idea of calling such things RIA platforms instead to describe any kind of technology which might lie beneath a Rich Internet Application. As there are so many RIA platforms out there with many different modes of operation this seems like the logical solution.

ThinWire for AJAX development

ThinWire is an AJAX platform I’ve only fairly recently discovered, and feel unlike many others, worth a mention. The trouble with many AJAX platforms is that they tend to not offer a full package in terms of customisation and extensibility. My current favorite is GWT-Ext for its sheer versatility due to the server side code being pure Java and the client side Java that is converted into JavaScript. This offers much more scope than manipulating JavaScript directly or some new intermediary language.

What ThinWire does is push everything out to the server side code, which is written entirely in Java. There is no conversion of Java into JavaScript, the view the user gets is simply handled entirely by some server side code. This seems to me not a terrible model as your user interface can still be contained in a separate .jar than the main application logic to stop the wrong code bleeding into both. Additionally one can presumably use all features of the Java language as the UI components are simply Java classes all the way through. There seems to be a reasonably extensive library of visual components. Like GWT-Ext the UIs created with the ThinWire AJAX platform are event-based. The only downside seems to be that the project hasn’t been updated with new features for sometime, though bug fixes appear to still be being released.

Still if the whole package is essentially all Java, there shouldn’t be anything stopping a user extending the thing themselves for their own purposes. The key ’selling’ point of it is the pushing of the code responsible for the client side view out to the server.

Petition to save MySQL or damage Oracle-Sun merger?

A very quick post as a response to this petition hailed elsewhere as a righteous thing for open-source database MySQL:
http://www.helpmysql.org/en/petition

My take – brilliant; put yet another spanner in the works delaying Oracle’s acquisition of Sun and therefore jeopardise all of Sun’s products including Java which put simply seems to me much more important than MySQL.

At the end of the day business decisions are all about compromise, sometimes you have to sacrifice certain things in order to save others. In an uncertain economical climate the more the buy-out of Sun by Oracle is delayed the more damage could potentially occur. To take it to an extreme Oracle may never actually complete the purchase of Sun and then the future is bleak for all Sun technologies which would be a very bad thing indeed.

Function seems to follow form

I remember some years ago that the graphical environment offered by windowed operating systems seemed an immensely rich and interactive experience. The Windows Icons Menus Pointer (WIMP) model opened up the world of computers to an even more diverse range of users. Even more people who probably didn’t have a real need for computing started using them just because their usage became increasingly accessible.

Interestingly this enjoyable rich experience has since become one we take for granted. We wouldn’t ever dream of going back to a command-line interface for every application (although for some things, a command-line does indeed still make sense). Similarly people focused on the glitz of the world wide web early on in its development, and this again brought more diverse people to become users of computing technology.

However since the initial appeal of these media has faded, we have focused on the functionality of these things in getting our business done. As a result we have become much more impatient with the interfaces we use and less interested in the inner workings of the software itself. Instead of seeing abstract components of an interface we tend to see things literally as what they are supposed to represent.

René Magritte's 'this is not a pipe'

René Magritte's 'this is not a pipe'

This goal-oriented usage of computers has lead to a mostly two-tiered level of understanding amongst users. There are those that see the visual things they are manipulating as exactly what they represent. For them the interaction begins with their direct input put into the system and ends with the output which is generally received instantaneously. Then there are those that are aware of the underlying structures and models that are being manipulated by the software itself in order to carry out their instructions.

This variation in user perspective of computing technology is an interesting area of social differences relating to issues such as software ‘usability’. What is also interesting is the functional manner of usage users will eventually adopt with new technology. It does unfortunately breed a ‘why can’t the computer do a simple task I ask it’ mentality when a user encounters problems with an operation they are trying to perform: even if the operation is in fact actually incredibly complex in terms of the work that is carried out by the ‘computer’ and indeed any networked resources it may utilise.

Google Wave: google frustrated with Internet Explorer?

It seems google developers have been having major problems getting their new Google Wave web collaboration software to run in IE. Ignoring all the possible business motives , I’d just like to make a few comments about the actual technicalities of this.

Firstly any web developer worth their weight will know that Internet Explorer is indeed a frustrating platform to accommodate. IE does not support web standards in the same way as most other browsers and behaves very differently with each version. IE8 is better at consistently interpreting web pages and javascript but it is still not perfect (then again neither is any other particular browser IMO). However regardless of these inconsistencies web developers should still support IE to a certain extent as it is still one of the most widely used platforms for web browsing.

What makes me confused about Google’s admission they are finding IE support difficult is the fact that their own web development platforms for user interfaces, GWT and GWT-Ext, are relatively well supportive of IE. There are still bugs present when using many of the layout combinations, but I’ve worked with GWT-Ext for long enough to know that these are not insurmountable by a few CSS based bug fixes. And if I can resolve these problems I’m certain there are plenty of much cleverer individuals at Google who also can.

I know that Google Wave is not necessarily developed from the GWT/GWT-Ext framework, but regardless of the way they have developed it I find it hard to believe they cannot support IE directly.

The fix seems to be some kind of add-on to IE to make it support Google Wave which seems to me a counter-productive step. If you start treating one target platform very differently from the rest, surely you’re setting yourself up for further cross-compatibility problems down the line?

Current systems analysis techniques + outsourcing to skilled people != (not equal) to success

An interesting topic of conversation has come up in our systems analysis course module about the choice of developing bespoke in-house solutions, outsourcing, and purchasing solutions.

Ultimately the evidence (empirical and anecdotal) seems to point towards the fact that outsourcing work does not in fact save money in the long-term! Shock horror!

The main reason cited for this is the clear communication problems that can occur when work is outsourced to a development organisation in a foreign country. This communication barrier is due to a combination of factors, and I believe is far more complex than one might assume by face value alone. It seems that systems analysis and design techniques are relatively sophisticated these days with the inclusion of detailed Object Oriented class diagrams. It is also true that developers in foreign countries often do have qualifications that should indicate they are capable and skilled programmers and it is also true that many have qualifications that are supposed to assert their aptitude at carrying out work outsourced to them from another country.

You would think with this combination of design skill on the outsourcing side and development skill on the ‘outsourcee’ side that these projects would be really rather successful.

However as I have already mentioned this is often not the case, with the company paying for the outsourcing often also having to pay for large amounts of quality assurance (QA) in order to check and fix poor quality coding. All the factors to blame here seem to essentially come down to this communication problem: That these people are not working together in the same office, with the same level of understanding of language, cultural and business paradigms. As a result all manner of misinterpretations occur and cannot be resolved due to the lack of easy clarification of problem areas.

This leaves both sides quite able to hold their hands up and say: wasn’t my fault this didn’t work out!

I do not presume to be so clever to present a solution to this problem. Sometimes outsourcing software development is successful. But it seems clear that currently the software industry is still not a universal language-independent industry. With software different people work in different ways on different problems. While some applications of software development are common and proven, such as many e-commerce solutions for shops that wish to sell their stock online, many more applications of software development are so hugely varied and often previously unexplored.

Anyway I’m rambling on now. From a programmers perspective it is curiously appealing to think of software development as  a bit of a mysterious art, from a business’ perspective it is probably hugely frustrating.  However when skilled people are working together collaboratively in the same environment – both analysts and developers – it is a very creative and productive atmosphere. Under these circumstances people are much more effective at establishing a clear design and implementation pattern that works for them.

In short the most important tool to use in the specification of a software system still seems to be verbal communication in person. This allows discrepancies to be clarified and the project as a whole to be managed in a consistent manner.

Web application architecture

As a way of keeping my knowledge of web applications fresh in my mind, this is a quick post on the architecture of common web applications, taking into account the varied scale of such applications.

While I’ll refer in particular to the Java Enterprise Edition based (J2EE) solutions, the principles of structuring an application are the same in other development platforms.

So from a high level perspective, the following components are common to most web apps:

Server Side Components

Permanent data store: Most usually a relational database (RDBMS), which can be interacted with through SQL. This can take any form of interaction; from other parts of the application simply manually connecting and running SQL statements to quite complex persistence management components which automatically update and query the database using the objects in the system.

Data model: An abstraction of the information that the application needs to manipulate, generally always defined as classes in an Object Oriented manner in the relevant programming language. They may for example mirror members of a particular web-site and their member details, or items in a catalogue. These model classes take varying levels of complexity; in Java they may be Plain Old Java Objects (POJOs) or more complex Enterprise Java Beans which can directly linked to the database using a persistence management component.

Persistence manager – A layer which acts as a middle-man between the data model classes and the data source.

Interaction controller: The controller manipulates the data model based on the interaction the user carries out in the user interface. This can be a very thin layer, but it’s existence is important to act as the entry point to the server side components – seperating business/application logic from the user interface. In Java web development this is usually a servlet.

Client Side Components

User interface: A full blown application or website that is run on the client machine, most often in a web browser. There are a variety of technologies which may be used here. It could simply be a HTML page using HTML forms or it could incorporate an AJAX-style language that uses javascript, or converts its code into javascript. The primary reason for using javascript as a client side run time technology is the convenience provided by the incorporation of javascript interpreters into nearly all web browsers, meaning users needn’t first download anything to use the application. Often as far as a user is concerned a web-app is simply another web-page offering more interactivity than is usually available. The complexity of this layer depends on the complexity of the UI components required.

The separation as to where certain code and features of an application should go is an important business issue, as there are certain issues relating how thin the client side is. Generally it should be as simple as possible, as it is harder to maintain client side code and carry out complex processes there.

Anyway that’s a very straightforward summary of the common structure of web applications. The specific technologies used to implement web app solutions vary incredibly and there is no right or wrong mixture of technologies. It is important not lose sight of the overall architecture of web apps and not get bogged down with doing too much with one very specific technology and try to do everything in that space (which you might do if your very familiar with it or like it better than another). The fact is that development is a process of breaking down problems into ever smaller chunks which often require different approaches to solve.

Systems analysis distilled

Following on from a recent post of mine about the appropriateness of some systems analysis and design approaches to today’s computing challenges, I have drawn a diagram that is an attempt at doing exactly what I believe is the only way forward for systems analysis – distilling it into a more scalable and relevant solution.

Essentially all I’ve done is kept in the most important parts of traditional ‘SSADM’ style analysis: defining the organisation in terms of data flowing through system processes, and assessing the possibility of improving these business processes. The former stage I have referred to as system data flow and the latter I have redefined as business development decisions. The final stage I propose is called technical development decisions. The reason for defining these stages as ‘decisions’ is because that is predominantly what the process of analysis is itself – making decisions with valid justifications.

My version of systems analysis I have tentatively named systems analysis distilled.

You may be wondering: Why did I bother? Well, as described in the previous post, my reservation with traditional systems analysis is that it does not relate well to the technical implementation of solutions. Likewise simply using an Object Oriented approach when carrying out systems analysis doesn’t cover the business considerations. There are also issues with the scalability of traditional methods – there is too much padding (in terms of drawing diagrams and ‘logicalisation’) certainly not relevant to smaller organisations, and if we are honest some are not relevant to any organisation today.

More than this though, my motivation is actually to clear up the confusion about how the analysis as a whole fits together, and how this fits in with the entire development lifecycle; from analysis to design and implementation.

So for those that may be interested, assuming there are any, behold systems analysis distilled

diag

(I don’t expect the diagram to convey everything I am trying to explain, but it should give an idea)

Please bear in mind all work on this blog Creative Commons licenced

Is a framework really a solution?

04_10_80---Construction_webAt the risk of procrastinating other work and becoming a chronic poster, I’m going to go for a second one today.

Following on from my previous post discussing the merits and woes of particular IDEs, an overriding theme which runs through my dislike of the .NET framework is the fact that it is a framework. Taking the literal meaning of the word framework – I can explain my issue with the things quite easily. You see a framework in its true sense is like scaffolding – it is used to hold something up and to keep it together. The trouble is you take the framework away and you are left with something that doesn’t hang together properly. I’m not the only one with this concern about a framework development pattern, plenty of developers share it. Aside from the difficulty of integration with things external to a framework based development environment – it’s hard not to fall into the trap of developing frameworks for your own use. The convenient few classes you have used repeatedly to help you out can grow out of control into something that is horrendous to maintain.

The alternative to framework based development is to ensure as much modularity as possible, which requires thinking about how your programs and classes may be used from another developer’s points of view. The more your code can function autonomously, the easier it will be to maintain.

One of the big problems to avoid when programming is making a whole ‘toolset’ which can only be used on its own. You wouldn’t design a screwdriver that can only be used in combination with a drill and spanner at the same time, so why program like that?

Visual Studio Express editions are better than full Visual Studio…?

The benefit of writing a blog is that every once in a while you don’t have to be entirely objective in your writing, so as a caveat to this post – that is exactly what I’m going to do.

For a long time I’ve harboured the opinion that Microsoft’s development platforms are not as accessible to a developer looking to learn the technology as other platforms are.

My basis for this belief is Microsoft’s apparent ‘we’ll do things our way’ approach to development. You have a steep learning curve to deal with as everything in Visual Studio is presented as their interpretation of a programming language, so to speak.

I firmly believe that at the very least for a developer learning a language or wanting to simply write some straightforward code for a standalone application – the Express versions of Visual Studio are the way to go. You needn’t worry so much about the IDE trying to make use of a lot of stuff you don’t really want in your project.

Part of the problem with full Visual Studio is that it is intended for use with Microsoft’s own whole seperate world of development technologies, as an independant package. The whole philosophy of which is that you can’t pick and choose which stuff you like and make use of just that. Generally once you go down the route of developing a Microsoft solution, it must be Microsoft all the way with all the niceties, not-so-niceties, and quirks in between. Of course this is a good business strategy and it also means that Microsoft get total commitment from developers that choose to use their platform commercially. However for many developers who do not have this full unwavering faith (and perhaps financial investment in terms of using / being a stakeholder of Microsoft products) it can be very annoying. Don’t get me wrong, I want to learn about the Microsoft family of development technologies, just not exclusively.

The essence of my argument for Visual Studio Express over the full version is that it is simpler. Personally I like simplicity in development platforms, it helps you understand new concepts better and really get to the root of what is going on behind everything you put into your code. Because you have to pay to gain access to more features of the .NET framework and associated development tools, the free Express editions do less for you and don’t have the annoying habit of trying to integrate features you don’t want in your Visual Studio projects.

Of course my own views on the usability of Visual Studio in general may be shaped by my familiarity with Java integrated development environments (IDEs). Nevertheless I feel my animosity towards Visual Studio is not unfounded having had several ‘bad expriences’ with it.

As an alternative to Visual Studio if you’re really looking to learn a language such as C++ from the ground up, and don’t mind applying an extra bit of your own mental steam, the old school approach of a text editor and compiler/linker is probably one of the best methods.

I think we try to be too clever and do too much in all walks of life, particularly in the computing industry, to the detriment of what we may actually be trying to achieve. It is worth considering that perhaps IDEs need to be much more text-editor like by default and allow you to choose which additional features you want for a project in a very clear and concise manner. I would choose choice of simplicity versus complexity over complexity alone, and I would choose simplicity over complexity if choice is not an option. The latter is why my preference is for Microsoft’s Visual Studio Express Editions over the full version of Visual Studio.

Visual Studio Express editions are better than full Visual Studio…?
The benefit of writing a blog is that every once in a while you don’t have to be entirely
objective in your writing, so as a caveat to this post – that is exactly what I’m going to
do.
For a long time I’ve harboured the opinion that Microsoft’s development platforms are not as
accessible to a developer looking to learn the technology as other platforms are.
My basis for this belief is Microsoft’s apprent ‘we’ll do things our way’ approach to
development. You have a steep learning curve to deal with as everything in Visual Studio is
presented as their interpretation of a programming language, so to speak.
I firmly believe that at the very least for a developer learning a language or wanting to
simply write some straightforward code for a standalone application – the Express versions
of Visual Studio are the way to go. You needn’t worry so much about the IDE trying to make
use of a lot of stuff you don’t really want in your project.
Part of the problem with full Visual Studio is that it is intended for use with Microsoft’s
own whole seperate world of development technologies, as an independant package. The whole
philosophy of which is that you can’t pick and choose which stuff you like and make use of
just that. Generally once you go down the route of developing a Microsoft solution, it must
be Microsoft all the way with all the niceties, not-so-niceties, and quirks in between. Of
course this is a good business strategy and means that you get total commitment from
developers as well.
This essence of my argument for Visual Studio Express over the full version is that it is
simpler. Personally I like simplicity in development platforms, it helps you understand new
concepts better and really get to the root of what is going on behind everything you put
into your code. Because you have to pay to gain access to more features of the .NET
framework and associated development tools, the free Express editions do less for you and
don’t have the annoying habit of trying to integrate features you don’t want in your Visual
Studio projects.
Of course my own views on the of Visual Studio in general may be shaped by my familiarity
with Java integreated development environments (IDEs). Nevertheless I feel my animosity
towards Visual Studio is not unfounded having had several ‘bad expriences’ with it.
Alternatively if you’re really looking to learn a language such as C++ from the ground up,
and don’t mind applying an extra bit of your own mental steam, the old school approach of a
text editor and compiler/linker is probably one of the best methods.
I think we try to be too clever and do too much in all walks of life, particularly in the
computing industry, to the detriment of what we may actually be trying to achieve. It is
worth considering that perhaps IDEs need to be much more text-editor like by default and
allow you to choose which additional features you want for a project an a very clear and
concise manner. I would choose choice of simplicity versus complexity over complexity alone,
and I would choose simplicity over complexity if choice is not an option. The latter is why
my preference is for Microsoft’s Visual Studio Express Editions over the full version of
Visual S

The problem with system analysis and design approaches

In the process of studying formulated analysis and design approaches relating to modern business information systems (IS) a clear problem presents itself; dealing with the varied nature of information systems in the currently rapidly developing computerised process improvement industry.

In short, stuff has changed an awful lot in just the last 5 years in development of business software. A slow awakening to the need of automated, computerised and online information systems has prompted a growth in varied businesses investing in software development. The wider the range of potential investors in technological business improvement, the harder it is to specify an approach for developing technology based solutions.

As such, texts written on the subject more than just 4 years ago seem outdated in their approach to, at the very least, the implementation phase of proposed systems solution. For example many design techniques may refer to defining file and database ‘records’ that may store data. Today people need to consider the possibility that their system may not deal in files at all considering the internet based nature of many modern business applications, and the database considerations are generally auxiliary to the overall architecture of the solution.

Of course many business systems are so outdated to the point that any form of automation is hugely beneficial. But with organisations in which keeping the level of technology in line with modern standards is necessary (e.g. to do business with other similar organisations), it is critical to make sure that the resulting solution is developed with internal extensibility and compatibility with other information systems in mind.

I think this problem of defining a set approach to the design and development of new solutions is perhaps why current thinking on how to analyse and design business systems seems fragmented and over-cooked. If anything the increasing variety of solutions available (such as web services and multi-tier systems), should lead to a more simplified design process focusing on common milestones required regardless of the potential technology required to implement the solution.

In essence what I’m getting at is there is a need to boil down and distil this avenue of study into a more concrete doctrine which may prolong the future of the interest in the business considerations which are very important to the success of software development projects.

Considering language and writing style in technical articles

One thing I’ve been thinking about a fair bit lately and trying to develop is an appropriate and concise writing style for this blog, and other technically themed articles. I believe my choice and usage of language is generally reasonably good, but I still read back over some of the things I have written and feel like stamping large sections of my writing with ‘could do better’ in red ink. It’s something that I think most scientific university departments attempt to encourage you to develop but unfortunately (and I suppose rightly) it is not generally ‘on the curriculum’. In light of this I suppose the best course of action is to develop it by practice and by reading well written technical texts and articles. So that’s what I’m attempting to do lately. I have found a short, but nevertheless very useful article here:

http://www1.cs.columbia.edu/~hgs/etc/writing-style.html

Back to the land of academia

So, the summer is over. I’ve completed my period of work in the wacky world of software development and enjoyed my time spent there thanks to the good people who decided to take me on. I’ve learnt a lot, and achieved a lot in a twelve week period.

I travel back to university tomorrow to enjoy a slightly different lifestyle for another year, and as usual am looking forward to it. I do feel an exposure to the practicalities of software dev has really helped to consolidate what I already know and will undoubtedly give me useful experience to draw on in the future. I think college and university courses should offer more vocational experience in some way, because it is a very useful way of accelerating your learning.

The dawn of the new academic year is almost synonymous to a new year by the ordinary annual calendar, and on this academic new years eve I feel ready for anything my next year at uni can throw at me.

Hotmail interface doesn’t like long words!

I almost couldn’t believe it when I saw it. I emailed myself some rather long URLs to look at another time and on opening the email i was confronted with this:

The message displays but cuts off the string of text at a certain point. It allows you to then click a button to display the rest of the message. I really don’t know how they thought this would be a useful feature! Of course to provide a scrollbar does shoot the big advertising bar on the right side off the screen, perhaps this has something more to do with it! Although personally I wouldn’t be too bothered if the text simply wrapped if its larger than the viewing pane. Oh well…