1 0 Archive | Getting Things Done RSS feed for this section
post icon

Organizing lots of pictures

If you’re anything like me you’ve been taking digital pictures for a long time now.   You’ve used various strategies and tools for organizing them over the years.   You’ve gone through several computers and moved the files around countless times.   Where does that leave you?  With an unorganized mess.

With library software like Picasa you can import all of those pictures and you can have some semblance of organization by way of the user interface but it doesn’t really solve the problem at the core.   The files are a mess.

I wanted to find a way to give a consistent filename to all of my pictures, organize them into folders based on the month and year they were taken, and remove duplicates.   At first it sounded like a tall order as I couldn’t find any off the shelf tools to do this.  Thankfully with just a little bit of time in Powershell I was able to put together a script that accomplished this for me.

 

The script does the following:

    • Identify all of the existing pictures
    • Query the EXIF data
    • Calculate an MD5 has of the file
    • Create a new copy based on the data in a “staging” folder
    • Parse the new file name to get the MD5 and look for duplicates
    • Delete the duplicate version
    • Move the files to the YYYY\MM folders

 

The first task of querying the EXIF data of files was actually the hardest.   I found a couple of blog articles that touched on this.   The synopsis is that you have to use the .NET System.Drawing DLL.   We can use Get-ChildItem to recurse a directory structure looking for files of a specific type.   For each file that we find we instantiate a new Bitmap object which contains the EXIF properties.   We can extract and update these.   I thought it might be useful to store the original path as a “Comment” in the EXIF in case it contained some relevant information that I later want to turn into a tag.

Below is the complete script.

#Load the .net System.Drawing assembly for examining the EXIF data of the pictures.
[reflection.assembly]::loadfile( "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll")

#Function to calculate the MD5 hash of a file
function Get-MD5([System.IO.FileInfo] $file = $(throw 'Usage: Get-MD5 [System.IO.FileInfo]'))
{
    # This Get-MD5 function sourced from:
    # http://blogs.msdn.com/powershell/archive/2006/04/25/583225.aspx
    $stream = $null;
    $cryptoServiceProvider = [System.Security.Cryptography.MD5CryptoServiceProvider];
    $hashAlgorithm = new-object $cryptoServiceProvider
    $stream = $file.OpenRead();
    $hashByteArray = $hashAlgorithm.ComputeHash($stream);
    $stream.Close();

    ## We have to be sure that we close the file stream if any exceptions are thrown.
    trap
    {
        if ($stream -ne $null) { $stream.Close(); }
        break;
    }

    $md5 = ""
    foreach ($byte in $hashByteArray)
      {
        $md5 = $md5 + $byte.ToString("X2");
      }
return $md5;
}

#Figure out where we are at and if there is a subfolder called output.  If not we will create one.   This is where we will put all of our images.
$currdir =  split-path -parent $MyInvocation.MyCommand.Definition
$outputdir = $currdir + "\output\"

if (!(Test-Path -path $outputdir))
{
    New-Item $outputdir -type directory
}

#What files should we look for?   Typically this would be *.jpg.
$ext = "*.jpg"

#Using Get-ChildItem we search for all files matching our extension recurisvley from the location of the script down.
$files = Get-ChildItem -r -Include $ext

