Sunday, May 24

Welcome to the iTunes App Store!

This document describes our process for reviewing applications for iPhones and iPods touch submitted to the iTunes App Store. We’ve avoided using legalese in this document so that you’ll actually read the whole thing. Please do so before starting to write your application, so that you won’t waste a bunch of time writing an application that we cannot publish.

We hate having to reject anyone’s application, so we want to make it clear that we have very compelling motivations behind our acceptance policies, so you can adhere to their spirit. (Oh, our lawyers just reminded us that we should mention that circumstances, times, and social mores change, and we reserve the right to change these policies at any time for any reason, but we’ll do our best to update this document to always reflect the current state of affairs.)


FIRST, you must do no harm. We cannot allow applications that will mess up users’ iPhones, or interfere with their normal operation in any way. The iPhone is a vital communications device, and any downtime on it is unacceptable to Apple and to our customers.

While viruses, malware, and apps that can be remotely exploited are obvious targets of this rule, there are more subtle implications to this. For instance, we cannot allow applications that send too much data through the cellular network; not only would we be breaking our agreements our cellular carriers (who have priced their data plans based on an estimated average data use of customers without including your application), but overloading the network would make it unusable for everyone, and thus violates our first rule.

We also do not allow emulators or other computer languages right now, because those kinds of applications are notorious for having subtle security holes, and we must take the cautious path to ensure the iPhone remains stable for our customers.

SECOND, if your application is what a reasonable person would consider offensive, we require it to carry an “M” rating on our app store, which carries with it certain restrictions on who can purchase and use your app.

We do this because, to a certain extent (and despite our best efforts), users do not fully distinguish between third-party authors like yourself and Apple; if something runs on an iPhone and it is ‘bad,’ that is (at least somewhat) considered to be Apple’s fault. Apple abhors censorship in any form, but it also recognizes that even within a single society there are different ideas about what is acceptable and unacceptable, and we would like to warn our customers (yours and Apple’s) who might be more sensitive.

We realize that any attempt to categorize anything into “offensive” and “inoffensive” is a fool’s errand, especially considering that your application’s audience will encompass thousands of cultures around the world. Thus, we will use our “best efforts” to determine if an app might be found offensive: for example, if it is overtly sexual, if it contains slurs or curse words, if it has violent themes — these are topics reasonable men disagree on, and our goal is to flag anything that might be controversial so that, for instance, parents can review it with their guidelines before letting their children see it.

RESUBMISSION of your app can be done if you believe that it has been rejected in error — please include in your resubmission a description of what you’ve changed in your app, or why you believe the original judgment was in error.

Because in the end our judgments are made by humans, and humans are variable and fickle creatures, our policy is to always let resubmissions be judged by a different person at Apple, to get another perspective.

REFUNDS are opt-in for developers in the iTunes App Store: you can set the number of days during which Apple will offer a full, no-questions-asked refund to your customers, which number will be displayed prominently in your application’s listing on the iTunes App Store and on the user’s list of installed apps inside iTunes.

While the number is up to you, we generally recommend that the more your application costs, the longer a refund period you offer; if you are making a $20 application and your customers are “done with it” after two days, you may not be offering a good value for money spent. As well, customers will be inclined to trust software that offers a generous refund policy.

Please note that Apple’s checks to you will be delayed by the length of the refund period you offer; we will not act as your creditor to cover refunds.


FINALLY, note that these rules actually exist only in the fevered and every-hopeful imagination of one Wil Shipley. Consult the real iTunes App Store for its actual policies, not a blog. Dur.

Labels: , , ,

Saturday, February 9

My C4[1] Talk...

Mr. Rentczchxh has posted my talk from C4, and if you would enjoy watching a talk without paying, you can watch it. It's on hype, and how I generate it, but it also touches on other topics concerning having your own software company, like making good software, bundling, getting into stores, having sex with cylons, &c.

Watch it!

Or don't.

Labels: , , , ,

Sunday, May 20

CS OMG WTF?

Today I got mail from a young, impressionable lad that read thusly:
Hey Will,

I've been reading your blog for about a year now, and I thought you would be the best person to answer this question.

I'm coming to the point in my life when I need to decide what it is I want to do (I'm 16). I've been programming for 4 years on mac and for 6 years in general, and I'm looking into computer science as a major, but I just don't know what it is! I've read the pamphlets, course outlines, etc, but they don't just answer it, what the fuck is computer science? Is it math, physics, programming? I honestly can't get a straight answer.

