Posts

Showing posts from 2014

User Interface Usability Checklist Part 1

User interfaces are changing quickly, and it can be default to keep up with new designs and trends. The smaller the team the more corners are cut to try and get the product to market. Lots of people advocate the creating and releasing the minimum viable product. This is fine, but companies try to do so without the minimum viable staff level. Creating a great user interface takes good design, user testing and lots of iteration. Unfortunately user testing is often the first "cost" that is abandoned. The next is the available design time. So when you become incredibly constrained then making good design choices becomes your only course to prevent a horrible mess at the end of the project. I have created a usability check list of common design mistakes. I have seen all of these mistakes in projects from the most expensive to the most basic free apps, and if you can avoid all of them you are well on the way to producing a high quality application. User Interface Usability Che

Why should you use PDO?

I was recently asked if I could think of any good questions to ask a PHP programmer in an interview. Obviously this got me curious as to what Google might return for this query. I noticed that a few people recommended asking questions in relation to PDO. All people suggesting questions on PDO were forming questions where the answer essentially was that PDO should be implemented so that switching database is easy/easier. I have worked on numerous commercial products for a number of years and none of these have ever switched database. How common a change it is to switch database on a project? I can't imagine the % is very high, although I have not been able to find any figures on this. Additionally of the systems that require switching I suspect they are probably moving from an archaic language / database which does not support the system they are moving to, and so you are largely doing a complete rewrite anyway. Will SuperSQL++ 2040 support your PDO queries from PHP 5.6? Perha

More weird adventures in Cache SQL - SOLVED

Well made a new interesting discovery today. Combining TOP with ORDER BY can severely slow down a query. I was looking into a slow query which was taking around 10 seconds to return 69 results. It was getting the "TOP 100" from a specific date range and then ordering by ID descending. It was fascinating to me to discover that removing the TOP 100 returned the results in 0.005 seconds. Removing the ORDER BY instead of the TOP 100 also resulted in again producing the results in 0.005 seconds. So the moral of the story is don't use TOP and ORDER BY if you want your results back quickly. I have no idea why this kills performance right now, but it is perhaps even more interesting that even though the query TOP 100 ORDER BY ID ASC results in the same set of results as TOP 100 without an ORDER BY command, it takes 8.8 seconds rather than 0.005 seconds. There are definitely some huge optimisations available in respect to these queries. Update Well after reporting this t

So which is the best mobile keyboard 2014

Image
Photographer :  Cindy J Grady I have been lucky enough to experienced using keyboards on iOS, Android and Windows Phone (8 and 8.1) which has really shown me how important a good input method is in the mobile experience. Each keyboard has unique features which makes choosing the best keyboard a bit of a struggle. Until recently I had completely dismissed iOS keyboard for the following reasons 1. 4" display means that the keys are harder to press accurately 2. Selecting & deleting words is trickier than both Android and Windows Phone not just due to the smaller target area, but also the implementation requires a "long press" to activate the magnifying glass to achieve accurate cursor location. 3. Lack of swype / shape writing style input. While options 1 and 2 were of just minor inconvenience option 3 is a major issue. Swyping / Shape writing There are three great features of shape writing 1. It is a much faster input method on the whole than key p

How to improve the speed of your web page, the basics

Image
Is saving a few seconds really important? Image by  FracFx While practically any change, no matter how sure you are that it is a positive improvement, can be met with anger from the user base performance improvements are not one of them. In an ideal world all webpages would appear the instant we demanded them, however achieving good performance has costs, and those costs need to be offset against the benefits. Features and complexity sells and performance is just one of those features which can be easily ignored and tough to sell, especially if it is say the difference between 10 seconds and 5 seconds. The benefits of speed are often underrated and can be difficult to appreciate. For example a fast application is easier to use, not just because of the reduced frustration of waiting, but because it is easier to explore. If you click in the wrong place as the next piece of information appears instantly you can easily explore the options on the page. If every option takes ages

The big constraint in Development and how it can bring down a team

I always consider the primary constraint in software development to be time. While technically this constraint could be considered a function of money, it is difficult for a developer to assert direct influence over budget. Most organisations require developers to go quite high up the chain of influence in order to try affect the proportion of budget development have access to. Supply and demand factors for the product that development are supplying is difficult for them to directly influence, in most corporate structures sales and marketing are the real influencers of this factor. Yes they rely on the quality of product that development provide, but it is unlikely that and improvement in the product quality will have an equivalent impact on sales. The ability of sales and marketing to reach new customers and alter demand is a much more influential factor. It is one of the great features of software development that you can essentially do anything the customer asks for, but only if y

