Saturday, July 26, 2008

Microsoft shows Apple how to do integrated work home calendars

Bravo evil empire!

It's good to have Microsoft in the game.
Microsoft Makes Calendar Sync Work - ReadWriteWeb

... For someone who uses an Outlook calendar at work, keeps a personal calendar in Hotmail, and perhaps has a shared family calendar in Live Calendar, this new sync tool will be incredibly useful. Whether you're online or offline, all your calendars are available from one place: Outlook....
Are you listening Apple?

The Windows Live Beta calendar will subscribe to ICS feeds (ex. Google Calendar). It can be shared as a web page and it will provide ICS and XML feeds.

Hmm.

I've been so annoyed by Apple's crappy support for iPhone calendaring, tasks and notes, and the corresponding MobileMe flop (which, even if it worked, would not suffice), that I've even thought of returning my iPhone. I won't, I'll give it a few months.

But maybe I won't spend those months trying to make Apple's feeble iCal work. If Apple does fix the currently broken iPhone Outlook sync (I think they will), then I could just sync my iPhone to Outlook 2007 at home and start using Live Calendar.

I could even start by synchronizing Outlook with Windows Live, then subscribing to the Windows Live calendar from our Google Apps family calendar.

Then if Apple continues to bury the iPhone, I might see what works with Windows Live...

Maybe I should buy shares in Microsoft. They're starting to look warm and fuzzy.

Update: gCal is published with the https:// protocol. To view in iCal or Windows Live Calendar (beta) change https to http. I also see it takes a very long time to get all the events to cross the feed.

Google Calendar - bad iPhone news

I started out with a LOT of options for my calendar migration, but they're dropping like flies.

So while I'm optimistic about BusySync for gCal to iCal sync, I was dismayed by gCal mobile:
Google Mobile - Calendar:

... On the go? Stay on track with Google Calendar on your mobile.

* Keep track of your schedule, without having to sync your phone with your computer.
* Share events and calendars with friends, family, or colleagues.
* Set up mobile phone notifications."
Ok, now reread that marketing drivel. What's not mentioned?

Oh, like, no ability to edit or remove calendar items? So you better make sure your "Quick Add" works, because you won't get a second shot.

Ok, rule that one out. At least, rule it out as a direct option.

Update: Oh, in case you were thinking of injecting the MobileMe calendar into the mix ... there's no support for feeds, or subscriptions in MobileMe calendar. Indeed, the ability to sync iCal calendars was lost in the MobileMe transition.

ePocrates on the iPhone

Epocrates Rx iPhone appears to work. Initial impressions are that it's a large improvement over ePocrates on the Pearl, and in terms of utility it's probably comparable to ePocrates Palm.

The med images are particularly impressive.

The only downside is I think it's getting more obnoxious about insisting I glance at the marketing material that pays for the service. I hope they're not running into funding problems -- that's usually what makes ad-funded vendors push the marketing.

My iPhone 2.0 impressions so far is that synchronization with Outlook or MobileMe is a disaster, Outlook sync is a regression from iPhone 1.0, and basic PIM (calendar, etc) functionality scores a D-. Everything else is pretty good.

Friday, July 25, 2008

Missing sync: the only vendor that uses the iPhone sync conduit

How does Markspace do this?

I haven't seen any other vendor able to get at iPhone data via the conduit:
The Missing Sync for iPhone - Mac Version - Notes

... Transfer notes from your iPhone into Bare Bones Yojimbo, Microsoft Entourage or the included Mark/Space Notebook to search or copy and paste content easily...
If they can get across the conduit, could they sync an iPhone task application with iCal tasks?

Spanning Sync vs BusySync for iCal gCal sync - with a clear winner

I dread the thought of dealing with Apple's MobileMess. Apple has amply demonstrated they can't do reliable cloud services; dotMac was an intermittent disaster for years. They had one chance to show they could do this, and they blew it.

Apple should have delayed the transition. Big mistake.

So I'm even more committed to a Google solution. I'd take a look at Yahoo!, but they're in a corporate death spiral. Heck, I'd take a look at Microsoft, but I'm pretty committed to OS X and they're not.

You can directly subscribe from iCal to a gCal calendar -- I'm going to see if I can fit that into my iPhone workflow. It's not a sync solution however.

