Friday, 27 August 2010

Playing in google's sandbox and the impact of your Page Rank

The SEO crowd often bleet on about the 'Google sandbox' effect for new or restored websites, but what does it actually mean for your website? And, once you're outside Google's playpen what are the effects of the page ranks?

Well let's get down to some stats first from Google's Webmaster tools:


Description Page Rank Impressions
(per month)
Website 1 3 65,500
Website 2 2 49,300
Website 3 1 26,100
Website 4 0 14,800
Website 6 In Sandbox 0 2,400
Website 7 In Sandbox 0 1,600

All of these websites are virtually identical. They all target almost the same keywords, they're based on the same platform, use virtually identical data and have the same backlink profiles.

Except Website 6 & 7.
Website 7 is a new site only a couple of months old which targets keywords that are similar to the rest of the websites but it's using a new domain. Website 6 is an old domain which was pointing at an empty directory for a couple of years and has recently been restored but appears to have landed itself back in the sandbox for a while.

So What is Google's Sandbox?

Well no one outside of Google knows to be honest and publicly they have acknowledged that their is some kind of sandbox effect but claim its not a designed in feature.
Either way it is there and even sites which have never had any SEO work done to them eventually exit the sandbox and its traffic climbs up.

How do you get out?
You can just wait but the best thing you can do is keep working on your site. After 3-4 months you may find the number of impressions in Google's webmaster tools start to rise and your traffic starts to trickle in, however sometimes it can take up to 6 months.

Monday, 23 August 2010

Release of first software product

We're almost ready to launch our first 'off the shelf' product. The product itself is 'complete' - we just have to modify our website now so that people can actually buy and download the software.
The product itself is just a delivery label printer for shipping addresses which is based on an old project we worked on some time ago and had quite an impact on the business that commissioned the project.

The, imaginatively named, 'delivery label printer' prints shipping addresses on to label stationary such as the type manufactured by Avery. In fact the application ships with a database that holds over 1,700 records of different stationary including almost all Avery labels.
More info on the product can be found here.

While the project itself is considered to be completed we've decided to add a few extra things to it to add a little more value. For addresses in the USA we're going to add the POSTNET barcoding and we're looking at CASS certification but at the moment we are thinking of releasing the application and waiting to see if their is a call for certification.
We're also considering adding the ability to buy postage from the UK Postoffice via the application too and have the postage printed with the label. However at the moment we're still trying to contact the correct people within the post office to see if this is possible.

The extras should add some real value to the application but aside from the American bar codes it looks like at this time they will either be part of an update or revision of the current software.

However as this is our first application to be sold 'off the shelf' we are a little bit in the dark as to what will happen after release. Due to its nature we're not expecting an avalance of customers, but we are ... curious...

Thursday, 19 August 2010

Crystal strikes back!

Back in the late 90's virtually every bespoke app and a huge number of off the shelf applications that needed to print used one system, Crystal Reports.
For its time Crystal was a god send, creating a report for printing wasn't the most straight forward task in a project and could take days - even weeks for complex reports.
Crystal, however, made the job easy and even the most complex reports to be printed on pre-printed stationary would only take a you a few hours. However while it was a gift from the heavens for developers like myself it did have one seriously annoying drawback, installing it on your users computer.
I don't think I ever spent the time to find out exactly what Crystal's issue was with installing and why it spat out a stream of errors during a standard install but generally it can be fixed with just a few simple commands:

First ignore the errors generated by crystal during the install and then open Command Prompt and type:

> cd %SYSTEMROOT%\System32
or
> cd %SYSTEMROOT%\SysWow64
On 64 Bit systems

> regsrv32 crystl32.ocx


If everything Cyrstal needs has been installed and the regsvr32 successfully registers the Crystal COM control most of the problems it had during install should be now fixed.

Saturday, 14 August 2010

Script kiddies and their black hat SEO

For the last few days we've been watching what we believe to be a Chinese hacker group repetativly smashing their head against layer upon layer of security routines attempting to inject links back to their own website from a fairly popular website we maintain. It's all rather pointless given the form they have chosen to attack doesn't do anyting but post an enquiry that is only visible to the website owner!
But bless them, it hasn't stopped them trying...


I personally go that extra mile with the software I write to thwart these types of attacks, if you're looking for information on php security this is a good place to start.

Thursday, 12 August 2010

Software based Used Car Valuations

Online Car buying companies have sprung up all over the Internet like a rash recently and we've had a fair bit of work thrown our way developing the odd Car valuation tool (Car Arena being our latest).
Much of the work with these websites is much the same as any other website with the exception to when it comes to automatically valuing a vehicle.

 There are no hard and fast rules when it comes to valuing a car as the value of the vehicle is more to do with the desirability of the vehicle than what the vehicle is worth in terms of materials, performance, etc... And so any automatic car valuation needs to be based on some data source. The two most commonly used in the UK are CAP and Glasses Guide, the former being most prominent (for automatic valuations at least).