Intersystems Cache - Write Performance

Image
In previous blog posts I have mentioned that Cache has good write performance, in fact in certain circumstances it is faster than many other databases. However, it is rarely the case that optimising performance is not desirable. Every one loves a performance boost, it is the most universally loved product change. The closest I have ever experienced to a complaint about a performance boost is "its so fast I didn't believe it had worked". Any way I was working on improving query performance on a server when I noticed some intermittent slow down. I traced the performance issue to a task which performs a huge burst of write operations. The write operations were so heavy that the rest of the server was experiencing slow down. Obviously the code is under review to see if the amount of data being written is necessary, but I was curious about optimising the write operation itself. With read operations I have noticed that dynamic SQL is slower than compiled SQL which is i

When will the S5 get a working CyanogedMod 11?

As of today (17th July) CyanogenMod 11 is only available in a semi-functional version. With both GPS and the camera not working it could not be considered a daily driver, and of course there are plenty of other minor niggles. Samsung has introduced lots of great features in its latest version of TouchWiz, and I have always liked the swipe left and right on contacts to send a message or initiate a phone call since it was on the original Galaxy S, but this single likeable feature is does not compare to stock Android. The cleaner look, the instant responsiveness and now with Android L the promise of better battery life we all know that TouchWiz cannot compete. So far I have turned off most of Samsung's proprietary functionality, and found the finger print scanner and heart rate monitor to be next to useless. The Galaxy S5 is still the best phone I have ever owned, but a Google Play edition or CyanogenMod would be a massive step up in usability, speed and enjoyment.

Dearth of Intersystems Code Examples

When I first started my current job I was told that the database was an Intersystems database, I had not heard of this before on researching it I found out a number of things. 1. It was ranked number 63 on DB-Engines most popular databases 2. Cache is not a good name for a piece of software if you want to find information in Google 3. There was a distinct lack of examples and people discussing real code This 3rd issue is perhaps the most important. In programming most of what you want to do has been done by thousands of people before you. Want to parse a CSV file, well if your language does not have a built in function someone will have posted a solution on the internet. Not only will you have a working solution it will probably have been commented on by a number of programmers and improved to a level which would have probably taken you several live iterations to achieve. The code examples in the documentation are basic, out of context and ignore even simple advise on field fil

Response to making a better password fields

Image
Photo credit: Flickr user FORMALFALLACY via Creative Commons Paul Lewis wrote an article attempting to reduce friction on password fields . He even referenced the wonderful xkcd cartoon on the subject, but I feel concentrating on ways of helping users to see how they can enter a valid password misses the main point of the friction. The friction is primarily caused by the requirements, be they minimum requirements symbols numbers etc. or maximum requirements like no more than 16 characters, or even worse the password must be between 8-12 characters! Being forced to modify a password to add extra features is likely to cause you to forget it, in the same way that preventing a user from certain length passwords or use of specific symbols will also annoy and lead to forgotten passwords. These restrictions add friction to the password entry screen and anything that can be done to remove these restrictions will reduce friction more than attempting to improve the clarity of the restri

The power of Intersystems Cache

Image
It is interesting to see Intersystem's struggle to have a working system too...

Intersystems Cache Indexing Shocker - How to Fix Sluggish Queries

Image
Photo: Markus Spiske / www.temporausch.com / CC-BY When going through a performance review of a grid on the website, I was struggling to see why the query was taking so long. It was a single table query with a single where clause which was on an indexed field. This indexed field could only contain 5 different values and the query was return fewer than 100 entries but was taking over 1 second. On other lower powered servers the query was taking less than a third of a second and often returning more data albeit on a smaller total data set. Checking the query plan revealed something interesting, the query was not using the index but was instead performing a whole table scan. Further testing revealed that only "=" queries use indexes. "!=" ignore indexes as do any queries with "OR" or "IN". After further investigation I found that if you only return the ID then NOT, OR , IN queries do use indexes, however, if you return any other field inc

MVC Frameworks - CakePHP a quick Evaluation

A real project always throws up more issues than following the tutorials, I find that you not only tend to learn faster, but to a deeper level. To try and evaluate CakePHP I made up a simple application. This was a simple car database to allow direct comparison of different makes and models comparing the following characteristics: Price, Seats, 0-60 MPH time, MPG, Age, Road tax. Within an hour of downloading CakePHP I had a working create, read, update, delete (CRUD) application. After 2 hours the filtering of the available fields to restrict the list to various required maximums or minimums and 20 cars details were manually entered. The application was essentially built working and tested to a basic level in 2 hours with 200 lines of code. The real advantage though was those 2 hours were not hard pressed programming, it was a relaxed pace, and I am unsure without a framework I could get a CRUD application to the same level without a reasonable amount of planning time. The fr

