<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Buggin' My Life Away : Mac BU</title><link>http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx</link><description>Tags: Mac BU</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Craig's Bug</title><link>http://blogs.msdn.com/rick_schaut/archive/2008/01/31/craig-s-bug.aspx</link><pubDate>Fri, 01 Feb 2008 05:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7363990</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/7363990.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=7363990</wfw:commentRss><description>&lt;!--StartFragment--&gt;&lt;p class="MsoNormal"&gt;One of the things I love about this job is tracking downinteresting bugs.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;It’s like readinga good who-done-it, complete with plot twists, multiple potential suspects and a fascinating array of characters.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Late last September, Craig Eisler submitted a bug that had all of these elements.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Now, when your general manager submits a bug, you don’t necessarily have to get on it right away.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;But, it’s not a good idea to let it linger for too long.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;So, after this bug had been on the list for about a week or so, I decided it was time to figure out what was up.&lt;/p&gt;&lt;p class="MsoNormal"&gt;The bug involved a document Craig had been editing with revision marking turned on.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;He’d made some changes to the document, saved it, quit Word and, when he opened the document back up, some of the spaces between words were missing.&lt;/p&gt;&lt;p class="MsoNormal"&gt;With a bug like this, the first thing I do is open it up in Win Word.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;If the problem appears there, then there’s a strong likelihood that the bug is in the code that writes the file.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;If the bug doesn’t appear in Win Word, then I know to start looking at the code that reads files.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;In this case, the problem appeared in Win Word, so my first suspect is going to be somewhere in the save code.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Also, the missing spaces seemed to be in or around areas of the document where revisions had been made.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;So, the first suspect was somewhere in the code that writes revisions.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;I created a document, added some text, turned on revisions made some changes and saved the file stepping through the code that handles revision marking.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Nothing.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Everystep along the way, everything was happy.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;The code was writing all the appropriate XML tags, and none of the text was missing.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Of course those two sentences summarize about two-three hours of sleuthing, after which I was able to exclude the revision marking save code as a suspect.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Well, maybe it’s something that only appears to be related to revision marking.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Let’s take two files, one that exhibits the problem and one that doesn’t, and compare the contents (much easier to do now that the document content is XML).&lt;/p&gt;&lt;p class="MsoNormal"&gt;Again, nothing.&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Other than a few gratuitous differences (revision save ID’s, for example, which are uniquely generated every time new text is saved in a document), everything in and around the missing spaces was identical.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Another couple of hours spent cracking open various documents and comparing the XML, and I still haven’t a clue whothe real culprit is.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Well, but, if the documents are identical, maybe the problem happens when we read the file.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;So, I set a breakpoint on the code that handles runs of text from the XML parser, and, sure enough, our “characters” callback wasn’t getting called for just the missing spaces.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Hm…&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Progress.&lt;/p&gt;&lt;p class="MsoNormal"&gt;About another hour or so, I had tracked it down to some general XML parsing code we’d ported from Win Office.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;One of the problems with writing filing code that’s intended to handle future situations is that, when you write the code, the future hasn’t arrived yet.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Well, for Win Office, Mac Office represented the future, and some of the stuff we’d added exposed a subtle bug in the code we’d ported (note: the problem has been fixed in WinOffice before Mac Office shipped, so people shouldn’t run into this at all).&lt;/p&gt;&lt;p class="MsoNormal"&gt;By the time I had finished all of this, implemented a fix and verified the fix, it was about 1:30 in the morning.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;When I get engrossed in a good mystery, I sometimes find it difficult to put the book down.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;Same thing goes with good mystery bugs.&lt;/p&gt;&lt;p class="MsoNormal"&gt;And, the bug being a good mystery bug that geeks like Craig and I appreciate, I sent off an e-mail to Craig outlining the basic nature of the bug and the fix (which turned out to be just a couple lines of code—this is almost always the case with a good mystery bug).&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;This being in the middle of the FIFA Women’s World Cup, I ended the mail by saying that I was going to go home, drink some coffee, and stay up to catch the USA match (I forget who the opponent was).&lt;/p&gt;&lt;p class="MsoNormal"&gt;The next day, I got a response from Craig with some questions about the bug.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;I replied to Craig’s questions and, at the end of the e-mail, lamented over the fact that, after all that effort and all that coffee to stay up to watch a soccer match, our local cable company saw fit to pre-empt the last 30 minutes of the match with a taped question-and-answer program starring Mike Holmgren, the Seahawks coach.&lt;/p&gt;&lt;p class="MsoNormal"&gt;For a born-in-Green-Bay, prick-me-and-I-bleed-green-and-gold, Packers fan like me, having a soccer match for which I’d stayed up all night to be able to watch be preempted by Mike Holmgren is seriously rubbing salt into the wound, and I conveyed my displeasure at this to Craig by saying that the only reason we still have a working television in the house is the fact that there were people asleep in the house at that time.&lt;/p&gt;&lt;p class="MsoNormal"&gt;What ensued was a series of e-mails between Craig and I with a dual thread about the bug he’d reported and my television set.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;His response to my previous e-mail was to suggest that I should have taken the TV outside and smashed it there.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Wake up the neighbors instead of the kids, and I get to vent my hostilities.&lt;/p&gt;&lt;p class="MsoNormal"&gt;In my reply, I explained that this was not an option giventhe size (36”) and weight (over 260 lbs) of my TV set, to which Craig replied, “A CRT!?&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;How quaint!&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;Do you get slivers when you go to the bathroom after watching that TV?”&lt;/p&gt;&lt;p class="MsoNormal"&gt;Having an uber-geek general manager is cool.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;You get great bug reports, and he likes to hear about the nature of the bug and the fix.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;Just be a little careful when you talk about the technology around your house.&lt;/p&gt;&lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;p class="MsoNormal"&gt;Rick&lt;/p&gt;&lt;p class="MsoNormal"&gt;Currently playing in iTunes: New World Blues by Gov't Mule &lt;/p&gt;&lt;!--EndFragment--&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7363990" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>The GM Shuffle</title><link>http://blogs.msdn.com/rick_schaut/archive/2007/06/09/the-gm-shuffle.aspx</link><pubDate>Sat, 09 Jun 2007 20:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3187103</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/3187103.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=3187103</wfw:commentRss><description>&lt;P&gt;By now you’ve &lt;A target="_blank" mce_href="http://www.macminute.com/2007/06/08/macbu-roz-ho/" href="http://www.macminute.com/2007/06/08/macbu-roz-ho/"&gt;read&lt;/A&gt; &lt;A target="_blank" mce_href="http://www.macobserver.com/article/2007/06/08.8.shtml" href="http://www.macobserver.com/article/2007/06/08.8.shtml"&gt;the&lt;/A&gt; &lt;A target="_blank" mce_href="http://www.tuaw.com/2007/06/08/microsofts-macbu-gets-new-gm-craig-eisler/" href="http://www.tuaw.com/2007/06/08/microsofts-macbu-gets-new-gm-craig-eisler/"&gt;news&lt;/A&gt;.  MacBU has a &lt;A target="_blank" mce_href="http://blogs.msdn.com/macmojo/archive/2007/06/08/hello-from-the-new-general-manager-of-the-macintosh-business-unit-craig-eisler.aspx" href="http://blogs.msdn.com/macmojo/archive/2007/06/08/hello-from-the-new-general-manager-of-the-macintosh-business-unit-craig-eisler.aspx"&gt; new general manager&lt;/A&gt;.  I only found out about this via e-mail on Thursday, and, yesterday, I got a chance to meet Craig.  I’ll get to my initial impressions of Craig in a bit, but I also want to talk a bit about Roz Ho.&lt;/P&gt;

&lt;P&gt;Before I talk about Roz, I should point out that, in Microsoft terms, I’m a wierdo.  That’s not just because I work on Mac software.  No, I’m an anomoly in a very different sense.  In a couple of weeks, I’ll mark my 17th anniversary of working on various versions of Word, all but one of them for the Macintosh.  That’s so rare, that people have suggested they make a place for me somewhere in the Microsoft Museum (just what I want: to become a museum piece).&lt;/P&gt;

&lt;P&gt;Microsoft is pretty big on career advancement. It’s not a “move up or move out” kind of thing.  It’s more of a do something cool and good here, you get to do something cool and good somewhere else.  That’s why I’m such a freak.  I keep managing to advance my career without having to move on to something completely different.&lt;/P&gt;

&lt;P&gt;For a general manager, this career advancement thing becomes something of a problem.  Opportunities to climb the management ladder start getting really thin.  So, how do you reward a GM for doing a great job?  You find a different kind of business for that GM to run—something that might involve cool new technologies, or something that requires a different approach to management, or a host of other kinds of chances to do something, well, different.&lt;/P&gt;

&lt;P&gt;So, earlier this year, a very interesting and exciting opportunity opened up for Roz to advance her career.  This kind of thing always brings out mixed emotions in me.  I hate losing someone as good as Roz, but I’m also proud that someone from MacBU is being recognized for doing a great job.  I’m very excited for Roz in her new role, and I think it will be good for both her and for Microsoft.&lt;/P&gt;

&lt;P&gt;Roz became the general manager of MacBU back in December of 2002.  She oversaw the release of what has been the most successful version of  Mac Office ever.  Her more than four years as general manager covers nearly half of Mac BU’s ten year existence.  Of the three general manager’s I’ve worked with until now, I think Roz has been the best, and she’s certainly been the most pleasant to work with (which is, by no means, a knock on either Ben Waldman or Kevin Browne).&lt;/P&gt;