#We're going to keep track of how many files we process and put a unique number in the file for each one (eliminates all possibility of duplicate filename)
$i = 0;
foreach($f in $files) {
    #Increment our counter
    $i++;

    #Load up the .net system.drawing.bitmap object for the current file.  We will use this to access and update the exif data.
    $img=New-Object -TypeName system.drawing.bitmap -ArgumentList $f.fullname;

    #We grab up the camera date, height, and width.  We use try catch in case the property isn't availabe and set a default value.
    #For more details on properties available check:
    #http://blogs.technet.com/b/jamesone/archive/2007/07/13/exploring-photographic-exif-data-using-powershell-of-course.aspx

    Try
     {
        #The value is a byte array which we need to convert (assuming ASCII character set)
        $date = [System.Text.Encoding]::ASCII.GetString($img.GetPropertyItem(36867).Value);
     }
    Catch [system.exception]
     {
        #Default value in case we can't access the EXIF
        $date = "0000:00:00 00:00:00";
      }

    #Grab the height and width of our object
    $height = $img.Height;
    $width = $img.Width; 

    #The date is returned as a null terminated string with spaces and colons in it.   We replace all of these with dashes to make it filename friendly.
    $date = (($date.Replace("`0", "")).Replace(" ","-")).Replace(":","-");

    #Calcualte the MD5 of the original file so that we can look for duplicates later
    $md5 = Get-MD5($f);

    #The target filename will be the output directory with the variables concatnated in the below format.
    #Format will be YYYY-MM-DD-HH-MM-SS-WIDTHxHEIGHT-MD5-ID.Extension
    $filename = $outputdir + [string]::Format("{0}-{1}x{2}-{3}-{4}{5}", $date, $width, $height, $md5, $i, $f.extension);

    #We want to save the current path as a comment so we create a new property of type 40092 (comment)
    $property = $img.PropertyItems[0];
    $property.Id = 40092;
    $property.Type = 1;

    #It needs a string array so we pass in the current path ($f.fullname) and convert it to an array
    $property.Value = [system.text.encoding]::Unicode.GetBytes($f.fullname + ":" + $md5);
    $property.Len = $property.Value.Count;
    $img.SetPropertyItem($property);

    #We will save our image from memory in the path of our new file.
    $img.Save($filename);
    $img.Dispose();

    #Could delete the old version, I'm leaving it as a backup so I've commented this out.
    #Remove-Item $f.fullname;

    #Let the user know what the current status is and which files are being moved.    
    Write-Output "Copying $f to $filename";
}

#This is a one liner to split on filename, find the duplicates by MD5, ignore the first result and then delete the rest
#The 7th item in the filename format is the MD5 hence the hard coded index
$o = Get-ChildItem $outputdir `
| Select-Object @{Name="MD5";Expression={($_.Name).Split("-")[7]}}, @{Name="Filename";Expression={$_.Fullname}} `
| Group-Object md5 `
| ?{ $_.Count -gt 1 } `
| % {($null, $rest) = $_.Group; $rest;} `
| Select-Object Filename  `
| % { Write-Output "Removing duplicate $_"; Remove-Item $_.Filename }

Write-Output $o

