Archive

Synchronize MySQL Databases Redux

As I’ve wrote some time ago, I have created a web-based structure synchrnoziation tool for MySQL databases. We’ve needed a thing like this ourselves, so I’ve decided to create the tool as a standalone product from the start.

I’ve called the product Stuffed Sync, but never had enough time to prepare it for a proper release (write installation, documentation, create a dedicated site section, etc) . Finally, a week ago we’ve made a decision to launch a free service that allows to synchronize MySQL databases. The service was named SyncSQL.com and I am happy to report that as of now it is available for public use.

Basically this is a much lighter version of Stuffed Sync the product. But it should be sufficient for a lot of scenarios and we hope that it will make life easier for a lot of developers.

How it works?

You specify structure dumps of the source and target databases and hit the “Synchronize!” button. Your dumps are analyzed and all required alter statements are prepared for you. Then you should run the prepared statements on the target database and its structure will become identical to the structure of the source database.

How it looks?

SyncSQL.com

$3,499 per year for a domain from Network Solutions?

They are out of their mind! Yes! I want to save on one domain and pay $99,999 for 100 years!

Network Solutions is crazy!

Why your tracking software needs IP-based tracking

We’ve just released a brand new version of our conversion tracking software and one of the major new features in this release is IP-based tracking.

Usually cookie-based tracking is considered to be good enough for tracking visitors and advertising effectiveness. But as we’ve found out ourselves less then a month ago there is one big reason why you urgently need your conversion tracking/web stats software to support IP-based tracking. And it is:

Safari on Mac

This doesn’t seem to be widely known or discussed on the web, but Safari browser has a default setting to reject all cookies that are coming from a 3rd party domain. And this is a real disaster for cookie-based tracking!

To illustrate the concept of a 3rd party domain and the problem that a Safari browser imposes here is a small story:

0. Once there was that wonderful person who liked to create cute stuffed puppies and kittens. Her name was Jill.

1. Jill had her own site www.stuffed-animals.tld. Visitors were coming to this site from the advertising and some of them even purchased her wonderful handmade stuffed doggies and kitties.

2. At some point Jill had realized that she needed to measure effectiveness of her advertising and understand where her purchases are coming from.

3. She has singed up for a conversion/ROI tracking service called www.bestconversion.tld which was costing here around 30 bucks a month. They gave her a special javascript tracking code and said that she should place it inside the pages of her wonderful site all filled with joyful pictures of stuffed doggies and kitties. And she did just that.

4. After sometime she discovered that www.bestconversion.tld reports do not give her any valuable information. She could see that people are coming to her site, she could even see that most of them use Macs and Safari browser (she already knew that her cute stuffed doggies are popular in the Mac community, so there was no surprise), but she didn’t see the conversions. Jill knew that in the last week she has got more then 100 sales, the reports showed her almost that number of sales tracked, but they didn’t show her the advertising source from where the converted visitors originally came from. It seemed that the service software actually saw the sales happening, but couldn’t connect them with the advertising source.

5. Jill thought that something was wrong and called up the www.besconversion.tld support, but they’ve said that there were no problems with the service from their side and that she was the one to blame. Jill stopped paying for the service because it didn’t bring her any value (and because the support people were rude).

End of the story.

So why Jill was not able to track conversions? The reason is simple.

The tracking code that www.bestconversion.tld has given to her was calling up the software located on www.bestconversion.tld domain, which logged information and tried to set a cookie in the visitor’s browser in order to identify this visitor later when he/she will make a purchase. But since most of the Jill’s visitors were using Mac and Safari that cookie was immediately rejected because it was coming from a 3rd party domain and Safari browser has a default setting to reject such cookies.

The original Jill’s page was loading from her own site - www.stuffed-animals.tld, but the cookie was being assigned from www.bestconversion.tld - a completely different domain (a 3rd party domain in this case).

If only www.bestconversion.tld developers were smart enough to use IP-tracking combined with cookie-based tracking, then the end of this story would probably be completely different.