&lt;P&gt;I say all of this to express my personal gratitude to Roz for what she’s done for MacBU, for the Macintosh in general, and for me personally.  I’ll miss you Roz, though I still think you messed up the Connectix deal for not getting all of us our own “Switch/Switch Back” t-shirts.&lt;/P&gt;

&lt;P&gt;So, what about Craig Eisler?  As I said, I only found out about this on Thursday, but I see that he’s &lt;A target="_blank" mce_href="http://craig.theeislers.com/" href="http://craig.theeislers.com/"&gt;a blogger&lt;/A&gt; and enough of &lt;A target="_blank" mce_href="http://craig.theeislers.com/2007/05/im_outing_myself.php" href="http://craig.theeislers.com/2007/05/im_outing_myself.php"&gt;an Apple enthusiast&lt;/A&gt; as to have 5 Apple TV’s, 3 iMacs, a Mac Mini, a Mac Cube and a PowerMac G4.  Oh, and, ah, I think there’s a video iPod in the mix as well.  So far, so good.&lt;/P&gt;

&lt;P&gt;I did a bit of poking around the internet, and found quite a bit of &lt;A target="_blank" mce_href="http://www.iwantapinkzune.com/?p=291" href="http://www.iwantapinkzune.com/?p=291"&gt;information about Craig&lt;/A&gt;, like he was once a competitive power lifter, and he once, quite by accident, managed to bring down the entire Canadian banking system.  Four times.  In one day.&lt;/P&gt;

&lt;P&gt;UWTV did &lt;A target="_blank" mce_href="http://www.uwtv.org/programs/displayevent.aspx?rID=2340" href="http://www.uwtv.org/programs/displayevent.aspx?rID=2340"&gt;this interview&lt;/A&gt; back in April of 2004.  It’s a bit long, but very interesting.&lt;/P&gt;

&lt;P&gt;On Friday, we had a bit of a get-together out on the patio outside our building, and I had a chance to chat with Craig.  If I had to choose a single word to describe my first impressions, it would be “exuberant”—almost, but not quite, effusive. We swapped a few stories. Someone mentioned my suggestion box, and he said that he’d read my blog and thought the suggestion box was a scream.&lt;/P&gt;

&lt;P&gt;So, he gets the Mac, he gets Microsoft and he understands that running a successful business is measured in terms of the value of the product to users and customers. Best of all, he gets my twisted sense of humor.  I’ll have to try out some of the Canadian jokes my daughter brings back from school.  C-eh?  N-eh?  D-eh?&lt;/P&gt;

&lt;P&gt; &lt;/P&gt;

&lt;P&gt;Rick&lt;/P&gt;

