Google

Sunday, June 10, 2007

PICAJET PHOTO MANAGER 2.5 REVIEW

Author: PicaJet.com
PicaJet is a programme that I found (while googling) for what people consider to be the best Digital Photo Management tool around. It came down to PicaJet, Picasa (by google), and ACDSee. Having previously used Picasa I knew exactly what I did and did not want in a Digital Photo Manager. I consider myself to have completed the search for a tool that fits the bill in finding PicaJet.

Overview:

At $39.99 for the full version, you might be tempted to stick with a lesser programme such as Picasa, however there are two or three main things that make PicaJet stand out among other programmes of this sort. If you combine those along with all the standard features that you might expect you have a winning package.

  • Categories: A way to organize photos using categories (or tags).

  • Ease of use: They nailed the mix of features and ease of use (not always easy)

  • EXIF data: The ability to view, sort by, and update the existing meta data ("headers") of a given photo.

  • Grouping: Group based on date taken, date imported, local folder, and much more.

  • Importing: A simple way to import photos from your camera with a couple of steps.

  • Editing: The ability to do basic photo manipulation on one or multiple photos.

  • Printing: Bringing your photos into the real world so that you can enjoy them all the time.

  • Sharing: The ability to distribute your photos easily via email, cd's, the web and more.

As with many pieces of great software around today, PicaJet has a thriving forum community with responsive and present developers who will personally respond to questions and features requests, even for users of the free version.

Features:

Categories:

PicaJet has a wonderful system for categorizing your photos. Some programmes have the ability to use Keywords (such as Picasa) or tags, however the hierarchical (or tree) method that PicaJet uses to categorize your photos, opens up a whole new world of organization.

As you can see in the screenshots below I have selected the category for my daughter Eden. This causes only photos in this category to appear in the reults on the right. By holding ctrl and clicking on another category, I could select as many categories as I would like to further trim down the results on the right. For example I could again select Eden and Florida, and I would be shown only photos that matched both of those categories. You can also select any given parent category, in this example Kids to show photos that have either Eden or James in them. At any point you may also exclude any category by right-clicking on it and choosing to exclude it from the results.


VALIDATE E-MAIL ADDRESS WITH PHP THE RIGHT WAY

Author: Max Teo
Listing 1: Shows an example code that contains 3 errors. First, it fails to recognize many valid e-mail address characters, such as %. Secondly, it splits the e-mail address into username and domain parts at the sign @. E-mail addresses that contain a quoted @ sign, such as koko\@koko@domain.com will break this code. Lastly, it fails to check for host address DNS records.

function validateEmail($email_add) {
if (preg_match(”/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+( [a-zA-Z0-9\._-]+)+$/”, $email_add))
{
list ($username, $domain)=split(‘@’,$email_add);
if (!checkdnsrr($domain, ‘MX’)) {
return false;
}
return true;
}
return false;
}

Listing 2: Shows a better way to develop an E-mail validator as it satisfy the following requirements:

-An e-mail address consists of local part and domain seperated by an at sign (@) character (RFC 2822 3.4.1)/
-The local part may consist of alphabet and numeric characters, and the following characters: !#$%&’*+-/=?^_`{|}~, possibly with dot seperators (.), inside, but not at the start, end or next to another dot seperator (RFC 2822 3.2.4)
-The local part may consist of a quoted string - i.e. anything within quotes (”), including spaces (RFC 2822 3.2.5)
-Quoted pairs (such as \@) are valid components of a local part, though an obsolete form from RFC 822 (RFC 2822 4.4)
-The maximum length of a local part is 64 characters (RFC 2821 4.5.3.1)
-A domain consists of labels seperated by dot seperators (RFC 1035 2.3.1)
-Domain labels start with an alphabet character followed by 0 or more alphabet characters, numeric characters or hyphen (-), ending with an alphabetic or numeric character (RFC 1035 2.3.1)
-The maximum length of a label is 63 characters (RFC 1035 2.3.1)
-The maximum lenght of a domain is 255 characters (RFC 2821 4.5.3.1)
-The domain must be fully qualified and resolvable to a type A or type MX DNS address record (RFC 2821 3.6)

function validateEmail($email_add) {
$isValid = true;
$atIndex = strrpos($email_add, “@”);
if (is_bool($atIndex) && !$atIndex) {
$isValid = false;
}
else {
$domain = substr($email_add, $atIndex+1);
$local = substr($email_add, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen <> 64) {
$isValid = false; // local part lenght exceeded
}
else if ($domainLen <> 255) {
$isValid = false; // domain part lenght exceeded
}
else if ($local[0] == ‘.’ || $local[$localLen-1] == ‘.’) {
$isValid = false; // local part starts or ends with ‘.’
}
else if (preg_match(’/\\.\\./’, $local)) {
$isValid = false; // local part has 2 consecutive dots
}
else if (!preg_match(’/^[A-Za-z0-9\\-\\.]+$/’, $domain)) {
$isValid = false; // character not valid in domain part
}
else if (preg_match(’/\\.\\./’, $domain)) {
$isValid = false; // domain part has 2 consecutive dots
}
else if (!preg_match(’/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\’*+?^{}|~.-])+$/’ . str_replace(”\\\\”.”",$local))) {
if (!preg_match(’/^”(\\\\”|[^”])+”$/’, $str_replace(”\\\\”,”", $local))) {
$isValid = false; //character not valid in local part unless local part is quoted
}
}
if ($isValid && !(checkdnsrr($domain, “MX”) || checkdnsrr($domain, “A”))) {
$isValid = false; // domain not found in DNS
}
}
return $isValid;
}