Nortel VoIP: It just feels wrong

I have a VoIP phone on my desk. It’s part of the Corporate VoIP solution, and in most cases it works pretty well. One of my favorite features is the ability to act as a meeting phone with the speaker on. It usually works great, but there is one thing with the speaker feature, which just feels wrong – to turn off the speaker, you press the hangup buttom. Please fix this issue in a future firmware update, and allow the speaker buttom to act as a toggle that can turn the speak both on and off.

Google App Engine

I’ve been playing a bit with the Google App Engine the past few nights. It’s one of the newest toys out of Google, and it could very well be a very important piece of infrastructure to many web developers trying to create a dotcom adventure.

Google App Engine (once they let you in) allows you to run web applications of google’s server infrastructure. With the Google App Engine you can write applications (and run these of your local machine (Mac, Linux or Windows) and even use data storage in your applications. Currently applications can only be written in Python, but Google promises support for other languages later. Once approved by Google and your application is ready for prime time, you simple deploy it, and it runs of Googles Servers.

You can – if you like – use your own domain and with half a gigabyte storage and 5 million page views in the free edition, it will get you pretty far.

I haven’t been approved by Google yet, so I can’t deploy my applications, but others have, and one of the first examples is Vorby: Movie Quotes. It looks like yet-another-database-powered-website, and I guess that is a major part of the point with Google App Engine – You can make most database-backed web applications with it and not needing to spend money on hosting and infrastructure until you have millions of page views and a revenue stream to support the site.

Fetching Image details in Perl

Image::Size is fine, if size is the only thing, which matters. Sometimes, however, it isn’t enough, and when that is the case Image::Info (again fetched from CPAN) is your friend. Point it to a file (through various methods), and it will return a hash with all the information available about the image you pointed at. Most popular formats are supported.

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl -w
use strict;
use Image::Info;
 
# Just fetch the size
my $imgInfo = Image::Info::image_info("test.jpg");
 
# Print out all info fetched from the image
for (keys %$imgInfo) { print " $_ -> $imgInfo->{$_}n"; }
 
exit();

Converting between image formats in Perl

Changing files from one format to another is quite easy with a little bit of Magick. In the example below a JPG image (test.jpg) is converted into a GIF-image (test.gif). To output in a different (ImageMagick supported) format, just change the “image->Set” line.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl -w
use strict;
use Image::Magick;
 
my $image = Image::Magick->new();
 
# To explicitly set image format use this instead:
# my $image = Image::Magick->new(magick=>'JPEG');
 
my $x = $image->Read('test.jpg');
 
$x = $image->Set(magick => 'GIF');
$x = $image->Write('test.gif');
 
exit();

Rotating an Image with Perl

Turning images is quite simple. In the example below an image is turned 90 degrees clockwise, wirtten to a file, turned another 90 degress and written to a file again.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl -w
use strict;
use Image::Magick;
 
my $image = Image::Magick->new(magick=>'JPEG');
my $x = $image->Read('test.jpg');
 
$x = $image->Rotate(degrees=>90); # 90 degress clockwise
$x = $image->Write('test.90.jpg');
 
$x = $image->Rotate(degrees=>90); # Another 90 degress clockwise
$x = $image->Write('test.180.jpg');
 
exit();

Making thumbnails with Perl

With the help of ImageMagick you can automagically use Perl to create thumbnails. The example below is quite rude and makes a 50 by 50 thumbnail (no matter which size and shape the master had). Before using it in a real world scenario, check the aspect ratio, the size of the original image and what ever may be applicable.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl -w
use strict;
use Image::Magick;
 
my $image = Image::Magick->new(magick=>'JPEG');
my $x = $image->Read('test.jpg');
 
$x = $image->Scale(width=>'50', height=> '50');
 
# The following should also work fine...
# $x = $image->Scale(geometry=> '50x50');
 
$x = $image->Write('test.50x50.jpg');
 
exit();

CVS – Getting started

CVS is a sourcecode version control system, which is just about the best thing which can ever happen to a software project. CVS gives you the power to manage the development of your sourcecode and keep track of changes in the code.

Below there’s a few pointers to the net, where you can find lots of information about CVS and the add-on tools which supplies it. The section called “local content” is our own attempt to add something to the endless pages describing and explaing how to use CVS. Enjoy.

CVS Documentation and Information

CVS Tools and add-ons

To accompany CVS a large number of tools exist. Below is a brief list of those found most useful.

Other sources of information