#Now that we've zapped our duplicates we can move the files out to their target locations
#We loop through them again extracting the important bits from the filename
#Format will be YYYY-MM-DD-HH-MM-SS-WIDTHxHEIGHT-ID.Extension
$files = Get-ChildItem $outputdir
$i = 0;
foreach($f in $files) {
    $i++;

    #split string on dash and create an array of attributes
    $name = ($f.name).split("-");
    $year = $name[0];
    $month  = $name[1];
    $day = $name[2];
    $hour = $name[3];
    $min = $name[4];
    $sec = $name[5];
    $size = $name[6];
    $md5 = $name[7];

    #Where are we putting the new file?
    $targetname = $outputdir  + $year + "\" + $month + "\" + [string]::Format("{0}-{1}-{2}-{3}-{4}-{5}-{6}-{7}{8}", $year, $month, $day, $hour, $min, $sec, $size, $i, $f.extension);

    #Make sure that our folders exist (one for each month under the year) and if not create them
    if (!(Test-Path -path ($outputdir + $year)))
    {
        New-Item ($outputdir + $year) -type directory
    }

    if (!(Test-Path -path ($outputdir + $year + "\" + $month)))
    {
        New-Item ($outputdir + $year + "\" + $month) -type directory
    }

    #Move the source file to it's new home.  -Force tells it to overwrite if the file already exists.
    Write-Output "Moving $f to $targetname";
    Move-Item -Path $f.fullname -Destination $targetname -Force
}

 

 

Here are a couple of references that I found helpful in building this script:

 

http://blogs.technet.com/b/jamesone/archive/2007/07/13/exploring-photographic-exif-data-using-powershell-of-course.aspx

http://blog.codeassassin.com/2007/10/13/find-duplicate-files-with-powershell/

Leave a Comment
post icon

Building a near silent PC

I spend 12 to 14 hours a day in my office on any given weekday.   My productivity on my PC is vital and as a result I’m not afraid to invest in good equipment.   For the last several desktop workstations that I’ve used I’ve assembled the computer myself from various components.  One of my challenges with this approach is the amount of noise produced.   The DIY computer market is targeted at the 19 year old gamer who cares more about how many neon lights his computer has than how quiet it is.

As a software developer and power user I demand a very performant machine.  I’m constantly running virtual machines, visual studio, graphics design applications, etc.  I needed a PC that can deliver while also looking good and remaining silent (or near silent).

I don’t have a decibel meter at hand so I can’t give you empirical measurements on exactly how loud my old computer was.   Anecdotally though it was enough to upset my wife because when she would call for my attention I wouldn’t hear her.  It really had become a problem and the noise was impacting my mood and productivity.  

I decided to set out on solving my noise challenges and spend as little money as possible while doing it.   One of my main concerns was ensuring that I would continue to have 4 DVI ports that can uniquely configure each monitor.   I’m a firm believer that the more screen real-estate you have the more productive you are.   I’m on the fence about the value of the 4th monitor but I really do think that 3 is the minimum I could ever be happy with.   I typically use the 4th display for my music app or I hook it up to my laptop when it is on my desk.  In order to drive 4 separate displays however there aren’t many single card solutions available.   In the past I’ve always had to have 2 separate video cards and I expected that would continue.

What I started with:

  • i7-920 processor
  • 12GB of Corsair DDR3 memory
  • Crucial 256GB C300 SSD (6Gbs)
  • Asus P6X58D Premium Motherboard
  • 2 x Nvidia GTS 240 video cards (2 monitors on each)
  • Antec Lanboy Air case
  • Antec 850w power supply

The computer itself was actually fairly powerful.   I reviewed benchmark sites and realized that the cost of upgrading to a Sandy Bridge i7 isn’t really justified given the minimal performance increase.   I found this conclusion interesting given that I’ve had the i7-920 for over 2 years.   Previously I had a general rule of thumb to replace my processor and supporting components every 2 – 3 years.   I generally feel the pace of processor innovation has slowed.   I decided that I would retain the motherboard, processor, memory, and hard drive.   All of which would continue to work fine in my new silent PC.  I will need to replace the case, CPU cooler, power supply, and video cards.

Looking at the above starting point the first and obvious place to start is the Antec Lanboy case.   That thing is completely open and offers zero noise isolation.  I bought it without thinking because it was on sale at Micro Center.   In reality it was a very poor choice for my scenario.  

 

When selecting a new case my primary criteria were:

  • Clean looking and professional design -  no cut outs, neon lights, plexiglass panels, giant fans, etc

 

  • As small as possible – Even though I have a full size ATX board I don’t need water cooling, 15 hard drives, 4 fans, and 3 optical. I just want the ability to mount my SSD, one optical drive, and maybe an additional 3.5” SATA drive for backups.

 

  • Either powder coated or aluminum -  I don’t think the raw insides of a steel case look very good. I wanted a very high quality case and to me that meant attention to detail both on the inside and out.

 

  • Quiet! -  Ideally the case would have built in noise shielding or padding to help me on my mission

 

  • Top mounted power supply – Given that I intended to use a fanless power supply I wanted the opening at the top of the case to allow for passive heat dissemination.

 

  • Good cable management to allow for airflow and to keep everything organized

 

I spent a significant amount of time going over the reviews of a number of cases from Lian Li, Antec, Fractal Design, Thermaltake, etc.  Cost wasn’t a significant concern although I couldn’t ignore it completely.   I short listed the following cases:

 

 

Fractal Design Define XL Titanium Grey w/USB 3.0  – $149


image

Pros:

Clean style
Noise reduction built in
Cable management

Cons:

Size (very large at 22.10" x 9.13" x 22.05" or
4,150 cu in.)
Bottom mounted power supply
Inside not powder coated

 

LIAN LI PC-90 Black Aluminum ATX Full Tower – $199

 

image

Pros:

Aluminum body
Lian Li (great reputation)
Very professional looking

Cons:

Size (still large at 19.25" x 9.06" x 20.16" or
3,516 cu in.)
Bottom mounted power supply
No explicit noise insulation, large grate in front might allow sound to escape.

 

 

Antec Sonata Series SOLO II Black Steel  – $129

 

image

Pros:

Top mounted power supply
Fully powder coated inside and out
Very professional looking
Built-in noise absorption panels
TrueQuiet fan included

Cons:

Size (still large at 18.5" x 8.1" x 17.3" or 
2,592 cu in. but by far the best of the 3)
I would prefer aluminum
USB 3.0 header doesn’t work with my motherboard

 

Given the choices available it was a pretty easy decision to go with the Antec Sonata Solo II.   I really wanted to find a Lian Li case that I would fall in love with.  I just couldn’t find one that had everything important to me.  The general state of computer cases bothers me in that so many of them are targeted to the gaming market.   These high end professional cases are rare especially one that can accommodate a full size ATX motherboard.

 

With the biggest decision out of the way I still needed to get power supply, CPU fan, case fan, and most importantly video cards sorted.

I settled on the following components in addition to what I already had:

    Product

    Comments

    Qty

    Cost

    Antec Sonata Series SOLO II Black Steel See above 1 $129.99
    PowerColor Go! Green HD 6750 passive cooled video card The most significant causes of noise in my current configuration was the fans on the GPU I wanted to find a DirectX 11 capable card that was also fanless. I have no need to play games but I also didn’t want to sacrifice significantly on video performance. This card was a good best of both worlds solution. 2 $139.99
    Antec TrueQuiet 120mm case fans I was concerned about the heat in the case with the two fanless GPUs next to each other. I decided to put in these extra fans in the slots provided by the Antec Solo II. They are super quiet and controlled by my motherboard so the majority of the time they aren’t even running. 2 $14.99
    Cooler Master V8 RR-UV8-XBU1-GP CPU Cooler This thing looks cheesy but it sits inside the case and isn’t visible. The cooler is massive but very effective and quiet. I went with it based on the many positive reviews. I’m not disappointed. My processor sits at around 50 degrees Celsius the majority of the time. 1 $49.99
    Seasonic SS-460FL Active PFC F3 460W Fanless power supply This is a great passive cooled powersupply. My only complaint was the packaging. Why the heck do I need a felt bag to carry it? I can’t imagine a case where I would want to do that. It seems like a waste and could have shaved a few dollars off the price. 1 $109.99
    Total:     $599.93

 

 

Summary:

 

So after all of that what did I end up with?   A nearly silent PC with a WEI score of 7.3.  The PC is pretty much completely silent.   The only time I hear anything is when I’m running at very high CPU load and the fans kick up their RPM.   I do have my CPU fan and all 3 case fans hooked up to my motherboard to allow it to control the speed.   In the Asus bios you can choose a fan profile for each fan.   All of mine are set to “silent”.    Typically I’m running in the mid 50 degree Celsius range on the CPU and the low 70s on the GPU.   I’m sure if I cranked up the fan speed a bit I could bring these down further but it hasn’t been enough of an issue to justify it.

 

WEI Score:

 

image

 

Real Temp:

 

image

 

imageimage

Leave a Comment
post icon

My solution for reading RSS across several computers and an iPhone

I’ve been a long time Google Reader user. It’s great having one place that remembers exactly what you have read and what you haven’t. I had never really spent any time using a desktop feed reader as the online ones have always met my needs. Recently however I started a new job at NewsGator Technologies. We make a number of products focused around RSS including several desktop readers. In order to “eat the dog food” I began the process of moving over all of my RSS consumption to utilize the various NewsGator products.

I’ve tried using the NewsGator online service in the past however it didn’t provide me a compelling reason to switch from Google Reader. This time I was determined to figure out the best possible way to utilize the various products in a way that would make it easier and quicker for me to follow the large number of feeds I’m subscribed to (currently 62, some of which are fairly high volume). I try to limit my news reading to no more than an hour or so a day, but in that hour I have a lot of content to skim through and read. Finding a really efficient process is critical to maximizing the use of the limited time.

After tweaking with things a bit, here is my new setup:

  • I’ve setup my account on the NewsGator online server (I’m using an internal to NewsGator version of the public server, but it’s the same thing).
  • I’ve configured my feeds into the NewsGator server to be fetched and have the posts stored for my retrieval via one of the various clients. My feeds are organized into 4 categories (Technology, Blogs, Local News, National and International News).
  • I’m using NetNewsWire on my home iMac and my MacBook Air, The iPhone version of NetNewsWire, and FeedDemon on my work laptop.

The advantages of using NetNewsWire and FeedDemon versus Google Reader are numerous. Here are some of my observations after just a few days usage:

  • The biggest single advantage is offline viewing. NetNewsWire can fetch all of the content and then store it locally on my Mac to view when I’m away from an internet connection. This is also true of FeedDemon although I haven’t used that yet.
  • With NetNewsWire there is no waiting for page loads of the content or images. Because everything is fetched in advance I’m only communicating with the NewsGator servers, which are very fast. All of the content is downloaded when I first sync so when I’m actually reading the posts I can just click through them with no delay. This is a huge time saver when I’m only looking at titles on 85-90% of the posts that I receive, being able to move on to the next one without waiting the 1-2 seconds it takes in Google reader to catch-up multiplied by the thousands of posts I skim in a day is certainly time saved.
  • My process with Google Reader was to skim the posts for the ones that I’m actually interested in reading and then open the permalink in a new tab. This will cause the page to load in the background while I continue skimming Google Reader. This process worked well, but what works even better is the built in browser within NetNewsWire. When the permalink is clicked in NetNewsWire it is opened up in a tab right within the application. That page is opened up in a “tab” of sorts identified by a helpful thumbnail image of the resulting page. NetNewsWire keeps all of these pages open while I’m reader so that I can easily consult them without filling up my browser tabs.
  • Something I haven’t taken advantage of before now are feeds that contain media rich (audio and video) downloads. Google Reader has no real way to accommodate this. In NetNewsWire however you can configure feeds to push content straight to a helper application like iTunes. This allows content distribution via RSS without the need of a central service. I look forward to more and more content providers using this approach for rich media in the future.
  • I use the “clipping” functionality to save off various posts that I find interesting enough to share with others. With the online service you can configure NewsGator to publish an RSS feed of your “clippings”. I’ve setup this feed to be syndicated to my wordpress blog so anyone can go and see the stories that I found interesting.
  • I can access my feeds from anywhere using my iPhone. The iPhone application has the same benefits as the desktop client and the portability of the iPhone. If only it could sync against other NewsGator servers than the public one. @brentsimmons when is this coming?
  • Brent also created a list of unique features of NetNewsWire that might be helpful.

So overall I’m very happy with this solution. I went into this feeling fairly pessimistic that it would actually be an improvement over Google Reader. The end result however is that I’ve been able to shave a significant amount of time off the feed reading that I do. I guess this means I can just start subscribing to more feeds :-)

Leave a Comment
post icon

10 steps to organize your digital life on OS X and Windows

In meat space my wife and I are far from organized. It’s a real problem because we are always losing important things like our car keys. Unfortunately, this how-to won’t help me solve that problem. In the digital world however, I’m extremely anal retentive and organized. Everything is in its place and easily searchable. It allows me to be much more productive since I don’t have to waste my time trying to find things. I’m using a Mac and OS X Tiger at home and Windows XP in my day job at work, so that even further complicates my digital lifestyle. A lot of these tips can be platform agnostic and work under Windows and Linux as well. These suggestions work hand in hand with an indexed search capability. In OS X we have the built in, and fantastic, Spotlight. On Windows XP you can download Google Desktop. Of course Windows Vista has search built in. On Linux, if you are using Gnome there is Tracker. Also on OS X, take a look at Quicksilver

In no particular order my tips are:

1) Directory structures: In your personal document space (Your home directory on a Mac or Linux, “My Documents” on Windows) you need to create a document hierarchy to store your files. Depending on the amount of documents that you store, your system might include date as a component of the hierarchy so that your folders don’t become too large and unmanageable. I first divide my home directory up with a folder for each of the categories of documents that I might have. Word processing, spreadsheet, presentation, and notes. Under that I have it broken down by type. These are categories of the types of projects I might be working on. At work, this is the name of which of my clients for whom the document is relevant. From there, I have sub-directories for each year. 2007, 2006, and so on.

2) File names: All of my files are named with a standard convention. The convention is PROJECT/CLIENT_DESCRIPTION_YYYYMMDD_TYPE.EXT. Including the document type is helpful because sometimes the file extension doesn’t always give it away, or on some machines file extensions might be hidden. So for example if I had a Excel document for a client named Acme that contained a data extract, I would name the file ACME_DATAEXTRACT_20070410_EXCEL.xls

3) Music: I use iTunes to manage my music library. Part by force, since I own 4 iPods and an Apple TV, but part because I enjoy it. I think iTunes is a great interface for music management. I’ve done a few extra things in iTunes that help me stay organized. One of the most important data fields on a music track I find is “Album Artist”. This field is a recent addition to iTunes, but it really makes finding my music easier, especially from the iPod interface. For the music you purchase from the iTunes store, this is typically done for you already. If you’ve ripped your CDs, the CDDB database doesn’t always have this information however. The first thing I do after I’ve ripped a new CD is go and verify if the Album Artist field has info, and that it is correct. If not I manualy update this field based on the artist. This is especially useful on CDs that have a large number of collaborations on them. The second iTunes tip I have is use the rating system. When you are listening to your music, take the few seconds to go and rate the song. If you have a large music library, it is really handy to be able to just put on a playlist of your top rated songs when friends are over. You don’t want them to know you have the Macarena in your library!

