31 Jul 2011

Jebo R338 Tank with Comet Goldfish

So I've decided to try something different and swop out my usual tropical fish for a few goldfish - 3 comet goldfish to be precise. I'm using my current Jebo R338 setup, minus the heater and I've added an air pump with an airstone for a nice bubble effect. I haven't needed to modify anything else and the new goldfish seem to manage just fine with the current created by the powerhead.

The Jebo R338 actually makes for a superb, low maintenance goldfish setup. I'm really enjoying the brilliant (goldy) red of the comet goldfish and they have more presence than tropical fish I have had in this tank before. They are also very active little chaps, so a lot of fun to watch!

26 Jul 2011

Latest blog post title in email signatures

I put a PHP image script together that reads the latest title from any RSS feed and creates a .gif image that contains this title. So the image can be placed anywhere once off and it will automatically update with the latest RSS feed title as new content is published. The image could be embedded in an html email signature for instance and the title of your most recent blog post will automatically be appended to all your outgoing email. I'm sure there are other uses for this code as well - It requires PHP and cURL and can be tweaked to accommodate different requirements, just be sure to go through the code and update your RSS feed URL (line 18), copy the font(s) you would like to use (lines 39,40) to the same directory as the script and perhaps change the text colours ~line 90 and anything else as you need to.

Embed the image with this image tag:

<img src="http://yoursite.com/latest-blog-post-rss-image.php" alt="http://yoursite.com/blog" border="0" />

Include a link to the front page of your blog to make the title clickable:

<a href="http://yoursite.com/blog"><img src="http://yoursite.com/latest-blog-post-rss-image.php" alt="http://yoursite.com/blog" border="0" /></a>

Here is the code for latest-blog-post-rss-image.php

<?php

//Parse text block for value near search defined by offset and length / end tag
function parse($block,$search,$offset,$length,$endtag="") {
$start = strpos($block,$search) + $offset;
$end = $start + $length;
$value = substr($block, $start, $end - $start );
if ($endtag != "") {
$value = substr($value,0,strpos($value,$endtag)-(strlen($endtag)));
}
if ($start == 0) {
$value = "";
}
return $value;
}

//RSS feed to get title from
$rss = "http://yoursite.com/rss.xml";

//read the RSS feed using cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $rss);
$result = curl_exec ($ch);
curl_close($ch);

//extract the first (and latest blog title)
$title = parse($result,"<item>",0,300,"<link>");

//trim the title and extract html tags
$title = strip_tags($title);
$title = trim($title);

//set image fonts and positioning
$size = 7.5;
$labelsize = 7.5;
$font = 'arialbd.ttf';
$labelfont = 'arial.ttf';
$x = -1;
$y = 10;
$angle = 0;
$label = "Latest blog post: ";

//Get an array of rss title words to facilitate word wrap
$words = explode(" ",$title);

//Force the image to word wrap around this approximate length (pixels)
$labellength = imagettfbbox($labelsize, 0, $labelfont, $label);
$maxlength = 350 - $labellength[4];
$line1length = $labellength;
$line1 = "";
$line2 = "";

foreach ($words as $word) {
if ($line1length[4] < $maxlength) {
$line1 .= $word . " ";
$nextword = $line1 . $word;
$line1length = imagettfbbox($size, 0,$font, $nextword);
} else {$line2 .= $word . " ";}
}
$line1 = trim($line1);
$line2 = trim($line2);

//determine image dimensions based on rss title length and including the label text
$line1length = imagettfbbox($size, 0, $font, $line1);
$line2length = imagettfbbox($size, 0, $font, $line2);

$totallength = $labellength[4] + $line1length[4];

//Set the image height for 1 line or 2 lines
if ($line2 == "") {
$height = 12;
} else $height = 24;

//set canvas dimensions (based on blog post length) and height
$gif = imagecreatetruecolor($totallength+1, $height);

//set background colour to white
$white = imagecolorallocate($gif, 255, 255, 255);

//fill image with white background and set as transparent
imagefill($gif, 0,0, $white);
imagecolortransparent($gif, $white);

//Print rss title onto image if it's not blank for some reason...
if ($title != "") {

//set text colors R,G,B
$text_color = imagecolorallocate($gif, 255, 149, 6);
$label_color = imagecolorallocate($gif, 0, 5, 85);

//Print blog post label into image
ImageTTFText($gif, $labelsize, $angle, $x, $y, $label_color, $labelfont, $label);

//Print blog post line 1 title into image
ImageTTFText($gif, $size, $angle, $x+$labellength[4], $y, $text_color, $font, $line1);

//print link underline
ImageLine($gif, $totallength, $y+1,$labellength[4]-1,$y+1, $text_color );

if ($line2 != "") {

//Print blog post line 2 title into image
ImageTTFText($gif, $size, $angle, $x+1, $y+12, $text_color, $font, $line2);

//print link underline
ImageLine($gif, 0, $y+13,$line2length[4],$y+13, $text_color );


}
}

//output blog post title image
header("Content-type: image/gif");
imagegif($gif);
imagedestroy($gif);
?>