&lt;P&gt;Currently playing in iTunes: &lt;I&gt;You da Mann&lt;/I&gt;, by the Derek Trucks Band&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3187103" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>There Comes a Time</title><link>http://blogs.msdn.com/rick_schaut/archive/2007/04/04/there-comes-a-time.aspx</link><pubDate>Thu, 05 Apr 2007 04:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2028545</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/2028545.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=2028545</wfw:commentRss><description>&lt;P&gt;In every project, there's a point where you have to stop tweaking this and touching up that little bit of behavior and focus on just fixing bugs.&amp;nbsp; If you don't, then you never ship.&amp;nbsp; Nadyne &lt;A href="http://blogs.msdn.com/macmojo/archive/2007/03/15/ship-it.aspx" mce_href="http://blogs.msdn.com/macmojo/archive/2007/03/15/ship-it.aspx"&gt;gave some of the details&lt;/A&gt; over on &lt;A href="http://blogs.msdn.com/macmojo/" mce_href="http://blogs.msdn.com/macmojo/"&gt;mac mojo&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Well, we're getting close to that time with Mac Office 12.&amp;nbsp; In honor of nearing such a milestone, I prepared something for our program management friends.&amp;nbsp; These are the folks who are responsible for designing how the various features are supposed to behave from the user's point of view.&amp;nbsp; It's a suggestion box, and it looks like this:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/rick_schaut/WindowsLiveWriter/ThereComesaTime_10853/x1pXjQifqRFQ7oxMft2jDMrP9HH8Kqo184YJQf544Mm9SSDVMW8Z9R0BXcQfqgcJGQzuG5OTcWCwEsoCavOFSCufuZ-0q00wHlc1U0xlbyMp9izeXB2FpLMgQ%5B1%5D%5B1%5D.jpg" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/rick_schaut/WindowsLiveWriter/ThereComesaTime_10853/x1pXjQifqRFQ7oxMft2jDMrP9HH8Kqo184YJQf544Mm9SSDVMW8Z9R0BXcQfqgcJGQzuG5OTcWCwEsoCavOFSCufuZ-0q00wHlc1U0xlbyMp9izeXB2FpLMgQ%5B1%5D%5B1%5D.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=192 src="http://blogs.msdn.com/blogfiles/rick_schaut/WindowsLiveWriter/ThereComesaTime_10853/x1pXjQifqRFQ7oxMft2jDMrP9HH8Kqo184YJQf544Mm9SSDVMW8Z9R0BXcQfqgcJGQzuG5OTcWCwEsoCavOFSCufuZ-0q00wHlc1U0xlbyMp9izeXB2FpLMgQ%5B1%5D.jpg" width=240 border=0 mce_src="http://blogs.msdn.com/blogfiles/rick_schaut/WindowsLiveWriter/ThereComesaTime_10853/x1pXjQifqRFQ7oxMft2jDMrP9HH8Kqo184YJQf544Mm9SSDVMW8Z9R0BXcQfqgcJGQzuG5OTcWCwEsoCavOFSCufuZ-0q00wHlc1U0xlbyMp9izeXB2FpLMgQ%5B1%5D.jpg"&gt;&lt;/A&gt; &lt;A href="http://blogs.msdn.com/blogfiles/rick_schaut/WindowsLiveWriter/ThereComesaTime_10853/x1pXjQifqRFQ7oxMft2jDMrP9EYWH2HE395YyKpsTeM_VqZhLgrE5Zb4KJaq_PZeYyuWrVw4tnVKNxfyqIV_BlnsvAVtKwTIUIn3qRJdPvIMLU9iS_fdBqbSg%5B1%5D%5B1%5D.jpg" atomicselection="true" mce_href="http://blogs.msdn.com/blogfiles/rick_schaut/WindowsLiveWriter/ThereComesaTime_10853/x1pXjQifqRFQ7oxMft2jDMrP9EYWH2HE395YyKpsTeM_VqZhLgrE5Zb4KJaq_PZeYyuWrVw4tnVKNxfyqIV_BlnsvAVtKwTIUIn3qRJdPvIMLU9iS_fdBqbSg%5B1%5D%5B1%5D.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=192 src="http://blogs.msdn.com/blogfiles/rick_schaut/WindowsLiveWriter/ThereComesaTime_10853/x1pXjQifqRFQ7oxMft2jDMrP9EYWH2HE395YyKpsTeM_VqZhLgrE5Zb4KJaq_PZeYyuWrVw4tnVKNxfyqIV_BlnsvAVtKwTIUIn3qRJdPvIMLU9iS_fdBqbSg%5B1%5D.jpg" width=240 border=0 mce_src="http://blogs.msdn.com/blogfiles/rick_schaut/WindowsLiveWriter/ThereComesaTime_10853/x1pXjQifqRFQ7oxMft2jDMrP9EYWH2HE395YyKpsTeM_VqZhLgrE5Zb4KJaq_PZeYyuWrVw4tnVKNxfyqIV_BlnsvAVtKwTIUIn3qRJdPvIMLU9iS_fdBqbSg%5B1%5D.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Mind you, this suggestion box is for PGM use only.&amp;nbsp; Think of it as my way of saying that now is the time&amp;nbsp;for us&amp;nbsp;to shut up and listen to the real users who are trying out the product during the private beta.&lt;/P&gt;
&lt;P&gt;Enough fun.&amp;nbsp; I need to get back to fixing bugs.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Rick&lt;/P&gt;
&lt;P&gt;Currently playing in iTunes: &lt;EM&gt;Beautifully Broken&lt;/EM&gt; by Gov't Mule (w/ George Porter Jr.)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2028545" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>Lounging Around at MacWorld</title><link>http://blogs.msdn.com/rick_schaut/archive/2007/01/10/lounging-around-at-macworld.aspx</link><pubDate>Thu, 11 Jan 2007 02:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1446877</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/1446877.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=1446877</wfw:commentRss><description>&lt;p&gt;MacWorld always has its surprises, but some of them are quite personal.&amp;nbsp; For me, the surprise was the discovery, at 5:20 this morning, that a previous occupant of my hotel room had set the alarm-clock but hadn't turned off the alarm.&amp;nbsp; I've been told by others that my failure to check the alarm clock when I checked in is a sign that I don't attend trade shows often enough.&amp;nbsp; Actually, I think I probably attend too many as it is.&lt;/p&gt;&lt;p&gt;Whatever the case, thanks to this inconsiderate person, the Word file format converter is now about four hours closer to being done than it would have been had said person learned how to turn the alarm clock off.&amp;nbsp; I expect, however, that those hours will revert back during an upcoming, afternoon nap.&lt;br&gt;&lt;/p&gt;&lt;p&gt;I got a chance to chat with &lt;a href="http://www.bynkii.com" mce_href="http://www.bynkii.com"&gt;John Welch&lt;/a&gt; today, and I'm happy to inform you all that he appears to be in much better shape than he did &lt;a href="http://www.bynkii.com/archives/2007/01/for_those_of_you_wondering_why.html" mce_href="http://www.bynkii.com/archives/2007/01/for_those_of_you_wondering_why.html"&gt;yesterday&lt;/a&gt;.&amp;nbsp; And, you know, things were so busy in the &lt;a href="http://blogs.msdn.com/ControlPanel/Blogs/" mce_href="http://blogs.msdn.com/ControlPanel/Blogs/" title="http://blogs.msdn.com/macmojo/archive/2007/01/03/visit-our-blogger-lounge-at-macworld.aspx"&gt;Blogger Lounge&lt;/a&gt;, that I forgot to ask John if he's been able to check out &lt;i&gt;Songlines&lt;/i&gt; by the Derek Trucks Band.&lt;br&gt;&lt;/p&gt;&lt;p&gt;I've yet to get any opportunity to personally wish &lt;a href="http://blogs.msdn.com/ControlPanel/Blogs/" mce_href="http://blogs.msdn.com/ControlPanel/Blogs/" title="http://www.yourmaclife.com/"&gt;Shawn and Lesa&lt;/a&gt; a happy wedding anniversary, so I will here.&amp;nbsp; Happy anniversary, Shawn and Lesa.&amp;nbsp; In one of those cute MacWorld stories, Shawn and Lesa met at MacWorld three years ago.&amp;nbsp; Two years ago, Shawn proposed to Lesa at MacWorld, and, last year, they got married at MacWorld.&amp;nbsp; I think we should petition the event sponsors to rename MacWorld the Shawn and Lesa Wedding Anniversary Celebration.&lt;/p&gt;&lt;p&gt;Shawn does have a lot of pictures from the show, and a couple of cool interviews with &lt;a href="http://ymlmedia.com/events/MWSF07/MWSF07ChuckLeavell/MWSF07ChuckLeavell.html" mce_href="http://ymlmedia.com/events/MWSF07/MWSF07ChuckLeavell/MWSF07ChuckLeavell.html"&gt;Chuck Leavell&lt;/a&gt; and &lt;a href="http://ymlmedia.com/events/MWSF07/MWSF07BobWeir/MWSF07BobWeir.html" mce_href="http://ymlmedia.com/events/MWSF07/MWSF07BobWeir/MWSF07BobWeir.html"&gt;Bob Weir&lt;/a&gt;.&amp;nbsp; It seems MacWorld always has at least one musician I admire roaming the floor, but I still think my personal best was getting Herbie Hancock's autograph in the Microsoft booth a few years back.&lt;br&gt;&lt;/p&gt;&lt;p&gt;Lastly, I almost got a chance to chat with &lt;a href="http://www.cwob.com:16080/yellowtext/" mce_href="http://www.cwob.com:16080/yellowtext/"&gt;Andy Ihnatko&lt;/a&gt;. I still remember Andy raking me over the coals about &lt;a href="http://blogs.msdn.com/rick_schaut/archive/2004/02/26/80193.aspx" mce_href="http://blogs.msdn.com/rick_schaut/archive/2004/02/26/80193.aspx"&gt;Mac Word 6&lt;/a&gt;.&amp;nbsp; I hadn't realized how much shorter than me Andy is, and that's saying quite a lot, but I still think Andy is much taller in stature.&amp;nbsp; He's still one of the best writers in the Mac commentary field.&lt;/p&gt;&lt;p&gt;That's about all from the Blogger Lounge.&amp;nbsp; I need to bag some z's before it's time to spend an evening with the Mac MVP's.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Rick&lt;/p&gt;&lt;p&gt;Currently playing in iTunes: &lt;i&gt;Midnight Pass&lt;/i&gt; by Sea Level &lt;br&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1446877" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>Open XML Converters for Mac Office</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/12/07/open-xml-converters-for-mac-office.aspx</link><pubDate>Thu, 07 Dec 2006 21:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1233620</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/1233620.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=1233620</wfw:commentRss><description>&lt;p&gt;There’s been a bit of flak about the Office Open XML file format converters for Mac Office.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Sheridan posted &lt;a href="http://blogs.msdn.com/macmojo/archive/2006/12/05/converters-coming-free-and-fairly-fast.aspx" mce_href="http://blogs.msdn.com/macmojo/archive/2006/12/05/converters-coming-free-and-fairly-fast.aspx"&gt;an update&lt;/a&gt; on MacMojo, and Schwieb &lt;a href="http://www.schwieb.com/blog/2006/12/05/conversion-factors/" mce_href="http://www.schwieb.com/blog/2006/12/05/conversion-factors/"&gt;weighed in&lt;/a&gt; regarding some of the comments that people have made.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;There’s quite a bit of speculation gong on, and not a whole lot of information, so I’m going to try to dispel some of the fog.&lt;/p&gt;
&lt;p&gt;This discussion centers on Word, because I’m a Word developer, but the general ideas hold for all three of the affected Office applications.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The most significant difference between Word and the rest of the suite is that Word has a converter API.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;There’s a WinWord converter SDK that’s downloadable from the &lt;a href="http://support.microsoft.com/kb/111716" mce_href="http://support.microsoft.com/kb/111716"&gt;Microsoft support&lt;/a&gt; web site.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;While there are some subtle differences (FSRef’s instead of file paths, for example), the overall API is the same for Mac Word.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Of particular importance is the fact that the lingua franca for converting Word files formats is RTF.&lt;/p&gt;
&lt;p&gt;So, in order to write a converter for Word, you need two things: 1) a component that reads and writes the external file format; and 2) a component that generates and parses RTF.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Also, because of the hierarchical structure of XML, you need to have some form of intermediate representation of the file.&lt;/p&gt;
&lt;p&gt;Let’s put our Win Word hat on for a second, go back in time about two years, and think about how we might do this.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Well, by the time Win Office ships, we’ll have a software component that satisfies all of those needs: Word itself, or the new version of Word, to be precise.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;So, one, very efficient, way to implement that converter is to refactor the UI out of Word 12, repackage the result up with any other necessary components, and write a wrapper around all of it that exposes the API that the older version of Word expects converters to implement.&lt;/p&gt;
&lt;p&gt;Do that, and you can ship the converters the same time you ship Office.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The big upside of this idea is that you can really narrow down the scope of testing you do on the converter itself, because you’ve already tested both the RTF and the Open XML components by testing Word itself.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;So, you gain leverage from both a development and a testing perspective.&lt;/p&gt;
&lt;p&gt;Now, let’s put our Mac Word hat back on, and think of what our options are given the reasoning I’ve stated above.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;You can’t really ask the Win Office team to toss their idea in the trash just so you can work on the converters in tandem.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Well, you can, but one would have to be very optimistic to expect more than a polite, “Sorry.” I can’t think of a clearer example of the tail trying to wag the dog.&lt;/p&gt;
&lt;p&gt;Instead of following in Win Word’s footsteps, how about we spin off a separate development team to work on the converters separately from Word itself?&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;I've read suggestions made by some that writing converters from scratch could have been done in a relatively (in some cases ridiculously) short amount of time.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;So, let's test that idea by doing some back-of-the envelope calculations.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;You can check these numbers for yourself by downloading the &lt;a href="http://www.ecma-international.org/news/TC45_current_work/TC45-2006-50_final_draft.htm" mce_href="http://www.ecma-international.org/news/TC45_current_work/TC45-2006-50_final_draft.htm"&gt;reference XML schemas&lt;/a&gt; and performing some searches through the .xsd files.&lt;/p&gt;
&lt;p&gt;First, when could we have realistically started working on this?&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Well, not before Office 2004 shipped in April of 2004, so, ignoring the availability of specifications for the new format, let's assume that we began work on this roughly two years ago.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The final draft of the spec wasn't submitted to the ECMA until this past October, so in terms of actually having a spec to write to, 24 months is extremely optimistic for the time period available.&lt;/p&gt;
&lt;p&gt;How big is the task? Word, alone, has more than 1100 individual XML elements that need to be processed.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;We do this processing by writing something called a "handler", and each one of these elements needs a handler.&lt;/p&gt;
&lt;p&gt;Now, some of these elements are more complex than others.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;A single, user-defined document property isn't very complex.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;A paragraph, or a document section, can be very complex.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;For some of these handlers, one developer can whip out two or three a day.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Some of the other handlers will take a single developer up to an entire month to complete.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Trying to get more than one developer working on the same handler at the same time ends up being very counter-productive.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;So, one handler per developer, and, on average, it's fair to assume productivity of one handler per dev per day.&lt;/p&gt;
&lt;p&gt;At that rate, a team of 5 developers will implement 25 handlers a week, which means that we'd have all the XML handlers written in 44 weeks.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Well, a little more than that, because I've rounded the number of elements down to the nearest 100.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Nevertheless, we’ve taken a little less than a year to get the converters reading the new file format.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;We still aren't writing the new file format, we have the RTF side of things to worry about, which is actually more complex than the XML side, and I’ve completely left out all of the design and coding for the intermediate representation of the file.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The intermediate representation, itself, is at least 6 to 8 months worth of work.&lt;/p&gt;
&lt;p&gt;In other words, we're almost halfway through the schedule, with less than a quarter of the development work done.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;You want more developers?&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;I don't have more developers.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;This is just for Word.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;We need additional teams for Excel and PowerPoint.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;People want Universal Binaries of Mac Office in their hands, they’re adding new features to Win Office 12 that Mac Office 2004 won’t understand, Apple has a new HIView architecture that requires some re-architecting of parts of Mac Office, and none of this work adds a single new feature to Mac Office.&lt;/p&gt;
&lt;p&gt;More importantly, we’ve also run out of time to test the converters.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Had we started writing converters from scratch, by the time we had something fully tested and ready for public consumption, it would have taken us longer than it has taken us on the route we’ve chosen, in no small part due to the fact that the current route we’ve chosen allows us to leverage almost all of the development work of the Win Office team.&lt;/p&gt;
&lt;p&gt;The only reasonable choice for Mac Word has been to follow in Win Word’s footsteps.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;For those of you who attended the last Mac BU customer council meeting in Redmond and were wondering what I was doing while sitting in the back corner, now you know.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;I was busy refactoring Mac Word so that Mac Word 12 could, eventually, become the converter for the new file formats.&lt;/p&gt;
&lt;p&gt;The big win for this strategy is that we get to do all of the things that customers are asking us to do with the next version of Mac Office: Universal Binaries, support for most of the new data types in Win Office 12, re-architecting the UI to take advantage of composited HIViews and add some compelling new features.&lt;/p&gt;
&lt;p&gt;Lastly, can we port the Win Word converter?&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Well, actually, in a way, porting the Win Word converter is exactly what we have been doing, but we’re still faced with having to wait until Win Word ships before we have the final source code to merge into what we’ve already ported.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Once that merge is done, then we still have to go through several months’ worth of testing and bug fixing before they’re ready for public use.&lt;/p&gt;
&lt;p&gt;And &lt;span class="Apple-style-span" style="font-style: italic;"&gt;that&lt;/span&gt;&lt;span&gt; is precisely why there’s a delta between Win Office 2007 shipping and the full availability of converters for Mac Office.&lt;/span&gt;&lt;/p&gt;
&lt;p mce_keep="true"&gt;&lt;b&gt;Update:&lt;/b&gt;&amp;nbsp; I’d like to clear up some things about what I said earlier.&amp;nbsp; My back-of-the-envelope estimates included a lot more work than just supporting Open XML in Mac Office.&amp;nbsp; Open XML is the easy part.&amp;nbsp; It included the work required to generate RTF in both directions and to implement tools for developers.&lt;/p&gt;&lt;p mce_keep="true"&gt;If we had to add support for Open XML to Mac Word 12 without being able to port code from Win Word, the read/write estimates shrinks down to about 8.5 man/years (44 weeks x 5 devs x 2 for read+write).&amp;nbsp; As I recall, this about half of what it took to add HTML support to Word: 10 or so devs over a release cycle of 2 years.&amp;nbsp; Doing the work for PPT and Excel isn’t strictly a multiple of Word, because about 30% of the XML elements are shared between the three apps.&amp;nbsp; So, for all of Mac Office, I’d estimate it would take a total of about 5 devs over the release cycle to add full Open XML support starting from scratch, as part of the larger project.&lt;/p&gt;&lt;p mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Rick&lt;/p&gt;
&lt;p&gt;Currently playing in iTunes: &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Time Loves a Hero&lt;/span&gt;&lt;span&gt; by Little Feat&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1233620" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Microsoft+Word/default.aspx">Microsoft Word</category><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>Muddy Mojo Waters</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/08/28/Richard.aspx</link><pubDate>Mon, 28 Aug 2006 23:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:728889</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/728889.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=728889</wfw:commentRss><description>&lt;p&gt;Somewhere in the backroads of Issaquena County, Mississippi, along the banks of the Mississippi&amp;nbsp;river,&amp;nbsp;McKinley Morganfield was born.&amp;nbsp; Likely due to his&amp;nbsp;early life&amp;nbsp;so close to the Mississippi river, McKinley later&amp;nbsp;came to be&amp;nbsp;known as Muddy Waters.&amp;nbsp; The father of Chicago blues.&amp;nbsp; The man&amp;nbsp;most responsible for introducing&amp;nbsp;the electric guitar into the genre.&amp;nbsp; At one ponint in history, the terms "Electric blues" and "Chicago blues" were synonymous.&lt;/p&gt; &lt;p&gt;Talking about Muddy Waters, Eric Clapton once said, "His music changed my life, and whether you know it or not, and like it or not, it probably changed yours too."&amp;nbsp; The very roots of Rock-n-Roll itself traces directly back to the music of Muddy Waters.&amp;nbsp; His influence is comparable to, nay even surpasses, that of say Charlier Parker or Dizzy Gillespie on Jazz.&amp;nbsp; So wide is Muddy Waters' influence that&amp;nbsp;a long standing British&amp;nbsp;combo&amp;nbsp;and a well-known monthly magazine, as well as a Bob Dylan tribute, took their names from the title of one of his songs, "Rollin' Stone."&lt;/p&gt; &lt;p&gt;But I'm not going to talk about Muddy Waters' music per se.&amp;nbsp; Rather, Muddy Waters is known for another contribution to American culture.&amp;nbsp; More than anyone else, Muddy Waters is responsible for the word "mojo" having made its way into our lexicon.&lt;/p&gt; &lt;p&gt;I say that with some care.&amp;nbsp;&amp;nbsp;His contribution&amp;nbsp;derived not from his skill as a lyricist, but the strength of his performances.&amp;nbsp; Nonetheless, the&amp;nbsp;lyrics of many songs Waters' made popular&amp;nbsp;were suffused with references to African folk magic.&amp;nbsp; The song "Hoochie Coochie Man,"&amp;nbsp;written&amp;nbsp;by Waters' bassist,&amp;nbsp;Willie Dixon,&amp;nbsp;is typical:&lt;/p&gt; &lt;p&gt;I got&amp;nbsp;the black cat bone, I got a mojo tooth&lt;br&gt;I got the&amp;nbsp;John the Conqueror root, I'm gonna mess with you  &lt;p&gt;Another classic is Preston Foster's, "I've Got My Mojo Working," which&amp;nbsp;opens with the line, "I got my mojo working, but it just don't work on you."&lt;/p&gt; &lt;p&gt;So, back on March 29, 2005, Dave Winer was in some kind of&amp;nbsp;Muddy Waters, &lt;a href="http://www.scriptingnews.com/2005/03/29.html" target="_blank"&gt;mojo&amp;nbsp;mood&lt;/a&gt;&amp;nbsp;mostly involving Yahoo 360.&amp;nbsp; Coincidentally, Betsy Aoki shared her &lt;a href="http://blogs.msdn.com/betsya/archive/2005/03/29/403459.aspx" target="_blank"&gt;Got Dot Net Blues&lt;/a&gt; with us, which prompted me to add &lt;a href="http://blogs.msdn.com/betsya/archive/2005/03/29/403459.aspx#403512" target="_blank"&gt;this comment&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Fastfoward to a couple of weeks ago in a meeting where we'd invited Betsy to share some thoughts on running our &lt;a href="http://blogs.msdn.com/macmojo" target="_blank"&gt;Mac Office Team blog&lt;/a&gt;.&amp;nbsp; We'd had a name for it, but hadn't really settled on that name.&amp;nbsp; During the course of the discussion with Betsy, however, she used the phrase, "Your Mac mojo," in a rather off-handed, throw-away kind of fashion.&amp;nbsp; The blog's name itself wasn't the topic of disussion, but, in one of those unpredictable, synergistic moments, the name stuck.&amp;nbsp; So, we now have our Mac Mojo woikin'.&lt;/p&gt; &lt;p&gt;Did my comment have anything to do with Betsy's use of the phrase "Mac mojo" during our meeting?&amp;nbsp; I haven't a clue.&amp;nbsp; But, hey, I'm allowed a certain amount of&amp;nbsp;room for&amp;nbsp;dellusion over such things.&amp;nbsp; Whatever the case, I hope everyone enjoys the new team blog.&amp;nbsp; There are some pretty interestings posts in the queue.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Rick&lt;/p&gt; &lt;p&gt;Currently playing in iTunes: &lt;em&gt;Hoochie Coochie Man&lt;/em&gt; by Eric Claption&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=728889" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>Virtual PC and Visual Basic</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/08/09/693499.aspx</link><pubDate>Wed, 09 Aug 2006 21:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:693499</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>66</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/693499.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=693499</wfw:commentRss><description>&lt;p&gt;Scene: A fly-over view of Microsoft's campus focuses in on the building that houses Mac BU.  The camera "flight" enters one of the offices through a window.  During the fly-over, a voice-over says:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New 3.0 GHz Mac Pro: $3,599.00&lt;/li&gt;
&lt;li&gt;Two 23" Apple Cinema HD Displays: $1998.00&lt;/li&gt;
&lt;li&gt;Office space: $350.00/mo&lt;/li&gt;
&lt;li&gt;Competent developer...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You get the picture.  For years, one of our program managers has been coming into my office with feature questions that invariably begin with, "Is it possible to...?"  Well, of course it's &lt;emphasis&gt;possible&lt;/emphasis&gt;.  Anything's &lt;emphasis&gt;possible&lt;/emphasis&gt; if you give me enough time.&lt;/p&gt;
&lt;p&gt;So, earlier this week, we announced that we're not going to ship a Universal version of Virtual PC and that we're going to discontinue support for Visual Basic for Applications.  The latter is particularly painful for a number of our customers, and people are quite understandably livid about it.&lt;/p&gt;
&lt;p&gt;While Erik Schwiebert has posted a &lt;a href="http://www.schwieb.com/blog/2006/08/08/saying-goodbye-to-visual-basic/"&gt;sound explanation&lt;/a&gt; of the technical hurdles involved, there remains the more general question of finding the resources capable of doing the work required to overcome those hurdles.  Many people who are not at all familiar with the exigencies of software development look at Microsoft's balance sheet, and the maxim that anything's &lt;emphasis&gt;possible&lt;/emphasis&gt; in this industry, and wonder whether or not we're pulling their legs.  They don't understand that the constraining resource isn't money.  It's people.&lt;/p&gt;
&lt;p&gt;There are two pieces in the people puzzle.  The first is head count, and, for various reasons, Mac BU has always operated with open head count.  "Open head count," means having a budgeted slot to hire someone, but not having an actual employee in that budgeted slot.  Due to the turn-over of people who &lt;a href="http://technosloth.blogspot.com/2006/07/coreclr-at-wwdc.html"&gt;move on to new challenges&lt;/a&gt;, and the difficulty of finding candidates who we believe won't write something worthy of being posted to &lt;a href="http://thedailywtf.com/default.aspx"&gt;The Daily WTF&lt;/a&gt;, despite the steady stream we keep interviewing, I don't see this condition changing in the near future.&lt;/p&gt;
&lt;p&gt;The fact that we've always had open head count points out a subtle aspect of the budgeting issue.  Picture yourself being Roz Ho's boss.  She comes to you asking for an increased budget for more head count.  You look at the existing budget, and see that there are open head count.  Your question is likely to be, "Why are you asking for more head count when you haven't filled the head count you already have?"  The point: the people resource issue isn't a budgeting problem.&lt;/p&gt;
&lt;p&gt;The second part of the people issue is a bit more difficult to understand when you haven't spent a great deal of time trying to ship software in the real world, but there is a point where adding new people to a project results in diminishing returns.  Fred Brooks refers to this as the &lt;a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month"&gt;Mythical Man Month&lt;/a&gt;.  If you ask me whether Mac BU is still on the increasing side of the curve or if we've come close to the diminishing side, I'd honestly have to say that I really don't know.  This is one of those cases where you don't really know you've hit the point of diminishing returns until you get there, and, even then, recognizing that that you have is exceedingly difficult.  There are a number of variables that affect the time it takes to complete a software project, and it's very difficult to account for them all.&lt;/p&gt;
&lt;p&gt;However, Schwieb's estimate of two or more years to rework VB/VBA isn't far off the mark, and it assumes that we put every resource onto that project that we can possibly put on it.  That estimate also takes into account the issue of dependencies.  This part of the Mythical Man Month isn't all that well discussed in the Wikipedia article linked above, but it's one of the more important problems we face.  The number of people you can effectively put on a project is determined by the number of discrete tasks into which the project can be broken down and by the extent to which those discrete tasks depend on the completion of other tasks.&lt;/p&gt;
&lt;p&gt;Consider the VBA execution engine that Schwieb mentioned.  One might be tempted to take each opcode, and turn that into a discrete task to be worked on by an individual developer.  Unfortunately, that kind of approach will lead to less coherence in the overall project.  Are there any common elements to certain subsets of the full set of opcodes?  If there are, and we have one developer per opcode, then there's a high probability we'll have a large number of subtly different implementations of these common elements.  The more discrete tasks into which you break up a project, the greater the logistical difficulty of integrating each of those discrete tasks into a coherent whole.&lt;/p&gt;
&lt;p&gt;Now, I've read a number of suggestions that people have made: take a Ruby on Rails approach, figure out a way to use PowerPC/CFM VBA running under Rosetta, and a few others I can't recall off the top of my head.  There are ideas we'd explored that I haven't seen anyone suggest.  I can't think of any one of them that would not have involved more work than working with the design parameters of the current VBA implementation--not the least of which is the fact that all of the applications implement their object models using the OLE Automation, dual-dispatch/type library approach.  One has to be very careful with such ideas, because there are a number of hidden gotcha's that are very difficult to accurately assess.&lt;/p&gt;
&lt;p&gt;So, could we have done something about VB/VBA?  Certainly, if we'd had enough time.  Do we make those users who really don't care about VB/VBA wait several years before we ship a Universal Binary version of Mac Office?  At some point, the tail starts to wag the dog.&lt;/p&gt;
&lt;p&gt;But that does not mean we are unaware of the pain this will cause to a significant number of users.  If you think we are not aware of that pain, consider this.  &lt;a href="http://davidweiss.blogspot.com/"&gt;David Weiss&lt;/a&gt; can give you a better number on this, but our testing methodology has always made extensive use of scripts for automated tests.  Not just a couple of scripts, but thousands of scripts &lt;emphasis&gt;per Office application&lt;/emphasis&gt;.  At one point, all of those scripts were written in VB/VBA.  In order to carry that testing effort forward into the era of Universal Binaries, every single one of those scripts had to be rewritten in AppleScript.  I don't think it's even a remote exaggeration to say that our use of VB/VBA was at least a couple orders of magnitude greater than even our most automated customers.  Do we know your pain?  You bet we do.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Rick&lt;/p&gt;
&lt;p&gt;Currently playing in iTunes: &lt;i&gt;Feel So Bad&lt;/i&gt; by The Derek Trucks Band&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=693499" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>What's Wrong with this Code: The Answer</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/06/14/630976.aspx</link><pubDate>Wed, 14 Jun 2006 18:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:630976</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/630976.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=630976</wfw:commentRss><description>&lt;P&gt;Bjarne Stroustrup is a brilliant man, which means he's very good at defining programming languages. It also means he's not very good at writing books about the programming languages he's defined. His writing goal is concise precision. Unfortunately, for those of us who have to read what he writes, that quest for concise precision often translates into some of the driest reading in existence.&lt;/P&gt;
&lt;P&gt;Yesterday, I asked &lt;A href="http://blogs.msdn.com/rick_schaut/archive/2006/06/13/629904.aspx"&gt;What's Wrong with this Code&lt;/A&gt;? Unfortunately, the answer to that question involves one of the driest sentences in Stroustrup's book on C++. In fact, it's the very first sentence of section 6.2.2 of &lt;I&gt;The C++ Programming Language&lt;/I&gt;:&lt;/P&gt;
&lt;P&gt;
&lt;BLOCKQUOTE&gt;&lt;I&gt;The order of evaluation of subexpressions within an expression is undefined.&lt;/I&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Even as I write this, I can hear the collective, "Huh?" So, let's take at look at the key line of code in yesterday's example. It's in the function, &lt;CODE&gt;Foo()&lt;/CODE&gt;:&lt;/P&gt;
&lt;P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE&gt;_val += Bar(val);&lt;/CODE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;This is an expression with subexpressions. It's a contractional form of the expression:&lt;/P&gt;
&lt;P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE&gt;_val = _val + Bar(val);&lt;/CODE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;It's rather like the contraction "it's"--a way of saying "it is" using fewer letters and syllables. The subexpressions are the bits on either side of the &lt;CODE&gt;+&lt;/CODE&gt; sign and the &lt;CODE&gt;=&lt;/CODE&gt; sign.&lt;/P&gt;
&lt;P&gt;Now, I'd like to translate that expression back into English for you, but I can't. At least I can't give you a definitive translation. The expression is ambiguous. We can read it as:&lt;/P&gt;
&lt;P&gt;
&lt;BLOCKQUOTE&gt;Evaluate the function, &lt;CODE&gt;Bar(val)&lt;/CODE&gt;, add the result to the value in &lt;CODE&gt;_val&lt;/CODE&gt;, and place the sum back into &lt;CODE&gt;_val&lt;/CODE&gt;.&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Or, we can read it as:&lt;/P&gt;
&lt;P&gt;
&lt;BLOCKQUOTE&gt;Take the value that's in &lt;CODE&gt;_val&lt;/CODE&gt;, add it to the result of the function, &lt;CODE&gt;Bar(val)&lt;/CODE&gt;, and place the sum back into &lt;CODE&gt;_val&lt;/CODE&gt;.&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Thing is, the actual result of the code example I gave will be different depending upon which interpretation we use. That's because &lt;CODE&gt;Bar()&lt;/CODE&gt; changes &lt;CODE&gt;_val&lt;/CODE&gt; (programmers call this a subexpression side-effect). If we choose the first interpretation, then the result of yesterday's program will leave &lt;CODE&gt;_val&lt;/CODE&gt; with a value of &lt;CODE&gt;2&lt;/CODE&gt;. If we take the second interpretation, then the result of that code will leave &lt;CODE&gt;_val&lt;/CODE&gt; with the value of &lt;CODE&gt;43&lt;/CODE&gt;.&lt;/P&gt;
&lt;P&gt;Well, that's fine, Rick, but what does this have to do with what Stroustrup said? Stroustrup is saying that compiler writers are free to choose either of these interpretations that I've given above. In fact, compiler writers are free to choose one interpretation at one line of code, and another interpretation in a different instance of the same line of code. While this sometimes happens, compiler writers tend to choose one interpretation and stick to it.&lt;/P&gt;
&lt;P&gt;And that's where the real problem lies. Remember, this is a contrived example. Given this kind of contrived coding example, most programmers worth half their paychecks can spot the problem a mile away. But, real-world software models real-world problems. And, real-world problems are complex. So, in the real world, someone writes &lt;CODE&gt;Bar()&lt;/CODE&gt; without the line of code that modifies &lt;CODE&gt;_val&lt;/CODE&gt;. Some time later, someone else adds &lt;CODE&gt;Foo()&lt;/CODE&gt; which uses the computation done in &lt;CODE&gt;Bar()&lt;/CODE&gt;. A little time after that, someone changes &lt;CODE&gt;Bar()&lt;/CODE&gt; so that it now modifies &lt;CODE&gt;_val&lt;/CODE&gt;.&lt;/P&gt;
&lt;P&gt;All of these changes get checked into the code base, built into the product, and tested. They might even get tested over and over again. We might even ship several versions of the product, without ever running into any problem that any user will see. And, so long as the compiler we're using takes the "correct" interpretation, there won't be any problem in the code that we actually ship.&lt;/P&gt;
&lt;P&gt;Then someone comes along and forces us to start using a new compiler, like when Apple announced the move to Intel processors. Should the new compiler interpret these expressions differently than the way the old compiler interprets these expressions, then we'll have a few subtle bugs in our code.&lt;/P&gt;
&lt;P&gt;Now, I've read articles where people describe this programming style as "Microsoft's patchwork programming style," or some such similar--as if the word "patchwork" accurately describes incremental development with modular programming and as if Microsoft is the only entity in existence that uses these programming techniques. Actually, everyone does it this way, and any group engaged in trying to write programs to solve complex problems will end up with some code like this in their products. It's inevitable. I'm quite certain that Adobe has encountered a handful of these kinds of issues in their code, and I'll bet that Apple had to deal with a few of them as well.&lt;/P&gt;
&lt;P&gt;Worse yet, in all of the compiler errors and warnings that &lt;A href="http://www.schwieb.com/blog/2006/06/01/whither-xcode/"&gt;Erik Schwiebert mentioned&lt;/A&gt; in the post that prompted me to offer this little programming example, not one of them involved problems of this type. Those of you who have XCode installed on your machines, copy and paste the code from my example into a test file, and compile it using GCC with every warning you can think of turned on. You'll get nary a peep out of GCC.&lt;/P&gt;
&lt;P&gt;We know that many people are anxiously awaiting universal binaries for Office and Adobe's products. Please, be patient. You really do want us to find all of these subtle issues before we ship these products to you, and that takes time--mostly testing time even when you have a lab like &lt;A href="http://davidweiss.blogspot.com/2006/04/tour-of-microsofts-mac-lab.html#links"&gt;this one&lt;/A&gt; where you can run those tests.&lt;/P&gt;
&lt;P&gt;Kudos to Doug for being the first to say where the problem lies, and kudos to Joshua Ochs for being the first to quote the correct section number from Stroustrup. And, Joshua's guess was almost correct. CodeWarrior uses the first interpretation above. GCC uses the second.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Update:&lt;/B&gt; Upon reflection, I thought it worth adding, for some of the more experienced programmers out there, some further details that indicate just how insidious this can be. Imagine some code that began its life as Java. Later, it got ported to C++. The key part of the body of &lt;CODE&gt;Foo()&lt;/CODE&gt; is a tight loop that terminates when &lt;CODE&gt;_val&lt;/CODE&gt; reaches 0, and &lt;CODE&gt;Bar()&lt;/CODE&gt; is really invoked through a pointer to member function in an array of pointers to member functions indexed by &lt;CODE&gt;_val&lt;/CODE&gt;. This is the kind of stuff that keeps me awake at night.&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt;Rick&lt;/P&gt;
&lt;P&gt;Currently playing in iTunes: &lt;I&gt;Everyday (I Have the Blues)&lt;/I&gt; by The Marshall Tucker Band&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=630976" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>What's Wrong with this Code?</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/06/13/629904.aspx</link><pubDate>Tue, 13 Jun 2006 22:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:629904</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>21</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/629904.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=629904</wfw:commentRss><description>&lt;P&gt;A while back, Erik Schwiebert wrote about some of the &lt;A href="http://www.schwieb.com/blog/2006/06/01/whither-xcode/"&gt;travails of moving our build system&lt;/A&gt; from one using CodeWarrior to one using XCode and GCC. Erik mentioned the huge number of errors and warnings we've had to resolve, but, in reading some of the reactions around the web, I'm afraid that some people, particularly people who know nothing about compilers and developing software, seem to have completely mistaken Erik's remarks. &lt;/P&gt;
&lt;P&gt;Someday, I'll understand why people are motivated to render opinions on matters of which they are entirely ignorant, but, for now, I'll have to satisfy myself by offering some remedial education. I'll start by asking, what's wrong with the following code: &lt;/P&gt;
&lt;P&gt;&lt;PRE&gt;&lt;CODE&gt;
&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt; FooBar
{
&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;:
    FooBar(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; val): _val(val) {};
    ~FooBar() {};

    &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Foo(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; val)
        {
        _val += Bar(val);
        };

    &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; Val() { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; _val; };

&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;:
    int Bar(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; val)
        {
        _val = val;
        &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; _val;
        };

    &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; _val;
};

