2010
11.03

I was fortunate enough to have received a Nokia N8 review unit and I feel compelled to write a review since this is a review unit. I also want to write down my initial opinions before I forget them.

Just a little background on me: I am a software engineer and I am trying to develop software for Nokia smart phones. So, the real reason I need an N8 is to test my software on a physical device. It turns out that Nokia’s developer tools leave a lot to be desired with regards to device simulators and so you really do need to run your software on an actual device.

My first impressions

The N8 is a big phone and this is especially true if you are not used to the new batch of smart phones (iPhone, Blackberry, and Android handsets). The N8′s screen resolution isn’t any higher than their two year old 5th Edition phones even though it is a much larger screen, but thank goodness for multitouch support and capacitive touch technology. Although, I am wondering if it is possible to have a capacitive screen with a resistive layer for the best of both worlds. I do believe that resistive touch technology has its place, like when your fingers are greasy and you don’t want to touch the display.

Nokia N8's

Another really cool feature of the N8′s screen is it can display a permanently on screensaver that is brighter than I thought it would be. It is quite useful having the clock screensaver always on and 3rd party apps can even display status information in this screensaver (like Gravity).

I was also surprised at how well the N8′s speaker works. It pumps out loud clear sound and may even be better than my Nokia 5800XM’s speakers.

The N8 is a very full featured phone. It has a wonderful 12MP camera, GPS, compass, etc. Other people have reviewed all these aspects and more in far more detail than I would so I won’t. I only really care about whether or not it will run my software. So I started by installing the best Symbian software you can get today – Gravity, the twitter client that is far more than a Twitter client.

I’ve used other mobile Twitter clients and none come close to the enjoyable nature of Gravity. Just following Gravity’s author on Twitter (@janole) makes you realize how much fun he has developing this software and how actively he is improving it for the latest Nokia phones. He is even creating his own virtual keyboard for use in gravity – why? – because the N8′s virtual keyboard kind of sucks. Jan shows us what the N8 can achieve: effective translucency throughout the UI and smooth and enjoyable to use kinetic scrolling where it counts plus lots more. In fact, Gravity goes against the old school Symbian UI guidelines and wins accolades because of it.

Gravity shows us what the latest Symbian OS and hardware are capable of for a well written native application. But, gravity is written in Symbian C++. Why did I use a ‘but’ there? Well, Nokia want to move all future development over to the Qt framework. The problem is that Qt on Nokia devices is not the nicest experience, especially if you want your application to be connected to the Internet.

The N8 and its ilk (Symbian^3 devices) all have a version of the Qt libraries pre-installed. However they will be updated really soon and then an N8 owner will have to upgrade the libraries on their device, not an insignificant download. What happens to older apps once the Qt libs have been updated. Will the older Qt based apps that were compiled against the older Qt libs continue to run? It is going to be interesting to see how Nokia manage these issues.

Qt certainly makes developing for Symbian a whole lot simpler with their Qt SDK for Symbian. It is just such a pity about the Nokia’s developer tools. Do you want to compile your app and package it into a sis file for installing on your Symbian phone? Well, you had better be using Windows. Nokia do offer a remote compiler for those using Linux or Macs, but who wants to submit their source code to a remote server?!

Speaking of upgrades, Qt 4.7 is out now, but not really for Symbian. If you are very lucky you can try installing the stand-alone Qt 4.7 Symbian SDK, but I have followed instructions on getting it running repeatedly and have still not managed to get it to compile a Qt 4.7 Symbian app. I think that you need a non-open source compiler or some such thing. Not that a Qt 4.7 Symbian app would be useful right now as the Qt 4.7 libs for Symbian^3 are still not consumer ready. There are reasons we should care about Qt 4.7 though.

The biggest improvement in Qt 4.7 for Symbian (more specifically the mobile extensions that require Qt 4.7) is the bearer management. I have not been able to get bearer management to work effectively on Qt 4.6.3 and you tend to have to resort to falling back to Symbian C++ for better control and Symbian C++ is a little bit of hell. Bottom line: I hope you don’t want to write an Internet connected app using Qt yet.

What about Web Runtime Widgets

Apple’s iOS makes HTML and CSS a first class citizen on the device with great features and the Webkit browser is always up to date while Nokia makes HTML and CSS into murderous bastards that want to kill you. I expected the N8′s webkit browser to be better and in many ways it if far better than previous versions. Amazingly though, you will still get better HTML and CSS handling through Qt’s Webkit integration running your Web Runtime app than packaged in a WRT widget on the phone. Of course I may be biased against the N8′s Web Runtime abilities since my WRT app doesn’t work on it. I will freely admit that I need to spend more time on WRT on the N8. I will work on my WRT widget and see if I can get it to run properly.

My opinion on Nokia’s developer relationships