Zend Framework VS CodeIgniter VS CakePHP VS Symfony Part 1

The annoying thing about programming is that the "right" way is not always obvious until you have done a lot of work on a project, sometimes design flaws only become obvious much later in production environments, when the real world starts to attack your lovely code. The best way to avoid the wrong way is to try to arm yourself with as much knowledge about what is available as possible to reduce the chances of incorrect decisions. As such I have been looking into various PHP frameworks to try to establish which will be optimal for a project I am working on. All four frameworks are designed to try and help you produce software as quickly and efficiently as possible. The goal is to assist you making the correct design decisions from the outset so that code is more reusable and easy to understand. All the frameworks essentially rely on the Model View Controller (MVC) design pattern and the main learning curve to each is understanding how the Model, View and Controllers are

Usablenet by name, unusable on Windows Phone

E-commerce usability has been written about for ages, so it might come as a surprise to some that Usablenet  who claim to have the "best in class" mobile websites have numerous basic user experience failures. I visited Sports Direct's website today with a simple goal of looking for a sports drink bottle. This should not be a complex task. On opening www.sportsdirect.com I was redirected to the mobile version, it had ignored my browsers desktop website preference and redirected the domain. Redirected domains are commonly the worst start in terms of user experience. Here are just a few of the common issues a mobile user will experience when they are redirected to the "m." domain: Failure to take into account the exact entry link. e.g. A directly link to a specific article is selected form a Google search and instead of reaching the mobile version of the article the domain redirect goes straight to the home page. The redirect creates a new set of http reques

Getting the Windows 8.1 Developer Preview update

If like me you own a Windows Phone you might have already installed the Windows 8.1 Developer preview. Perhaps you also experienced some unpleasant bugs and tried a full reset to fix this. You could then have read that Microsoft released an update on the 15th of May which fixed many bugs... But wait phone up update says you are already on the latest version and yet you only have version 8.10.12359.845 not the all singing all dancing 8.10.12382.878 In order to get the new update you need to have the developer preview app installed, which you inconveniently deleted during your factory reset. Good news is after a quick reinstall you will be able to select update phone and grab the new and improved developer preview. Hope this helps anyone who is also sitting there scratching their head wondering why they aren't finding the new 8.1 update.

Select element; the good, the bad, the very bad and the down right ugly

Image
Reading Mikkel Bo Schmidt's article reminded me of how important the small details are, but not only that, how difficult it can be to make things better. Mikkel rather skimped on the details of the select element so I thought I would go further. The Good Perhaps the most obvious good part is that everyone recognises the select element, it has been around for so long that any regular computer user will know how to interact with it, and many are even aware of how to use the keyboard to skip alphabetically. The select element is a very compact way of displaying a range of options, it is just a single line and can even take up less width than the text of the options it contains, although this is not recommended as if you select a long option you will not be able to read it, reducing the usability. The other important benefit is that it works on every device no matter the spec or OS*. Developing a replacement is not a simple matter, does your solution work on every device? H

Microsoft Excel's Unintelligent Defaults (multi-ligual CSV failure)

One of the best thing to do in an application is to work hard on the default behaviour, 95% of users never change their settings so the defaults really are vital to the use of the program. Excel has wonderful features but its defaults are extremely frustrating. Many of them I simply do not understand, for example if a column has leading zeroes then the user probably wants to keep them! However, I came across one issue which I had not experienced until now. Anyone who has had to deal with internationalisation will probably be aware of the differences in European decimals for example 1,000.00 in UK & US is written as 1.000,00 in many European countries. Microsoft Windows has region settings which take these into account. Excel uses the region settings as the default method for formatting files. This seems reasonable but it contains a setting called list separator which it uses as the default separator for reading a CSV file. If your region is one where "," is the stand

Password hell, why everyone is failing password UX 101

Image
Passwords are a horrible clunky mechanism, however, until all devices have finger print / retina scanner APIs they are still an essential basic security mechanism, that is accepted as a necessary evil by the end user. There tends to be three basic strategies to website passwords that people adopt. 1. A single password for everything. It is a complex, but easily memorable as you have to type the same one in several times a day. 2. A large number of passwords based on a pattern, perhaps even one per website which includes the website name. 3. Randomly generated passwords stored either in the browser or a key storage like keepass. From my user testing the first two are most common and some companies even ban the use of the third strategy. It should be possible to see these strategies and understand exactly how users access websites and more importantly how to provide the least friction to their use of the website, but I still see plenty of websites which fail to do so. Causing u