By using cookie-based and IP-based tracking combined you get the best of the two worlds. When cookies are working properly in the browser, the visitor is tracked with a cookie. If cookies can not be set for some reason, the visitor is tracked using his/her IP.

And this is just how our Stuffed Tracker now works.

Factory Nova — Dynamic Image Resizing

First of all, in Factory Nova we are showing thumbnails for all uploaded images. So, for example, a designer can upload mockups of the design that he/she is creating to a task and everyone can see them as thumbnails, not just as a name of a file.

But we have gone even further with this. If you will click on a thumbnail you would get to a page where a bigger version of the image is displayed and you can discuss it, posting comments right under the image. We use this feature ourselves quite often when working on the new Factory Nova interface.

Wait! There is even more. The image on this comments page is dynamically resized to fit the size of your browser window. If the window is smaller then the image then the image is slightly decreased to fit (and of course at any time you can simply click on the image and see its original version). The resizing is done on the server side (not in the browser) and thus the quality of the resized image is quite good.

I’ve just added one more feature to this functionality. When you resize your browser window, the image is resized as well!

Here is a video of how this works (please ignore the interface of Factory Nova that you can see in the movie — this is our current interface, it is all in Russian, and we are working on completely changing it).

QuickTime movie (3.3 Mb).

Regular expressions (how we manage our code)

As any sane programmers we keep all our code in a source control system (in our case it is CVS).

We also use a PHP framework called Nova System that we’ve created specially for use in our products. This framework should obviously be shared between the products, so naturally it lives in its own directory in our CVS repository.

So for Stuffed Tracker we actually have 2 top directories (”tracker” and “system”) which we have to retrieve from the CVS when preparing a new release. This imposes additional challenges for us, but nothing that we couldn’t handle.

As soon as a new release of Stuffed Tracker is ready, we tag it with appropriate version in CVS and then launch a special script that I’ve wrote using Perl that not only retrieves tracker’s files, but also Nova System’s files and tracker’s documentation from a separate location. It then puts everything in the appropriate directories (”system” inside “tracker”), removes CVS service directories and then packs everything in a zip file with a correct name containing the product’s version number.

We then only need to upload this file to our server and that’s all.

Today I’ve also added one nifty feature to this script that removes comments (PHP and HTML) in Russian from the source files before packing them in the zip. We’ve decided that it is not appropriate to keep Russian comments in the source code, since most people viewing the source won’t be able to read them anyway.

Comments are removed with a very complex regular expression, that I’ve partially borrowed from an excellent book called “Mastering Regular Expressions” (by Jeffrey Friedl). I recommend this book to anyone who wants to understand how regular expressions work on the very low level.

This book has a great example of a regular expression that removes C and C++ style comments, even keeping them unchanged if they are inside double or single quotes. I’ve added some of my own logic to this regex. Particularly I wanted to remove the comments that start with “#” as well (they are also used in PHP). And I wanted a string like “// ?>” to work correctly, since in PHP “?>” would not be a part of the comment.

Anyway, I’ve made a slightly complex regex from the book REALLY complex and of course it didn’t work when I first tried it. I had a hard time trying to debug it. And then I’ve found an excellent tool just for my situation. It is called Regex Buddy. They don’t have a trial version available, but I’ve looked at Flash demos and was sold immediately.

It really helped me to make by regex work. I can recommend it to anyone writing at least slightly complex regular expression. Great software!

Our plans for the end of 2005

First of all I am happy to report that we are very pleased with the amount of sales and general interest that we are getting for Stuffed Tracker only a month after it’s initial release. Our hard work and sleepless nights are definitely paying off.

In around a week we will be launching an upgraded version of the product with several new exciting features added. Because of them we will probably even bump the version to 2.1.0 instead of 2.0.3 as originally planned.

We are also trying hard to push our project management software, Factory Nova, towards its release. 90% of all features are ready, but we still have to implement a fantastic new interface that our designer is currently working on, polish the existing features, add the remaining ones, write documentation and do other “release stuff”. We are currently looking at late December/early January release. I will be posting here more news about Factory Nova including screenshots of the new interface as we are moving closer to the launch date.

