Dear Reader,

Just a few more and I promise I’ll get off the programming kick. I was working on my AJAX based resume last night (what, doesn’t everybody have one?) and got everything but the Skill Cloud” done. My idea of a skill cloud comes from the latest toy that people are deploying on the web, tag clouds. It seemed to me that it should be pretty straight forward to create one and so I dove off the board before making sure there was water in the pool.

Not being very good at math, I was struggling with how to take my list of x skills and evenly space them into a maximum of 10 categories. (tagcloud_1 - tagcloud_10) Here’s a quick rundown of what I came up with.

My data set is my list of skills deployed at a given company. Each bullet point for a company has a list of skills attached to it. Each skill has a weight that is determined by how proficient I am at that particular skill. (1=nubie…10=demigod) For each company, I gather the list of skills I used and sum their weights. For those of you in the valley, I will explain. If I used FoxPro on 3 bullet points in a job and my FoxPro weight is 10 (which it is) then my FoxPro score for this job will be 30. If I also used Java on 1 bullet point at this job and my Java weight is 1 (which it is) then my Java weight for this job will be 1.


$ceiling = 1;
$floor   = 99999999;

First, compute the boundaries of the current weights. I thought about using array_walk in this situation but I eventually want to OOpify it and I’m not sure if array_walk can play nice in an OOP world.


for($lcvA=0;$lcvA<count ($rsArray);$lcvA++)
{
	$ceiling = ($rsArray[$lcvA]['weight']>$celing
		?$rsArray[$lcvA]['weight']
		:$ceiling);
	$floor  = ($rsArray[$lcvA]['weight']<$floor
		?$rsArray[$lcvA]['weight']
		:$floor);
} // for($lcvA=0;$lcvA<count($rsArray);$lcvA++)

Now get the spread. The spread is the difference between the ceiling and the floor.


$difference = ($ceiling-$floor);

Ok, now break the spread into 9 different buckets. We already know what 1 is, it’s the floor. Since we want a total of 10 total categories we divide the spread by 9.


$increment = $difference/9;

Finally, take the current weight for each item and shove it into the proper bucket.


for($lcvA=0;$lcvA<count ($rsArray);$lcvA++)
{
	$rsArray[$lcvA]['weight'] =
		intval(($rsArray[$lcvA]['weight']-$floor)/$increment)+1;
} // for($lcvA=0;$lcvA<count($rsArray);$lcvA++)

That’s it. Now the array contains weights that are comparable to their original weights but are in the range of 1-10. Now in the output, I use a span tag to wrap each skill and the ID of the span tag is tagcloud_x where X is the weight. Add 10 IDs to my style sheet and it’s done. This code is overly verbose mainly because I’m using it as an example. Also, please forgive my lack of OOP. Version 2 will be OOpier, I promise!

Here are the styles I added to mine for reference.


#tagcloud_1
{
	font-family: Arial, verdana, sans-serif;
	font-size:16;
} 

#tagcloud_2
{
	font-family: Arial, verdana, sans-serif;
	font-size:16;
	font-weight: bold;
} 

#tagcloud_3
{
	font-family: Arial, verdana, sans-serif;
	font-size:16;
	font-style: italic;
	font-weight: bold;
} 

#tagcloud_4
{
	font-family: Arial, verdana, sans-serif;
	font-size:20;
} 

#tagcloud_5
{
	font-family: Arial, verdana, sans-serif;
	font-size:20;
	font-weight: bold;
} 

#tagcloud_6
{
	font-family: Arial, verdana, sans-serif;
	font-size:20;
	font-style: italic;
	font-weight: bold;
} 

#tagcloud_7
{
	font-family: Arial, verdana, sans-serif;
	font-size:24;
} 

#tagcloud_8
{
	font-family: Arial, verdana, sans-serif;
	font-size:24;
	font-weight: bold;
} 

#tagcloud_9
{
	font-family: Arial, verdana, sans-serif;
	font-size:24;
	font-style: italic;
	font-weight: bold;
} 

#tagcloud_10
{
	font-family: Arial, verdana, sans-serif;
	font-size:28;
}

Until next time, love you bunches,
(l)(k)(bunny)
=C=

No tag for this post.

Related posts