Nokia make predicting the future very difficult. They are a fickle beast and this makes it incredibly hard to want to adopt one technology over another. Should developers move to Qt or stay with Symbian C++, or use Web technologies? Nokia says that Qt is the way forward and I really want to believe them. However they seem to be moving really slowly with regards to the Symbian Qt development stack. I almost think that Nokia want to sell phones and they do not necessarily believe that you need developers and apps in order to sell these phones. They do have a large developer website with documentation, tools, wikis, and a forum to prove my opinion wrong.

I have viewed the Nokia developer forums for help with certain programming challenges and I have never felt more disheartened than when reading the Nokia employee comments. They tend to be rude, abrupt, and even harsh at times. This may simply be a language issue as they are not native English speakers. But action often speaks louder than words and their actions are not favorable to community building. In fact many of the Nokia developers that ‘help’ in the forums are damaging the developer community. They obviously don’t have the same issues that novice developers encounter and they cannot help at the required level or they do not help due some kind of misplaced arrogance.

Another issue with the online documentation and forum information is that it is either hopelessly out of date and not applicable to your problem or the offered solution involves beta versions that you cannot get to work.

I do not enjoy using Nokia’s developer website.

Their Ovi store is a different beast though. As long as you know how the money is split, it seems like an effective way to market and distribute your application. Nokia have also moved a long way forward in making the Ovi store developer friendly.

Summary

The N8 is by far the best, the absolute best, Nokia smartphone to date. This is not saying much though as the top tier Android phones still offer a better user experience and an easier developer experience than Symbian and Apple’s iOS is pure bliss in comparison. I would even go as far as to say that Microsoft Windows Phone OS is going to be a better experience for users as well and will definitely be a fantastic developer experience. Making Symbian open source has been beneficial, but Nokia seem very sloth-like with UI improvements and technology adoption.

Is Nokia dead or dying? No, their phones work well, their nuances don’t affect 99.9% of their product’s owners. They will continue to be the best selling phone manufacturer for many years even if it is just their plain old phones that they keep selling and they are selling more smartphones than ever before. First time smartphone owners are going to want to buy apps for their new phones. Games like Angry Birds and apps like Gravity are well placed to make a lot of money in this market. In fact, I would predict this particular market will be the biggest mobile market, that is having the biggest earning potential for developers.

I just hope that Nokia’s developer relations and tools improve fast enough to make it worthwhile for everyone.

2010
07.21

Donald H. Rumsfeld works at the stand-up desk in his office (pic from Wikipedia)

I had heard about the standing and sit-standing desks that are available, but I had not bothered much about them until after I read about the health risks of sitting for prolonged periods. After reading that well written opinion piece I decided that walking up and down 10 floors of stairs wasn’t enough – especially since I would soon be moving into my home office and won’t have 10 floors to climb.

Right now I spend a day at my job sitting in front of an underpowered computer with a tiny screen. I then typically go home to my decent home setup and spend anywhere from 3 to 5 hours working or playing. This is all going to change soon and I suspect that my home office will get used about 12 to 16 hours a day once I move there full-time. So, armed with the knowledge that I could face serious health problems directly associated with my career choice I have set out to stand at my home desk – with the option of sitting somewhere if I so desire.

I’m not about to spend a lot of money on a sit-stand desk. Not when a few boxes of the right size will do the job just as well. I measured things carefully using the data from this ergonomics calculator and I worked out that I needed to move my keyboard and mouse up by 30cm. I also prefer having my monitor a little lower so it also moved up by 30cm. Fortunately I had a few sturdy boxes that were up to the task.

I’ve been using this setup for 3 nights so far and my feet are not getting as sore as they got on the first night. I don’t have any back pain from standing for prolonged periods either. The first night standing was a little strange, but I am getting used to the idea of not needing a chair. I also do feel that it is easier for me to concentrate when I need to. So if working standing up means better health and better focus then this is something I am going to stick with for the long term.

Find out more at http://en.wikipedia.org/wiki/Standing_desk

2010
04.20

Reskilling oneself works well for contractors. It works well if these contractors are experienced developers that move onto new projects often. However, when the staff in question are not experienced or advanced enough or when these developers are primarily maintaining existing systems or building upon an existing bedrock of IT systems. Reskilling themselves becomes a far harder option. Simply being told that you have to learn new technology and techniques is not enough in these situations.

If the goal is to maintain an up-to-date workforce of embedded contractors then a more specific approach is required. One such approach is to mandate the use of a specific technology or method for a particular module or system extension. This forces the developer to research and learn the unknown technology and technique. This is the particular method I am using to mentor an inexperienced developer and is showing definite results.

2010
03.03

This problem manifested itself in both the new Opera and Google Chrome browsers. The pac file worked perfectly in Firefox and IE, but refused to work at all in Opera and Chrome.

This is what the original pac file looked like:

function FindProxyForURL(url, host)
{
  if (isInNet(myIpAddress(), "10.200.0.0", "255.255.0.0"))
    return "PROXY 10.100.0.99:8080; SOCKS 10.100.0.99:1080";
  else
    return "DIRECT";
}

This code is in a “myproxy.pac” file hosted on a web server on my PC. I then reference the url of the file in my browser’s pac file setting: “http://localhost/myproxy.pac”.

The solution was simply to remove the leading spaces for the lines in the function, like so:

function FindProxyForURL(url, host)
{
if (isInNet(myIpAddress(), "10.200.0.0", "255.255.0.0"))
return "PROXY 10.100.0.99:8080; SOCKS 10.100.0.99:1080";
else
return "DIRECT";
}

And now it works!

So, my assumption is that Opera and Chrome prefer messy code.

2010
02.08

My Apple iPad price predictions for South Africa

I’m planning on buying an iPad and this may or may not be a foolhardy thing to do. Having made up my mind to lay out cash the next step in my plan is to figure out how much cash I will need.

For this little exercise let us compare the US prices of some Apple products to their South African prices on the ZAStore. To make it fair, let’s not forget to remove the VAT from our prices as the US prices don’t have their sales tax added. Just for interest the sales tax in Los Angeles is quite high (for America) at 9.75%.

Apple.com prices

Product Listed Price (USD) Converted to Rands
iPod Touch 8GB $199 R1,545
iPod Touch 32GB $299 R2,322
MacBook $999 R7,757

zastore.co.za prices for the same items:

Product Listed Price (ZAR) Without VAT
iPod Touch 8GB R2,699.00 R2,367.54
iPod Touch 32GB R3,999.00 R3,507.89
MacBook R10,999.00 R9,648.25

Percentage mark-up at zastore.co.za:

Product Calculation Percentage mark-up
iPod Touch 8GB (2367.54 – 1545) / 1545 * 100 53.24%
iPod Touch 32GB (3507.89 – 2322) / 2322 * 100 51.01%
MacBook (9648.25 – 7757) / 7757 * 100 24.38%

So, we can deduce, based on current pricing that the iPad ($499 –> R3874.74) with markup and VAT should cost between R5,494.12 (24.38% mark-up) and R6768.92 (53.24% mark-up.)

Finally

I can say with 95% confidence that the iPad 16GB with WiFi will cost between R5500 and R7000 when it becomes available in South Africa. My prediction though is around the R6000 mark.

2009
11.02

When I was studying Information Technology I was taught the classic Systems Development Life Cycle. Since then I have been exposed to many more development models and strategies and have come to the conclusion that each project is different and will require a different approach.

It is also easy to see when the development process is being done wrong. At least I think it is easy to see, but that could be hindsight as it is always trickier to get your foresight to work. Let me tell you about the development cycle at a local outsourcing firm that I am unfortunately being exposed to.

The development models in use

At its heart the development models in use are the Iterative model, Evolutionary Prototyping , and a bit of Verification and Validation. None of these are wrong or bad, but the project is still struggling due in part to how these models are being managed and a large part to how the project was started.

The problems

The system’s presumed function and audience has changed dramatically during the first few months of development and all of the original coding was done by a junior programmer. I know he is a junior programmer as I can see novice mistakes in the code. His mistakes include not understanding how Object Oriented programming should work, his user interface design, and his approach to handling data for a web based interface. They all scream inexperience and haste. If this was to be a throw-away prototype, a once-off proof of concept, then it would be fine. It could even be a growth experience for the junior programmer as someone more experienced could criticize the code and everyone would learn. That was not the development model that was chosen though.

Remember the Evolutionary Prototyping model in use for this project? Well its aim is “to build a very robust prototype in a structured manner and constantly refine it.” Which means that this pile of amateurish code is now the foundation for all iterations of development. There is also no convincing the boss that a rewrite is in order as the client has already paid a lot of money and they can’t be expected to pay again.

The end result is that any change to the system – new feature, bug fix or performance enhancement – is very likely to break another part of the system. This makes maintenance tricky and deliverables difficult to promise.

How could this mess have been avoided? (mostly anyway)

The original system could have been thrown away and the client’s requirements could have shaped the next version.
More experienced developers should have been brought on when the client was sold the idea.
User requirements should have been managed more clearly and in a formal manner (this is a whole other problem that I didn’t even raise in this post.)

Will these lessons be learned?

I hope so.

2009
09.09

Something I have long believed in, is that, as developers, we should be concentrating on one job at a time. I have often been put in the situation where I need to work on multiple tasks during a working day. This not only creates stress, but also leads to increased delivery time and potentially poor delivery for all of the projects.

It might be nice to be able to say to each customer: “Yes, your project is currently being worked on…” – but, I think it would be far better to be able to say to the customer: “Your project will be completed in 2 week’s time”. The second statement may not be exactly what that customer wants to hear, however, it will result in a better product and a lower overall cost (not only for the current development phase, but also future maintenance cost due to having a better product delivered).

