What if drivers were hired like programmers?

Job title: Car driver

Job requirements: Professional skills in driving normal- and heavy-freight cars, buses and trucks, trolley buses, trams, subways, tractors, shovel diggers, contemporary light and heavy tanks currently in use by NATO countries.

Skills in rally and extreme driving are obligatory!
Formula-1 driving experience is a plus.

Knowledge and experience in repairing of piston and rotor/Wankel engines, automatic and manual transmissions, ignition systems, board computer, ABS, ABD, GPS and car-audio systems by world-known manufacturers – obligatory!

Experience with car-painting and tinsmith tasks is a plus.

The applicants must have certificates by BMW, General Motors and Bosch, but not older than two years.

Compensation: $15-$20/hour, depends on the interview result.

Education requirements: Bachelor’s Degree of Engineering.

Source

Let your application join

Everybody is talking about caching to increase performance but noone tells you exactly what to cache.
One simple strategy is to cache all database access.

We’ve built a data access layer that will cache every single dataset and lists of IDs for conditional sets.
There is no join on the database layer. This is all done by the application.
If you call a page twice, the second request won’t do any database queries to retrieve the displayed data.
It comes all from the cache. Changing data will update the cache and deleting will invalidate it.

Until now, the system runs very smooth and fast.
I’ll share future experiences by the time.

It’s very cool not to have to write database queries any more :-)

Eliminate deterministic function calls

Deterministic function calls always lead to wasted performance. They have to be computed every time but will always return the same boring result. Let’s get rid of them!

Example:
Assume your abstract controller provides a translation function $controller->translate()

$this->translate('helloWorld');

will always return “Hello World”. We can easily replace the function call with the static content.

It’s getting a little more tricky as soon as you pass some parameters to the function.

$this->translate('helloUser', $username);

The main translation part still is static, so let’s just replace the dynamic part.

sprintf('Salut %1$s', $username);

Built-in functions like sprintf will always be faster than your custom-made translate-and-replace stuff.

Finally store the pre-processed script for each language and let you autoloader choose which one to use.

face.com image cropper

face.com is a face recognition service.
Unfortunately they only return face positions and not crop information.
Getting the best thumbnails from picture showing people isn’t even trivial when you already know where the heads are. Big pictures with small faces require different margins than small pictures with huge faces.
Various people on one picture are even another challenge.

At work, we’ve implemented an algorithm to find the best thumbnail crop positions using the face.com face detection service. Feel free to use it on your own projects.

https://github.com/lociii/face.com-thumbnail

face.com rate limit nagios plugin

Our current project at work uses face.com for face detection on user uploaded images. It works really smooth and the detection rate is fantastic. However face.com limits API requests to 5000 queries per hour. I’ve written a tiny nagios plugin to monitor the currently used requests and alert the team when we will exceed the limit. Feel free to use it, fork it and do whatever you want with it:

https://github.com/lociii/nagios-plugins