Archive

Factory Nova Icons

Just the start, but here they are:

Factory Nova Icons

We’ve decided to go with the 2d ones.

What’s up with Stuffed Tracker

The last version of Stuffed Tracker was released in the beginning of January 2006. So it’s been 2 months without new versions which is unusual for us (we try to release a new version every month).

But there is nothing to worry about. Ivan, the main developer of Stuffed Tracker, had to take some time off to help with implementing the new interface for Factory Nova and also do some custom development work for our friends from Florida.

He is now back to work on the next version of Stuffed Tracker, but we still don’t expect it to be released at least for another month. I’ll explain why.

The time has come for us to focus on Stuffed Tracker’s perfomance. Don’t get me wrong, even before we’ve released the initial 2.0 version we’ve optimized the speed of the code and the database to the maximum. But as it appears this is still not enough.

Working with statistical data (collecting & analyzing) is one of the hardest tasks in web software development and only because the amounts of data could get huge when popular sites are tracked or you are tracking tens of thousands of keywords on Google (or more). With such volumes you can easily get millions of records in the stats database in just several days and much much more after a month or two of tracking.

Really, everyone has the same problem here. I am still waiting for my invitation to Google Analytics although I signed up for it a week or two after Google launched the service.

So, again, making the database to query a set of data which contains tens of millions of records in real time will be a challenge even if you are doing this on a dedicated server with 2 Xeon processors and 4 Gb of memory.

How can we solve the problem, we were thinking. And eventually we’ve come up with several ideas that we think should work:

1. No real time reports (as an option) — the reports will be prepared by a cron script and a user will view an already prepared report which will load fast and the loading time would not depend on the amount of statistics that you have in the database. This feature is especially challenging because of the dynamic nature of our reports constructor, but we think we know how to solve this.

2. Delayed tracking (as an option) — tracking will get rid of all of its current logic (which currently does mutliple requests in the database, thus increasing its load), it will brainlessly log every tracking request somewhere and then a cron script will process this log and will put the data in the proper database tables, apply required logic, etc.

3. Archiving of the old statistics — we are planning to make it possible to archive the old statistics in some form so that you will be able to view the archives later and delete the data that was already archived to free up the database and increase the overall performance of Stuffed Tracker. It would probably be possible to optionally do this via a shell PHP script (especially important when working with huge databases where a normal PHP script accessed through the web could timeout).

4. AJAX in the reports — to make the reports more responsive, convenient and generally to ease the pain of waiting for the slow reports in case we will still have them somewhere.

As you can probably imagine, these ideas are not fast to implement, but we are confident we need to do them before we will move forward with any other features. This will be a strong foundation for Stuffed Tracker on top of which we will be adding new features and functionality in the future.

3-1+2+2=6

Starting from this January we are undergoing some changes. We’ve just moved to a twice bigger office, but that’s not all.

Shal

Unfortunately, Shal Jacobs, the main developer of our project management software Factory Nova, has decided to pursue his own project and has left Stuffed Guys around Christmas. He was planning to do this for several months, so it didn’t come as a surprise. But certainly this influenced the schedule of the beta version of Factory Nova.

For 2 months I was working on finishing Factory Nova myself. That was an interesting experience for me. I worked some insane hours every day (I think it was around 18 hours every business day, plus a little less on weekends). After I was returning home in the evening, a new working day was starting for me.

New PHP developer

That wasn’t that bad (except the absense of free time), I had some great time programming interesting stuff, I’ve managed to achieve some good progress with the software. But then we were lucky enough to get a new experienced PHP developer on board and now the future of Factory Nova is in good hands (we are really close to finishing beta.. no, really!).

The new developer had to spend several weeks on learning how things already work in FN, but now he is working on the list of the remaining bugs and features at full speed. The new interface is also almost implemented, our designer started working on the fancy icons and I hope that soon I will be able to show some fresh new screenshots.

Slava

In January, we’ve also got one more developer on board. I want to introduce Slava Snakin who is now working on the hotels reservations system which we’ve developed and are now maintaining for our friends in Skoosh International.

Slava Snakin Slava Snakin

+2

We also plan to hire 2 more developers in the next 2 months. One for our Perl-based projects and another for our PHP-based projects. If you happen to live in Moscow, read this blog, have a good great knowledge of Perl or PHP (or better both!) and might be interested in working with us, please feel free to contact us.