&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; main()
{
    FooBar fb(42);
    fb.Foo(1);

    int val = fb.Val();

    &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; 0;
}&lt;/CODE&gt;
&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Some of my readers will spot the problem immediately. To those who do, I'll remind you that this is a contrived example. A real-world example will have a class that has 10 or more methods, and none of those methods will be as trivial as Foo or Bar.&lt;/P&gt;
&lt;P&gt;&lt;strong&gt;Update:&lt;/strong&gt; Fixed code problems due to .Text's handling of HTML entities.&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt;Rick&lt;/P&gt;
&lt;P&gt;Currently playing in iTunes: &lt;I&gt;One Way Out&lt;/I&gt; by The Allman Brothers&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=629904" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>Mac Office 2004 Resource Kit</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/06/08/623393.aspx</link><pubDate>Fri, 09 Jun 2006 07:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:623393</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/623393.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=623393</wfw:commentRss><description>&lt;p&gt;Looks like we've updated the Mac Office Resource Kit to Version 2.  The Resource Kit is a guide for system administrators and other IT professionals who manage and support Office on a network.  We have other deployment documentation that can be found on the main &lt;a href="http://www.microsoft.com/mac/resources/resources.aspx?pid=resourcekits"&gt;Resource Kit page&lt;/a&gt; on &lt;a href="http://www.microsoft.com/mac"&gt;MacTopia&lt;/a&gt;.  Details on the Resource Kit for Mac Office 2004 can be found &lt;a href="http://www.microsoft.com/mac/resources/resources.aspx?pid=resourcekits&amp;rk=office2004"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;Some key changes between Version 1 and Version 2 are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A major new section that guides the system administrator through the Office 2004 deployment process, taking advantage of standard Apple software such as Workgroup Manager, Apple Remote Desktop, and PackageMaker. Topics include:
&lt;ul&gt;
&lt;li&gt;Creating a custom Office 2004 installation
&lt;li&gt;Procedures for several different methods of Office deployment
&lt;li&gt;Managing preferences on user computers
&lt;/ul&gt;
&lt;li&gt;Topics about using Office 2004 with related Microsoft products, including:
&lt;ul&gt;Expanded information about integrating Office 2004 into an Exchange Server environment
&lt;li&gt;Expanded information about working with Messenger for Mac and Live Communications Server
&lt;li&gt;New information about working with SharePoint, Internet Security and Acceleration (ISA) Server, and Open Database Connectivity (ODBC) and SQL Server&lt;/ul&gt;
&lt;li&gt;Expanded information about configuring Office 2004 programs, Virtual PC for Mac, and Messenger for Mac. 
&lt;li&gt;A new Maintenance section that describes the tasks and issues associated with updating and maintaining Office 2004 after deployment. 
&lt;li&gt;Updated and improved coverage of security issues. 
&lt;li&gt;A list of online resources that provide additional information helpful for deploying, administering, and using Office 2004. 
&lt;/ul&gt;