Maybe a month before the release we plan to launch a private beta for the subscribers of the Factory Nova list (we invite you to subscribe if you are interested)..

Also I would like to announce that in the plans for both of our products is.. a thin client! Soon after the Factory Nova release we will start working on the Windows clients both for Factory Nova and Stuffed Tracker.

We don’t want to do anything big at first. For Stuffed Tracker it will be a simple notifier that will be sitting in your tray. You will be able to configure it to notify you when important events are happening on your site, like a sale, or a particular action, or maybe an arrival of a visitor from a particular referrer or advertising campaign.

For Factory Nova, a windows client will also work as a notifier that will remind you about your tasks, will tell you when new tasks are assigned to you and maybe something else in the same manner. It will also allow you to quickly create new tasks with the convenience of the native Windows interface.

Thin clients will be build upon an XML API that will be added to both products. These APIs will allow anyone to create their own applications (including web based) that will interact with our products and will hopefully do something useful.

I am really excited about our future plans. Hopefully we will have enough time to implement everything we plan.

First snow in Moscow

Yesterday we had the first snow in Moscow. It was snowing the whole day until eventually it turned into the rain closer to the evening (the tempreture was around 0C).

I’ve made some photos while on my way to the office.

First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) Rav4 straight from the California First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005) First Snow in Moscow (2005)

Care about your clients

This is an obvious thing that everyone around tells about. Care about your clients. They are the most valuable asset that your business has.

Well, we take this advice very seriously here. Being a small company allows us to give a lot of attention to everyone who is at least slightly interested in our products or services. And this works very well, I should admit.

For example, we recently had a situation when a person wrote to us to ask about a certain feature of Stuffed Tracker, our web traffic analysis software, which the product didn’t have. The feature was quite specific and we will probably never add it to the standard version of the software.

Someone might think in this situation “I can’t make a sale here. I don’t have what he wants”. And this someone would be wrong. We’ve eventually sold quite an expensive pack of licenses to this person.

There was no magic trick. We’ve just showed that we care about this person’s problem from the very beginning. We’ve offered our help and showed that we have a very good understanding of what has to be done to achieve what this person needed.

And this worked! We were hired to do a customization project based on Stuffed Tracker. And this person bought a Stuffed Tracker license too.

The morale of this story: if someone made the first step and wrote to you with any question, this is always an opportunity. Do anything you can to help that person. Don’t spam him/her with your offerings; just try the best you can to help. This will always pay off in one way or another.

My first Flash movie

Did you know that we’ve actually invented a unique way to work with the stats in Stuffed Tracker? We’ve called it “Reports Constructor” and it is able to generate billions of different report combinations. This number might seem too weird to be true, so we modestly advertise it as “more then 1000″.

We expect that the concept behind the Reports Constructor might be unclear to some of the people working with it for the first time. So I’ve tried to describe it in detail in the FAQ section on our site.

And also yesterday I’ve created my very first Flash movie with an excellent Camtasia Studio. In the movie I did my best to visually explain how thousands of different reports could be produced with the Reports Constructor. Hopefully the video will make this clear.

Different conversion cycles

After 1 week of Stuffed Tracker advertising I’ve realized one thing that might be obvious to someone, but was not that clear to me.

Conversion cycles for different products are completely different.

Take for example hotel bookings (which I am familiar with because Stuffed Guys have developed Twibo). Typical visitor coming from an advertising to a hotel booking site usually books a room within several hours of arrival, very rarely within a day or two (of course if he/she books at all). Thus the conversion cycle for a hotel product is quite short.

On the contrary, if you take a software product, the conversion cycle can be quite long. A visitor arriving from an advertising does not usually buy the software right away. At best he/she downloads a trial version and then works with it for a typical month until the trial expires. Only then this visitor might convert and buy the product.

There are of course exclusions from this rule, but in most cases it works like this.

This imposes additional challenges when tracking the conversion for long cycles.