4) Feeds: I use Google Reader to organize my feeds. In Google Reader you are able to setup multiple folders that each can contain multiple feeds. I have a folder for friends blogs, a folder for tech news, a folder for blog research, and a folder for each of my other interests. I can quickly see where new articles are and view just the topics I’m interesting in looking at. I also setup keyword searches on Google Blog Search and Google News and add the feed into Google Reader. This lets me get all the information I want, in a single easy to digest location.

5) Photos: We take a lot of digital photos, and we like to publish them online so that family can view them at their leisure. We have literally thousands of digital pictures that we have taken over the years. Keeping them all organized is no easy task. Recently I’ve begun the painstaking process of tagging all of the pictures in iPhoto. I tag the photos based on who is in the picture, the location of the picture, and anything that is particularly unique to the picture. Once the photos are tagged I upload them to our gallery using the iPhotoToGallery plugin. The gallery itself is powered by Gallery, a fantastic open source PHP based web gallery.

6) Address book: Now my address book organization is a bit tricky. As I mentioned above, I live both in the Mac and the Windows universe when it comes to my day job. At work we use Exchange and I carry around a Blackberry that is synced to Exchange. At home, I use my Mac, and I soon hope to have an iPhone. It’s a real challenge to keep my contacts synced between all these devices without spending too much time on it. In AddressBook 4.0 there is a handy feature that allows Exchange users to sync their Mac address book with Outlook Web Edition. Unfortunately for me, my company is still on the very old Exchange 5.5, and so I don’t have outlook for the web yet. While I openly admit this solution is far from perfect, it’s the best I have been able to come up with. Currently, I use my Blackberry as the transport medium for contacts. Exchange and my Blackberry work very well together, so I can always trust them. The problem is getting that same information onto my Mac. PocketMac makes a great utility that syncs your Blackberry with iLife. If I set this up as a one way sync (Blackberry to Mac) it works fairly reliable. The downside is that in order to add a new contact I have to do it with either my Windows PC or my Blackberry. I hope a better solution presents itself soon, or perhaps I might just dump my exchange dependancy all together when the iPhone arrives.