&lt;p&gt;
We've also started planning the next release of the Resource Kit and other documentation.  This is a good opportunity to provide feedback.  You can take this &lt;a href="https://deploy.ztelligence.com/start/index.jsp?PIN=138CDP45VT9F5"&gt;open ended survey&lt;/a&gt;.  The survey period ends on July 10th.  You can also provide further information by sending e-mail to &lt;a href="mailto:macitfb@microsoft.com"&gt;Mac IT Pro Feedback&lt;/a&gt; (macitfb@microsoft.com).
&lt;/p&gt;

&lt;p&gt;
Lastly, we're looking for a few volunteers to help us improve our understanding of some approaches to Mac Office deployment and operations. If you’re interested, please see details on the &lt;a href="https://deploy.ztelligence.com/start/index.jsp?PIN=138CDP45VT9F5"&gt;survey page&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Rick&lt;/p&gt;
&lt;p&gt;Currently playing in iTunes: &lt;i&gt;Help Me&lt;/i&gt; by Van Morrison&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=623393" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>The History of Mac Office, Part I</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/06/03/616209.aspx</link><pubDate>Sat, 03 Jun 2006 22:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:616209</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/616209.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=616209</wfw:commentRss><description>&lt;p&gt;We've all seen the scene.  A group of people are having a discussion about something, and one older, and allegedly wiser, person has been sitting back just letting the discussion ramble on, until they meet some sort of impasse, at which point everyone turns to this older, and allegedly wiser, person for the answer to some obscure question.  A pregnant pause ensues while this older, and allegedly wiser, person ponders the situation.  The pondering thought is, more often than not, something along the lines of, "How the hell did I get myself into this?"&lt;/p&gt;