Google has a tool to allow Outlook to gCal sync, but they haven't done one for iCal. Given how bad their Outlook sync launch has been (synchronization is hard, but Google has issues too), that's no great loss.

There are two commercial alternatives: Spanning Sync and BusySync. Missing Sync, which we licensed for Emily's Palm, and licensed again for her Blackberry, deals with device to machine sync, so they're not a contender. Too bad, they do pretty well.

BusySync is sold as a product, Spanning Sync is a service with a per user license. So for a shared machine BusySync may be less expensive, though that's probably not the licensed use.

Here's what made my trial decision easy however:
  1. Spanning Sync offers a 15 day free trial. The main page doesn't tell me what it costs.
  2. BusySync has a 30 day free trial. The main page tells me it costs $25
I distrust any vendor that hides their costs.

BusySync wins. I'll download their trial. If they fail, then I'll take another look at Spanning Sync.

Update: I gave BusySync an acid test -- and it failed. I reset a Google Calendar, then checked to see if BusySync would remove all the iCal appointments. It failed, instead I saw many ghosts. I'll give it another chance, but if they fail again I'll try Spanning Sync.

Update: Ok, BusySync failed completely. On to Spanning Sync.No - it was Google Calendar Sync that failed that time. So BusySync only failed the removal test. So it's not out of consideration.

The NULL comparison trap: Escape with NVL (Oracle) and Nz (Access)

This is disgusting. I’m sure I once knew better; maybe writing this up will help. A quick Google search tells me I’m not alone in my stupidity, so maybe this will help others who aren’t truly DBAs, but have to play with data.

I got caught be the NULL trap. I think this might be why some databases are designed to never allow NULL values, but to use, for example, an empty string.

The NULL trap is impeccably logical, but infuriating.

Say you compare the values of two fields, one of which is Non-Null and one is Null. Are they different?

I think so when I look at them, but I think the “proper” answer is “NULL”. Meaning – “I don’t know”.

That’s because NULL doesn’t mean “nothing”, it means “could be anything”.

Consider this Microsoft Access 2003 query:
SELECT pub_CC_qry.CG_CC_ID, pub_CC_prior_qry.[Abbreviation prior], pub_CC_qry.Abbreviation
FROM pub_CC_qry INNER JOIN pub_CC_prior_qry ON pub_CC_qry.CG_CC_ID = pub_CC_prior_qry.CG_CC_ID
WHERE (((pub_CC_prior_qry.[Abbreviation prior])<>[abbreviation]));
It returns 62 rows. It doesn’t return 28 rows where one of the two columns contains a null value.
This qeury returns 90 rows, but it’s a mess:
SELECT pub_CC_qry.CG_CC_ID, pub_CC_prior_qry.[Abbreviation prior], pub_CC_qry.Abbreviation
FROM pub_CC_qry INNER JOIN pub_CC_prior_qry ON pub_CC_qry.CG_CC_ID = pub_CC_prior_qry.CG_CC_ID
WHERE (((pub_CC_prior_qry.[Abbreviation prior]) Is Null) AND ((pub_CC_qry.Abbreviation) Is Not Null)) OR (((pub_CC_prior_qry.[Abbreviation prior]) Is Not Null) AND ((pub_CC_qry.Abbreviation) Is Null));
The secret is the Nz function. Wrap any column that might contain a NULL in Nz, and LOT of things, including iff comparison functions and SQL comparisons work a lot nicer:
SELECT pub_CC_qry.CG_CC_ID, Nz([Abbreviation prior]) AS Abbreviation_Prior, pub_CC_qry.Abbreviation
FROM pub_CC_qry INNER JOIN pub_CC_prior_qry ON pub_CC_qry.CG_CC_ID = pub_CC_prior_qry.CG_CC_ID
WHERE (((Nz([Abbreviation prior]))<>Nz([abbreviation])));
Arrgggh.

So what about Oracle?

I’m not precisely sure how Oracle is handling this situation in comparisons. I’m still researching Oracle’s behavior. It does, however, have a function similar to the Access Nz function; it’s the nvl function:
How to use the nvl function in Oracle
The NVL function is used to replace NULL values by another value.
The syntax for the NVL function is:
NVL( value_in, replace_with )
value_in if the function to test on null values. The value_in field can have a datatype char, varchar2, date or number datatype.
replace_with is the value that is returned if value_in has a null value. The NVL statement works like this pl/sql code:
if (value_in is NULL) thenreturn replace_with;elsereturn value_in;end if;Sample code: select nvl(salary, 0)from employees;select nvl(ref_code,'Unknown')from users;
Here’s an example, and a response from a friendly DBA:
Select * from A, B where A.ID = B.ID and A.name != B.nom