I've seen people parade their knowledge of O(N*log(2)) or whatever, but I just don't see how its relevant to programming. Everywhere I go I get mixed signals about what I will actually be learning during Comp Sci (for instance, my high school 'computer science' course consisted of Microsoft BASIC, and boolean logic, the fuck?).

I guess what I'm trying to ask is what you learned during you comp sci days, and what you actually gained out of it and continue to apply to this day (if anything).


Well, young lad, I think this is an excellent question, mainly because you asked it of me, and that means I get to go blah blah blah some more, which is my nigh-favorite activity.

--

First off, high school computer classes are, in my experience, a joke. In my day I literally got an 'A' for showing up -- the teacher knew I could program circles around him so he didn't even bother assigning me problems, I would just go to class (sometimes) and do whatever I wanted for an hour, and every quarter I'd get an 'A'. I'm disappointed with this teacher for not trying to challenge me more, but, hey, free period, so I didn't complain. (Now that I think back on it, a lot of my high school teachers gave up on me this way -- "Here, have a free 'A', in return you must not bug me for the rest of the quarter.")

--

There are myriad reasons why nobody can answer what kind of science is "computer science" -- prominent amongst them is that it is its own science, so it's not math or physics or programming, per se. Also, most people don't know, since unlike math or physics, computer science is not something most people experience every day in their normal lives. You drop an apple, you see physics in action. Tip a waiter, you're doing math. But what the hell is computer science? (To be fair, I think most people think majoring in math would mean, "like, learning 2+2 and shit.")

Another reason is that "computer science" programs vary INCREDIBLY from school to school. At a Real University(TM) you're going to be studying actual science and engineering principles in the context of designing and programming systems; at one of those technical institutes you see advertised on late-night TV you're going to be taking a class in "Advanced Java Programming" where you learn how to print "hello" over and over.

--

I went to the University of Washington, which was, at the time, ranked one of the top schools in the nation by some ranking organization. I honestly have no idea who does those ranking, or what kind of criteria they use. There were distinct advantages and disadvantages to going to a big school.

Let me first say some good things: I got to study under some amazing professors at the UW. Dr. Jean-Loup Baer was our department chair (which is a catchy rhyme if you sing it) and taught a course on machine language that I still remember. (I wrote a "Connect-Four" program in VAX assembly that won... some of the time.) I did my honors thesis for Dr. Hank Levy, who literally wrote the book on assembly that we used for Dr. Baer's class. Dr. Ed Lazowska was pretty famous in the community and taught a bitching course on operating systems which explained the fundamental functions of and problems faced by any operating system, in the context of real operating systems (mostly UNIX) -- we wrote a fully-functioning OS for that class, with demand-paging and protected memory, and it was cool as hell. My student advisor was Dr. Tony DeRose, who now is a Pixar bigwig and was and is a hell of a nice guy (but unfortunately I took my graphics class from the OTHER graphics professor in our department, who was, well, a big jerk-head). It's pretty cool to go to the movies and see my old advisor's name in the credits.

I got to take classes from Dr. Alan Borning (who was part of XEROX Parc in the really cool old days) and got to think about what programming languages could be instead of what they are.

And, yes, I learned O(n) and O(log(n)), and they are extremely valuable to everyone who writes code. I learned the then-current approaches to simulations and to artificial intelligence (which was mostly, "uh, maybe one day") and to operating system design and graphics libraries and all kinds of things that I have used over and over, because it turns out that none of this knowledge ever goes out of style -- optimizations will ALWAYS be about finding ways to do less work instead of finding ways to do the current work faster, and there will ALWAYS be bottlenecks in the system that require thinking about; whether they are giant mag tapes or hard drives or nvram or holo-memory doesn't make a difference.

--

But this points to the problem of the school I attended, and my strongest advice for anyone considering colleges and universities: at state-funded Universities, professors live or die by the papers they publish in coordination with grad students. Their performance in the classroom counts for almost nothing, and most of them wouldn't teach at all except that they are required to by the state. Their funding comes from research projects (that the grad students do), and the more successful and widely-praised their projects are, the more money the professors get. Period.

For instance I had the extreme privilege of learning compilers from a professor who was famous in the industry and who was one of the best teachers I have ever met -- he actually taught using the socratic method, letting you figure out the answer by asking you exactly the right questions. Every year students rated him the best professor on their evaluation forms. However, he left while I was there -- he didn't get tenure at the UW, because he hadn't done enough research for them -- he spent all his time teaching undergrads, which is verbotten at the UW.