But before we begin generating a value for a vehicle we need to accurately identify the vehicle in the database. CAP data has around 36,000 vehicles in its 'new vehicle database' and using the wrong vehicle identity, even if it is a close match, can throw the valuation out by a significant amount. Past experience has shown that even experienced users have difficulty 'Capping' a vehicle (selecting the correct identity) so very often the DVLA's data is used to match up a vehicle against the CAP database.
This also makes life easier for the owner of the vehicle as they only need provide the registration and, if the DVLA's data is correct, the CAP identity of the vehicle is easy to determine. Also most of the providers of the DVLA data will determine the CAP or Glasses identity of the vehicle for you, HPI and CarWeb are just two examples that provide this service. Once the identity of the vehicle has been determined, obtaining a basic value is a small matter of a few SQL queries.

 For any one car CAP data will generate 5 values:-
  • Cap New
  • Cap Retail
  • Cap Clean
  • Cap Average
  • Cap Below
Cap New is the amount the vehicle was worth when it was registered
Cap Retail is the forecourt value of the vehicle now
Cap Clean is the value of the vehicle in almost impossibly good condition
Cap Average is the normal value of the car today
Cap Below is the value of the car if in poor condition

Almost every dealer uses Cap Average as the basic price for a vehicle and will often start with this value and knock amounts off for a number of reasons. A few car valuation websites running at the moment though do use Cap Below as a fail safe if the vehicle can not be reliably valued or if they wish to slow down the number of cars going through their organization.

At this point we would have a basic value for a vehicle which is often fairly accurate but only adjusted for mileage. Some Manufacturers and Models though do perform badly with automatic valuations (Mini for example) as when the car was ordered many expensive options would have been available which are not known when it comes to valuing the car now and CAP data will heavily undervalue the vehicle through no fault of its own. Some other cars tend to be worth less than the CAP data would suggest so often we build in modifiers that allow the dealer to adjust the basic valuation in an effort to correct the problem.

After this the manner as to how the rest of the valuation is done is down to the dealer. Many may increase / decrease values for specific body work colours, previous owners, options, condition, MOT status, etc...

Wednesday, 11 August 2010

If it's too good to be true...

Recently we've had a flurry of people trying to sell us everything from Outsourced bespoke programming to SEO (and yes the previous link is a blatant plug for our site!!). Many of the things these people have tried to sell us sound unbelievable - programmers for just $8 an hour, thousands of links from high page rank websites, hundreds of blog entries with links containing keywords, ...

We took an in depth look at one of these offers that passed us by and I have to say we did have a client in mind that may benefit a lot from the service. However after a while of picking through the labyrinth of information and promises thrown at us we eventually got down to the basics. The offered SEO campaign amounted to a banner advertising campaign and an entery in google maps!!

Which brings us back to the title of this post, if it's too good to be true it probably is.
Good quality software only comes from experienced skilled developers working at the pace the project demands and successful SEO takes a lot of time and effort.
Or to summerize if you want to be a millionaire it takes hard work and it won't happen over night, ... well unless you're currency hyperinflates!

Monday, 9 August 2010

Object Serialization

Some 15 years ago when I got my first job as a programmer my first task was to learn SQL. A language which had been around for a while but I'd never encountered before and was only just coming of age. I remember throughout the late 90's and early 00's the pain of writing some enormous SQL queries simply to load, save and delete business data from the data servers and the, sometimes, weeks wasted just because another field was added.
These days of course we've moved on and the situation has improved. Most databases allow for the use of UUID's/GUID's for row identities removing the need to query the database server after an insert to find out what value was assigned to the row and, now, many language's support Object Serialization.

Technically Serializing an object into a byte array / string has always been possible but without the appropriate language support, downright dangerous! And completely against the 'Safe Hex' practice which had been drilled into me from my very first line of code.
Today though, with languages like PHP and the .Net flavours, the risk of your code and your data source spawning a mutant object hell bent on turning your structured data into a garbled mess is practically impossible post-development and is a feature I really miss when going back to older projects.

When writing members to load, save or delete data today I find myself selecting the members which I want my users to be able to search on and leave everything else to be stored in the serialized object within a Binary object field of the table. Once the short amount of code needed to complete my 3 IO operations has been finished adding additional members to my object rearly means 6-7 other edits per member elsewhere.

For example, like most developers I try to keep all of my settings to one file and in PHP would often set the values within the globals array directly. However a major drawback of doing this is that unless you write some script to recreate the settings file the average user cannot modify the settings of their website.
To get around this we built a generic object which would serialize itself to a plain text file and use the member fields of the object to store settings, allowing us to store all of the settings in a way which was easy to modify and easy to maintain. The method for saving the websites settings is just:


 public function Save()
 {
  if(($user = User::getCurrentUser()) && $user->IsAdmin())
   return file_put_contents($this->SettingsFilePath,
    serialize($this))>0; 
  else 
   throw new SecurityException('Access Denied'); 
 }

Generally when storing data via SQL data is base 64 encoded to avoid binary data making a mess of the SQL statment and in PHP a modified version of base64_decode is used as PHP's built in function can only handle 4Kb of data.

 function base64_decode_long($value)
 {
   $result = '';
   for($i=0;$i<ceil(strlen($value)/256);$i++)
    $result .= base64_decode(substr($value,$i*256,256));
   return $result;
 }

Custom computer software development Bespoke software