Friday, 8 October 2010

Windows Phone 7 – Keep up the good work.

My Windows Mobile 6.5.3 based HTC Touch Pro2 is driving me insane at the moment. I'm not due to finish my contract until the end of November, but almost every day is going to be a strain, assuming I don’t just upgrade now, which I could do since I’m probably going to get something SIM free away from a contract anyway.

Strangely after all I’ve said previously, for a while  this week I was basing my delay on waiting until Windows Phone 7 is released next week, just to see. Surprisingly the thing that put me off again was reading an article about application development on the device, and how locked down non-Microsoft apps are in this initial release. As an example the Twitter client can’t even get access to the camera or photo album. Good for security, bad for functionality.

Version 1 teething troubles, I’m sure, but they are there just the same, so the operating system must be judged on them. Back in the box for now Windows phone 7, perhaps I’ll see you when you can play with the bigger kids.

If I had to choose a phone to buy today I'd probably go for an HTC Desire or a Samsung Galaxy S, both great little Android phones. The fact Android is under assault by legal terms from Oracle, and Android vendors from Apple and Microsoft worries me only a tiny amount. The Oracle charge seems to be the greatest threat (the others are just play fodder for patent holders).

To a certain extent I sympathise with Oracle, after all they do now own and develop Java, so some licencing would only seem fair. Then again I just know what I read, and having worked on the periphery of media even I know how the truth and reports rarely overlap to and great extent, although I do like to think that for the most part the technical media is more accurate than The Mail.

I'm waiting to get my grubby mitts on an HTC Desire HD or Desire Z, and possibly a look at Android 3 if I can hold out that long.

The Desire HD may be out of the game as the screen is possibly too big. It’s like a tablet device (which would save me buying one of them) but it doesn’t particularly look like it will be comfortable in your pocket.

As for the Desire Z, why not keep the 8MP camera of the HD? Not the end of the world, but frustrating.

I need to see them both before any decision, then weigh up the pricing.

On a related note, I did fancy a Kindle, I am a big fan of eInk screens and I love the way it stores your place in a book between devices, so I could read a book on it from both my laptop and a Kindle and keep my place.

Having said that I’ve been using the Android Kindle application today, and I think for the short periods I get to read these days a backlit screen will be bearable (and it also keeps track of your position). Plus the PDF rendering in Android will be much better than a Kindle I’m sure (must try it), an important consideration with the amount of PDF files I have in my collection. Lastly the £109/£149 I save by not getting a Kindle will help the phone fund nicely.

Of course, for reading the Desire HD screen will be better than the Z…

Gaah!

I guess I’ll just wait and see them in the flesh.

Now, about that Galaxy S...

Is Java Hot Or Cooling?

If you want to take a geeky 40 minutes out at some point I recommend listening to the podcast at https://www.ibm.com/developerworks/mydeveloperworks/blogs/scott/entry/java_still_hot_or_losing?ca=dwpodcastall&lang=en

It give a very good and what appears to me to be unbiased overview on the future health of Java.

Thursday, 29 July 2010

eBook Revolution

A few years ago when the first eBook readers starting hitting the shores of the UK I was mildly interested. I think the main model catching the attention of the media was the Sony PRS-505. It was fairly impressive from a gadget point of view, but when I tried opening a PDF of a book I was reading at that time (password protected) it failed to open. In one stroke that signalled the death of my interest in the device.

That was probably about three years ago, and since that time I've kept one eye half open on the eBook reader market, but the high price of books and limited availability has always meant that I've never really bothered considering getting a device again, it's more been a slight interest in the technology.

Today I read that a new model of the Kindle is being launched in the UK (i.e. from Amazon.co.uk) directly with a 3G and Wi-Fi only version available, which has resurrected my interest once again. There's a few books I need to buy, and even more I already have as PDFs, so do I take the plunge for situations where a laptop is less than ideal?

Two things remain that are putting me off:

1. eBooks are still too expensive. Amazon are discounting at the moment, but as with printed books the deals will slowly fade over time I imagine. Looks like the publishers learnt nothing from the mistakes made by the music industry.

2. I still don't know if all my PDF files will open in the reader.

That said, there is a wealth of free books out there, so that may help sway me. The other driving force is the fact that many of my text books weigh more than the laptop, so it's not nice carting them around.

Either way, it's not going to be on my pre-order list, so I have time to save and read some reviews.

Is now a good time to start bleating on about touch screens again.... yes I know you can get the kindle reader for the iPad, but another selling point for me is the e-ink screen. There's also the price.

Sunday, 25 July 2010

When Did Everyone Turn Against Stored Procedures

