The loser now will be later to win

(or: “Why I fell out of love with Apple”)
You could chalk it up to a preference for the underdog — and you’d probably be right — but even that considered, you’d have to admit, Apple is not the company it once was. And if you’re an Apple fan/user/cult-member now, it’s not likely for the same reasons that us faithful few were 10 years ago.
The original Macintosh was a dream — or rather it was the combination of dreams seized by one charismatic, but arrogantly demanding young leader, then shaped into something he saw as perfect (even in the spots it wasn’t.) It was a rag tag group of creative engineers and code poets, flying a pirate flag, working insane hours, and pouring parts of their soul into a little computer that changed everything… even while it was scorned by the industry it would re-create.
Steve Jobs was that imperfect perfectionist, and the team he assembled were some of the brightest ever to put a product together. Their names were engraved inside the case of every Mac that shipped in its first few iterations — something only the privileged would see, because Mac’s weren’t designed to be opened by their users. (Why would you need to open it? It was already perfect. Never mind that the first version barely had enough RAM to boot!)
Although it never got the respect it deserved, and although the CEO Steve brought into to run the company that grew so fast he couldn’t control it had him ousted fairly quickly, throughout the 80s and 90s, the Mac remained different. And different is good. It stood as a challenge to beige, boring and impersonal. It made technology beautiful, and delightful to use. Even in their darkest years in the mid-90s, when vision drift, product confusion, leadership paralysis and technology stagnation all added up to some less-than-stellar computers baring the Macintosh name and the aging Mac OS, a Macintosh computer still had an intrinsic value — magic, even — that no other piece of technology, save maybe for the Walkman upon its introduction, could evoke.
When Steve slowly but triumphantly took back the reigns of Apple Computer, following the acquisition of his follow-up act, the revolutionary but under-appreciated NeXT Computer company, and its impressive technology portfolio, we Apple faithful sat on the edge of our seats waiting to see what would happen. His next moves: enabling the talented in-house designer Jonathan Ive to build the first iMac, the re-purposing of the entirely object-oriented OpenStep OS from NeXT as the long-awaited re-creation of the Mac OS, shocking the world (and eventually the music and media industries) with an MP3 player and music store that people actually loved to use, and finally changing I.T. irrevocably with the iPhone, made us all cheer as the company we loved finally took its rightful place as an admired and chased-after leader in technology.
But for me, that’s when it all went downhill. I can only imagine Apple is now what Steve always dreamt it would be. Certainly his exacting and demanding pursuit of perfection, from chassis design to software stack, although infamously making him simultaneously terrifying and inspiring to work for, has lent itself to the creation of some truly beautiful and usable products. But success has put them in the position he so sharply criticized throughout his younger, more idealistic years as a passionate, egotistical, but often-right visionary. Now Apple is “Big Brother” dictating what users can and cannot do with their gadgets they’ve purchased. The friendly Mac face is gone, replaced by the App Store, where Apple takes a 30% cut of every piece of software (and content) that runs on their gear — a brash, monopolistic and cloyingly controlling move that even Bill Gates at the height of his career wouldn’t have dreamt of trying to foist upon an industry.
Steve’s top-to-bottom approach that created that imperfect but perfectly lovable Mac, with all its eccentricities that could be tolerated only because so few of us used them that all of us could share the work-arounds and unofficial upgrades that voided our warranties but kept our Macs ticking long after we were supposed to have purchased a new one, has now created generation after generation of disposable gadgets that are really only supposed to be useful until the next shiny Cupertino-produced iToy comes out to make last year’s purchase seem foolish and out-of-date. Love may still go into their design and manufacture, but its a fickle love who’s expiry date is looming almost as soon as the product ships.
I confess, I work for the other side now, and maybe this new perspective has tainted my outlook. There was a time, though, that I wouldn’t have dreamt of working for the other side. Apple was something to believe in and cheer for, and everyone else was the lumbering, uncreative, bureaucratic evil empire of technology, trying to lock individuals into corporate I.T. guidelines and scheduled maintenance plans. Now Windows is actually a pretty “insanely great” product, and Bill Gates is working to cure malaria and finally rid the world of polio, while the underpowered iPad continues its short march to planned obsolescence in the face of next year’s model (which will have the built-in webcam that they pulled at the last minute from the first generation device to give them something to sell the drooling, mesmerized iPublic in 12 months.)
Don’t get me wrong: I’m still proud to have been a faithful Mac user for the nearly 20 years I spent nursing those eccentric but intrinsically wonderful old Macs along, while cheering for each success my favorite computer company claimed in the face of overwhelming odds. I still love seeing Steve’s first keynote (and many of the following ones!) as iCEO, and those “Think Different” ads still tug at my creative side. But its been a long time since Apple was that company, and although they’ve found the success we always hoped for them, I think they’ve lost their soul in doing so.
For those of you who are “new to Mac” and think you’ve bought into something special, I won’t begrudge you the feeling you get when you open that beautifully designed box — just know that what you’re experiencing is a fraction of what it might have been, had you had the guts to buy an Apple product before they were the latest fad.
For those of you who have been loyal all this time: here’s to the Crazy Ones! I was going link to the “Think Different” page on Apple’s website, but all it says now is “Page Not Found…”