&lt;p&gt;Well, in a sort-of, kind-of, almost way, we've enacted this little scene out in the bloggosphere.  Erik Schwiebert wrote about some &lt;a href="http://www.schwieb.com/blog/2006/06/02/a-brief-history-of-mac-office/"&gt;past changes&lt;/a&gt; to the tool sets we've used to build various versions of Office, and closes his post with:&lt;/p&gt;

&lt;p&gt;&lt;blockquote&gt;I don’t know what tools were used on versions of Mac Office prior to Office 98 (Rick Schaut would know about Word 5.1 and Word 6). MPW? Maybe, but that would have been a &lt;b&gt;really&lt;/b&gt; long time ago! [Emphasis &lt;b&gt;not&lt;/b&gt; added.]&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;Thanks, Schwieb!  You've given me another item I can add to my "You know you're getting old when..." list.&lt;/p&gt;

&lt;p&gt;Enough self-flagellation.  Someone with the nom de plume of "odysseus" left this crumb at the end of Schwieb's post:&lt;/p&gt;

&lt;p&gt;&lt;blockquote&gt;You haven’t mentioned anything about the fact that Mac Office versions all the way through Office 2001 were written in a mid-level interpreted language called “pcode.” Was that a consequence of using MSVC4?&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;Earlier versions of Microsoft's applications were &lt;i&gt;compiled to&lt;/i&gt; a mid-level interpreted language.  They weren't written in that language.  They were still written in C with some hand-coded assembly where speed was crucial.&lt;/p&gt;