I forget when I first started working with Stored Procedures in databases, but it was probably back in 1996 when working on the Teletext Commercial System.

Back in those days we developed against Microsoft SQL Server (as far as I can remember this was version 6) and much of the business logic and database integrity was coded in SQL. I remember we had prefixed the name of the stored procedures with 'sys_'. That wasn't my choice, and I quickly discovered that only the in-built system stored procedures should be named as such. Still it was a small point and since it wasn't my choice and had no detrimental effect it was, by that time, best to leave alone. Regardless, this was a client/server application, and the stored procedures suited us particularly well.

My next position was on a multi tier project (Delphi-Java-Sybase) where we used stored procedures primarily for database integrity and serving the middle tier objects for data retrieval and persistence (that's being a little unfair, it did more than that, but this was the primary role).

On this project 95% of the business logic was stored in the middle tier. By contrast the database used stored procedures, via metadata enabled objects, to quickly retrieve and persist data reliably, and safely. The system, whilst not perfect, was a lesson in good design and worked extremely well. Stored procedures were used in many other places where the data was manipulated (reports spring to mind), after all, if you are relying on retrieving masses data to perform a task, sometimes it's more efficient if (at least the preliminary) processing is done near the source of that data without relying on factors such as network bandwidth getting in the way. Also, the fewer bits you have clogging up the network, the better, especially to a distributed user base and infrastructure.

The stored procedures may have also helped with replication, I don't clearly remember as it was a long time ago, what I do know is that it seemed to work very well, and whilst there was always debate between some of the middle tier developers and the database lead as to who should be doing what, mostly it was harmony between all.

In my next role I initially worked on a system where virtually all the business logic was contained in stored procedures. It was hideous, but this was mainly down to (in my opinion) very poor stored procedure design, and the fact the stored procedures themselves were written in an awful mid-way language (not quite SQL, but not quite any other programming language you've seen before) which was then compiled into very poor SQL code (imagine a stored procedure where the first several hundred lines may be blank lines and you'll get the idea).

The stored procedures in this code could run to thousands of lines and certain members of the team relished the fact they were very nearly un-maintainable. With better organisation (we call it refactoring these days) this diabolical situation could have been eased a little, the bad code wasn't entirely the fault of it being implemented via stored procedures.

This is of course my perception of things, although I doubt many would claim it was good.

The next company I worked for almost had a fear of using databases. Initially this upset me, but after a while you go with what you're given and don't rock the boat (again I say "if it works well enough, leave it alone"). We're talking here a situation where we were storing XML in the database as raw text. Yes, you did read that correctly. I'm going to almost certainly be unfair here (by which I mean I *may* be giving a misleading impression) by saying that one of the primary reasons given to me was that changes could be made to the code, without routinely having to alter the database schema. That's just lame. If one relies on a change in the other then so what? Mind you, this is the same mentality that said procedures running to several pages were "self documenting" and that comments in code were bad as they quickly become out of date (so surely part of making a modification is making sure they are updated... oh, never mind, I've posted about that before).

Essentially (and to cut a long gripe short) the project had moved from Paradox, so the team lead, in my opinion was both unaware of what databases could do (and how well they could do them) and was just plain scared of databases.

In my current position I'm working with, what appears to be, a good codebase. It's Java running against an Oracle Database. One thing has struck me though (and bear in mind I'm new to Oracle) is that I can't find any stored procedures?

I know the code uses Hibernate, with which I'm largely unfamiliar, so this may be why, but as an uneducated outsider I'm a little surprised (although not entirely saddened). If the implementation doesn't need stored procedures then that's fine (but where are the triggers? I know a lot of thinking sees these as evil too).

Oh well, new code, new concepts. That's what it's all about. I look forward to finding out more. Perhaps I'll search the web in a moment for Hibernate introductions.

To close with an aside, many projects are reluctant to use stored procedures as it ties you down to a particular back end technology. That's fair enough for some projects, for example I've written plenty of applications that needed to function against whatever back end they were placed against. The amusing thing is however, in the case of the Teletext system I wouldn't be surprised if the stored procedures outlived the application itself, which was coded in Delphi. I imagine that was converted to C# or Java some time ago (if it's still around). Of course I may be wrong, I've not been back since late 2000.

Friday, 23 July 2010

I wonder how this will pan out...

Well, I don't think Microsoft will be loosing much sleep over it, but it appears that two unrelated situations mean I'm going to start looking into developing Android applications rather than for Windows Phone, at least in the short term, allow me to explain:

The first culprits involve the decisions Microsoft are taking with the direction of Windows Phone 7. It started off with the removal (or is it actually more accurate to say omission?) of Cut and Paste functionality. From articles I've been reading recently this is down to a lack of time for getting it developed by release time, rather than not knowing how to implement it. As a friend from Nokia commented "What, were they worried they could do cut and not paste in the time available?".

The lack of C&P was originally sold to developers as a conscious decision ("A phone doesn't need C&P" - Really? Then why write Office Tools for it?), now we're told "it's coming later". Not the end of the world, but frustrating. Still, I agree it's better to get it right than put in something that's buggy or badly designed and then be stuck with it forever more.

The killer move, for me, is the apparent lack of any way of side-loading applications. As is the case with iOS, you get your applications from Windows Marketplace or not at all. That's essentially shut me out. It's all very well running anything I code in a desktop emulator, but then I may as well have just written a desktop application. If I can't actually get it onto a phone (and possibly those of my friends) what's the point? This is the number one reason why I've avoided Apple phones all this time.

Then there is the work related chain of events.

When I started out at my previous job the plan was to move into C# (as I believed the role required, it's certainly what was advertised and what I interviewed for). Previously I had been working in Java but I was happy to move to C#, it's a great langusge. Being a Java developer a large personal application I had been working on I was also written in Java. When I "moved" to C# I started porting my code over too. Doing such things works as a good aid in getting to grips with a new language or language features.

Now I'm going back the other way to Java as the primary language in my work role, so guess what else I'm now planning on doing? [Moving my application back to Java]

Here's the killer: Just as I was hoping the C# code would allow me to share core components of the application between Windows, Windows Mobile and Phone, and possibly web sites, it turns out that the primary development language for Android appears to be Java.

So now Java potentially gives me access to Android Phones, The Android OS (for Laptops, Slates, etc.), and with a little work (hopefully not too much) Windows, Linux, MacOS, possibly even MeeGo. Oh, and I believe web servers can also run something called servlets too. Oh, and just for fun, the Windows Mobile phone I currently have includes Java too... oh, and I know S60 used to run Java. Wow!

The killer which I'm brushing over is obviously that there will be an incredible amount of work to customise the user experience and display for each system, possibly this could be the lions share of the work, but I do at least take some comfort that at least some of the core business logic may be sharable between systems.

Looks like until my priorities change again this is the logical route for me to get back into Java in my spare time above the demands of work.

So now the new laptop has arrived one of the first things going onto it will be a shiny new install of Eclipse and the Android SDK. Oh, did I mention that's all free? That's possibly a little unfair a comparison, the Express versions of Visual Studio are excellent (that's one of the downsides to all this, I find the Visual Studio IDE an absolute joy to use. For Java development I prefer NetBeans, but since I'm on Eclipse at work, and most of the Android documentation references Eclipse I may as well use that).

Will you ever see any of these fruits of my labour? probably not (almost certainly not), but the point is the more I play, the more I learn, and as long as some of that is relevant I end up getting something out of it over and above the hobby side.

Now, of course, I'm reliant on Oracle not screwing things up with Java (well, no more than Sun managed at the very least).

Fingers crossed.

Thursday, 15 July 2010

Testing Times

Looks like this is going to be one of those rare blog entries that will live in both my tech and personal blog since I don't know where to put it. I guess that's good. Anyway:

Well, it's week number four in my new job. i have a desk, a machine and I'm just about set up with my development environment. There's a few things I've not been briefed on or covered yet, some of them quite basic (like how about giving me a Jira account, that may be useful soon, or on what branch do these guys do all their development, surely not main_latest all the time?!!)

So what have I achieved so far?

Well, not a lot yet, and it's starting to bother me. I've so far been given a single 2 part task with the aim of speeding up the build tests:
  • Go through a bunch of JUnit tests and remove anything not testing actual business logic (so for exampe if its a persist or retrieve operation, take it out).
  • Investigate getting the JUnit tests to run in parallel.
That's not so bad for a first task on an unfamiliar system.

So I spent just under a day looking at a select bunch of JUnit test code trying to decipher what was and wasn't a business logic test. Sounds quite easy, but since a lot of methods are masking non-business logic, it's very easy to leave them in. Similarly, what looks like a persist operation may be an actual calculation of one variety of another. Then you have the methods that call both responsibilities, or rely on persisted data to pass. It's not as easy as it first looked, especially on an application with which you are not familiar.

The upshot of all this? I came to the conclusion that there probably wasn't any business logic being tested in the set of tests I was looking at. I was, as you might imagine, uneasy with this deduction, it felt wrong and I couldn't be 100% sure my findings were correct, however when I returned to my "mentor" for this task he didn't seem to surprised and commented "I've skimmed over this myself and I didn't see anything leap out either."