The new PHP developer will help us to work on our products and improve the speed with which we release the new versions (this will become especially important with the release of Factory Nova, when we expect our load at least to double).

Coming up next: what’s up with Stuffed Tracker.

Our new office

After more then a year of enjoying our work in a tiny 20 square meters office, we’ve just moved to a 2 times bigger office in the same building. We are going to hire at least 2 more developers in the next 2 months and we need additional space for them.

Here are some photos of the new room:

DSC01087 DSC01088 DSC01090 DSC01091 DSC01092 DSC01093 DSC01094 DSC01095 DSC01096 DSC01097

Full path of a visitor in a feedback form

We’ve just implemented an interesting custom modification for Stuffed Tracker for one of our clients. The idea came from the client and I think it is interesting enough to be described here.

The story.

The client has a form on his site which is submitted by potential customers. The form is quite general, it basically asks for customer’s contact information. Traffic on the site on which the form is located is tracked with Stuffed Tracker.

The client asked us to implement a functionality which will allow the form handling script to get the full path of the visitor and send it in the email along with other information from the form. With some simple Javascript magic combined with a specially written PHP code we’ve implemented a solution for this.

So now our client can see a full path of a potential customer on the site: where he/she came from, what actions he/she has performed etc. And all this — in the email with other information from the submitted form.

Useful stuff!

In other news.

You wouldn’t believe this, but the release of the beta version of Factory Nova is still planned for the end of February. I think this is the first time I am reconfirming a release date for Factory Nova (which probably means that we are really close to completing it).

Just an hour ago I’ve completed support for a “code” tag in FN, which is meant to be used to insert any type of code in the task description, task comment, discussions, etc. It even has syntax highlighting for PHP sources.

Support for code in comments in Factory Nova

Track AdSense clicks

For the past several days we were investigating the possibility of tracking AdSense clicks with Stuffed Tracker.

This is actually a popular feature request, since so many sites now depend on the revenue from AdSense. Tracking AdSense clicks in Stuffed Tracker seemed like a great idea. Not only would you get an understanding of how much AdSense clicks you have on your sites, but thanks to Stuffed Tracker you will also see the sources of the traffic that bring you most of the AdSense clicks (plus the pages on which the clicks were made and in IE even the target of the link on which the visitor has clicked).

To cut the long story short — tracking AdSense clicks with Stuffed Tracker is possible!

We have a complete description of how to set this up in our forums:
http://forums.stuffedguys.com/index.php?showtopic=77

PS. Happy New Year to everyone!

Radio buttons could be defeated

I always wondered why is it not possible to uncheck a radio button? Sometimes this is very inconvenient. If at first all radio buttons on the page were unchecked then why the browser does not allow a user to uncheck a radio button after it was checked?

So, anyway, with a very simple javascript (radioObj.checked = false) it is very easy to achieve.

See how it works in this short video in which I show how I defeated radio buttons:

QuickTime movie (785 Kb).

Updated two and a half years later.

The original version of the code that I posted in the comments didn’t actually work correctly in a situation when a group of radio buttons had the same name (which is of course the most common use scenario for radio buttons, but I happened to call them differently originally when I’ve created the unchecking code).

So here is a fixed version of the code (as it appears the click event only is not enough for this to work correctly, we have to assign a handler to a mousedown event as well).

Pure JS version

<input type="radio" name="name" value="value"
onmousedown="this.__chk = this.checked"
onclick="if (this.__chk) this.checked = false"/>

jQuery version

If you are using jQuery on your site then this version is for you, it will make ALL radio buttons uncheckable on the page, no need to specify any special code in each radio button.

Just place this code in the HEAD of your page, after jQuery main library inclusion and you are set –

<script type="text/javascript">
$(document).ready(function() {
  $("input[type=radio]").mouseup(function() {
    this.__chk = this.checked;
  }).click(function() {
    if (this.__chk) this.checked = false;
  });
});
</script>

New Flash statistics in Stuffed Tracker

What’s this?

Flash report in Stuffed Tracker

Oh no! It is a brand new statistics of Flash versions in Stuffed Tracker!

Suprisingly even for us and thanks to the reports constructor, we can actually see the sales figures for every Flash version. Who could have thought?

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!