20. May 2008, 11:11, by Leo Büttiker
We made it! Last Friday we have replaced the last two legacy components with their Zend Framework based counterpart: The gallery an the user registration. The whole site tilllate.com is now running on Trevi, our extension of Zend Framework. With a reach of 2.5 million unique clients a month, tilllate.com is one of the world’s biggest installation of Zend Framework.
Ciprian, Ivan, Jia-Yong, Kevin, Leo, Riv, Roger, Sanja, Thilo, Vanja, Vladimir and project manager Maarten have done a wonderful job reverse engineering the old, smelly spaghetti code and refactoring everything in a clean and solid MVC architecture: 115’480 Lines of code (Thanks StatSVN).
(more…)
11. May 2008, 12:54, by Silvan Mühlemann
For now over three years we are working with unit tests. I’d like to share some of those experiences.
As we have two frameworks in place for our website, I can compare two different strategies for unit tests.
In our homemade legacy framework we were using SimpleTest. Mainly because I read PHP|Architect’s Guide to PHP Design Patterns and Simpletest was Jason‘s framework of choice.
We have a cron job running which runs all tests every hour. The results of the tests are being shown on a page. The results are also displayed in Nagios.
(more…)
13. April 2008, 07:29, by Silvan Mühlemann
There’s a number of pitfalls one should be aware of when working with AUTO_INCREMENT fields in MySQL. Last week, we fell in each of them:
We have the table photos which contains all 15 million pictures on tilllate.com. This table is MyISAM and has id INT NOT NULL AUTO_INCREMENT as the primary key. The position of the auto increment counter was at 112’606’834.
(more…)
18. March 2008, 03:44, by Maarten Manders
Last week, I was lucky to go to QCon 2008 in London to meet with all the big names in the software industry. This was a great opportunity to see what everyone’s working on and to get a feeling for the newest trends in software development. Here’s what my gut says about the world of software development after QCon 2008 (part 1):
(more…)
22. February 2008, 12:12, by Steven Varco
Our Dell PowerEdge 2950 Servers for the new DB Cluster has just arrived and I’m very excited, unpacking them.

(more…)
5. February 2008, 17:09, by Silvan Mühlemann
EXPLAIN is not the only way to analyze query perfomance im MySql because some things are not being taken into account. For example LIMIT clauses or the cost of the optimizer. There is also the mk-query-profiler.
An interesting way to compare the performance of two queries is to use mk-query-profiler along with diff
Here’s how you do it. As an example I take the queries from this mysql performance blog article
article. Because I’d like to learn what excactly SQL_CALC_FOUND_ROWS does.
(more…)
28. January 2008, 16:55, by Mario Rimann
Moving all servers of tilllate.com in one night?
Maybe you’ve read our short announcement on the tilllate website last week: We were offline for some planned maintenance.

In detail, we moved all servers to a new cage in the datacenter. We like to give you some insight, of what happened after switching off the tilllate webservers. (more…)
18. January 2008, 17:47, by Silvan Mühlemann
I am a lazy guy. I hate moving my hand away from the keyboard to the mouse and back. So I try to use as much keyboard shortcuts as possible. Here’s 2 ways I improve my productivity by avoiding device switches in Firefox:
Keyboard shortcuts
Here’s my personal Top 5 of keyboard shortcuts:
| 1. Ctrl+L |
Move the focus to the location/URL field |
| 2. Ctrl+K |
Move the focus to the search field |
| 3. Ctrl+H |
Open the history |
| 4. Ctrl+F / F3 |
Open the search. F3 repeats the last search |
| 5. Ctrl+T |
Open a new tab |
You’ll find a lot more useful shortcuts here
Keywords for your bookmarks
To access my bookmarks quickly I usually use Ctrl+L and then type a keyword. n is our Nagios problem overview. c is our confluence homepage.
Combined with the search variable %s I have extremely fast wikipedia searches (wiki foo) or translations from German to English (leoe fahrvergnügen).
How to set it up? micrux.net tells you more.
Thanks, Patrice, for showing me this. You helped me save hours switching between mouse and keyboard.
7. January 2008, 08:39, by Leo Büttiker
Trevi is not only a fountain in Italy, it’s our new application framework as well. We migrated our first pages to this new platform and brought them online three weeks ago. But let me explain the story of Trevi.
Another Framework?
There’re already thousands of web frameworks out there so I would sink into the ground if we really wrote another one. But serving pages for 2 million unique clients, it would also not have been a solution to just go to a shop and take the beautiful looking, nice boxed xyz framework from a big company. So my co-worker (and Trevi project lead) Maarten started a year ago to evaluate a framework that fits our needs best.
(more…)
5. January 2008, 22:16, by Leo Büttiker
On the view of your database the worst thing you can do in your web app is paging. Paging is horrible in the view of performance. To explain let me make a little example:
SELECT SQL_CALC_FOUND_ROWS gb.*,
u.username,
u.uid,
u.geschlecht,
u.mitfoto,
[... some more fields...]
FROM member_gold_guestbook gb
LEFT JOIN users u ON u.uid=gb.uid_from
[... some more left joins...]
WHERE gb.uid_to='22152'
AND visible='1'
LIMIT 0,10;
That’s not that bad at all, but when you go to page 300 your database server will hate you for this. The database server has not only to calculate the 10 items you want to show but also all 3000 previous items.
Sure you may argue nobody will ever go to page 300. Somebody will not, but “googlebot” and his evil brothers will. And the bad thing is that you can do nothing against it, as long as you need paging. There are just a few tricks that may reduce your server load a bit.
(more…)