Oh thanks.

Actually one thing that did amuse me, I had flagged up one test as possibly being business logic, however as my mentor was looking into this I noticed a section of code that clearly suggested otherwise, so at least I beat him to that one.

With that task out of the way I started looking at making the JUnit tests run in parallel. A little research on the web revealed what was needed (including a version of Spring that's still in RC status). Undeterred I created a small project with a bunch tests to try this stuff out, and sure enough it worked as I expected (albiet without a hint of Spring in sight, unlike the real project). So how did it go once I started applying this new found knowledge to actual project... well I've been on it a week now and I'll be sure to let you know what I find when I finish (if you ask nicely).

I've been hit by numerous issues with my development environment, and on the odd occasion when things do work as expected, a run can take up to 26 minutes (usually closer to 19 for a full run - at least for what I'm covering). The worst thing is I'm only making changes to a handful of POM.xml files and so far the results show no avantage at all. At this rate my findinge will be: "Hey, I've spent over a week and can't get any speed increase". That hardly makes me fell very good and I don't actually feel I've achieved anything yet. Especially when for the most part my day consists of the following routine:

  1. Start machine. Spend 1 to 2 hours getting the build to work properly.
  2. Make a small, well trodden modification to all 4 instances of a command in 3 pom files. (5 mins max, probably closer to 2 mins)
  3. Fire off build and wait to complete (up to 19 minutes if it completes)
  4. Investigate any errors or note timings (2 to 10 mins).
  5. Repeat from step 2 until time to go to lunch or home.
I can't help feeling this should have been finished some time ago. I know deep-down proving something doesn't work is as important as proving it does, but this seems to be dragging now. it feels like my fault, but frankly i don't know how to make it better, it's just the nature of this particular beast.

I guess deep down I feel the need to prove myself as the new boy, and with this task I feel like I'm coming up short, rightly or wrongly. Oh well, I guess that could be me worrying too much. Sometimes, that's just the way it is.

Wednesday, 14 July 2010

Evernote

Whilst at EvaluatePharma I was singing the praises of OneNote from the Microsoft Office suite of applications. This, especially on a Tablet PC, is a superb piece of note taking software recording audio along with text or handwritten scrawls if you have the hardware. OneNote can take an image and find text within it (so for example you could photograph a business card, add it to OneNote and later a text search that happens to contain any information on the card will bring it up as one of the results), and being part of the Microsoft Office suite, it links quite nicely with the other apps as you'd expect, and takes web clippings from Internet Explorer too.

Amongst the myriad of other features I also found the collaboration side of OneNote to be excellent, specifically I could open a OneNote notebook from a network drive on my PC, edit it, and it would automatically sync next time I opened it on my laptop. If I was working with a notebook whilst disconnected from my network, when I got home it would sync changes and these would replicate over to other devices. With the advent of Office Web Applications this can now be done over the internet too, and editing can take place within the browser with no need to install or even own a copy of the desktop application.

OneNote is frequently considered the hidden jewel of Office by those who have used it, indeed a while ago it featured as the only Microsoft product in a list of top 10 essential applications that was heavily dominated by open source and free software.

The major downside with OneNote is that the office suite used by many companies is out of date or does not include the app, and I suppose the fact it is not free.

Step-up Evernote (http://www.evernote.com). Evernote is one of the many alternatives to OneNote, and the one I use most regularly. Evernote comes in two flavours, free and paid for. Both use the same client software, both store to the Amazon hosted cloud, the main differences are the amount of traffic you are allowed per month, and the file types you may attach to your notes.

Evernote may be run from a web browser, or clients exist for several of platforms (Windows, MacOs X, iOS, Android, Blackberry, Windows Mobile, Palm Pre/Pixi). No matter what metods you choose, Evernote can sign into the central repository and synchronise your changes between the various clients. Evernote also implements several pieces of functionality found in OneNote, for example finding text in images (which is scanned on the server; paid users having priority in the queue, but this has never been an issue for me).

There's lots of stuff OneNote does that Evernote doesn't, and a few features in Evernote that I'm not aware of in OneNote (for example I tag notes extensively in Evernote). Best of all, because the clients are free I've installed them at work where I can, and use the web version when this is not possible. And because Evernote isn't well know like, for example SkyDrive where OneNote stores its web shared files, it's not blocked by as many corporate firewalls yet.

The free version has been ample for my needs (I've never used more than 3% of my monthly data allowance, despite using the tool extensively) so it's well worth a try even if you do have access to OneNote.

Of the two, OneNote remaind my favourite, however Evernote is currently used far more often. It's well worth looking at.