&lt;p&gt;The term "P-Code" is based on the UCSD P-System, where the "P" stands for "Pseudo".  In many ways, it was a precursor to the Java run-time and the .NET CLR.  Code was compiled to run on a pseudo-machine, and you implemented this pseudo, or virtual, machine on the various systems where you wanted to run your code.  We were supposed to get easy portability that way, but that was back in the time when operating systems basically gave applications a way to talk to the file system and nothing else.  Since then, massive API differences have accrued to each of the various systems such that the CPU is no longer the primary issue when porting code from one system to another.&lt;/p&gt;

&lt;p&gt;At this point, I'm going to have to digress a bit for the non-programmers who are reading this.  The most important tool in a programmer's toolset isn't the compiler.  It's not even the editor, despite the constant religious battles between proponents of the various editors in existence.  Rather, the most important tool in a programmer's tool set is the debugger.  That tool is the one that allows us to monitor the execution of the code we write.  It's how we find where the code is wrong so we can fix it.&lt;/p&gt;

&lt;p&gt;Now, there are different kinds of debuggers, but we can generally break them down into two categories: source-level and low-level.  A low-level debugger only shows you the machine code that your compiler generated.  A source-level debugger shows you the source code you wrote for the code that's currently being run by the computer.&lt;/p&gt;

&lt;p&gt;The rest of the tale isn't quite so much about compilers.  It's about debuggers.  One of those debuggers will be familiar to old Mac hats: MacsBug.  It was a low-level debugger.  The other debuggers are more closely tied to the compilers we used.  So, back to our tale.&lt;/p&gt;

&lt;p&gt;Before we started using MSVC, we were using another internal compiler that ran on DOS (we're talking before Windows here).  Folks who were around before 1990 also remember that it was very difficult to get a PC to talk to a Mac, so we used to have to connect our PCs to our Macs using SCSI cables.  The P-Code debugger, which was a source-level debugger, ran on DOS, and talked to the Mac over the SCSI cable.&lt;/p&gt;

&lt;p&gt;This had some unfortunate consequences.  For example, you couldn't use the P-Code debugger and MacsBug at the same time.  The P-Code debugger used a polling mechanism to determine if the P-Code interpreter was still running on the target Mac.  Imagine a phone conversation.  When you dropped into MacsBug, it was like the P-Code interpreter had lost the signal on the cell phone.  The P-Code debugger would hang on for a short while waiting for the signal to come back, but it wouldn't take very long before the P-Code debugger would hang up the phone.&lt;/p&gt;

&lt;p&gt;If you're starting to see visions of bear skins and stone knives, then your understanding of the situation isn't very far off the mark.  But, it gets worse.  For Mac Word 5.x, we implemented some of the features as plug-in code resources.  These features included all of the proofing tools and the drawing tool in Word 5.x (known then as "Subdraw").  We built these plug-ins using Think C.&lt;/p&gt;

&lt;p&gt;Think C had its own debugger, but that debugger didn't have a clue about P-Code.  So, now we're using two different compilers, and three different debuggers.  And, one of those debuggers is completely useless.  Yuk!  Throw loadable code resources into the mix, and you have an absolute mess.&lt;/p&gt;

&lt;p&gt;One of the features of a debugger is the ability to set a breakpoint.  A breakpoint is a location in the code where the debugger will pause the program kind of like hitting the pause button on a VCR or a DVD player.  Once your program is paused, you can then examine the program's execution in more detail.&lt;/p&gt;

&lt;p&gt;But loadable code resources are a problem.  One of the reasons for using a code resource is the fact that it doesn't always have to be in memory.  On a Mac that has only half a MB of RAM, being able to kick some code out of memory is a very useful feature.  This feature, however, makes debugging a plug-in exceedingly difficult.  You can't set a breakpoint in a code resource until it's loaded into memory.&lt;/p&gt;

&lt;p&gt;So, let's summarize the situation.  We have pieces of code built by two different compilers, neither of which understand the other.  The debugger with Think C is completely useless, because it hasn't a clue about the main program that's running, which means the only way we could debug, say, the grammar checker was using MacsBug.  But, every time we dropped into MacsBug, the P-Code debugger would whig out.&lt;/p&gt;

&lt;p&gt;Those of you who've seen me in person now know that the thinning hair on the top of my head is not entirely due to male pattern baldness.  By comparison, MSVC was heaven.&lt;/p&gt;

&lt;p&gt;One last little tidbit: Back when we were using MSVC, someone had written two little programs, called victory.exe and defeat.exe.  Each of them played two octaves of the C-Major scale through the PC's speaker.  Victory.exe played the notes in ascending order, and defeat.exe played the notes in descending order.  When your builds succeeded, the build system would run victory.exe, and when your builds failed, it would run defeat.exe.  The cool part about that is you didn't have to keep watching your computer to see if the build had finished.&lt;/p&gt;

&lt;p&gt;When we moved from MSVC to CodeWarrior, we lost this ability to play some custom sound.  But, XCode has this feature.  If you have XCode installed, type "defaults read com.apple.XCode | egrep Sound" in your terminal window to see if these are set.  This sent me down a rather amusing path.&lt;/p&gt;

&lt;p&gt;Because we're porting quite a bit of code from Win Office so we can support the new file formats, we have our own Win Office build machine set up in our lab (where we connect to the machine using Remote Desktop Connection).  And, feeling a bit nostalgic, I decided to rummage around in their build system to see if they still had those sounds.  Well, they have a couple of .wav files, but they're not the same sounds.  In particular, the sound for a build failure is about a 15 second montage of Homer Simpson uttering his famous "Doh!" with various inflections.&lt;/p&gt;

&lt;p&gt;I played this, and laughed a bit.  Then it occurred to me that, as I had been setting this Win Office build machine up, the first couple of times I tried to build Win Office, the builds failed.  I hadn't gotten the setup quite right yet.&lt;/p&gt;

&lt;p&gt;I wonder if anyone was in the lab when one of those builds failed...&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Rick&lt;/p&gt;

&lt;p&gt;Currently playing in iTunes: &lt;i&gt;Life Before Insanity&lt;/i&gt; by Gov't Mule&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=616209" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/History/default.aspx">History</category><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>Mac BU's Lab on Your Mac Life</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/05/24/606562.aspx</link><pubDate>Thu, 25 May 2006 02:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:606562</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/606562.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=606562</wfw:commentRss><description>&lt;p&gt;I just checked in on &lt;a href="http://www.yourmaclife.com"&gt;Your Mac Life&lt;/a&gt; to see what was in store for tonight's show, and it turns out that they'll be interviewing &lt;a href="http://davidweiss.blogspot.com/"&gt;David Weiss&lt;/a&gt; about our &lt;a href="http://davidweiss.blogspot.com/2006/04/tour-of-microsofts-mac-lab.html"&gt;MacLab&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I hope David remembers to remind Shawn about how to use page numbers in Word...&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Rick&lt;/p&gt;
&lt;p&gt;Currently playing in iTunes: &lt;i&gt;The Low Spark Of High-Heeled Boys&lt;/i&gt; by Traffic&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=606562" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>Flying Pigs</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/04/06/569934.aspx</link><pubDate>Thu, 06 Apr 2006 18:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:569934</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/569934.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=569934</wfw:commentRss><description>&lt;p&gt;Last July, pigs flew through &lt;a href="http://blogs.msdn.com/rick_schaut/archive/2005/07/02/435014.aspx"&gt;Hyde Park&lt;/a&gt;, and yesterday they flew through &lt;a href="http://www.apple.com/macosx/bootcamp/"&gt;Cupertino&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The only thing I want to know is, of those who've installed Boot Camp, how many of them have dragged their task bar to the top of the screen?&lt;/p&gt;


&lt;p&gt;Rick&lt;/p&gt;
&lt;p&gt;Currently playing in iTunes: &lt;i&gt;Land of Make Believe&lt;/i&gt; by Chuck Mangione&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=569934" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Other/default.aspx">Other</category><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>Of Intel Macs and Red Herrings</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/03/24/560461.aspx</link><pubDate>Sat, 25 Mar 2006 02:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:560461</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>63</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/560461.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=560461</wfw:commentRss><description>&lt;p&gt;Scott Byer at Adobe put up a &lt;a href="http://blogs.adobe.com/scottbyer/2006/03/macintosh_and_t.html"&gt;very nice post&lt;/a&gt; about the switch to intel and some of the growing pains many of us are going through.  While I've added my own comments to Scott's piece, a number of my colleagues in Mac BU have asked me to weigh in on the subject here on my blog.&lt;/p&gt;

&lt;p&gt;First off, it's difficult for me to discuss specific facts.  I'm under NDA with Apple that precludes me from discussing specific issues with the transition, particularly with issues related to the tools.&lt;/p&gt;

&lt;p&gt;Nevertheless, there are some red herrings out there, and I'm going to try to dispel a few of them.&lt;/p&gt;

&lt;p&gt;1) Steve said it was just a recompile!  What gives?&lt;/p&gt;

