Monday, August 21
At the non-non-disclosed WWDC keynote this year, Steve Jobs said Boot Camp will ship as part of Leopard, and it'll be friendlier. Apple has also publicly said in the past that it won't be selling Window pre-bundled on its machines. So, how
can they make Boot Camp friendlier, if they won't just, say, do all the work for you, ahead of time?
The friendliest way I can think of is, while you're running Boot Camp and still inside Mac OS X, it should ask you to pop in your Windows CD and Boot Camp installs Windows for you. Then, you reboot, and voila: Windows. (Which is kind of like saying: "Voila: Shit sandwich!")
Is this possible? Well, yes, I think so.
Right now Boot Camp allows you to sort-of repartition your boot drive while you are using it
without losing any data, which is really cool and is something us PowerPC types have wanted for years (and still want, hint hint, Bertrand). I say "sort-of" because the partition it creates isn't formatted and isn't formattable by Disk Utility, either (you can select the partition but all the buttons are grayed out). I reckon this is because of EFI mumble mumble blah blah I honestly have no idea.
But here's what I think:I think it's possible to just go ahead and format that partition as a real Windows (FAT) volume from within Mac OS X. I'm pretty darn sure of this because, well, you can format floppies or CDs or external USB or Firewire drives in Window format(s). FAT's a pretty known science by now.
So, imagine Boot Camp formats that new partition in a nice, Windows-friendly way, then unpacks the relevant files from your Windows CD onto this new partition, and then copies its special drivers into their known locations, all from the comfort of Mac OS X. Voila! Bootable Windows! With no stupid hassles!
Now, this actually may be a bit more complicated for Apple than I make it out to be, because it
may be that the unpacking of all that Windows crud is actually pretty involved. Apple could cheat a little since they know the exact configuration of the machine that WIndows is going on, but, it still might be hard. Honestly, I know little to dick-all about how Windows installation works. I'm happy in this ignorance, the way some people are happy believing that global warming is a giant hoax put on by greedy environmentalists who stand to profit by... uh... wait, environmentalists don't really make a lot of money, do they? I mean, not compared to, say, oil companies... but I digress...
Anyhow, even if actually
installing windows is too complicated, there's a slightly-less-cool solution -- Boot Camp could just copy the Windows install CD verbatim onto a subdirectory in the new partition it makes (into, say, c:\windows install\), and then do the same with the custom drivers, and then reboot that partition and have it install onto itself. This is an old trick we used to do all the time on Windows machines when I was a wee lad, because Windows always used to keep its extra drivers only on the CD, so every time you'd plug in a new mouse Windows would ask you to dig up the Windows CD so it could find a driver (even if it already had one installed), but if you'd installed from a copy of the CD you'd made that was still on your disk, it'd look there first, so you wouldn't have to keep those damn disks around all the time.
One problem with all this is that Mac OS 10.4 can't write to NTFS volumes, only to FAT volumes, and NTFS is the wave of the future for Windows filesystems (and needed for volumes over 32GB). But, Apple should add full NTFS support to Leopard anyways, because interoperability is just a damn good thing to have. Well all need that crap. I need to be able to download my game patches and shit under Mac OS X and then just drag them onto my Windows partition -- don't make me use IE to download Firefox or something, and then have to download some wack-ass decompression programs for Windows (7z?) and then virus protection because I touched the internet and then basically I'm in a living hell just because I want to play me some Elder Scrolls: Oblivion
this year instead of two years from now and twice as slowly.
No, I say. Make it easy for me to make tiny, stupid little Windows installs on my MacBook, so I can burn them off-handedly, like matches, and as each one's tiny, stupid little immune system flutters and finally flickers out under such heavy viral loads, I'll simply wipe them clean and burn them again, with a single click in my future perfect Boot Camp.
And I will laugh. Because we have totally pwned Windows.
Labels: interface design, mac community, random ideas
Thursday, August 10
I'll be talking about Delicious Library's use of voice input and output in the Worldwide Developer's Conference at session 155,
Let's Talk: Building Speech Technology into your UI, on Friday at 9AM. (That's in San Francisco, and if you don't have a ticket already you are boned.)
I know, 9AM... I won't be awake either, but I'm getting on stage, so you can at least show up and sleep in the audience. I'm kind of worried that, since it's the last day, there's going to be like three guys there. Seriously, the last day sucks.
My part will be brief, because, honestly, it was about three lines of code to integrate the speech stuff, which I think is the point. But if you want to say hi, that's where I'm at, dogg.
--
Here's the code I didn't have a chance to go over at the conference -- there really aren't any surprises here, but the point is that this is the actual, production code in a shipping app (
Delicious Library v1.6):
|
- (void)speakTitle; { [self _vickiSay:title]; if (IsEmpty(title)) return;
if ([title rangeOfString:@"Harry Potter"].location != NSNotFound) [self performSelector:@selector(_whisper:) withObject:@"Voldemort" afterDelay:7.0]; else if ([title rangeOfString:@"Star Wars"].location != NSNotFound) [self performSelector:@selector(_whisper:) withObject: @"I AM YOUR FATHER!" afterDelay:7.0]; }
[...]
// Private speech
- (void)_whisper:(NSString *)speakString; { [self _say:(NSString *)speakString withVoice:@"Whisper"]; } - (void)_fredSay:(NSString *)speakString; { [self _say:(NSString *)speakString withVoice:@"Fred"]; } - (void)_vickiSay:(NSString *)speakString; { [self _say:(NSString *)speakString withVoice:@"Vicki"]; } - (void)_say:(NSString *)speakString withVoice:(NSString *)voice; { if (!speechSynthesizer) speechSynthesizer = [[NSSpeechSynthesizer alloc] initWithVoice:nil]; else if ([speechSynthesizer isSpeaking]) return; if (speakString == nil || [speakString length] == 0 || [[NSUserDefaults standardUserDefaults] boolForKey:LILibraryDoNotSpeakPreferenceName]) return; [speechSynthesizer setVoice:[@"com.apple.speech.synthesis.voice." stringByAppendingString:voice]]; [speechSynthesizer startSpeakingString:speakString]; }
|
|
- (void)_coalesceLibraryChanges:(NSNotification *)notification; { [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(_setupSpeechRecognition) object:nil]; [self performSelector:@selector(_setupSpeechRecognition) withObject:nil afterDelay:6.0]; }
[...]
// Private speech
- (void)_setupSpeechRecognition; { if ([[NSUserDefaults standardUserDefaults] boolForKey:LISpeechRecognitionOffPreferenceName]) { [speechRecognizer stopListening]; [speechRecognizer release]; speechRecognizer = nil; return; } if (!speechRecognizer) { speechRecognizer = [[NSSpeechRecognizer alloc] init]; [speechRecognizer setDisplayedCommandsTitle:nil]; [speechRecognizer setListensInForegroundOnly:YES]; [speechRecognizer setDelegate:self]; [speechRecognizer startListening]; }
NSMutableArray *commands = [NSMutableArray array]; NSArray *items = [library items]; unsigned int itemIndex, itemCount = [items count]; for (itemIndex = 0; itemIndex < itemCount; itemIndex++) { LIMedia *item = [items objectAtIndex:itemIndex]; NSString *title = [item valueForKey:LIMediaTitleAttributeKey]; if (title != nil) [commands addObject:title]; } [speechRecognizer setCommands:commands]; }
[...]
// NSObject (NSSpeechRecognizerDelegate)
- (void)speechRecognizer:(NSSpeechRecognizer *)sender didRecognizeCommand:(id)command; { NSMutableArray *matchingItems = [NSMutableArray array]; NSArray *items = [library items]; unsigned int itemIndex, itemCount = [items count]; for (itemIndex = 0; itemIndex < itemCount; itemIndex++) { LIMedia *item = [items objectAtIndex:itemIndex]; NSString *title = [item valueForKey:LIMediaTitleAttributeKey]; if (title != nil && [title isEqualToString:command]) [matchingItems addObject:item]; } [self showItems:matchingItems]; }
|
Thanks to Dr. Kim for letting me get up on stage (I'm an attention whore -- surprise!) and for giving me
extra minutes to talk when I went super-long.
Labels: mac community
Tuesday, August 8
Ok, so a few weeks ago we saw three or four bloggers very loudly announce that they're switching from Mac OS X to Linux, for a couple reasons. This became this meme, and I saw a bunch of articles on different sites with the question, "Is this Sudden Migration Something Apple should Worry About?"
--
I really, really hate this kind of sensationalism. First off, asking a question as your headline is the weaseliest trick in the book. The local news has perfected this technique: "IS THE PAINT ON YOUR WALLS KILLING YOU? Find out at 11!" Now, they didn't come out and
say that paint is bad. They didn't even say they had any actual evidence that it might be. They just asked a question in such a way that you now have a little fear planted in your heart, and are compelled to find out more.
Causing an (incorrect) emotional reaction without outright lying is the favorite tool of our current administration, and I urge the blogosphere to avoid adopting these techiniques.
--
And anyway, it turns out, the answer to the question was "no." The people involved were basically not Apple customers. That's fine. I have no enmity towards them, and you won't see me insulting them. They can switch to a TI 99-4a if it makes them happy.
In this case, these are guys who were basically Linux users who accidentally bought an Apple. One listed the software he used on a daily basis
before he'd switched to Ubuntu, and he pretty much replaced all Apple software with open-source equivalents. So, in effect, he's just changed which underlying version of Unix he's using. Pardon me while I yawn.
If you value things like "is this software open-source" and "is this software from a good-hearted company" over "is this software really elegant?" then you aren't Apple's target customer. That's fine. You don't have to be. But it's also not news.
It's like saying, "Should McDonald's worry because vegetarians are boycotting the restaurant?"
--
This week, I see a ton of articles saying WWDC 2006 is a disappointment, and even speculating that maybe Steve Jobs is sick.
I simply don't have words for this. Leopard is still three quarters away. There's a LOT of work to do, yet. At the keynote, everybody got a sneak-peak at some of the features Apple is working on. If they were finished, they would, you know, ship it.
WWDC is a
developer conference. Aimed at developers. Who develop software. Those of us who
are developers are freaking amazed at all the great stuff that's in Leopard. Guess what, we can't talk about it. So, you're going to see a lot of opinions from people who
aren't here and have only an uninformed opinion.
On the other hand, if it was just the announced products that disappointed you, well, I'm not sure what you expected. Apple is a computer company, and they unveiled a machine that runs blazingly fast and is $1,000 less than a similarly equipped Dell. This doesn't make people happy? Seriously? What's it take? I mean, you can equip this baby with a quad-SLI video card, install Boot Camp, and play Doom at 80 billion fps for way cheaper than you could on Sunday. Doom! Doom!
Yes, Steve didn't announce any new consumer products. Here at the
developer conference. Wow. What a shocker. I really expected Slash and/or Edge to come out and sing us a song and announce a new iPod bundle, or at least give me a close shave. (Seriously, "Edge?")
--
The advantages of the blogosphere, like the democratization of reporting, can easily be overwhelmed by the disadvantages, like the rapid reproduction of memes which are based on faulty original data. I don't know how to solve this, except to call it out when I see it.
Labels: mac community