While I understand that many customers simply want a product delivered in the shortest time possible, the long term benefits must surely be to retain a greater customer loyalty due to a better product being delivered.

With reference to: http://codemonkeyism.com/high-cost-overhead-working-parallel/

2009
06.16

If you have a Nokia S60 5th edition phone with an accelerometer then you can easily create widgets that read the device data. Why would you want to know how your phone is oriented in 3d space? I can think of a few pretty cool user experience reasons such as tilt-to-scroll (ala Instapaper‘s iPhone app) and as the control mechanism for games. Unfairly though, widgets are not especially geared towards performance so gaming may be out of the question. In fact if you run my demo you will realise just how badly a JavaScript and HTML widget can perform – if you want nice animation in a widget you will be forced to use Flash lite.

In my rather simplistic demo I have a small block on screen that slides around depending on which way the phone is tilted. There is a bug though – a very big bug on my 5800 with v20 software: it eventually slows down and then crashes with a memory full error. You see there is a memory leak somewhere and, after rewriting my code many times, I have to assume it is in the phone’s handling of the sensor data interface for widgets.

Perhaps if you try out my demo you would let me know if it works for a prolonged period of time (>10 minutes) or not on your phone either by commenting here or via twitter (@perelson). Oh, and I know I said S60 5th edition, but if your version of S60 runs WRT widgets and has an accelerometer then it may just work for you as well.

Download the demo: blockmover.wgz. It installs as “Sensor BlockMover” in the Applications folder on your phone.

Warning: If this demo causes a memory full error, your phone may just stop some of the running programs. All I’m saying is don’t blame me if another application gets closed and you lose something important.

2009
05.25

I just read about Violet’s Mir:ror product on Read Write Web (rww). The Mir:ror is simply a RFID reader that, together with some software, can do a variety of different tasks when presented with various RFID tags. You could program it to record when you feed the dog presumably by tagging and then swiping the dog’s bowl whenever you feed the dog. Some intelligent software would then monitor this data and could then inform you when it is time to buy some more dog food. Or, you could keep track of objects in a storeroom, or even perform other actions, like twittering whenever you swipe some tagged object. Swipe your umbrella over the Mir:ror and you could be automatically whining on twitter about the weather again.

Of course, the RWW article mentions quite a few shortcomings that all boil down to humans being lazy. If the Mir:ror reader isn’t where you need it then forget it. You also have to set up all the tags individually for each object and you have to create the action that will be performed when the object gets swiped over the reader! Never, I’m far too lazy for that to last any meaningful amount of time.

I was thinking though that the ability to track certain objects and their usage is quite a nifty one. Why can’t we get rid of the RFID tags and replace them with barcodes? You can print barcodes out on any standard printer so they can be extremely cheap to produce and many objects have barcodes already. Don’t have a barcode reader? Well, what about your mobile phone… doesn’t it have a camera? In fact, my phone is a smart phone and I’ll bet I can make some software that can read the barcode, interface to a web service and retrieve the details of the product and based on what the product is guide me through the default types of actions I might want to perform with the object. It could even upload the generated data to a cloud service for storage, analysis, events, and reports.

It would be useful even at the basic level of just being able to scan a barcode and the software telling me how many times and when that barcode was scanned. You see, if I am scanning dog food then I know I am scanning dog food and I can make my own rules as I see fit. In this case I would be able to see how many times I have fed my dog and that I have not skipped a meal. Rules and actions can be added later – in fact everything else could be done through a web interface to work with the stored data.

I can’t tell, is this a good idea?

2009
02.10

There is a small development office comprised of eight developers out there. They crank out code to support the financial decision makers at the company they are contracted to and over the years their database schemas have grown. Bottom line was they were spending more and more of their time maintaining the databases and less on providing services for their clients.

Enter the Database Administrator

They felt like they needed someone to provide support when it came to maintaining the databases. This person would help when they needed to produce a complex query and would guide them to better design choices. Someone who would ensure backups ran and would document the databases. Someone who would support the developers by ensuring the database would continue working at its peak by monitoring indexes, statistics, and files.

What they got was an academic theorist who is formalizing everything possible into a best practice nightmare. They got an academic theorist who doesn’t know how to maintain the database, but does know what other people have written about database design and techniques. What the developers are getting are rules to follow – the Database Administrator is supervising their projects more than administering the database.

Now don’t get me wrong, I like standards and I agree that it is important to put these policies into effect. It just would have been nice for the developers to be able to spend more time writing software. Instead they still end up doing all the work a bona fide database administrator should be doing and they lose a little morale every time they have to do the Database Administrator’s job.

The developers in that team know that they can only rely upon themselves in the event of a critical database failure and not the Database Administrator.