Wil Shipley of Delicious Monster talks to Guy and Rene about coding on NeXT, forming the Omni Group, dealing with the "Air Force", making Delicious Library, and what he's working on now. Here's the audio again in case you missed it, and below, for the first time, is the complete transcript.
Debug 19: Wil Shipley from NeXT to Delicious Monster transcript
Wil Shipley: ...yeah actually, I started when I was 11 or 12. My dad was a professor at a small college. He taught computer science. My parents were divorced, and so I would visit him during the summer. He didn't know what to do with us, so he just started taking all three of us to the classes he was teaching. He was teaching "Intro to BASIC" and all that stuff back then. I learned to program when I was 12 and just immediately loved it and spent all my time in the computer lab just hanging out with the actual students and programming. I just wanted to be around computers, just crazy in love with the technology thing.
Guy English: What was the first stuff you were doing? You were doing games?
Wil: No, I was so dumb.
Wil: I didn't even know basic math or anything. I couldn't really do much of anything. It was just little short programs. Plus, back then, it really was hard to do anything. At that time, when I started, we were dialing into a computer at the University of Georgia, which was 300 miles away. We were dialing in at 110 baud. [laughs] I actually started on teletypes. You would actually type in your thing, view it on paper, and then scroll it up a little bit and the computer would respond remotely. It's not a great way to type in programs. It's hard to do anything more than 20 lines.
Guy: Wow, that's pretty hardcore.
Wil: Yeah, it was weird. I miss those little machines. I actually want to get an old TTY, the original one. There's one where the keys are these cylinders. They're an inch high. They come out of the case like an inch high.
Guy: Do you have to press them all the way down? You have to press the inch to get...
Wil: It wasn't that much play, but it was a lot of play. [laughter]
Wil: It was so incredibly retro future looking. If you saw one today. It was just that's the coolest thing I've ever seen. There was one with this giant ball head. Maybe if you remember ball head typewriters. It was just really scary and really fast. As you type this giant head would come up and bam and come back and whoa, Jesus.
Guy: Yeah, those things remind me of Terminator style futurism.
Wil: Yeah, exactly. I really, really want one of those. Right now I have a IMSAI 8080 and my original Apple IIe.
Guy: Oh, you still have that?
Wil: Yeah. I still have the Apple II I got when I was 15.
Guy: That's great. Was that the first computer you owned?
Wil: Yeah. That was the one where I really started programming. Before that, I didn't have access to computers. They weren't in schools. They weren't around. I actually used to go to computer stores and just hang out to be with the computers. [laughs] Hard to do anything from there. Then finally my grandparents...My mom took pity on me when I was 15. She was like, "All right. You're really serious about this," and she got my grandparents to buy me an Apple IIe, which was a huge expense for us.
Guy: Yeah, but a good investment.
Wil: Yeah, it really worked out for them and my mom in the end. Parents, buy your kids computers. I guess no one needs to be convinced of that anymore, but...
Guy: But no. At the time it was a pretty forward looking thing to do.
Wil: Well, I mean yeah. A lot of kids were getting game systems and stuff like that. I just wanted something I could program on.
Guy: Yeah, that's...I never had a console growing up. All I had was my Apple II when everybody else had the original Nintendo and stuff. I was forced to make my own games and mess around with it.
Wil: Yeah, it's maddening that the easiest...All the systems that I would think about giving kids today just don't even...You don't learn to program at all on them. They're all so easy like an iPad, an iPhone, a Nintendo whatever the current thing is. Back in the day, you had to learn how to type basic commands and interact with the computer and you started learning stuff by osmosis.
Guy: It's come up before and I do wonder if that's a good thing or a bad thing. Maybe people get so comfortable with technology that it's not that big of a leap to program it. On the other hand, they're not exposed to how things actually work. They're just used to things just working.
Wil: Obviously, I'm trying to, on one hand, fight for technology being much more accommodating to users but on the other hand I want my kids to have to suffer. Actually, I think all programmers should learn machine language first. I'm one of those people. Then after they know how machine language works they're allowed to move to an object oriented programming language. Skip over everything.
Guy: I agree. Well, I think...it's kinds of funny. I'm going to say that they should do exactly what I did.
Wil: That's weird, right?
Guy: Yeah, exactly. Yeah, like learn BASIC, Pascal kind of thing. Then do assembly, so that you know exactly how the machine's actually working. Then go to C and Objective-C and your favorite, C++.
Wil: Yeah, that was exactly my journey, too. I guess that's what we did in those days.
Guy: Well, because I think when you know how the thing's working, you can understand Objective-C run time is reasonably obvious to you, right?
Wil: Yeah, yeah. We haven't got into the age yet, and people keep thinking we're going to get to the age where, "Oh, you just write in the super high level programming language. You don't even worry about what the computer's doing." We're not really there yet. Like there's all these weird things, especially with Objective-C. I'm trying to teach someone Objective-C and I'm like, "Oh, you can say self.bounds equals this." They're like, "Oh, great. That's totally clear." But if I just want to change the origin, then I can just say "self.bounds.origin equals this."
Guy: Right, yeah.
Wil: You're like, "Oh, no. You can't do that." "Why not? I thought dot meant this." "Well, it kind of means that, but it kind of doesn't mean that."
Guy: Yeah, I'm of two minds with that. A, I try to just adopt what they, their direction that they're going in, because I think that's generally a good policy. At the same time, that dot notation has some weird edge cases like that, where that dot is...the dot on a pointer does something different than the dot on a struct.
Wil: Yeah. That's just...but yeah, in general, it really cleans up the code. I use properties religiously, but it's maddening that we have the old style and the new style and they don't really work together.
Guy: Seems like the compiler could figure that out for you.
Wil: Yeah. It really does, but I don't know.
Guy: Yeah, one day. Anyway, back to the story. You got your Apple IIe. You're programming away. Where do you go from there?
Wil: Well, I basically spent every day, all day programming after I got my Apple IIe until I left high school. That's all I did. Really, stunningly, that's all I did. I didn't go on a date until college. I didn't...I think I went over to somebody's house once after school when I was in 9th, 10th, 11th grades, I think I, 12th grade. It's like once, maybe.
Guy: Then you just sat in front of their computer and programmed it?
Wil: Yeah, I would just come home, program in front of the computer until midnight, 1:00 AM, and then wake up late and be late for school every day.
Guy: What were you fascinated by? What were you working on?
Wil: I would write silly programs. I was trying to create a program, a drawing program on the Apple IIe where you could edit an entire...because the Apple IIe screen was like 280 by 192ish. I'm not sure.
Guy: Yeah, there was two character modes, right? Like 40 by something and 80 by something?
Guy: But you had the...
Wil: But the high res screen. Then there was double high res, too. But the high res screen, so I was trying to create a program where you could edit enough dots that it would fill an entire piece of printer paper, because at the time, nobody had made a paint program where you could actually paint something that was 8 1/2 by 11. You could draw on the screen and then print screen to printer, and it was microscopic.
Guy: [laughs] Right.
Wil: I figured out with Apple IIe's banked RAM that you could bank in and out enough memory that you actually could fill a piece of printer paper. Then I made something so you could scroll around. That taught me to do really fast graphic operations in software.
Wil: Yeah, I wrote a rect fill that I believe is the fastest color rect fill that ever existed on Apple IIe. I would make that assertion, because it was...I went over it and over it and over it in machine language until it was just unbelievably...
Guy: It couldn't get faster, yeah. That's cool.
Wil: But I never actually shipped the program. I just diddled around and tried to figure out how to draw stuff.
Guy: You were 15, and you know what? Shipping software in those days wasn't...
Wil: Yeah, yeah. I didn't really even know how you would ship something. I just was like, "Well, I got to create this, and so I did.
Guy: Yeah. That's great. Then you go to university.
Wil: Yeah. Well, actually then I started working for my dad in the summers.
Guy: Oh, cool.
Wil: Yeah, and so then he had a consulting business on the side. He just started having me program for his clients on the sly, without telling them, because he thought it wouldn't sound good to have a 14, 15 year old kid doing it. Then after a while, they started noticing that I was always around, so they wised up to it eventually. [laughter]
Wil: They're like, "Gosh, that kid's in front of the keyboard a lot!" I'm like, "What? Me? Oh, no." We finally actually got me billing the clients directly.
Guy: Hey, you know what? I've known you for a few years and never knew that. That's interesting. You were doing client work...
Wil: When I was 15, yeah. I was making $100 an hour with one of the clients. This was back in 1980, so it was like...I mean, I made more then than I basically have since.
Guy: $100 an hour in 1980. Man, you could afford a lot of Nintendo power gloves.
Wil: Yes, I mean, I was a very happy kid. It was very funny. Then I would play video games on the computers all the damn time. I just loved it.
Guy: Any favorites? I was an Ultima guy, myself.
Wil: I never got the Ultimate series. I wasn't able to get hold of it. I really love the early stuff by Jordan Mechner.
Wil: I mean, I loved everything he's ever done.
Guy: You know what? We had him on the show.
Wil: Oh, Jesus Christ.
Guy: I know. I know. I talked to him. I can't...I want to go listen to it, and I've never been able to, because I'm like...I feel that I would hate myself for whatever I said to him.
Guy: I'm such a huge fan of his.
Wil: All [indecipherable 12:13] things. Yeah, in my mind, he's one of the absolute greats. He's one of the people that not only can he program a million times better than me, but he's a better director, better writer, better everything.
Guy: Exactly, yeah.
Wil: Every game he's actually made-made and not just stuck his name on as a producer -- cough -- has just been one of my favorite games ever.
Guy: [laughs] I totally agree.
Wil: I'm just blown away by.
Guy: Well, Prince of Persia was great. Karateka, obviously amazing. The new one, equally good.
Wil: I really loved Sands of Time. I wasn't as crazy about...
Guy: I was going to say, all of the sequels, they were done just up the street here at Ubisoft by a bunch of my pals.
Wil: Sorry, pals.
Guy: Yeah. Not a lot of input from him on that. They basically just took his name and started sticking it on random stuff, you know?
Wil: Well, supposedly they rebooted it with the new Prince and Jordan had more to do with that, I'm told.
Guy: I don't know about that one, yeah.
Wil: That one I think it's called Prince of Persia, whereas the good one was Prince of Persia, Sands of Time, right?
Wil: I played it and it was OK, but it was just really dumbed down controls. It was all actually QuickTime events instead of actually being...you're not actually playing an arcade game. It was all QuickTime. They hid it, but it was really just QuickTime. Like you know how in the original in Sands of Time there's wall walking and you press a button to walk along the wall. It's really cool. In the new one, as long as you pressed a button within a second of running at a wall, it would run along the wall for a predetermined distance and then jump off automatically at the end.
It was always the same amount. It was always the amount that the programmer had put in like, "For this wall, he needs to run along for 30 feet."
Guy: Yeah, like a Dragon's Lair thing.
Wil: Yeah, and I'm like, "Well, that's not really a video game anymore." It's just Dragon's Lair. It really tore it apart. Plus I had the world's biggest crush on Farah from the original one. I have never loved a woman in video games as much as I loved Farah. I was so, so immensely attracted to her. It was amazing that he had managed to create this character where I'm like, "Oh, my God. I love her."
Guy: Yeah, yeah. I fell in love with the girl at the end of Karateka or "Karateeka" as Jordan says. The wrong way. He's just wrong. I don't care. I love that if you ran at her...oh, no, if you came up to her slowly, she would just kill you. She'd just punch you out. You had to just run at her. I loved that. That was such a great, such a terrific ending.
Wil: Yeah, that was amazing.
Guy: We could just talk about Jordan forever.
Wil: Yeah, I know. Seriously. Yeah, I'd play video games all the time on my Apple IIe and I played a lot of NetHack and then I programmed during the summers. During the school year, I just tried to survive school, because I just fucking hated it. I hated high school so much. I hated college, too, but I really hated high school.
Guy: I was bad at school. Did you not like classes or homework?
Wil: Well, I never did homework. That was my thing is I was determined. I wasn't going to be forced to do what they wanted me to do. I literally never did it. If I got to class and I had a few minutes before class, I would try to do the homework before class if I could get my grade higher. But I was just determined I would never actually go home and do their homework. Which to me, now, seems insane. I'm like, that's the actions of an insane person. [indecipherable 15:46] .
Guy: Yeah, I've got some stuff like that from...I'll tell the story to you in person some other time. Basically, I didn't do homework for an entire semester and then asked for an 80 percent grade. I'll tell you how that happened someday.
Wil: The funny thing was, like in Canada when I lived up in Canada for three years, I got really bad grades, not surprisingly, right? Then I moved down to Seattle and I got straight A's for two years. I did not get a single lower than A. Still had the policy. American schools are dumbed the fuck down.
Guy: Oh, no. [laughs]
Wil: There's no demonstration greater than that. Then I applied to colleges and the colleges were all like, "You don't have straight A's like every other student." I'm like, "Well, I was in Canada. There's actually real grades." [laughter]
Wil: They're like, "Yeah, we don't care."
Guy: Where did you go to college?
Wil: I ended up going to UW, University of Washington, which lucked out, because it was right near me and also it was at the time ranked number three in terms of computer science programs. I didn't actually apply. I applied to all these Ivy League schools, because I didn't know anything about what I wanted to do with my life. I was just like, "Well, I guess the next step in whatever is apply to schools, right?" I applied.
Guy: Were you thinking about doing a career in computers?
Wil: Oh, no. I knew I was going to be in computers. I just didn't even...back then, we didn't have app stores or anything like that. We didn't really have Internet, so I had no idea how I'd be in computers. I figured somehow I'd work for Apple or something someday, but it was all murky. I didn't actually even apply to UW, but I applied to all the other schools. I got rejected from everything but CMU, and CMU at the time didn't actually even have a computer science program. They just had a math for undergrads. They had graduate computer science. They were like, "We'll give you a scholarship and you can major in math." I'm like, "I don't feel like I want to major in math. That seems like a lot of work."
Guy: Yeah, that's that weird comp sci old school confusion, right? Where it's like a lot of mathematical theory equals computer science.
Wil: Yeah, and I'm like, "I'm so bored with that crap. I'm just not at all interested."
Guy: I'm actually pretty bad at math, despite having to use it quite a lot. I don't know about you.
Wil: In high school, I was actually killer at math. I became president of the math team and all this shit. I'm only good at lower math which is funny. Calculus and beyond, I don't like it and I don't care. It's just not interesting to me. I know I'm just not good at it. Everything else I'm like, "I love math," except for the higher stuff. I got to college and I'm like, "All right, math. I'm good at this." Then, "Wham," and just got killed.
I got rejected from all these schools. I was, "Oh suck." Back then, I just avoided everything else. I was a really big procrastinator. It's summer. It's going through summer and my parents are, "What are you going to do with your life because college and la la la."
I'm, "I don't know." Then one day, the University of Washington calls me in Georgia and they are, "Hey the SAT guys passed us your SAT scores," because it's just a courtesy if you take SAT in Washington state. "We're cherry picking you and we know you didn't apply and registration is closed now, but if you apply now, we'll not only make sure you get in, we'll give you a full-ride scholarship. In fact we're going to give you so much money that you're going to get an excess and so we're going to actually give you a salary to go to college."
Guy: What the hell?
Wil: I know.
Guy: Good work, man.
Wil: I was, "Yay, problem solved."
Guy: Yeah, procrastinating all summer pays off, basically.
Wil: I know, once again, my plan pays off. That was really nice. It was actually a scholarship funded by this really nice dude. He had 200 scholars around the country that he handpicked and he wrote us all a note every year. Yeah, and I just wasted it and I feel so bad about it. I didn't go to class and I didn't care and I was an indifferent student and you know. I spent all my time just in the computer lab just trying to absorb everything in.
Guy: Seems like you got out of it what you wanted to get out of it, right?
Wil: I did, but I still feel guilty for not getting a degree. I mean, I know you're supposed to do certain things. There are certain professors that just really...I don't know. They got actually mad at me for the amount that...you know, because I guess it's tough. You're a professor and you're like, "Here's the homework assignment." Then someone just hands you a piece of paper that says, " [makes sound] ," on it. "You're not really taking this seriously, are you?" They're mad. I'm like, "No, I'm not. I honestly don't care. Sorry. You're allowed to care and I respect that, but I don't."
Guy: It's a tough job. I can see that being frustrating.
Guy: When you're a youth, you're not really thinking like that. You don't have the life experience to be, "You know, I'm just being a dick to this guy."
Wil: Yeah, I mean, I fully admit it. I was such a dick when I was I was a kid. I probably still am. In 10 years, I'm going to be like, "I was such a dick 10 years ago."
Guy: It's good though. It means you're getting better.
Wil: Yeah, I was definitely a dick 20 years ago. There's no doubt. I was this huge, huge, huge dick. I did take all the computer science courses I could get my hands on. I think I took every undergraduate CS course that was available. I took five years and just took everything. That was great. It was a good education. I got to meet some incredible people. One of the guys who did Smalltalk was there.
Guy: Really? Wow.
Wil: Amazingly wise person and he had a giant stuffed Wile E. Coyote on his door. You got to love a guy that does that, right?
Guy: Smalltalk and Wile E. Coyote. Yeah, I'm a fan.
Wil: He was such a nice guy, I asked him to do a project. A special extra credit project where I would do something cool on the NeXT machines which there were three on campus and two were in graduate labs in the CS building. They were locked so I couldn't get into them. I was like, "Can I do a project," and he said, "Yes." I got a key to this NeXT. From then on, I spent all day and all night on this NeXT machine.
Guy: Why were you excited about the NeXT? Were you a fan of Steve?
Wil: Yeah, back then I was a huge fan of Steve. I hadn't yet encountered his more dickish side. I was a huge fan of the Mac. I had never actually programmed one and, in fact, I bought one really late, considering.
Guy: I didn't buy a Mac till '97 when he came back. Honestly, to get what was to become OS 10 or Rhapsody at the time.
Wil: Yeah, my first Mac, I got in college and I only used it to write papers. I never programmed that machine. It was funny. I have owned one just pure appliance computer and that was it.
Guy: Toolbox would drive you nuts.
Wil: What was that?
Guy: Toolbox programming.
Wil: Well, I bought all the original books. I bought the Mac Toolbox books in '85. I have, not the volume that's printed on the white pages paper, but the one after that; the set where it's actually printed on real paper and read through it. I was just like, "This is the worst thing ever. This is shit programming. This is horrible." I expected so much. I couldn't wait to jump into it. I'm like, "This is horrifying." Then in college, I got into X11 really heavily.
I became an X11 programmer and did my senior thesis, I created a drawing program in X11. A little bit like Graffle, but not the precursor. The precursor was something different. It was the same thing. It was just horrifying.
They were just trying to do object oriented programming in C and X11 interface is all this weird...well they were, I don't know what they are today. There was this weird C thing where they had this convention of structures where you'd have a structure and then you'd embed it in another structure and that's like you're [indecipherable 24:14] .
Then there would be pointers for calling functions in the structure. It would look in the superstructure first. It's this horrible thing, right? At the end of the day, you ended up oddly enjoying it. I'm, "Oh wow." Once you wrapped your head around this absolute bat shit craziness, this is actually really powerful."
I hadn't been formally introduced to objective things really that much. I had done a little Smalltalk, but not really. Then I saw the NeXT machine, and it just seemed like a beautiful box. I had always wanted UNIX on my desktop.
When I was 14 or 15, I was learning on UNIX machines, not on...actually, first I was learning on Cyber NOS machines. After the Cyber NOS, I was learning on UNIX so I always wanted UNIX. My dad kept sending me these clippings.
This was literally back in the day when someone would clip an article out of a newspaper and mail it to you physically through the mail. Can you even imagine? I'm so dating myself here.
Guy: Google Reader is shutting off in a couple of days and everybody is freaking out.
Wil: Yeah, exactly.
Guy: Back in the day.
Wil: Clip, clip, clip, lick, lick, lick, mail, mail, mail. Walk down to the post office. What the hell? He kept sending clippings from InfoWorld about the new machine that was coming out, this super mega pixel Mac that runs UNIX that Jobs was going to do. I was all ready, and then it came out just as I hit college and I was, "I want to play with this."
Guy: That's great. I remember that InfoWorld thing. I think I first saw it in the magazine at the library. I was, "This looks amazing." I was super excited about it, but I never had a chance to get anywhere near one. You get the key to the NeXt and you never looked back.
Wil: Yeah, I was on it and it was running NeXT at 0.8 and I learned...
Guy: 0.8? I thought .9 was the initial release.
Wil: Yeah, it was, but this guy at UW, the UW IT director, was actually friends with Steve Jobs and so Steve made sure that he had three machines before anyone else. It's funny because there are a couple of guys at Apple still that beat me to it. I think Bill Bumgarner was one of them.
Guy: That was going to be my guess.
Wil: I learned Objective-C and you know the Appkit. The Appkit is it is/was a work of art. That I placed entirely on Blaine Parkers. He had this vision and guided IB and guided Appkit.
Guy: I hear a lot of griping about Appkit these days, but you know, it's been around a long time and it still does remarkable things.
Wil: I have not been able to figure out what he's up to. He was doing stuff at Microsoft for a while, Parker is, but I don't know what he did after that. He wrote me some email a couple of years ago and I was really flattered. I was actually, because I was young and a jerk, when he actually left NeXT and went to Microsoft, I think I blogged something or said something where I was, "Goddamn sellout," or some shit. I'm all judging him, right?
He actually called me eventually and was like, "Hey, I'm doing this and wanted to say hi. I know you think I'm a sellout or whatever." I wrote him and was, "I'm so sorry. I was young jerky kid. I'm in no position to judge you."
Guy: Yeah, he probably had something really interesting at Microsoft, it sounded like. It's not like you do Appkit and then you're like, "I'm going to go phone it in at Microsoft working in the guts of Excel."
Wil: Well, I mean, Microsoft has this habit of hiring people just to make sure that the rest of the industry doesn't. They hire a ton of brilliant people and make them fellows and they're just, "We're paying you to not work for our competitors.
Guy: To not compete with us.
Wil: That may be a bit of an exaggeration, but geez Louise, I have seen a lot of examples of that happening. Even if they didn't try to, it's just happened a lot. I don't know. At the time, I considered it like we were fighting for Appkit and Objective-C's very existence. We were fighting for whether or not the next generation of programmers was going to be working for companies like Microsoft where hundreds of people were working on one product, and they were all doing one button apiece and software only came from big companies which it really was during the '90s.
Guy: This was '94 or '95 time?
Guy: When they were trying to do...
Wil: Everyone was dying to Microsoft. You couldn't compete with Microsoft. It was a joke. Everyone just thought, "It's just a matter of days until Quicken goes to Microsoft," because they had taken everything else. It used to be, when I was young, there used to be six or seven word processors. There was WordPerfect and all these different things. Now it's just Word. No one even knows that there are multiple word processors. It's just, "Of course, Word."
I'm like, "Well, back when I was a kid, there was choice. I know it's crazy to think about." I was watching just industry after industry get swallowed up by Microsoft. I was so afraid that's what programming had become.
It had become like a giant car companies where it's like, "Oh, you want to make cars? Go work for General Motors and weld doors on cars for the rest of your life." We were in danger of that.
I saw object oriented-programming and the frameworks that we had that were so powerful as a way to fight it. I was like, "It's my life's mission to win. To have these frameworks win." I had one goal and that goal was that they would win.
Guy: Job well done.
Wil: It's neat because I never thought that within 10 years, we'd be the majority operating system in the world. That's just bizarre. That just seems unlikely. Ignoring completely embedded systems of course, but the majority operating system for which a general person could program for and write programs. We're it, right?
Guy: Objective-C foundation and all the UI AppKit.
Wil: Yeah, it's been bizarre. Even ignoring even iOS and OS 10, the whole message of "You need to have powerful frameworks, on top of a object-oriented language," has really sunk in. I don't care if you like Ruby or whatever...
Guy: Yeah, even Microsoft's .NET stuff you count as a win, right?
Wil: Yeah, exactly. We won that battle and it wasn't a given. We lost it the first time. We didn't, I wasn't around. I was an embryo. Smalltalk came out and lost. Everyone thought Objective-C was going to be another curiosity, like Smalltalk. "Yeah, it's cute, but seriously..." Even when Apple bought NeXT, remember, in '97.
Guy: It still wasn't clear.
Wil: Everyone at Apple thought Objective-C was way too radical.
Guy: Hence the Java bridge.
Wil: The Java bridge, and internally there was a decision that they were going to make Java the main language of NeXTSTEP, or [indecipherable 31:42] ...
Guy: Oh, I didn't know that.
Wil: ...and they rewrote all of the shipping apps in Java. Text Edit was in Java, mail was in Java, they redid all these things in Java. I don't think they ever finished that work. They were doing it to demonstrate, "Oh yeah, you can do all the frameworks in Java."
Guy: I knew text edit, because I think they shipped the source with one release and it was Java.
Wil: They were trying to do that. They are like, "There's no way anyone will ever accept Objective-C. We have to give up." It's so funny because Java is now ranked... [laughs] I guess it's pretty well supported now, but man. I don't know a lot of desktop software that runs Java. I can't name...
Guy: If you see it, it's just horrible.
Guy: It's clearly not platform-native at all. Enterprise-servery stuff seems to [indecipherable 32:31] .
Wil: I guess, but then if we look at it, what's your general feeling toward enterprise server software? It's generally pretty slow, buggy, and not very featureful. That's exactly what I associate with Java. It's really hard to optimize and to extend, once you get into it.
Guy: The one thing that did switch is that they took web objects and made that Java, and that stuck.
Wil: That's how they lost Craig, actually.
Guy: Oh yeah? That was it?
Wil: I can't speak to his exact motives, but Craig was on the enterprise objects team. He was brought in fairly late...I want to say '93. He was, of course, incredibly bright, and fantastically charming beyond all belief, and helpful, and just...
Guy: Great hair. [laughs]
Wil: Yeah, he's just Superman. It's really weird.
Guy: I've heard a lot of nice things about that guy.
Wil: I think within a year he was running the EOF team at NeXT. Back then, NeXT had kept trying to figure out what they success was coming from. Finally with EOF, every Fortune 500 company was sniffing around them. They were like, "Oh, you want to get on this new thing called the web? Enterprise Objects can give you a smart website instead of a dumb one, and we can do it easy." There were just no other frameworks. None of the other things that people use today existed. It was like, "You want to program raw HTML, or do you want to use web objects?"
Guy: The original Dell online store was web objects and EOF.
Wil: Yeha, Toyota, Kabuto, literally the list...Swiss. At the time we got into the consulting for all these people, and so our client list, it was hilarious, because we had this client list. It was two different Swiss banks, Union Bank of Switzerland and Suisse Bank Corporation, which is hilarious because they have so much money. We tried to negotiate with them and they would be negotiating up our fees, I am not [indecipherable 34:38] . We actually did a thing where they were like, "What would you bid on for this component?" I'm like, "I don't know, $80,000?" They were clearly so horrified that we weren't charging enough that they were like, "Why don't we round it up to $100,000 and then you can support it afterwards? That will include support."
I'm like, "Man, I am underbidding." I realize those guys are literally sitting on piles of gold. They literally...their chair is...they don't have air-ons, they have...
Guy: At that time, it's literally Nazi gold, too.
Wil: Yeah, it was actually. That was before, yeah. I'm was like, "Wow! They really just have too much Nazi gold!" They're like, "We've [indecipherable 35:16] it before we get audited." It was a crazy time because enterprise objects was absolutely wagging the dog, at that point. NeXT had this product called "Enterprise Objects," that was just an afterthought, thrown onto what was DBKit. DBKit became Enterprise Objects, then they threw Web Objects onto Enterprise Objects. Then suddenly Web Objects was selling, selling, selling these things. Originally McCaw Cellular, which we now know as AT&T wireless, all of their customer care, customer acquisition, everything, their whole IT was on NeXTSTEP, and it was because of EOF.
We're doing all this consulting stuff at the time, and it was all great. Then Apple's like, "Java's the wave of the future. We're going to port it all to Java." They ported the whole thing to Java and it was slow as fucking shit, and buggy as crap. It was just horrifying. This was our big introduction to Java, too. This is why to this day I'm still [indecipherable 36:18] .
Guy: Bitter, yeah.
Wil: Then a bunch of the EOF engineers who were really good, and loved the product were like, "Um, yeah, we're done. OK, we're leaving because this is ridiculous. I can't, with a straight face, tell all my clients to port to a new language to get the latest version, so that they can be slower and buggier." Actually, this is coincidence...I am not taking credit for this, but used to write Craig every year. He was in this other company called Arriba.
Guy: Wait, what do they do?
Wil: I don't know. I just think it's a funny name, "Arriba! Arriba!"
Guy: [laughs] They do something interesting, I think, but whatever.
Wil: I feel like I just know the name because of the Speedy Gonzales thing. I used to write him every year and be like, "You've got to come back to Apple. It's amazing now. You're such a great engineer." At the time I was like, "I bet they might put you in charge of AppKit, even." I was like, "An engineer as good as you, I bet you'll get..."
Guy: You'll get something good, [indecipherable 37:28] .
Wil: "You'll at least be a manager. Maybe two people under you." [laughs] I didn't have previous warning or anything, but one year they announced and they're like, "Yeah, we're bringing back Craig Federighi." They didn't actually say, they hinted at what he was doing. Bertrand decided he wanted to leave, so they were going to have a year of overlap where they let Craig...
Guy: Get acclimatized to the way...yeah.
Wil: Suddenly a year later, they're like, "Now Craig is taking Bertrand's job as VP of Software." I was like, "Holy Crap! What the hell?" [laughs]
Guy: That's awesome. There have been a lot of really good guys out there. It was Avie at first, then Bertrell.
Wil: Yeah, Avie was...
Guy: He wrote Mock, so...
Wil: He's such a solid engineer. He's one of the people, like engineer-engineer. He's an old school "he could build bridges" engineer. Which I can't. I'm more of the flouncy, artisty programmer that the...
Guy: Yes. Good God, nobody go near a bridge that I've built.
Wil: Yeah, exactly, but he was a real engineer. One of my favorite Avie stories, he actually called us down, the three guys running Omni, to California. Avie tells you to come down, you come down. [laughs] We fly down and we go into this conference room. We have no idea what to expect. We met his assistant, who's a really, really nice lady. He's got a laptop and he flips it around toward us. He's like, "See these numbers? What's with your VM use?" We're like, "Hi, nice to meet you." [laughs]
We're like, "Oh, our VM use is bad?" He's like, "Yeah, I don't understand why you're not running NM Stat minus BMQ2567 every day in the terminal when you run your app."
Guy: What apps was he talking about? OmniWeb?
Wil: Yeah, the list...yeah, OmniWeb, like 1.0, or 2.0 maybe. It was their only web browser at the time. They were like, "Sucks. It's slow and crappy." It was slow and crappy. We were like, "We've never heard of these tools." Literally, we had no idea. We were like, "There's a way to measure memory?" He's like, "Argh!" [laughs] He's so mad, right? "Wait, wait. What you're telling me is this system has a limited amount of memory and you can tell?" [laughs] Yeah, it was really just, "Get this fixed." We're like, "Yes, sir." [laughs] It was really funny.
Guy: I love the way he drags you down there just to..."You couldn't have just emailed us?"
Wil: Yeah, could we have [indecipherable 40:25] video-conferenced this? "No." [laughs] He needed to look us right in the eyes and...
Guy: [laughs] Burn you.
Wil: It really was like we were puppies and he's like, "What is this? What is this?" and he rubs our noses in it. We're like, "We're sorry. We're sorry." Literally, we never did it again. We just, "Programmer, now run that tool. Now run that tool." We didn't have this activity monitor constantly running that just tells you that one thing and then we certainly didn't have instruments, so it wasn't trivial.
Guy: You'd have to be aware of that and try to figure it all out.
Wil: You'd have to know all the command-line tools to check your sizes. I didn't even know about these Mock commands. I grew up in UNIX.
Guy: Of course, he does because he built the stupid thing. [laughs]
Wil: Yeah, kind of unfair.
Guy: We skipped over, but you're playing with the NeXT in the lab and you meet up with Ken and Tim, start up the Omni Group?
Wil: Yeah. Back in those days there were two whole computer centers on campus, outside of the computer engineering building. There were two computer centers just for average people. One of the things that the director of IT there did...The funny thing is I remember his name, and I'm probably getting his name wrong, because I know this name overlaps with another famous name. I think the guy's name was Ron Johnson. I don't think it was the same Ron Johnson, but I could be wrong, and I have...
Guy: That would be hilarious. It would be great if it was.
Wil: At the time, he was actually Ken's boss, because Ken was working in IT at the UW, as well as he was a seventh-year student at that point. There were two general computing centers. The UW was fairly progressive in the nation. They had opened up computing centers to all the students, in what they call "uniform access." Which was a revolution to be, "What if we let English majors touch our computers." That was like, "Whoa, crazy times." There was a little culture of kids who hung out in the computer centers. I'm there and I'm like, "Hey, you're my kind of nerds." I hung out there and that's how I ended up meeting Tim and Ken at the UW.
Through hanging out at the various computer centers, one of the people found pretty cool was a programmer who still works at Apple to this day, Dan Fly, who was working on this multi-player game. I think he was writing it under VMS at the time. He wanted to make this mutiplayer, NET-hackish kid of game.
I'm like, "Oh, my god. We should write these on NeXT boxes." I started planning this game and I pulled this group together to meet every couple weeks. We'd eat and we'd get silly and we'd smoothly plan the game.
Guy: The fun was the planning the game.
Wil: Exactly. The game that Dan had come up with, the name was Omni. The name of the group that I asked to meet, I called them the Omni Group, and it was a group of cool programmers. Meanwhile, at the same time, I'm working at the University of Washington as a student consultant in the computer lab, which meant I was supposed to answer other students' questions about computers, but I really hated being interrupted while I was programming. I would just sit there programming. People would come up and I would let everybody else who was working with me answer their questions. In retrospect, I feel super bad about that, like mega-jerk move. At the time...
Guy: You were a dick 15 years ago.
Wil: Yeah, I was a dick.
Guy: It's just [indecipherable 44:49] . I'm going to end up making this a running theme. You were a dick when we started this interview.
Wil: Yeah, definitely.
Guy: No, just kidding. [laughs]
Wil: [indecipherable 44:59] years ago I was such a dick and I'm still learning. Eventually I get fired from that job, and not because of the gross incompetence, but because I made a sexist joke and someone mailed it to someone else, and someone else mailed it to someone else. Eventually, it got mailed around enough and someone complained. At the time it was funny, because the whole idea of using email private wasn't really well-established. Nowadays, I think there'd be a giant civil case. I'd be like, "If someone mails you, privately, a joke and you email it around, it's not their fault if other people are offended."
Guy: Etiquette hadn't been established, yet.
Wil: I actually went to my supervisor and I was like, "I don't think it's fair that I'm being disciplined for private mail that I sent to somebody that that person found funny." It wasn't like the person I mailed it to didn't find it funny. Then he forwarded it onto some other people and eventually someone didn't find it funny. That's not really my fault anymore, it's his.
Guy: Yeah, you made a joke inside a context where it worked, and the context changed. It's not quite your fault.
Wil: It's not my fault. This guy looks at me. He had only relatively recently taken over the position of running all the consultants. He was this really smart guy and a really good manager. I'm really sad I've forgotten his name, because I owe him this incredible debt. He looks at me and he's like, "Wil, you're incredibly bored and you're clearly meant for great things. It's time for you to stop fucking around at this job and just do them. Just stop hiding." He's like, "Look. I'm going to put you on suspension for three months, for the summer, and you're going to go get another job. If you really want this job in three months, come back and we'll talk then."
I was like, "Oh, OK." [laughs] This is one of the stories that you can't even make it up. If it were a movie, you wouldn't believe it. I literally got on my motorcycle and I drove across the water to Kirkland, which is where the NeXT headquarters was at the time, the Seattle NeXT headquarters.
The most expensive office space in the city. Literally it was in a zone by itself, in terms of office space. Steve picked the most expensive zone he could and put his office in there. I went to the office, and they knew me because I'd been their informal sales rep on campus, as it were.
I showed up like, "Hey, I need a lot more hours because I just got fired." This guy named Jerry Good, who was a systems engineer at NeXT in the Seattle office, looks at me and he's like, "This is a weird coincidence." One of the very first things when the NeXT machines were first announced, there was a company, what was then the world's largest talent agency, William Morris Agency. They bought a bunch of them, 150, which was an obscene amount of $10,000 computers. They did it with the proviso that NeXT would write them custom software to run their business.
Guy: What did they need 150 of them for?
Wil: They were putting them on every agent's desk and every assistant's desk at the entire company.
Guy: Wow, that's cool. That's all in on this.
Wil: A lot, yeah. They bet it big on these beautiful...They're a talent agency, so I'm sure part of it is they're like, "These machines are sexy. Let's do it." They want all this custom software. Supposedly NeXT must be good at it. Then they hired NeXT, was like, "Oh, we're on the hook to write this software." "We don't want to do it," so they hired some subcontractor, this company that I've had rivalry with ever since. These guys are still around, by the way...I think some of them are. Anyway, they hired this company and a year a later they went to the company like, "What's going on?" The company was like, "Oh, we've got some mock-ups and we've burned through a million dollars."
Wil: This was back before programmers were making obscene amounts of money, so a million dollars was a lot back in '92. They looked at it and they're like, "None of this shit you've done is usable, and you're fired." NeXT is like, "Great. We've burned through the money that William Morris has given us because they gave us a million dollars for software and you spent it all. We have no money, we're already late, and we need to start again." Then they bring me in. Me!
They're like, "Yeah, you're hired. You're our guy." [laughs] I'm like, "I'm, I'm, I'm 21 and I'm still in college." They're like, "Yep, [indecipherable 49:45] " [laughs] This is how desperate they were, right? [laughs] They're like, "Clearly you're going to do better." I'm like, "I guess I'm not going to spend as much money."
I started programming and in a week, two weeks, Jerry was like, "Wow, you're actually doing results. Do you know anybody else like you?" [laughs] I'm like, "Yes, I do. I know Len Case and Ken Case and Tim Wood from my group of game designers, my Omni Group."
He was like, "All right. They're hired." Eventually I think he had eight of us working out of their office there. We were all working directly for NeXT, or back then everybody was a consultant all the time, so we were all consulting directly for NeXT. We didn't have a company.
Guy: Yeah, right. You were all individually contracting to NeXT. When do you guys get together and get your own office?
Wil: After about a year of that, NeXT was like, "OK, we're really sick of just bleeding money here. We're going to call this 'pretty good,' and hand you off to another company," because we don't trust you guys enough to be talking to William Morris, directly." We're going to hand you off to a company called SHL System House, which has been renamed 20 times, but I think parts of it still exist. I think parts of it were in a giant scandal recently, actually.
Guy: SHL System House. That's a shitty name.
Wil: Yeah, it's a Canadian company, actually. I think System...I think when they were called System House, they were part of the Enron scandal or something like...like, it was really bad. One of those companies like Anderson consulting, who we also used to work with. They had to change their name after all the scandals. But so they handed the contract off to SHL System House, who then immediately subcontracted with us, because there was no actual talent at SHL System House.
We were again subcontracting, but for SHL System House. We were making a lot more money because at that time, we were allowed to renegotiate, and we all renegotiated...well, we all renegotiated individually, actually, so it turned out Ken was making like three times what the rest of us were. We're like, "Damn it!"
Wil: We're making a lot of money and we're working long hours. We moved out of the NeXT office and we found a cool, little office space, really quirky and fun. Then we kept sending bills to SHL System House. Eventually, I think the Canadian government to SHL was like, "You can't be paying checks for like 15 thousand dollars a month to individuals. You've got to do some crazy withholding, or something." That's not OK, to just be like, "Oh, they're consultants, it's fine." They said, "You guys have got to incorporate, or we can't keep paying you." We were like, "All right." We incorporated in October of 1993, the name The Omni Group.
Except somebody had already taken The Omni Group [indecipherable 53:02] , so we actually incorporated under Omni Development, because we were actually afraid names [indecipherable 53:06]. Which was dumb. We should've just done it because, Jesus, it was a totally different group, but whatever.
Guy: Yeah, no point getting in a fight.
Wil: Yeah, so that was the story of the first incorporation.
Guy: How did you guys get into products? When I first...I started to become aware of you guys in like '96, '97. I was getting...I was reading a lot about NeXT earlier than that, because as a game guy, I'd read everything I could about, or from Carmack. He developed Doom on the NeXT, in the editor. I'd come to it from that angle. I was like, "OK, this is an awesome platform and I want to get into it. But it costs a fortune and I can't get my hands on a machine." When did you guys start doing products?
Wil: We were always diddling with products. I always loved product, of course. I mean, I don't think anybody ever is like, "Oh, boy. I want to consult." When I was at college, I wrote a newsreader which, for the kids out there, news...
Guy: You mean Usenet, not...
Wil: Usenet, yeah. Back then Usenet wasn't just a great way to get pornography. It was essentially what Reddit is now. That's what I think of it, a bunch of arguing and craziness and stuff. I wrote a newsreader for Next. It was a graphic one and nice, one of the first. This is back before every single thing ever had a nice graphical client. I was like, "Hey, check it out, a graphical client." Unfortunately some guy at Next also wrote a graphical front end.
Wil: He felt like there was a rivalry and I didn't because I was just giving mine away. I'm like, "I just did it for fun." But he's sniped at me ever since. I'm like, "I don't get why you don't..." As far as I know, I've never said a bad thing about him but if I have, I apologize profusely. I certainly don't have any bad thoughts or feelings. But yeah, my first introduction to him was not good, either. I had a reputation for...Well, I made a mistake once and I leaked some information that I shouldn't have, back in the early days of Next, to the Usenet. Yeah, that's back when you're young and you don't realize that people read the net. I think every young person does this.
They're like, "Oh, I just found out a cool rumor from Apple. One of my friends told me. I'll post it on the net and then everyone will think I'm cool." Then someone from Apple calls and he goes, "Dude, you're a dick. You just got me in trouble." They're like, "You read the net?" Then you realize, "Oh, geez. Of course." It's obvious in retrospect.
Guy: Yeah, that's not a good use of your political currency here.
Wil: This guy, he was like tasked with telling me, "That's not OK, don't ever do that again." I'm like, "Yeah." I made sure...I still tell my young programmers. To this day, I'm like, "No. We don't do anything that could even be seen as potentially possibly leaking secrets because it gets back to them and then they don't tell you anything anymore. You never know they're not telling you. You just never hear anything." Anyway, so I'd written a newsreader. Then I always tried to have some product that I was playing with. We wrote Omni Image, which was a way to look at GIF files and JPEGs and stuff. That wasn't just automatic back then. You had a computer, and you'd get a GIF off the Net, and it wasn't just automatic that you could look at it. Which seems bizarre.
Wil: That was really popular, because we had tools that would let you look at 20 different formats, eventually, and you could preview all your stuff.
Guy: Was that the one that did the PostScript stuff?
Wil: No. Then it was a contract we did, because we had contract work when we wrote cut-throat actual apps. I actually took the contract myself. This was one of my most fun contracts, because it was just so well-specified and so clean. Everything went off without a hitch. This other company called Lighthouse Design, which was run by...
Guy: Yeah, it's a famous shop.
Wil: It was run by Jonathan Schwartz, who went on to run Sun until Sun died. The engineers in it are still in the most powerful positions in the industry, basically. [laughs] Their chief of engineering was Kevin Steele, who went on to...
Guy: Omnigraffle, right?
Wil: Yeah. He wrote Omnigraffle and sells it through Omni. They have all these other dudes who work there. For example, Roger Rosner, who now is running iApps at Apple, and came out with the exact same app that Lighthouse had done, except at Apple.
Wil: Largely with the same names. Pages, actually, is the same name as the Lighthouse app.
Guy: It's not the same code at all, right? It's a reboot.
Wil: No. Some of it's the same code, because he hired three of the same engineers. I'm not saying...
Guy: You don't know for sure?
Wil: It was the same engineers as well and Roger Rosner.
Guy: Keynote looks identical to...Currents?
Wil: Currents, yeah. No surprise, right? It's like, yeah, wow, that's amazing that it's the same app. I'm all for it. I'm like, yes, those were beautiful, wonderful apps, and the world should see them and appreciate how great they are. Anyway, I think it's really funny. Lighthouse had one of the world's best salespeople in the world. This dude could sell anything to anyone. He could sell sand to a Bedouin. They were totally embedded with the NSA and the NRO. This was actually before the NRO had come out, so we were dealing with clients who couldn't tell us what. They always just said "Air Force." We had all these clients who were like, "Oh, you work for the Air Force?" Like, "Yep, Air Force." They had these cards on them that were just like, "My name is John Smith."
Wil: It would just say "Air Force." It was like Arrested Development, where it's like, "Mom, I'm going off to army today." You're like, "Oh, you work for Air Force, huh?" "Yeah! Air Force." "Just Air Force? Is that a thing? You don't really have a rank or anything?" "Nope! Air Force." Then when you pick up the number there and when you call them, because they're not going to say NRO or whatever, right? They're also not going to give their name, because you could just be dialing it...
Guy: A random number, yeah.
Wil: You pick up and they give you the last three numbers you dialed. They pick up and they have "343." You're like "Hi, is this John Smith from Air Force?"
Wil: "Yeah!" I'm like, "Great, Air Force!"
Guy: That's awesome. [laughs]
Wil: It was really funny.
Guy: That's weird. What were you doing for them?
Wil: They wanted a PDF viewer, this new format called PDF. There was nothing on NextApp that could view it. The NRO, and I think the NSA as well, were really deep in NeXTs. They had just buttloads of them.
Guy: Bill Bumgardner has an awesome story about selling NeXTs to...I'm not sure if it's the CIA or the NSA, but it involves basically a dead drop. [laughter]
Wil: Right? When we sold OmniWeb to them, because they were one of our first clients, we were giving away OmniWeb for free, version 1. The Air Force calls us, and they're like, "Hi, I'm Bob Smith from the Air Force."
Wil: "We love it. We'd like to buy it." I take the call, and I'm the world's great businessman, "Well, we're giving it away, so go for it, bye." They're like, "No, no, no. That's not how we do it in things Air Force. We need to procure it from you, and we need to pay and use it." I'm like, "OK, how much would you like to pay?" [laughs] They're like, "$12,000." I'm like, "All right, we'll take it." When the check arrives, it's going to be from a company called Collins International.
Wil: I hope I'm not giving away state secrets, because that's the actual name. John Smith is not really from the Air Force, by the way. Collins International or maybe it's Rollins International. I guess the [indecipherable 61:34] at some time. Anyway, and they're like, "It's a company that we do some purchasing from for the Air Force so we don't have to ship it to Air Force." I'm like, "Right, absolutely."
Guy: Whatever you have to say.
Wil: They send us this check and I'm like, "Great." I wish we had just framed it instead of cashing it. It's awesome to get an actual check from the actual NSA. Then they're having some trouble and they actually called us for support. It was the most hilarious thing in the world. They're just people too, right? They call us up and they're like, "Hi, I'm calling about...I'm here having trouble." I'm, "Great, well we have 200,000 people who are using it for free, and a couple of paid customers. We don't support the free customers over the phone because otherwise we're going to go bankrupt. Who are you again?"
The guy is, "Oh, hold on." Then there's like phone muffling. [mimics indistinct sound] . "Oh, it's Rollins International. I'm Rollins International." I'm like, "Oh, Rollins. Hi Rollins International, yes. Of course, our most valued customer."
I'm like, "What's the problem?" They're like, "Well, we're running it and it's like having trouble getting like time-outs on our network." I'm like, "Oh, well that's weird." They're like, "Well, the [indecipherable 62:55] are not running the whole network."
I'm like, "Well, I'm a pretty tech person." I'm saying this. I'm like, "I've been around, and I know 10BASE2 and 10BASE-T. I've seen star topologies. I know Apollo/Domain." I'm like, "You can go ahead and tell me." He's like, "No, I can't." I'm like, "No, what kind of network are you running?"
He's, "I actually can't tell you. It's a thing that we've had since before Ethernet." This is true.
Guy: It's a magic thing. Don't ask questions.
Wil: "We have a network internally that's before Ethernet and it's running at this weird speed." He quotes me the speed and he's like, "Yeah, it runs at 48.27 bits."
Guy: It's something totally weird.
Wil: I know, right? I'm like, "I don't know." I'm like, "Well can we...I don't know how to debug. Can I remotely plug into your machine?" He's, "No." I'm, "Can I...?" He's, "No." I don't know how that ever got resolved.
Guy: Not much you can do for Rollins International if they're not going to...
Wil: Yeah, you're going to have to help me out Rollins.
Guy: You know what, it's probably that VM thing that [indecipherable 64:07] yelled at you about.
Wil: Yeah, it probably was probably. The other funny thing we did is once we were at a trade show, the NeXT World Expo. All the NSA and NRO guys were there with their cards, the Air Force cards. Of course Lighthouse is deeply embedded with them so Jonathan Schwartz, the president and very official and very grown up, was talking with all of his contacts in the intelligence agencies. I did this faux pas. It was this huge faux pas where I'm like it's like John Smith comes up and starts talking, "Oh, blah blah blah." I'm like, "Oh, here's my card." He gives me his card and it's Langley, Virginia. I'm like, "Great, the Air Force in Langley, Virginia."
Big Air Force base there, I guess. Then another guy comes up and it's like, "Oh, this is Bob Jim," and he's also Air Force at Langley, Virginia. I'm like, "Oh really? Do you work with Bob Smith?" The guy just glares at me.
It's just daggers. "Because you're in the same office, I would have thought you'd know him." Then everyone else there in the conversation gets it but me and I'm like, "What?"
Guy: It's such an innocent thing.
Wil: I'm like, "Oh, different branch of the Air Force then."
Guy: Mysterious. Eventually, you guys transitioned into a product company, right?
Guy: Within a few years.
Wil: One of the first things is Lighthouse comes to us and says, "The Air Force wants a PDF viewer." I'm like, "Great, I'll do it." I'm like, "If you give me a month, I'll write a PDF viewer and it'll view PDF 1.1 perfectly and it'll be fast and beautiful and I'll charge you the outrageous price of $100,000." I was like, "This is the most obscene thing I've ever done in my life." They're like, "Sold, don't care." I think it went the other way. They said, "Look, if you can do it in a month, we'll give you $100,000 because the Air Force wants it yesterday and they have an unlimited amount of money if you do that..."
I'm like, "Holy shit, OK." I would never ask for that much. I'm realizing that now. I'd be crazy. I sat down and I programmed it. I consulted with Ken some on it. We came up with some cool ideas on how to optimize it. I made this beautiful PDF viewer.
Way better than what Adobe had at the time. It launched faster than Adobe's Acrobat viewer. It didn't have 72 auxiliary windows. It just had one window where you saw your PDF document. I know that's a real revolution. It still makes me mad to this day when people launch Acrobat.
"That is just so shitty." All this stuff is. Then they're like, "Great, the Air Force loves it, but PDF 1.2 is out now and also they want to be able to copy and paste." I'm like, well, you can't copy and paste. PDF isn't structured like that."
"Well, they want it. Put it out." I'm like, "OK, but it's going to cost another $100,000." They're like, "Fine, don't care." I gave PDF 1.2 copy and paste and they paid me. I'm like, "Yay."
Guy: Did it do EPS too?
Wil: No. Then, Apple comes to us. They're like, "Oh my God, you've got a PDF viewer. Everywhere else it looks like PDF is the wave of the future. We want a bundle with a PDF viewer." I'm like, "Great, I'll license it to you, you can bundle with it." They're like, "Great," so they bundle with it and pay us some more money. I don't even remember how much, but more money. At this point, I've been paid three times for the same product. [laughs] Then Apple says, "We're working on this new thing. It's a graphics system, Core Graphics."
This was before they [indecipherable 68:04] . They knew they had to get away from...
Guy: PostScript. Displaying PostScript.
Guy: We talked to...do you know Gelphman? David Gelphman?
Wil: I know the name. I don't know him.
Guy: He did a lot of the printing. He worked on the PostScript two spec and stuff like that. Anyway, he was at Apple. He was involved in that stuff on their side.
Wil: Yeah, PostScript was neat, but I'm happy we have Core Graphics. They're like, "We're going to invent this thing called Core Graphics and we need PDF rendering. It's going to be our native file format to do it. You've already built a parser and everything so can we license the actual source code to own the PDF?" Number four, and I'm like, "Sure." [laughs] They give me more money and they licensed the source code. [laughs]
Guy: It's great, I never knew that.
Wil: [indecipherable 68:54] story. I managed to sell the same program four times, twice to one customer and twice to another customer. I'm like, "Yay." I'm told the postscript, ha-ha, to all this is that they didn't actually use my object-oriented PDF reader because everybody was always so afraid, "Oh, objects are slow," which is crazy, because really memory management is slow, and if you do it correctly it doesn't [audio skip] , but, whatever. They rewrote the whole thing in C++ so my actual source code is not in core graphics, but they did pay me for it so...
Guy: Good enough [laughs] .
Wil: Yes [laughs] .
Guy: It probably works out better, because that way you get your money, and you don't have to...they never bother you again.
Wil: Yes, that was the funny thing, yeah, they did. They really did never call me again. That...
Guy: What comes next? When does OmniWeb come up?
Wil: Well, so, we made OmniWeb like it was almost our first product. We did Omni [indecipherable 69:53] and then OmniWeb was really early. Like it was '94.
Guy: Oh, that is early.
Wil: Yes, no, OmniWeb is the oldest graphical web browser in existence. It predates IE by two years. It predates anything even close. Even NTSE Mosaic was a year after us. We beat everything. The World Wide Web app was written on NeXT machines, and then they started porting it to other machines. They had some library in National Center for Supercomputers did their stuff with Mosaic and started doing it on Windows and things. I think they did on Unix, on the [indecipherable 70:44] first. I'm not sure.
Anyway, it was starting to gain traction. We were visiting Lighthouse once, and a guy there named Ray Ryan who's now actually works at Google...or, no sorry, Square, the payment processor. I actually just ran into him again recently, which is really funny to me. I'm just like, "What? You're from a previous life. How can you be active in the exciting stuff that's going on now?"
Anyway, he showed it to us. He was like one of those people that really love new technology and stuff, and he was like, "Check out this thing called the World Wide Web and I was just like completely like, "I don't get it. We've got gopher. We've got FTP. I don't understand why this is better."
He was like, "Well, you can get little snippets of text." I'm like, "Well, the new gopher clients have inline text rendering." I mean it is funny, because while the Web is an incredible achievement, gopher was already evolving towards that.
Guy: Yes, it was pretty interesting.
Wil: Then they just did it better and more standard. But it is interesting, because it's one of those things where you know nothing is really invented in a vacuum, right?
Wil: Things evolve, and then people realize what they want, and then one person wins. Anyway, so we were like, "Oh, I don't really get it," or I was like that. We went back to Seattle, and Ken downloaded the client, and we played with it for like a day. Ken and Tim and I looked at it, and interestingly one of the first places on the Web was there was this city in Washington which decided to make a website, and it's so bizarre because this was like before cities had websites.
Guy: Just some nerd at that city council.
Wil: Yes, exactly, right? I didn't know of any other ones, but this was like probably one of the ones linked from the NCSA home page. It was the city of Sequim, which it's pronounced...S-E-Q-U-I-M, and one of the things on it...because back then the net was very multimedia. It's all about, "We can embed sounds." Whatever. You'd click on their home page, and it was just like, "City of Sequim, Washington," and then underneath it is just a sound file, and you'd click on it and the sound file is this guy in this incredibly deadpan voice saying, "Sequim. It's pronounced Sequim." That was their whole...that's it. That was in Sequim, Washington. We're like, "Wow, this is the future," and we're sold. Yep. Uh-huh. We got it.
Guy: That's great.
Wil: We're like, "This is amazing," but, of course, the NeXT client was the old World Web app which was really in bad shape because they had gone on to bigger, better things.
Guy: That's pre-foundation, too, right?
Wil: I think we're post-foundation at this time, but I'm not sure. We're all like, "Eh." I'm like, "Oh," you know, "neat, whatever." Ken's like, "Ah, it's cool. We should play with this," and I'm like, "Nah, we got other stuff to do." Being Ken the next afternoon we get in the office and Ken's like, "Last night I went home and wrote a web browser. Here's [indecipherable 73:56] ." He shows the web browser, and it displays text and sound and images. I'm like, "Oh, well I can do this, and this, and this. I can make H2 work. I can..." Then we just all started hacking this web browser, for no reason.
It wasn't like we had a plan. We were just going to give it away. We just wanted to write it. We wrote OmniWeb1 and shipped it on the NeXT, and people didn't...there was a point in time where we were told when Rhapsody was first shipping, and there was an IE version on Rhapsody, and I think even Mac OS 10.0, I'm not sure. I'm not good with dates. But there was a time when IE was shipping on it, and we were shipping on it, and we still had the majority market share over IE on our platform, and we were like top...
Guy: Well, you were way better in those days.
Wil: Yeah, way better in those days. Then, you know [laughs] , we didn't really have the team. Like the problem is you give away product it's really hard to make money.
Guy: Yes, little bit, and it's a pretty complicated product. The Web starts evolving real quick around that time, too?
Wil: Yes, I mean...yes. It was literally...it was the hardest thing I'd ever worked on, and the least rewarding per effort, because you'd just...the amount of time you spent trying to make up for bad pages or bugs in other clients was phenomenal, and it was worse back then than it is now where people actually agree like, "All right let's be a little more strict." But one of the things we actually had to do back then was there was a browser that if you passed in a color in your HTML and you typed in, "O", instead of a zero, it accepted it.
Guy: Oh no, oh, god.
Wil: We actually had to make it compatible, because everyone was like, "The colors are coming up wrong." I'm like, "Because you typed them wrong, idiot face." They're like, "Well, it works in IE," and I'm like, "You can stab yourself."
Guy: Oh, that's annoying.
Wil: It was so annoying.
Guy: That's like some jerk [laughs] at Microsoft just thinks that's a cute idea.
Wil: I think actually we decided...we had figured out an algorithm that did it. Like it think I want to say...and I'm making this story up, but it's likely what happened...I want to say that Ken looked in the source code of Netscape, or Mosaic, or whatever, and just discovered that the way the algorithm worked was if it hit something that it didn't recognize...
Guy: Oh, it turns it to be zero.
Wil: ...it turned into zero. We were like, "Baaaa," [laughs] . Yes, but all the Web was like that, and it was not fun, it was just horrifying, and I never want to be in that position again where I'm writing to a spec that's not a spec, and the public edits files by hand, and you're supposed to do it, and you're supposed to be compatible with other things. I basically vowed I'm never going to try to be compatible with other programs again, because it's just not fun.
Guy: Yes, you almost can't win, right?
Wil: Yes. There's just nothing...you can spend all your time being exactly like them and then people are like, "Well, I'll just use them instead," and you're like, "Oh, yeah, I guess that's a good point.
Guy: Right [laughs] . Eventually you leave Omni Group and start Delicious Monster.
Wil: Yes, in, I guess, 2004, January, March.
Guy: You've been...Omni was, what, 12 years, I guess? 10, 12 years?
Wil: I ran it for nine, and after nine years Ken was like, "I want to be the CEO now," and I'm like, "OK." He's like, "You can be president," and I'm like, "OK," and then it turned out being president didn't mean much. Like they put nobody under me and nobody answered to me so I quickly felt that I had no authority of any sort, and I'm like, "Well, this is lame. I don't want to be president in these situations." I stepped down as president, and I was just an engineer for a year and then...
Guy: Just time for something new, right?
Wil: Yes, well, they actually asked me to leave. They said...well, they didn't ask me to leave. They called me on a Friday and told me I was gone, and I needed to clean out my desk, and I was like, "Wow, that's very surprising." I grabbed a couple things that were mine, and I grabbed my cat, because I had cat that lived in the office, and I'm like, "Well, I'm taking this cat," and they're like, "Oh, that's the friendly cat," and I'm like, "Oh, well." I took my cat, Shmop.
Guy: I like that. I've met that cat.
Wil: Yes, Shmop is a great cat.
Guy: You head out with Mike Matas to start up Delicious Monster.
Wil: Yes, Mike had been fired a couple months before and largely just because he was...he had his own ideas, and if you went against him he would just ignore you. Then I started Delicious Monster with Mike, and Mike had already come up with the idea he wanted to start a company, and he had some cool ideas for a company. He wanted to just gather together some people that were working on shareware and then make their stuff really cool and then take half of their money.
Rene: Where did the name come from?
Wil: Well, so, he had...his name, I think, was going to be called something like Aftworx or something, with like an, "X," or something. It was very German sounding. I think that's actually a company and I'm just stealing that name, but it was something like that. It was a very German-ey, worksy, whatever, and I was like, "Man, I hate that name." I had vowed back when I was at Omni, because I was always paying attention to the names of all the game companies because they're always so funny, Naughty Dog, and all these. I'm like, "Ah, game companies are just so great at..."
My mom had given me this gigantic plant that was seven feet tall which was a...people know it as a Mexican fern or a window leaf fern, but its Latin name is monstera deliciosa, which means, "delicious monster," and I was like, "Oh, my god. Delicious Monster is such a just beautiful turn of phrase, and I vowed if I ever have another company...I told the guys at Omni this years before. I'm like, "If I ever have a company I'm going to call it Delicious Monster."
The one argument I won with Mike was we decided to name the company Delicious Monster, and so we had these three guys we were trying to partner with, with their shareware, but two of them we were like, "Meh," on, and the third guy was working on one of the many, many, many apps for cataloging all your stuff that existed then, and they were all really shitty, just deeply, deeply shitty.
Working with Mike was just a dream. It was one of the most amazing experiences in my life. He was just...he worked all the time. Every moment he was awake he was working. He was constantly coming up with ideas, constantly refining things, just refining interactions.
Every time I would do anything on the program he'd be like, "Well, yes, can't it be easier?" I'm like, "No, you have to go press this button." "What if you just understood what the users want?" I'm like, "There's no way just to understand what the user wants in this case unless you did this and this." "Well, can't you just do that?" "Well, yes, maybe."
Then the next day I'd be like, "Look, look, I made it do this." "Yeah, but the button's still ugly. Can you just do this and this?" I'm like, "Oh, my god." I wanted to strangle him for seven months, but start to finish it was seven months. We shipped in November, and it was just an incredible success, biggest success of my life, just enormous first day sales, enormous first week sales.
Guy: Well, it changed the industry.
Wil: Well, thank you.
Guy: The Mac software industry. No, really it did. It informed so much that came after it.
Wil: Yes, I mean I credit Mike for that. He was..his UI skills, and at the time I think he'd just turned 18. Still he was the King of UI. It was just stunning. That was a really fun project. Then after a year of that, Mike got bored and restless. He would've been planning out "Delicious Library Two," but we couldn't...We were still trying to get different things working in One. Do updates and stuff. He's like, "I'm bored." Like, "You guys aren't even working on Two yet and I don't want to sit here and watch you fix bugs."
Guy: A lot of work goes into a product that you don't necessarily see, know what I mean? Like you've got to...all the bug reports and fixing little, weird edge cases. Again, you're working against the Amazon API, so there's probably weird stuff in that, or fixing up the barcode scanner because the eyesight camera doesn't autofocus anymore.
Wil: Yeah, that was a big thing, huge.
Guy: That was an amazing feature. That was one of...two things were cool. Obviously the look of the app in the bookshelf was like mind bending at the time, and the barcode scanner.
Wil: Yeah, that one was actually all my idea. I was proud of that. Originally we were working with this kid on his program, and we were just supposed to be provided advice and guidance and stuff. I was like, "Hey, you should write a barcode scanner." He was like, "Oh, OK." Then he didn't and I was like, "No, you should do it this way." He's like, "Oh. OK," and I'm like, "No, really. Seriously, do this." I finally realized he was just was very shy about just saying, "There's no way in fuck I can do this." [laughter]
Wil: Because he was literally like 14, and an amazing programmer at 14. I have no doubt that today he is just an incredible success, because at 14 he was selling this other program and making just mad bank.
Guy: I didn't know he was that young at the time. I had heard of him, and I'd heard of the product.
Guy: That's impressive.
Wil: Then I was like, "All right, I'm going to write this." I wrote the barcode scanner, and then started just writing the whole program. At the time, it was really interesting because no one had...some people had thought to try to read barcodes with camera/computers. All the research was around the traditional computer vision approach, where they're like, "Let's take a frame and then analyze that frame laboriously to see where we think the squares are, and the non-squares. Then let's have a probability that the barcode's in this area." "Then let's take the image and rotate it, so the barcode is facing straight up. Then maybe deskew it, and then, once we've done that, let's try to read..." They're doing all this incredibly complex image recognition and image processing, all of them.
I tested some of the public domain ones and they...I got zero success and it took between three and five seconds per picture to decide that it was failing. I looked at barcodes, and I didn't know anything about barcodes when I started. They are just beautiful. The UPC barcode is a thing of absolute beauty. If you like machine language programming, you have to look at it, because it is the perfect encapsulation of being a very reliable way to encode data in the absolute minimum amount of space, given the constraints.
Guy: You can just print them on anything and it's...
Wil: Yeah, it's just stunning. You can have your scanner tilted up to 30 degrees and it'll still read. You can have them printed...you can be between one inch and nine inches away and it'll still read, and with not complicated readers. It's this amazing standard. You can be upside down, or upside up and it reads either way. It's just freaking amazing. I looked at and it's really cool. I finally realized the way a normal scanner works, it doesn't take a whole picture. It just takes...there's a line. A laser plays across the surface and measures the intensity at any point. I'm like, then in theory...and this was the big thing. Back then...everyone who's now done a barcode framework, and now everybody's done it. It's probably first year of CSS now.
Guy: I think it's in iOS7.
Wil: Yeah, I heard that.
Guy: It was on a public slide, so I don't feel like an ass for saying that. [laughs] Anyway, go ahead.
Wil: The big realization, and it's always like, "Duh," is I'm like, this isn't a two dimensional problem. It's a one dimensional problem. We need to just take the middle line of the camera, turn it black and white and then just look at it as a series of intensities on a single line. You don't need to rotate the image because barcodes are already written so that they're variable speed, inherently. There's no way anybody holding a barcode scanner could be like, "Oh, it always has to be exactly face-up." They're written with the understanding that it's variable speed. Since we had perfect focus back then, the first algorithm really was just read the center line, figure out where there are areas that are at least one-half inch of white space, because the requirement is one-half inch of white space around a barcode.
Then, between any two pairs of one-half inch white spaces, sample the line at every one-one twelth of that space. You're reading 112 data points for 112 bars. It might actually be [indecipherable 87:49] , don't quote me on this. You do that and then anything that's above 50 percent is black, below 50 percent is white. There you have barcode, you read it.
That's so butt simple! I could do two thousand frames a second, instead of one frame every five, and fail. It's just amazing! I was like, "Oh my God!"
Of course we wanted to make it a litle more flexible for different light, so we did some tweaks on that. Then we did some skewing tweaks, then we did some other tweaks, and tweaks, and tweaks, and tweaks. But the basic algorithm, butt simple, but no one had done it before. Then they introduced the cameras that don't focus and I'm like, "Oh, great, now we have to deal with blurry images." I had no idea how we were going to do it, because it turned out the blur was enough that...
Guy: Threw off the sensing of the highs and lows, I guess, right?
Wil: Yeah, the camera image was blurry enough that you could have...a white line and a dark line is what you're supposed to read? But the white portion could actually be darker than the dark portion, because of a big, dark blob to the right of it that is pulling it down too. It could actually just pull it down farther than the actual...so you couldn't do any relative metric. There was no way to do it relative. [crosstalk]
Wil: ...was blooming out too much. We actually had to do something where...
Guy: Follow the signal kind of thing?
Wil: What we do is... [laughs] It's so awesome. [laughter]
Wil: The fundamental algorithm, the brief version is, we generate every conceivable barcode, and then we blur them. Then we compare it against what we get. When one of them matches the buffer, we go, "That's it! That's our barcode." [laughs]
Guy: That is incredible.
Wil: I know right? [laughter]
Wil: As far as I know, nobody's come up with a different way to do it. Of course, you're immediately like, "Every conceivable barcode? Come on, I'm doing it in my head. There's 13 digits in a barcode. It would take you forever." Of course the real answer is we don't actually generate every conceivable one, because the maximum blur is actually only about one digit wide. All you have to do is generate every pair, or every triad of digits, and then match the triad against [indecipherable 90:11] . Then you...
Guy: That is hilarious. Wow, I had no idea. [laughs]
Wil: We were the only ones who had barcodes for like the first year and a half I think. Then the ZXing Library came out. The actually tricky part of doing barcodes wasn't...the ones in the focused camera...it wasn't the algorithm I came up with. It was that I also had to figure out how to focus the eyesight, and no one had ever figured that out before. As far as I know, I was the only person who ever did figure it out, because ZXing was actually based on some work that I posted on the net. I said, "I have finally figured out how to focus this camera, using this incredibly obscure interface, called IIDC," which was just horrifying.
Guy: Oh yeah, I think I remember you posting that article and I just glazed over. I looked and I'm like, "I don't even want to know how to do this thing."
Wil: It was scary. That was like the key to figuring it out, but then we did the non focussing one. We had that, I think for about two years we were the only people that did it. Then some people started figuring it out. Now, of course, everybody and their dog has a barcode scanner. "Delicious Library Three" actually does have a new generation of barcode scanner in it. We rewrote the whole thing, from the ground up, so that it's now completely objectory, instead of being just monolithic. It's more flexible, which let us plug in these profiles, so that we can actually have it tuned for different devices, and different cameras. We look to see what camera we have.
Guy: Good idea.
Wil: It uses the threading stuff...the Grand Central Dispatch. On iOS and on MAC OS it's now multi-threaded, and really cool. We can actually decide how much of the CPU we want to burn. We're always trying to trade off, because you know, like on a phone, you don't want to burn too much CPU. [indecipherable 92:01] , plugged in computer, burn all the CPU you want. Wheee! [laughter]
Guy: That's cool. OK, DL1 ships, DL2 ships eventually. Meanwhile, you've hired some people...basically everyone you've hired has gone on to do really good things.
Wil: Yeah, the first six...
Guy: You've got a knack for that.
Wil: ...went on to Apple, so it was like downright eerie. It was like what's happening?
Guy: Mattis went to Apple?
Guy: On iOS, iPhone?
Wil: Lucas went to Apple. Before him, Tim Omernick went to Apple.
Guy: Oh, yeah! I forgot about Tim.
Wil: We had a support guy, Drew Hamlin who went to Apple. We had Scott Myer, was doing support and website for us. He went to Apple. Mike Lee went to Apple, and then Terry Fields went to Apple.
Guy: Lucas...did you mention Lucas?
Wil: Yeah, you did. [laughter]
Guy: Good run.
Wil: That was a lot of Apple.
Guy: Yeah, you know how to pick them.
Wil: I guess, or they know how to pick them, from me.
Wil: I've had various [indecipherable 93:27] over the last...the most I ever had was Lucas and Mike were working together. I had three, which was huge for me. I'm like, "So many people." That was one of the problems at Omni, was I'm not a good manager, and I don't really enjoy managing. I like programming, and I love working with people. I just don't like managing people. It's really hard for me because I need somebody that doesn't really want management, but wants to work with me. That's like...I don't even know if that's a thing.
Wil: We came out with "Delicious Library Two," and I added a bunch of stuff for people. Honestly, I wasn't super happy with "Delicious Library Two." I felt like...
Guy: Oh, no? Huh.
Wil: Yeah, I just felt like it wasn't...we tried to do so much stuff. We tried to move to Core Animation, which was new back then. We did Core Animation, and it made our graphics faster. We were able to do some neat effects, but it was a major architectural change for us. It involved just so much work to get everything to actually work correctly, and be fast. Then at the same time, we...
Guy: See, it really was new back then. It was like, I think, you guys went in ADA for DL2 before Core Animation was actually shipping.
Wil: Yes, that's, I think the only time they've done that. I don't think...we weren't shipping. We were still in Beta only on ADA, so it was...
Guy: Yeah, but you required the OS that hadn't come out the door yet.
Wil: We were using Core Data, which was also brand new, so we were like Customer Zero on those two things. We're like...
Guy: How do you like Core Data?
Wil: ...just so painful.
Guy: Do you like it now?
Wil: Core Data really saved our butt. It was amazing, but there are some design decisions in Core Data that have always bugged me.
Guy: Every old school NeXT guy I talk to just wants EOF back.
Wil: I don't think I want EOF. EOF was really heavyweight. For example, EOF was client server, so it wasn't really...Core Data's neat because you actually run it locally. You would actually think about making it your document format. There's some issues with Core Data, that I feel like they just messed up. One of the things is, if you try to access in Core Data...you try to access an object and that object has been deleted, it throws an error. It's a hard error, it's an exception. I'm like, that's not acceptable.
I've argued this over and over with their leadership, and they're like, "Well what we discovered in the EOF days was people just did it and then just didn't handle the error condition." I'm like, "Yeah, that's fine, but I'd still like to be able to access it. Just let it be." Because the object doesn't go away when you delete it from memory. It's still a valid object, you have a retain pointer on it.
I'm like, the correct response is, if I ask anything it should return "nil," or "zero." It should just go, "Nope, nope, nope, nope, no, no, no." They're like, "No, it should throw exceptions." I'm like, "OK, well, you're wrong, but whatever."
Guy: Exceptions, to me should be super rare.
Wil: Yeah, it's not acceptable, but the problem is then they're trying to design all these UI objects. They have collection view and outline view and all this. One of the obvious things you might do is want your collection view backed by a database and pictures. The problem is, if you delete something...and this is still a bug, to this day...if you delete something from collection view, and it sends a delete message to the underlying object, it will delete the Core Data object. Which will then, not go away from memory immediately, but will be deleted from the database.
Then the collection view will start animating out this object that has now been deleted, and it'll say to the object, "Oh, I'm animating you out, so I want you to draw at 50 percent opacity." It say, "Draw at 50 percent opacity? I'm going to raise an exception. I can't possibly do that. Crash!"
Wil: Of course you'd say, "You don't really draw your objects," and I'd say, "No, no, but you're trying to draw the text on the object, for example." It asks it what the text is and it crashes. Same thing with outline view. You can't have Core Data touch the user interface at all, because if it does, then the animations that are now all over the system will always crash whenever you do a delete. Because you delete from outline view now, it slides out. If it slides out, it's going to crash. That's really unacceptable, but then...
Wil: The worst part is, there's this flag on every Core Data object, called "Is deleted." You could probably write some wrapper methods to check that. Oh, wait, "Is deleted" is only valid for the milisecond that you say "delete," before you've called process pending changes. From then on, an "Is deleted" object, a [indecipherable 98:25] object will return no, till you see it. If you delete an object and it's gone from the database, you say, "Is it deleted?" It says, "Nope, sure not."
Guy: Oh, you're kidding?
Wil: I am not kidding. Still, to this day. It's a design decision. I'm like, "That is so incredibly broken!" They're like, "Well, see, what we meant with 'Is deleted,' is 'Is going to be deleted.'"
Guy: Is in the process of deleting at this cycle.
Wil: Yeah, and I'm like, "That's a different God damn thing! Give us a flag for 'Is deleted,' so we can actually tell if our object is invalid. Then, you end up accessing one of these? Say you link to it, and then you save your database, you get an error, because you're trying to save an object that's deleted. What do you think that error is? Oh, I'll tell you what it is! It's "This object cannot be saved because it's from a different managed object context than the manage context of the object linking to it."
Guy: Oh God.
Wil: That's how they tell you it's deleted.
Guy: That's unbelievable. Why? Because I guess they stick it into a different Mock, or the Mock was nil or something?
Wil: No, nil! Because it's nil, yes. Nil is different. They're like, "Technically, it's different because it's nil." I'm like, "That's the worst error message in the entire world!"
Guy: That's horrible.
Wil: Still, today! [indecipherable 99:30] .
Guy: [laughs] But you're still on it, right? DL3 has it?
Wil: DL3 is on it, but we ended up putting a layer of objects between us and the database. I'm like, "Oh, great, so you've invented this persistent object layer, but I need to make a shadow object for every single one. Then observe the objects underneath me." You can't just observe "Is deleted," of course, because that'll just crash. I have to cache the values, because if I try to ask it for its name as it's deleting out, it'll just crash. I have to cache a bunch of values. I was like, we spend all our time doing all this horrifying stuff, and the flipside is, yeah we get essentially instant saves. We've got people out there who have collections of literally 14 thousand items, and they modify something and it saves instantly. The old version, if you had 300 items, it would take a minute and a half to save that XML file, right?
Guy: Yeah. [crosstalk]
Wil: For the next app we're working, I actually just finished. I only took [indecipherable 100:27] . For the next app we're working on, we're actually doing a completely different style of database, file format. It's really cool, and you're the first to know. We are using Git.
Wil: We're not writing out files... [crosstalk]
Guy: That sounds crazy.
Wil: We're using the Git Object Database to store our [indecipherable 100:57] . At its base...I'm told this. I'm not a Get expert, by any means. I know a lot more than I did a week ago. At its base, Git is just a way of associating voids with blobs in its [indecipherable 101:12]. Everything else is piled on top of that, so you can use it as a generic, fast data store.
Guy: That's fascinating.
Wil: Yeah, it's really, really cool, it gives you a bunch of cool things. If you want to share files with somebody else, you can just be a clone. Just clone your file to them. You could just send it off to Git Hub. There's all these cool things you can do. That's actually...there's a bunch more cool things...
Guy: I guess you could rewind your file format too, right?
Wil: Yeah, exactly. What we do is we actually checkpoint every undo. Every time you would normally register an undo event, we actually do a Git checkpoint. Then the undo event is just...what we really register for the undo is just go back to this checkpoint in the Git file.
Guy: That's a cool idea.
Wil: We've got perfect undo, without ever having to write any undo code. We never again say, "Prepare invocation," or anything like that. We just...
Guy: That'll get...I'm impressed.
Wil: Isn't that cool?
Guy: I'm going to try stealing that idea.
Wil: Yeah, you should. I got it, actually from a programmer named Shaun O'Brien, who works for...let me get this right. I think it's called [indecipherable 102:35] . Am I getting that right? Let me make sure I get it right, MacRabbit?
Guy: Oh, yeah, I know that company.
Rene: CSS edit.
Wil: Yeah. Yeah, so he works for them and is also a friend. He was like when we were looking at some business...this is not for their [indecipherable 102:53] . It should be very clear this is not for [indecipherable 102:55] four or anything like that. It's a brand new product. We're looking for [indecipherable 102:58] format, and one of the things I suggested is I said to him hey, what if we had persistent undo? What if we added an undo stack where you could quit and launch and you still have your stack there and you can still undo as much as you want, just why does that go around, right?
Guy: I think that's...I love this idea because I do agree that that should be a necessity, especially with all of this stuff, with Apple...like you can opt in, and Apple will quit your app in the background for you.
Wil: Yeah, and the whole notion is, we're trying to get into a world. The way they did it was kind horrible in 10.6, but I support the notion of, I should be able to just turn my computer off and turn it on, and it goes, "boop!" Here's every window and everything, but then none of the apps restore their undo buffer. Some of them actually have horrible bugs because of that, there's some preview bugs that'll just kill you dead. I'm like, "What can we do?" John was like, "You should look into Git." I'm like, "What? That's crazy!" Then, I did it and it turns out it's fast as hell. There's no speed impediment, and it just has all these amazing, neat effects.
You can actually take your file...a user, who's advanced at all could take their data file from our program and just move the head in the Git repository, in Git or Git Box. Then if you reload it in our app, it's just you're at a different undo state. You're like, "Yep!" because we used the head to point to the current...
Guy: OK, that's pretty cool.
Wil: ...where you want to undo stack. We actually save all the redo's too, so you can actually do a bunch of stuff, undo half of it, quit, restart and then redo the rest and it's all just right there waiting for you.
Guy: I'm impressed. I'm definitely going to look into that.
Wil: The coolest part is you can also, besides restoring undo and redo, you've got snapshots of everything you've done ever in time. You could have a time buffer, just have a time scrubber where you can just scrub across time and watch your document change since the beginning. Just watch it build, even with undo's and redo's and all that stuff. You could just scrub across it.
Guy: OK, got to go. I'm going to start writing something now. [laughter]
Wil: It's really cool because I thought...I was like, "Oh, I'll just give it a try," and then four or five days later we've got it working. I'm like, "Oh my God. It's performant, and it has all the characteristics we want. It's really neat because there's all these tools that Git has, right?
Guy: Yeah, that you could use to inspect your documents.
Wil: Yeah. You could just use them to be like, "What did I change between this revision and this revision? Oh, I see." In theory, someone else could send you another...Modify your file and send it to you and you could actually merge it in to your repository and then read interchangeably.
Guy: I don't know about you. I'm not a source control guy. I use it, obviously, religiously but I'm not one of the guys that knows all the weirdo actual options and stuff.
Wil: Yeah, that's the thing. Git, at the high level is such an incredible ugly user experience abortion. It's one of the worst things ever. Then at the low level it's an amazingly beautiful, clean, wonderful thing and so I'd never thought about using it and then I started using it at low level. Then, when I did that, I then understood why these high level conventions...
Wil: ...and how they actually work. Like literally learning machine language, and then I'm nailing this in transit. I'm like, "This is really cool."
Guy: That's awesome. You're writing [indecipherable 106:35] kit for DL3.
Wil: Yeah. When we decided to try going full 3D. I think it's just beautiful. I think it's unbelievable.
Guy: I like the API for that. It's very basic.
Wil: Yeah, it's a very clean API. It was really well written. It was really, really stable, as well. We said, "OK. We'll take a week or so and see what we can get," and at the end of the week we had a bookshelf with books on it that we'd done ourselves and it looked really cool. They had texture maps on them and they had bump maps.
Guy: [indecipherable 107:12] maps?
Wil: They had [indecipherable 107:13] maps and we had light sourcing and we had actually an environment map so...Right now, we turned down the effects so they're not too obnoxious but right now if you zoom in on a book, especially in 3.1, and move around you can see that it's actually reflecting a room. There's a real room that everything is reflecting back at you from the books. We had all this stuff after one week. We were like, "Wow. This is amazing." We hired this really neat Canadian artist to do all our models. Actually, the one Graeme Devine used back for his original house games.
Guy: That's a good recommendation.
Wil: Yeah. I was like, "Well, you're the biggest expert, tell me." This guy's just amazingly good. Phenomenally cheap...way cheaper than getting pixel images. Like dollars, single dollars, for models. $15 would be an expensive model. Crazy!
Guy: That guy's undercharging. [laughs]
Wil: I know. I was like, "Jesus Christ, dude." It was really a great experience for us. It's very performant. On newer machines, it's faster than core animation. Unfortunately, the downside to this was there are some 2008 machines that really do not run [indecipherable 108:41] kit well at all right now.
Guy: Well, you build for the future, right? How long did DL2 ship for? Like four years? Five years?
Guy: Quite a while. That was a long time, but this code base is going to last roughly the same amount of time, right?
Wil: Yeah. It's depressing now, because we've got a lot of customers who are like, "I have a 2008, and this is just slow," and we're like, "OK, but it's not even your chip set. It's a driver issue. The drivers for those machines just aren't there yet." We've been told this. We're at Apple's mercy. Then the customers are like, "Yeah, whatever. I've heard this before. Sure. It's all Apple's fault." I'm like, "No, no, really. If I could show you, I'd show you a different machine that's not supposed to be much faster that's literally ten times as fast as your machine." We didn't have access to those machines, so we couldn't figure out what...we didn't see it when we were testing it.
Guy: Can you turn off the environment map and do some of the...
Wil: Well, that's the thing. If we knew which ones to turn off, yeah, we could just turn them off for those machines. I'm sure it would be great. But I don't know what the feature is that's killing them. We're trying to work them, and unfortunately it's slow going to be like, "I need to get you a special build, and then this happens. Try that out."
Guy: Are you selling direct anymore? Sorry, go ahead.
Wil: A lot of people just...it's really weird. It's discouraging, because a lot of people just say, "It's slow." Well, what's slow? There's a hundred different parts to this program. It turns out they mean different things. One guy had thousands of items he typed in the search box in 3.0. It was slow to produce results in the search box. Jonathan added a full index to everything and now typing results is instant. With him, he's like, "Oh, it's fast now." But all I got was, "It's slow." What's slow? It's slow. No good.
Guy: Not actionable.
Wil: We don't know how to do that. It's like, "I have 1700 items and searching is slow when I'm type," I'm like, "Ah! That I can do." We're still trying to narrow down the people that are like, "OK. It's slow as in, when you're in cover view mode? It's slow to scroll? It's slow to select?"
Guy: Well, you were telling me a story at WWT, actually, about the table view.
Wil: Yeah. The table view. The new auto-layout table views. Under 10.8, they are not fast. Not at all fast. They do an auto-layout pass, and instead of having the table you have these optimized cells like the old days, which was obnoxious, I don't like cells, but they have hundreds and hundreds of sub-views, and so they do an auto-layout pass with hundreds of sub-views, and it's just unbelievably pokey. Every time you scroll a single line, it's like, "Oh, we have to re-auto-layout, everything."
Guy: Yeah. That's funny that the table view gets this. [laughs] Slower than the fancy 3D vantage view.
Wil: Yeah. It's so dog slow.
Guy: That's fixed now, right?
Wil: I can't comment...
Guy: Got it.
Wil: ...on that, we didn't fix it.
Guy: Understood. [laughs] Do you guys sell direct anymore?
Wil: Yeah. For [indecipherable 112:16] two, half our profit was direct. Three, it seems way more profit in the App Store. I'm not sure why that is.
Guy: Go ahead?
Wil: Bully for them.
Guy: Yes, OK. For DL2 to half the profit over the life of the product, or while you were selling in both stores?
Wil: While we were in both. It was doing really well in our direct store, and we made more money so that's nice.
Guy: Yes, so how do you feel about the app store?
Wil: In general I think it's a great thing. It was really upsetting to not have paid upgrades, and we did that. We've been asking for them forever, and Apple just doesn't seem to be hearing it, and it's...my argument is really strongly that without paid upgrades you're encouraging people to write throwaway apps, because there's no reason for us to write a 2.0 version if we can't get upgrade revenue. It doesn't...
Guy: No, you may as well do a different app so you can still...
Wil: Might as well write a brand new app, yeah. It just...the economics...you are incentivizing us...I don't think [indecipherable 113:34] , but, whatever.
Wil: ...to write 1.0 versions and then just keep them barely up-to-date.
Rene: Do you think that's a philosophical thing, they're actually against it, or it's just something they haven't gotten around to yet?
Wil: I don't know. I think for their apps they're against it, and I think there may be some people who weren't thinking, "Hey, it would be nice if somebody buys apps and then they can just get updates forever." Like they're thinking that's customer friendly, and I'm like, "It's not actually customer-friendly if their app doesn't...
Guy: Everybody goes out of business.
Wil: Yes. The thing is like I think what Apple's guilty of is optimizing for the...their optimizing the most optimal case, because it's like, "Well yeah, the Angry Birds guys can afford to make free level packs for Angry Birds because it's fucking Angry Birds." They made a trillion dollars.
Rene: There's 900 versions of it.
Wil: Yes, and there's 900 versions anyway. But the rest of us that aren't making games, which have always been one-offs, there's no such thing as a real upgrade, we really live and die by our upgrade revenue. We do get a sales boost when we come out with a new version. There is more people buy the new version as well, but we depend on that upgrade revenue. We just got slaughtered. Just tons of people are like, "I can't believe you're not rewarding us loyal customers." I'm like, "I just lowered the price from $35 to $25, and the upgrade price, the upgrade price to go from one to two is twenty bucks so it's not very much more, and I had lowered the price for everybody, because I knew I couldn't do upgrade pricing so I just said, "Well, I'll just lower the price rather than everyone paying more.
Then they're like, "Well, you're not rewarding us specially." I'm like, "I can't." They're like, "That sucks." I'm like, "It's not me that's sucking," but I get...
Guy: Well, yes, on the other hand...
Wil: ...one star.
Guy: I mean what? They've been using your software for like three or four years. It's like it's not a lot. Like 25 bucks after four years of using the software for all this new stuff is not asking a lot.
Wil: Yeah\s, but they just want some recognition that they been using it for longer, and I'm like, "OK, that's...I do appreciate it. I really do, but I can't do it. I can't help you."
Rene: Yes, we've got that feedback, too. We've got people who are angry that other people are getting the discount that only they feel entitled to.
Wil: Yes, exactly. I'm like, "Well, that's actually an odd sentiment."
Rene: Not very charitable.
Wil: Yeah, yeah...and the other thing about Delicious Library is the 3 version we know people are moving away from physical media, and so we said we've still got some cool stuff we want to do, but how do we make it relevant to people? We decided to refocus around recommendations and wish list sort of dropped out of that. Like you don't want to do recommendations about wish list because... We came up with this neat recommendations algorithm that is closer to Netflix's and farther from iTunes, because iTunes still does just the one-off, "You once rented Party Girl On Ice, therefore would you like to read...would you like to buy the movie Ice Shaving three?"
Wil: Like, "No, I'm sorry. I did not..." Like I'm still haunted by these purchases because it doesn't look at the gestalt of what I've bought. We actually do that now where we look at everything you bought, and we score it all, and it's a really neat algorithm. We actually take into account like whether you've actually read a book or watched a movie and all these other little factors that would make a difference in the real world, right? Like you're probably more likely to want to buy a book in a series if you've read the other books in the series.
Wil: We do all this stuff, but I think I'm not really great at marketing, and I don't know that the message has gotten out that like we're not focusing on it being an app just for collecting books if you're still one of those crazy people that collects physical books, like me. It's about having this amazing recommendation engine, and then once you get recommendations you can buy them any way you want. Buy the iBooks. Buy the Kindle. I like the recommendations because I entered my sample library, and I was like, "Oh, wow, these are giving me recommendations of things that I didn't know...
Guy: That you actually...
Wil: ...that existed that I actually really want. I'm like, "Oh, buy that. Buy that. Buy that"
Guy: Oh, that's cool.
Wil: Yeah, it's really fun. I think there's so much power in that, like it's the next generation of what people...people talk about the next generation of the Web. It's like personalized stuff. We're not just doing search results. We're doing search results, but we know stuff about you that make them [indecipherable 118:35] . This is one of those things where it's like, whatever, seven million books on Amazon.com so now the problem isn't selection. It's how do you find the one that you want? If you could say to someone, "If you came up to me today and I believed you, if you weren't just lying, you said, 'I'll buy you a book, and I'll charge you five bucks extra, but I guarantee you'll love the book,'" I'd do it in a second right? Like there's no question if I actually thought you'd do it. I'm like, "Well, why wouldn't you pay 25 bucks to get a program that's going to tell you all the books you're going to love and all the movies you're going to love and all that?
Guy: Yes, that's a good idea. I do like that about Netflix. Often they suggest stuff to me and I'm like, "Ah, whatever, it looks lame," and then I try it, and, like, you know what? I did like that.
Wil: My biggest problem with Netflix is I have seen everything that it recommends for me. I've done too much so it's like...it's really accurate. It's like, "We think you'll give Firefly five stars." I'm like, "Yep, I did." It's like, "Well, we think you're going to love Arrested Development." "You're right. I loved it. [laughter]
Guy: It's a little bit...
Wil: It's maddening [laughs] because it's a little bit late to the party for me, and I'm like, "Darn it."
Rene: It's also odd if you have families and they have very different tastes, because then you have a lot of content that you've seen that's not you personally but is someone in your family has seen.
Wil: Yeah. Yeah, and that's one of the things we had in Delicious Library three for the first time is we had the ability to rate things you don't own, which we never had, but is obviously vital to recommendations. You can just search for things and then rate them right there in the search results as you see them, because our whole idea was just try and encourage people to rate things. Our design goal for this was to make it so everywhere you see an item you can just do one click and rate it, and then at the end we ran out of time, and so we weren't able to figure out a good way to put rating stars on the cover view because it's hard not to...We had some ideas, but it just didn't come together. But everywhere else in the program where you see something you can...
Guy: [indecipherable 120:37] .
Wil: ...there will always be a field that says, "Hey, you want to rate this right now? While you're looking at it, just rate it."
Guy: That's cool, yeah. Well, because yeah, you don't want to have to get info on an item, and note it, because nobody's going to do it, right?
Wil: Right, exactly.
Guy: Yeah, good call.
Wil: Yeah, yeah. I mean I'm really proud of the work I put into it. I'm also really happy to work on this new app because I've been working on Delicious Library now for nine years.
Guy: Yeah. [laughs]
Wil: It's just amazing to be on this other thing.
Guy: Fresh new thing, yeah.
Rene: It's interesting because you've always been trend-setting using the latest technologies. You love games. You don't make a game, but the apps that you make are highly gamified. It seems like a very interesting nexus of all your personal passions in the apps.
Wil: Yeah, that's very true, and this next one is an app that I've been thinking of since I was at Omni. I think I started thinking about it in 2001, and the technologies have all finally arrived for it. Yeah, it's going to be much like that. Actually, the way I describe it to people is I'm like, "Hey, you want a program that does this, right?" They're like, "Yeah, those programs already exist." I'm like, "Yeah, but have you ever used any?" They're like, "No, they all suck." Then I'm like, "Well, what if they were actually like this game, which this game actually does this? It does this thing that you want done in real life. But you can do it in a game." They're like, "Oh, yeah. If it worked like the game, I would do it." I'm like, "What we're saying is..."
Wil: "...you already know what needs to be done. We just need to make it as simple as the game, and then everybody's got it."
Guy: Yeah. I actually think I know what you're...whatever.
Wil: Yeah, I think we talked about it.
Guy: We talked about it before. Yeah, I'm excited to see it.
Wil: Yeah. That's what I'm going to do, so whoo! I mean [indecipherable 122:23] going to do.
Guy: Yeah, I'm excited about that. OK. Well, I guess we plugged everything, and I don't want to keep you forever.
Wil: [laughs] Yeah, yeah. Thanks for giving me time to do some plugging.
Rene: Are you interested in any... [indecipherable 122:37] just happened. You went to SceneKit, and you did core animation. Is there anything that you're looking forward to playing with that Apple's announced so far? I mean there was Sprite Kit. They've showed off a lot of interesting stuff.
Wil: Yeah, I mean I'm pretty excited about Sprite Kit, and it's funny because I think internally there is maybe the tendency to feel like Sprite Kit competes with SceneKit because SceneKit's a hard sell, right? It's obviously a leap. We've all seen 3D frameworks before, and we've all been like, "Bah, whatever." I think it's amazing. I think it's going to be used again and again if it's given a chance. But I think internally there might be some like, "Well, we have Sprite Kit. Do we really need a 3D one?" But that said, I think Sprite Kit's amazing, and I totally want to play with it. I think SceneKit is different and amazing. [laughs] But...
Guy: There were very different problem spaces, right?
Wil: Yeah, yeah, totally, but Sprite Kit does offer some of the physics-y stuff, and I haven't seen very much on that. I need to go back and watch that talk. I caught just bits of it. But that really excites me because I think the physics-based is where we're going for all UI interactions. That's actually the story of why Matt has left Apple actually, is he was working on iPhoto, the one for the iPad. This is so funny because he's a high school dropout, and he's like, "Whatever. You can't teach me anything. I can learn myself." He really could. Then he realizes very quickly that physics, like classes he decided to skip, contains the key to realistic-feeling interfaces. He teaches himself all the Newtonian physics, and then he codes it all in Quartz Composer.
Guy: That is crazy.
Wil: He has all these Quartz Composer patches that use real Newtonian physics, and he showed it to me. He's so proud. We were in an airport once. We ran into each other randomly, and he just sits me down and shows me this stuff on his Mac. He's like, "Look at this. See, I've got all this. Here's my gravity constant. Here's my direction constant. Here's all these different constants. I plug in these patches, and then all these objects I just imply an impulse to them. Then they just slow down naturally over time. If I flick this photo, watch how it slows down completely correctly."
I'm just like, "You're a high school dropout? I don't know anybody that graduated high school that could do this math." [laughs] Much less write a fucking Quartz Composer, which is probably the crazy part of it, a patch and Quartz Composer. Yeah. He did it. iPhoto is supposed to be entirely physics, but it's really hard to do actual physics or was hard to do actual physics for animation.
I don't know if Apple's announced anything on that, so I guess I'll shut my mouth. But it was hard. As of 10.8, it's hard to do actual physics in core animation. They give you three options, right? You can do linear. You can do a thing that slows down. You can do a thing that speeds up as it goes on its path. But you can't say, "Oh, here's my gravity context. Here's my..." all that.
But I really do think that is the key to the future. Yeah, so Matt has coded all that. He was all excited about it, and the programmer was like, "Yeah, it's really hard. I'm just going to use ease in, ease out." Matt is like, "You suck. I quit."
Rene: Ironically, iOS7 has all that physics and particles in it.
Wil: Right, yeah.
Guy: Yeah, but the next thing he did push bot press. Very physics based.
Wil: Yeah. I don't think he's the Second Coming of Christ or anything, but he is an absolute certified genius. I fully believe he'll be running Apple one day. I think its still 20 years away, but I do he'll be running Apple. I honestly do. Also, I would never bet him against him on user interface issues. You'd be stupid. There's no point in doing it. [laughter]
Wil: He's good at that. That's great. He's not good at everything. I'm probably a better driver than he is, but you know, whatever. [laughter]
Guy: That's great. Where do we find you online, Wil?
Wil: Let's see. On Twitter I'm WilShipley all one word, one L because I lost my L to a hot French Canadian girl... [laughter]
Wil: ...in twelfth grade. She was like, "I think Will' would be cool if it was spelled with one L." For the rest of my life I have spelled it with one L.
Guy: Are you serious?
Wil: This is an absolutely true story. Her name was Monica Bailey. She was a pretty blond French Canadian.
Guy: Wow. Nice.
Wil: I sat beside her in English, and I was madly in love with her. She's like, "I'd like your name better if it was spelled this way." I'm like, "Done. Done and done."
Guy: That's awesome. That's my favorite story yet. [laughter]
Wil: I'm glad you like it. [laughs]
Rene: [laughs] Whole podcast worthwhile now.
Wil: Is that right?
Guy: [laughs] [cuts off]