7) Chat contacts: Like most Mac users, I use Adium for my instant messaging. Adium is great because I can merge contacts from different networks into a single entry on my contact list and then set the network priority so I can choose which protocol to use if available. If you have the same person listed twice in Adium under your contact list, drag the contact from the lower priority network on top of the contact for the higher priority network. Adium will then ask you if you want to merge these contacts.
Another handy feature of Adium is having contact information pulled from your Address Book. This way their display name is listed as their real name instead of whatever catchy tag they chose to display as their alias. The last adium tip I have is how I organize my contact list. In Adium you can sort your contact list by status (under the view menu), and then choose to only view online contacts. This greatly reduces the number of contacts displayed and lets me quickly see who is available.

8 ) Email: Again, like Address Book email is a challenge in the hybrid Mac/Windows world I am in. Thankfully my email addresses are fairly separate. Work email stays on Exchange and personal email sits in Mail.app. Since I have my own domain name I use the fantastic Gmail for domains service. Google acts as my mail server and stores all my incoming messages. They are also kind enough to do spam filtering and provide an amazing ~16GB storage limit. I enable pop mail on the account and then fetch all my email down to Mail.app for local viewing and management. Once in Mail.app I use smart mailboxes to automatically sort out messages from the mailing lists I subscribe to. In Mail.app click the cog icon in the lower left, below your list of folders. From there, chose “New Smart Mailbox..”. With this interface you can specify under what criteria the mail message should be moved to the folder. For most mailing lists it is easy because typically a ID tag is prepended to the message subject. You can also use smart folders to create for individuals who email you a lot, so you can immediately see if you have new messages from them. That way you can give them your attention, or ignore them as the case may be.