Windows Phone 8.1 Developer Preview Crashing / Unlocking issue resolved

After Updating my Lumia 1020 to Windows Phone Developer Preview version 8.1 I felt the new features were great. However, I encountered what I consider a terrible bug, approximately every few hours my phone would not respond, it could not be opened and would require a soft reset every time in order to gain access. I believe I have tracked this down to the password lock. After removing the password lock I am no longer experiencing this issue. Clearly no-one at Microsoft tried putting a password on their phone, developer preview or not this is a bug that really should have been high priority and not made through any reasonable QA process. Still feature wise WP 8.1 is great and if Chrome comes to the platform then I doubt I would leave.

Project Ara high end or low end?

I remember many years ago when it was impossible to buy a desktop PC for less than £1500, but you could build one for nearer £900. For many years it was cheaper to buy the components and build your own. Then along came Dell. After a couple of years the price difference was minimal and in some cases Dell was actually cheaper. The build your own PC became an enthusiast market, either gaming machines or super quiet machines were ordered via their components, the closest most people came to the component market was to buy some extra ram. So I am very curious to find out what project Ara will bring. Will buying the components allow you to maximise the features you want and save money on the stuff you don't care about? Will it be an enthusiast only product where people build super premium phones which cost a lot more than the current flagships just to get that extra professor boost or new sensor type? Whenever i look for a new phone i wish i could make a hybrid of several of th

What a difference a point release makes!

Windows 8 may only have gained a single point release, but it really is amazing how much is included. While some of the features have been in android and iOS for some time, there are brand new features such as WiFi sense and clever refinements of existing features like Cortana. WiFi sense is a clever piece of software which shares out your WiFi hotspots with your friends. Of course sadly as most of your friends won't have a Windows phone this isn't very useful, but perhaps on the future it might save you from that annoying what's your WiFi password hunt and then entering a stupidly long code. My favourite feature is the shape typing, which I am using now to write this. It is fast and accurate and for the first time I feel able to write a long piece of text on my Windows phone. The notification pull down menu brings WP8.1 in line with android and iOS and even after just a day you can see it is better than live tiles on their own. The sounds are now split further so t

Wow Windows Phone 8.1 even better than the rumours!

Obviously I was up to speed on all of the new rumoured features, however, to avoid potential disappointment I was resigning myself to the probability that at least one of the rumours was untrue. Luckily all the features I was looking for have been introduced and more! Swype-like keyboard (Shape Typing) Notification bar (Action Center) Cortana Virtual Assistant Shape Typing Swype-like keyboard is probably my most wanted feature. Since switching to Windows Phone I have often been waiting to gain access to a desktop before responding to emails because my typing speed has dropped dramatically. While Swype on Android it felt like I was not far from keyboard speed, the standard MS Keyboard felt like I was just wasting my time even starting to type. Action Center It is difficult to explain how nice it is to read all your notifications, body text and all, just from a quick swipe on the lock screen unless you have experienced it in Android, preferably stock Android as Samsung ten

LG the surprise package

I had a look at the blind photo comparison on phonearena . It was interesting to see the differences between the top phones available in terms of there cameras. I felt it was a fight between phone 1 and phone 7. While in some cases the other phones were better overall these appeared to me to be the most consistent. It was not a big surprise that my top pick was the Lumia 1520, the large camera sensor size and consistently good performance of other Nokia phones is well known, what did surprise me was that my second choice was the LG G2! It does seem that LG might be making a step up to really challenge Samsung, they have made the last two nexus phones, and the G2 is currently selling at a relatively bargain price compared to most other top of the range phones. Whats more they have developed self healing plastic and curved displays , rear mounted buttons, as well as what appears to be the best android camera. If they were to up their sensor sizes to match Sony and Samsung and ke

How to Build Excellent Software part 2

I release my initial post on building excellent software may have sounded a bit anti-UX. The UX "movement" is all about providing an excellent, unique, crafted user experience that rewards the user and delights them with your product. I perhaps implied that "features" don't matter. Yet little rarely used features are often the ones that delight us the most. I recently owned a Samsung Galaxy Note. With the stock Samsung firmware it was extremely feature rich, there was lots of nice stuff like sending the screen easily to my TV, some nice gesture support, eye tracking screen time-outs. However, I chose to install a custom firmware that was extremely stripped down by comparison. This was purely because the standard firmware was too slow for my liking, I felt I was always waiting. Of course I missed some of the features but the large increase in responsiveness in 99% of the actions I would perform on the device more than made up for the missing functionality. I ha