Installing Rhapsody DR2 on VMWare

Between the acquisition of NeXT by Apple in the late 90s, and the release of OS X, Apple tried and abandoned a path to merge the two company’s technologies into a new, modern OS. Ultimately, a similar but different path was chosen, where much of the proprietary technology that made OpenStep expensive (specifically Adobe-licensed PostScript) were re-created, and better compatibility (introducing Carbon into the Classic OS to give developers an easier migration path than the hard and fast change to Yellowbox) with existing Mac applications was provided for.
Nonetheless, what amounts to an experiment: Rhapsody, essentially the NeXTStep/OpenStep OS with Mac interface elements bolted onto it (sometimes), was incredibly interesting. Yellowbox was to represent the new app platform (with built-in multi-architecture support) while the Bluebox, for compatibility with Classic Mac apps was to be added before release.
Shortly I will outline instructions here for getting Rhapsody DR2 (x86) up and running in VMWare. OK, it turns out this process is exactly the same as for installing NextStep. In case it wasn’t obvious, these two OSes are very closely related.

AppleTV for Mac

This remains the most popular thing I’ve ever posted — despite the fact that its really nothing special. The meat of it is a little start-up script that contains no undiscoverable tricks. I don’t even use it any more!
Nonetheless, it’s in-demand, and I can’t find a hosting method that can keep up. So, here’s my solution:

  • The start-up movie is no longer available here — it probably shouldn’t have been posted here to begin with. If you find someone with a Patchsticked AppleTV, it’s trivial to SCP in and grab the start-up movie (discussed here.)
    You can also use any other movie you want, which you specify when you edit the script.
     
  • The screen saver never worked right on a normal Mac, but Scott Q has engineered a replacement. His link appears to be down, but get in touch with him and send him your thanks.
     
  • The script itself is still available here.
    Copy and Paste the script into the AppleScript editor, updating it to provide the path to where ever you want your start-up video, and save it as a run-only script. Add it as a Login item in your account, and you’re set.
     
  • The background image I made is awful (it was just a screen shot) and I’m sure someone’s made better, but I’ll keep that here if you want it. If you do this right, you should only see the wallpaper for a few seconds anyway, so if you make yourself an all black image, or find a nice Apple logo, you’ll be all set.

And honestly, that’s all that was released. Like I said, nothing magical. My Mac Mini worked fine as a Home Theater PC, but eventually I just went with an actual hacked AppleTV (which smoothly handles anything but MKV) because I wanted my Mac for other things. If you find any other great ideas, feel free to share them here!

Print to PDF in Windows 7

doPDF is simple, lightweight, installs in seconds and 100% compatible with Windows 7. It may not be feature-heavy, but it meets the need, and I like it.
If converting a document to PDF for archival or sharing is something you need to do, check out doPDF 7.0.

Assorted, Scattered Objective-C Notes as compared to C#

A outlet is like a pre-known property that can be bound
(ie: drag destination object to origin object and assign to the outlet (property) nextKeyView)
myObject.methodToCall(parameters)
is like
[myObject methodToCall:parameters];
int i = myObject.assignValue;
is like
int i = [myObject assignValue];
form.Window(makeKeyAndOrderFront(target));
is like
[[form window].makeKeyAndOrderFront:target];
object myObject();
is like
id myObject;
string myString;
is like
NSString *mystring;
Defining an instance method:
private string myMethod();
is like
– (NSString *)myMethod;
Defining a class method:
public DateTime myMethod();
is like
+ (NSDate *)myMethod;
private float convertAmountbyRate(float amt, float rate)
is like
– (float)convertAmount:(float)amt byRate:(float)rate;
convert.convertAmountbyRate(1.0, 2.3);
is like
[convert convertAmount:1.0 byRate 2.3];
public interface myInterface : myClass {…}
is like
@interface myInterface : NSObject {…} @end

Assorted, Scattered JavaScript Notes

Boolean(value) method returns false for falsey values, true for truthy values
falsy: false, null, undefined, “”, 0, NaN
truthy: everything else: “0”, “false”

+ as a leading operator converts a string to a number: +”42″ = 42. Same as Number(“42”) = 42), parseInt(“42”, 10) = 42
+”3″ + (+”4″) = 7

=== !== do not do type coercion, slightly faster

if (a) {
return a.member;
} else {
return a;
}
can be written as
return a && a.member;
if the first operand is truthy, return the second operand, else, return the first

