Christian Heilmann

Author Archive

Resisting the Feature Creature – Geek Meet Craiova

Tuesday, December 2nd, 2008

me speaking at geek meet in craivoa - Photo by Irina Aldoescu My talk at the Geek Meet in Craiova/Romania last week covered a topic that I consider terribly important right now. As developers we are constantly shooting ourselves in the foot and create new and improved bullets to make it hurt a bit less instead of not doing that.

We constantly complain about the world, our colleagues, the market and of course our “stupid company” but at the same time we got noone to blame but ourselves for a lot of the stupid things that happen to us.

As developers we have this tiny little bad adviser living in our heads: the feature creature*.

This one keeps telling us constantly not only to add more features to our solutions but it also gives us a terribly inflated sense of what our job is to bring to the world.

It makes us arrogant and ignorant to the solutions that other developers – just like us – already developed and offer for use. In short, it makes us do the same jobs over and over again as we know best instead of telling us to have a look around at what has already been done and tweak or extend it to our needs.

Instead of spending time on creating well-documented software that is built to be customized and allows for plugins and extensions we keep building the same software types we refuse to use ourselves as they don’t exactly do what we want.

Maybe it is time to shut the little feature creature up and work together on bigger, better and more stable solutions. It is not about who can make the fastest and smallest and most optimized code. This is an extra step we should take when we need exceptional performance, not the common use case.

If you want to go nuts on bringing the best out of hardware and technology, go and do some stuff in the demo scene, this is where I got rid of a lot of my bad habits.

I’ve put the slides up on SlideShare:

[slideshare id=799134&doc=resistingthefeaturecreature-1227921707703820-8&w=425]

* The feature creature is not my invention, I heard it from a speaker in 2004/2005 at the PHP conference in Amsterdam, but for the life of me I cannot remember who it was. He was ranting about Struts a lot, I remember that.

Introducing the YUI at Bucharest University

Friday, November 28th, 2008

I am right now in Bucharest, Romania, preparing my slides for the Geek Meet in Craiova tonight. Yesterday I went to the University here to introduce the students to the wonders of YUI. This is just a quick post to give you the slides.

[slideshare id=795181&doc=yuiforcontrolfreaksro-1227812140831161-9&w=425]

More tonight.

An explanation for all conference organizers who need slides upfront

Tuesday, November 25th, 2008

Calvin and Hobbes Cartoon - Inspiration needs the right mood - Last Minute Panic

Found via the fabulous Searchable Calvin and Hobbes Archive

Keywordfinder.org is live

Monday, November 24th, 2008

It’s been a while since I released a full web app (no, shouldiusetablesforlayout doesn’t count), so I thought I spend a few hours and created keywordfinder.org:

Screenshot of Keywordfinder.org

It is a service that returns the 20 most successful keywords for a search term you enter and the first 20 sites that come up when you do a search online.

Hopefully this is useful to some, I just had fun playing with BOSS and some YUI CSS to create the whole thing from scratch in one morning :)

Show the world your Twitter type (using PHP and Google Charts)

Sunday, November 23rd, 2008

I just had a bit of fun with Twitter and the Google charts API. You can now add an image to your blog, web site or wherever and show a picture of what kind of a twitter user you are. All you need to do is embed an image and give it the right source:

For example my user name is codepo8, which would be:

And the resulting image is:

For John Hicks for example it is:

And the resulting image is:

How it is done and how to “change stuff”

You can download the source code and have a play with this (I hope this will not spike my traffic :) so it might go offline if that is the case). There’s really not much magic to this:

First I get the user name and filter out nasties:

$user = $_GET['user'];
$isjs = "/^[a-z|A-Z|_|-|$|0-9|.]+$/";
if(preg_match($isjs,$user)){
Then I set the content type to show the image and use cURL to get the information from the user’s twitter page.

header('Content-type:image/png');
$info = array();
$cont = get('http://twitter.com/'.$user);
I get the information using regular expressions and put them in an associative array:

preg_match_all('/([^>]+)/msi',$cont,$follow);
$info['follower'] = convert($follow[1][0]);
preg_match_all('/([^>]+)/msi',$cont,$follower);
$info['followed'] = convert($follower[1][0]);
preg_match_all('/([^>]+)/msi',$cont,$updates);
$info['updater'] = convert($updates[1][0]);
The convert function removes the comma punctuation added by twitter and makes sure the values are integers. I then need to determine which of the three values is the highest and define a scaling factor as the Google API only allows values up to 100. I then check what the type of the user is by getting the right array key and change the values for displaying.

$max = max($info);
$convert = 100 / $max ;
foreach($info as $k=>$f){
if($f = $max){
$type = $k;
}
$disp[$k] = $f * $convert;
}
I check the type and assemble the display string accordingly:

if($type = ‘updater’){
$t = ’ is an ‘;
}
	

if($type = 'follower'){
$t = ' is a ';
}

if($type = ‘followed’){
$t = ’ is being ‘;
}

$title = $user . $t . $type;
I assemble the labels array and the values array and add all up to the correct Google charts API url. I use cURL to get the image and echo it out.

$out = array();
foreach($info as $k=>$i){
$out[] = $k.'+('.$i.')';
}
	

$labels = join($out,'|');
$values = join($disp,',');
$img = get('http://chart.apis.google.com/chart?cht=p3&chco=336699&'.
'chtt='.urlencode($title).'&chd=t:'.$values.
'&chs=350x100&chl='.$labels);
echo $img;
}

The rest are the cURL and convert helper functions.

function get($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$feed = curl_exec($ch);
curl_close($ch);
return $feed;
}
	

function convert($x){
$x = str_replace(',','',$x);
$x = (int)$x;
return $x;
}

You like?

Faster version (one cURL, instead of two)

Instead of setting the PNG header and echoing out the image you can also just set a location header at the end and redirect the URL request to Google’s servers. I guess they have more bandwidth. :)