Imagine

A.ID = B.ID = 7
A.name is NULL
B.nom is not Null

How do you get Oracle to return the row in B where B.ID=7?
Answer (I think for our purposes this would work if we just used NVL([column_name],’’) for our string comparisons)
I think what you're after is the NVL function, which converts a NULL to a substitute value for comparison's sake.

So in your query, we would replace a null A.NAME with an outlandish value like 'A1B2C3', and replace a null B.NOM with same.

SELECT * FROM A, B WHERE A.ID = B.ID AND NVL(A.NAME, 'A1B2C3') != NVL(B.NOM, 'A1B2C3');

The above query will *not* return rows where A.ID = B.ID and A.NAME and B.NOM are *both* null. If you also want those rows, then you need to tag on that condition to the end of the query like this:

SELECT * FROM A, B WHERE A.ID = B.ID AND ((NVL(A.NAME, 'A1B2C3') != NVL(B.NOM, 'A1B2C3')) OR ((A.NAME IS NULL) AND (B.NOM IS NULL)));

Work and home calendar integration – false signs of iPhone hope

I’m sorting through this warily. It’s like juggling antimatter. I have backups, don’t try this if you don’t.
I’m still striving towards the primeval goal of an integrated work/home calendar view. Palm failed this test. I thought the iPhone wasn’t even in contention, but I’m now seeing some faint signs of hope.
Here’s what I see so far:
  • The iPhone more or less supports multiple calendars.
  • It appears possible that an iPhone can sync differentially with multiple machines. I sync with an iMac at home, but in cautious testing I can connect and charge my iPhone at work while turning off the automatic sync option. I can differentially configure sync options for the work machine. [Update: this is not correct. After real world tests on OS X and XP I am convinced that iPhone 2.0 can truly sync with only one machine, and that machine better be a Mac. I think 10.4 may work, haven't tried 10.5. This is a regression from iPhone 1, which could sync safely with Outlook.]
  • iTunes PC has an option to sync Outlook with a “selected calendar”
  • Apple - Support - Discussions - Sync iPhone with work Outlook (Exchange ... confirms that Exchange server sync (includes some Sharepoint access!) takes over the entire phone. So while it has lots of appealing features, it’s out of the running for my purposes. In any case, Apple’s Exchange implementation is very weak: “"There are several common-- nay, fundamental-- things that you cannot do with the iPhone calendar application. You cannot:
    • create a meeting request and invite other people to attend..
    • create a recurring meeting unless it is repeated daily, weekly, bi-weekly, monthly, or yearly. That's right-- no more "first Thursday of every month" or "every Monday, Wednesday, Friday" appointments…
    • view suggested meeting times or free/busy times, either for your own calendar or for others'…
    • move to an arbitrary date, in either the future or the past…
But how does the iPhone do selectively synchronizing via USB cable with an Outlook Exchange Server client? Will it safely sync with an Outlook appointment that has attendees and schedule exceptions without wrecking the appointment? If I could enforce one way update of the iPhone rather than true bidirectional sync I’d test this out.

I’ve opened an Apple Discussion thread on this. More updates as I learn more.

Update
Update 2 

Complete despair.  The list of calendars to sync with is a list of Outlook calendars, not iPhone calendars. If you sync with the work calendar it wipes out all the home calendars. Heart breaking, really. (There is an option, btw, to force unidirectional updates from Outlook, but it must be manually set with every synchronization.)

Update 3

Just for the heck of it, I did a one way calendar sync from Outlook to the iPhone. I acknowledged my iPhone calendar would be replaced from Outlook. After about a half hour the progress-indicator free process stopped. My Outlook calendar was still intact. That was good. My iPhone calendar was empty. Nothing there.

Wow. No wonder Apple is pushing iPhone 2.1 out to developers. They really mucked this release up!

(See comments for a rumor that a combination of MobileMe and Exchange Push can produce a joint calendar on the iPhone. I recommend against trying any iPhone sync until after 2.1 is out.)