but for || if the first operand is truthy, return the first operand, else, return the second:
var last = input || somethingElse;
so if input is truthy, then last is input, otherwise set last to somethingElse

you can label loops and break them by label:
myloop: for (whatever)
{
break myloop;
}

//other loop
for (var name in object) {
if (object.hasOwnProperty(name))        //avoids looking at objects we might have inherited from
{
name //is the current member
object[name] //is the current member value
}
}

//multiple conditions in switch statements
switch(something) {
case “;”;
case “,”;
case “.”;
isPunctuation();
break;
default:
somethingElse();
}

//exceptions and object literals
throw new Error(myReason);

throw {         //create an “object literal” creates an exception object on the fly
name: myexceptionName,
message: reason
};

//object literals
an object literal is wrapped in { }
a name can be a names or a value
values are any type
: seperates names and values
, seperates pairs
object literals can be used anywhere a value can appear
var myObject = {name: “Jack”, ‘goto’: ‘Jail’, grade: ‘A’, level: 3};
var myName = myObject.name;     //extracts “Jack”
var destination = myObject[‘goto’];     //extracts “Jail”
var destination = myObject[“name”];     //extracts “Jack”
var destination = myObject[goto];       //returns an error because goto is a reserved word, hence the other notation

//maker function
function maker (name, grade)
{
var it = {}; //makes a new empty object, good shorthand
it.name = name;
it.grade = grade;
return it;
}
var myObject = maker(“Jack”, “A”);

//an object with an object as a member, shorthanded
var myObject = {
name: “jack”,
grade: “a”,
clothes: {
pants: ‘blue’,
shirt: ‘red’
}
};

//if you have more than a couple parameters in a function, why not make them an object?
function myfunc(pa, pb, pc, pd, pe, pf)
myfunc(pa, pb, pc, pd, pe, pf)
vs.
function myfunc(specs)
myfunc({ pa: ‘1’, pc: ‘3’, pb:’2′, … })

** note: variables that are not var’ed become implicitly global

//specify object’s prototype on creation? linkage — doesn’t really exist
var newObject = object(otherObject);
//gives it a secret pointer to otherObject, but the secret pointer is used for retrieving only NOT storing
//object (lowercase) is a method that Yahoo made up
//different than

var newObject = Object() which equals: var newObject = object(Object.prototype)

delete myObject[memberName];    //deletes (sets to undefined) a member of an object

myArray[myArray.length] = 3     //appends to end of array (same as pop)

var myArray[]   //creates a new array?

Resolving missing dependencies when building a NeXTStep/OpenStep App

If you’ve played around with NextStep/OpenStep trying to build a sample app — say, so you can find out how much OS X/the iPhone is like those sweet black machines of yesteryear — you might have an error like this one, when attempting to build a sample app you’ve created: AppKit.h not found (or any one of the other billion header files that are missing)
This may mean an incomplete installation of the Developer tools. Here’s what to do:

  • From the Developer CD, open the NextCD folder and then Packages.
  • From the Services menu, use Open Sesame to open the Package as Root
  • Install the Package to its default file locations.

NextStep: Open as Root
Now, in your project in PB, you may need to tell the compiler where to find those libraries.

  • From the Tools menu, open the Inspector and look at the Build Attributes.
  • Under Framework Search Order, Set… a new path to where those files just got installed: /NextLibrary/Frameworks
  • Do the same for Header Search Order, but use /NextDeveloper/Headers

Project Builder: Framework Search
Now you should be able to Build in Project Builder! Note that PB doesn’t have a “Build and Go” that I can find, so once you build, you need to use Workspace Manager to find your newly made .app and double click it to test it out.

Automating an Apple TV with Cron

Copy and enable Cron from 10.4.
Schedule Cron jobs using crontab at the command line. Use Ctrl+D to exit crontab once all your jobs are created.
Examples:
Restart the AppleTV at 8:10am every morning (say, to re-establish network connections with computers that were off during the night):
10 8 * * * sudo /sbin/reboot
Shutdown the AppleTV at 1:00am every morning:
0 1 * * * sudo /sbin/shutdown -h now
You’ll need to enable the frontrow account to use sudo without a password.

Hacking Time Machine


This past week I was the unfortunate victim of hard drive failure on my 1stgen Macbook Pro. After looking through my local NAS and finding that my most recent backup was done in April, I kicked myself a little bit. I have everything available to me to do regular backups, but like most people I am just too lazy. I decided that I wanted to try and get Time Machine to perform backups to a network share instead of a local drive. A simple terminal command was all that was needed to make my network volumes show up in Time Machine.
defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
Just changing this preference has worked for many other people, but I get the a message from Time Machine stating “The backup disk image could not be created.” Nothing on google or the apple support forums seems to give any good info on the situation.
Any ideas?