This system also means the grad students are in a lofty class above you, the lowly undergrad -- to an extent that I believe puts most other departments to shame. I'm not even going to try to guess at the millions of dollars flowing into the UW over the years from DEC, Intel, Microsoft... but it's a LOT. The computer industry has money, and loves research, because turning a research project into a real product takes years in our industry, not decades. Microsoft backed a dumptruck full of money up to the UW shortly after I left, and I'm not sorry I missed that.

So, at the UW, the grad CS students all hang out in locked labs with personal desks, and hang out with the professors in their offices, go to picnics and BBQs at professors' houses... whereas undergrads worked in public labs, had no access to the 'better' equipment, and were only allowed to talk to their professors during very restrictive "office hours" that were, like, from 7am to 8am every other Tuesday. There was no learning by osmisis for undergrads. The idea of an undergrad going to a party at a professor's house was anathema! We weren't even invited to the TGIFs that were held in the very same building.

Now, in contrast, my sister, who was a year older, attended Reed, a small, liberal college, and majored in medicine or drugs or some this. She constantly told me how she'd have dinner parties with her favorite professors, get high with them, etc, etc... mind you, this was Reed, but, still, I really felt like there was some happy medium I was missing. I wanted more from my college years. I wanted some professor to takes me under his wing and teach me there is joy and subversion in poetry, and then he's fired for it, but not before one of my classmates kills himself because he wants to act, or something.

--

I'll give you a story from my undergrad years that still sticks in my craw, to this day:

- As head of the student chapter of the UW ACM, I walked into a professor's office (not one of the ones mentioned above) to ask for something for undergrads. I wait and wait while he shoots the breeze with two graduate students, who are lounging around his office with their legs over the sides of the chairs, talking about some scandal or BBQ party or some damn thing. Finally, he looks up at me, and I present my case: could one of the many, many laser printers that are scattered around the building in locked closets (so that only the graduate students could get at them) be opened up to undergrads, so we could use laser-printing on occasion, instead of only having access to a line-printer on a public second-floor lab?

This professor asked me some question in response -- I don't remember what it was, or what my response was -- this was 20 years ago. But I do remember what he said after that: "Why are you wasting my time?"

I looked at the two grad students still flopped down in the chairs in his office -- his office, which I had never been inside, before; even now, I was just hovering at the doorway -- and I left. I never spoke to him again.

--

But let's not end this on a bitter note. There are many nice postscripts to my college career.

Years later, when I was at Omni, we were asked by Apple to meet with some representatives from Pixar, who were considering using Cocoa technology, and wanted to talk to some outside experts, and, you know... we were just so damn bitching at the time. So we're at WWDC, and we're sitting at a table with some Apple homies, and a certain Pixar fellow sits down, and we start talking about how great Cocoa is and what all Pixar could do with it, and then he stops and turns to me, "Hey, don't I know you from somewhere?" and I say, "Yes, Dr. DeRose, you were my student advisor fifteen years ago. And you were awesome, thank you." I can't tell you how happy I felt to be able to tell him that.

(I should mention at this point that normally I wouldn't blog about a meeting like this from WWDC, since it would be assumed to be NDA, but pretty much every NDA says you're allowed to talk about events that have been announced through other channels, and it's well-known now that Pixar uses Cocoa -- in fact Wave gives talks about the amazing things he does with it fairly often.)

Plus, Dr. Lazowska saw my name in the paper a few years ago and wrote me, as well, and I was pretty touched that he remembered me and that I was his student. I don't know if he remembered what a snot-nosed brat I was -- hopefully not.

It's got to be a neat thing, to see your students go on to success, to know you were a part of it -- I really do owe a lot to Dr. Lazowska and the other professors. I realize that more and more as I try to teach people myself -- I find that I'm using their lessons to teach a new generation, just much less formally.

--

So, those are my tales of college CS. Is it worth it to go through a CS program? Yes, if it's a good one. I would certainly recommend a smaller college or university if you're an undergrad, but even large ones are going to teach you a lot, you just can't expect that you're going to have drinks and dinner with your professors. Unless you are a hot co-ed, and the professor is my dad. (Just kidding, dad, I know you stopped dating your students after you married one... Oh, SNAP!)

Are you going to use the lessons you learned in CS in 'real-world' programming? Yes. Not all of them, but the ones you do use are going to make a HUGE difference. The delta between programmers who know when to use a hash table and those who don't is enormous. The delta between programmers who understand the O(n) stuff and those who don't is also huge. Too many programs are written by programmers who, frankly, suck at theory, and they write slow, crappy programs as a result. Get a solid basis in the science before you become a programmer.

Labels: ,