9) Calendar: Ok, yet again I get bitten by the Exchange vs iLife issue. Similarly to how I manage my contacts I manage my calendar. I use the PocketMac software to import my calendar entries from Exchange/Blackberry into iCal. In iCal I have 2 separate calendars, work and personal. In the work calendar I have everything that is synced from the Blackberry, in the personal calendar I have everything that falls outside of work. This has worked out well because it allows me to stay organized but still keep my personal appointments completely private from my colleagues on our Exchange server. The only downside to this approach is that I do not receive reminders on my Blackberry for my personal calendar appointments. Again, hopefully the iPhone fixes this problem

10) Bookmarks: Now this is an area where the Windows/Mac problem is truly solved. I use del.icio.us to organize all my bookmarks. I can tag them so I know what they are about and I can easily retrieve them later. On Windows there is the new Firefox Extension and on my Mac and Safari I use Pukka combined with a simple javascript entry in my Bookmarks bar

javascript:document.location.href='pukka:url='+encodeURIComponent(location.href)
+'&title='+encodeURIComponent(document.title)+'&extended='+encodeURIComponent(window.getSelection());

When clicked, the above javascript sends your current URL to Pukka, which the gives you a prompt to tag it and upload it to Del.icio.us. The end results is that I have my bookmarks well organized and tagged on all of my computers. To access my bookmarks I just subscribe to the Del.icio.us RSS feed in Safari.

Can you think of any I might have missed? Have a solution to my Windows/Mac Address Book and Calendar problems? Drop a note in the comments.

Leave a Comment