&lt;p&gt;I've discussed this one before, but it bears repeating.  When Steve Jobs did his demo at the last WWDC, he was talking to an audience of developers.  He knew, as did every other developer in that room, that getting the code to recompile was only the first step in a long process of testing and verification.  No two compilers generate code in exactly the same way, and no software developer worth the name goes through a compiler switch without extensive testing.&lt;/p&gt;

&lt;p&gt;A few reports who've never written a line of code in their lives and who didn't actually take the time to go out and interview a variety of developers to get a different angle on the story propagated the notion that developers would be able to quickly move to Intel, but that's not what Steve was saying.  Steve was only saying that the tools wouldn't be a major obstacle--or at least that Apple was prepared to get the tools to the point where they wouldn't be an obstacle.&lt;/p&gt;

&lt;p&gt;2) Apple's been advising developers to move to XCode for years.  All you had to do was follow Apple's advice.&lt;/p&gt;

&lt;p&gt;At that time of Steve's speech at WWDC, most of the major applications weren't built using XCode.  That's true for both Adobe and Microsoft.  That fact alone complicates matters entirely.  When this fact has been pointed out, this variation on the "Steve said it was just a recompile" meme has emerged.  According to this meme, all we really needed to to was follow Apple's advice, and, well, we're the bad guys for not having done so.&lt;/p&gt;

&lt;p&gt;While Apple did advise developers to move to XCode, Apple was rather tight-lipped as to the fundamental reason why.  In the mean time, developers had to consider that advice along with the fact that Metrowerks' toolset was both significantly faster than the XCode/GCC combination and generated better code than XCode/GCC.  No sane developer would sacrifice both a significant level of productivity and the quality of their product merely because Apple said so.&lt;/p&gt;

&lt;p&gt;But all of that's very much beside the point.  Whether we had gone through the pain of porting to XCode/GCC in some earlier release of our products, we'd have still had to go through this pain.  The time spent doing this work then would have to have come from the features that we were, instead, adding to our programs.  Arguing that we should have, somehow, absorbed this pain earlier really has little bearing on the nature and extent of the pain.  We'd still have to do the work, and customers would have suffered as much then as they are now.  The only difference is that, now, we have a tangibly legitimate reason for the suffering.&lt;/p&gt;

&lt;p&gt;3) If you'd just ported from Carbon to Cocoa, your problems would have been solved.&lt;/p&gt;

&lt;p&gt;I love this one.  It so clearly demonstrates an astounding level of ignorance.  I've already posted on the "&lt;a HREF="/rick_schaut/archive/2004/02/10/70789.aspx"&gt;Carbon vs Cocoa&lt;/a&gt;" issue, so I won't really belabor the point here.  I'm just amazed to see people arguing that porting not only from one compiler to another but from one application framework to another would, somehow, magically be less expensive than simply porting from one compiler to the other.&lt;/p&gt;

&lt;p&gt;4) Some apps have done it, why can't you?&lt;/p&gt;

&lt;p&gt;In some ways, this is a legitimate criticism, but it glosses over significant differences between, say, PowerPoint or Photoshop and BBEdit.  In this regard, there are two points worth considering.&lt;/p&gt;

&lt;p&gt;The first is that the amount of work required to port a code base does not grow linearly in proportion to the size of the code base.  There are a number of reasons for this, all of them related to complexity.  For example, a more complex C++ program is far more likely to make use of certain language constructs (e.g. RTTI, templates and multiple inheritance) than would a less complex program.  With more complex projects, the amount of work grows more on an exponential scale: i.e. twice the size of the code would require nearly ten times the amount of work to port.&lt;/p&gt;

&lt;p&gt;The other is specifically related to GCC.  GCC uses STABS to describe symbolic information so that the debugger can translate the code it's observing into symbols so that the programmer doesn't have to do this by hand.  For those who care to take the time, RedHat has &lt;a href="http://sources.redhat.com/gdb/download/onlinedocs/stabs.html"&gt;decent documentation on the STABS format&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The problem with STABS is that it's very verbose compared to other formats (particularly the xSYM format that Codewarrior uses).  It's fairly easy to verify this.  If you have XCode installed on your computer, create a simple "Hello World" Carbon project.  Rename the main.c file to main.cpp (C++ generates mangled names due to overloading), and add a couple of simple classes to your app.  Now, build both the debug configuration and the retail configuration.  To be even safer, run strip on your retail build.  Now, compare the difference in sizes between the two build.&lt;/p&gt;

&lt;p&gt;I can't say which application, but I have it on good authority that a modern C++ application has actually hit the virtual memory wall (i.e. the combined code + generated symbols resulted in executable code larger than would fit in virtual memory).  And, no, it's not an application that I've ever worked on or contributed to in any way.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Before I close this, I want to make two points very clear.  First, I agree wholeheartedly with Scott's primary thesis: I can't imagine any developer who would prefer a long, drawn-out process of porting code from one build system to another to writing features that solve people's problems.  We are already doing as much as we can possibly do.  Indeed, one of the reasons I haven't posted very much as of late is because there really is a great deal of tedious work to do.&lt;/p&gt;

&lt;p&gt;Secondly, I want to commend the tools group at Apple for the yeoman's job they've been doing to help us make the transition.  I'm reluctant to name names, but I honestly wish I could.  I've met with these people, and they really are an outstanding crew.  Thanks, everybody.  You know who you are.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Rick&lt;/p&gt;

&lt;p&gt;Currently playing in iTunes: &lt;i&gt;Dixie Chicken&lt;/i&gt; by Little Feat&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=560461" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item><item><title>A Ghost from Mac World Past</title><link>http://blogs.msdn.com/rick_schaut/archive/2006/01/18/514734.aspx</link><pubDate>Thu, 19 Jan 2006 10:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:514734</guid><dc:creator>Rick Schaut</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/rick_schaut/comments/514734.aspx</comments><wfw:commentRss>http://blogs.msdn.com/rick_schaut/commentrss.aspx?PostID=514734</wfw:commentRss><description>&lt;p&gt;As many people at Mac World pointed out to me, I've been rather silent lately.  There's a reason for that.  Of the stuff that's on my mind lately, there just isn't a whole heck of a lot I can discuss publicly.  Even telling you some of what I did at Mac World this year strays too closely to the realm of forbidden discourse.&lt;/p&gt;
&lt;p&gt;So, I'll just relate a story from Mac World past. Right after we shipped Office 98, Ben Waldman decided to take us out to dinner at &lt;a href="http://cityguide.aol.com/sanfrancisco/entertainment/venue.adp?sbid=100946792"&gt;Fleur de Lys&lt;/a&gt; during that year's Mac World. Neat idea, except that I didn't get the e-mail telling us that this place is jacket-and-tie only until I was sitting in my hotel room at the ANA (now the Argent). Great!  Now, what do I do?&lt;/p&gt;
&lt;p&gt;Well, the dinner was Tuesday night, and I was scheduled to do booth duty Tuesday afternoon.  Nordy's is just around the corner, and I was pretty certain I'd be able to get any alterations done by that evening, so I ducked in.  Being pressed for time, I didn't pay close attention to prices.  I was rather more concerned with whether or not the clothes actually fit.&lt;/p&gt;
&lt;p&gt;There was a rack of items on sale, so I figured I'd be OK so long as I chose items from the rack.  Everything there was, indeed, on sale, including the rather nice Harris tweed jacked I'd picked out, which turned out to be &lt;em&gt;sale&lt;/em&gt; priced at $500.00 &lt;em&gt;off&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Of course, I hadn't noticed that this jacket was &lt;em&gt;sale&lt;/em&gt; priced at $500.00 &lt;em&gt;off&lt;/em&gt; until we'd finished all the measurements, chalked all the lines and I was standing at the cash register with credit card in hand.  At that point, it was either scratch the whole idea of dinner at Fleur du Lys or buy the jacket.  So, I bought the jacket.  It's still the most expensive item of clothing in my wardrobe.&lt;/p&gt;
&lt;p&gt;There's always some kind of dinner thing at Mac World.  This year, we had dinner, with some MVP's and members of the customer council, at &lt;a href="http://cityguide.aol.com/sanfrancisco/entertainment/venue.adp?sbid=100946792"&gt;Frisson&lt;/a&gt;, where the food was just as good as the food we'd had at Fleur du Lys, and it didn't cost me a tie and a jacket.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Rick&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I neglected to mention running into &lt;a href="http://www.nisus.com/blogs/index.php?cat=10"&gt;Dave&lt;/a&gt; at the Nisus booth.  There was customer there who was asking about Nisus.  He said he'd bought Word, even though he didn't want to, because Word had the features he needed.  The customer then turned, looked at me, and saw the Word icon on my shirt, at which point Dave burst out laughing.  I patted Dave on the back, asked him if he was OK, and offered to get him some water.  Check out Dave's blog.  He has some good comments on stuff found on the Mac World floor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Life&lt;/strong&gt; from the album "Songs In A Minor" by &lt;a href="http://www.google.com/search?q=%22Alicia%20Keys%22"&gt;Alicia Keys&lt;/a&gt;&lt;/p&gt;

&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=514734" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/History/default.aspx">History</category><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Personal/default.aspx">Personal</category><category domain="http://blogs.msdn.com/rick_schaut/archive/tags/Mac+BU/default.aspx">Mac BU</category></item></channel></rss>