-
Notifications
You must be signed in to change notification settings - Fork 1
/
apple.html
427 lines (345 loc) · 12.6 KB
/
apple.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Write code for the web</title>
<style>
:root {
--bg: white;
--text: oklch(25% 0 0);
--soft: oklch(42% 0 0);
}
@media (prefers-color-scheme: dark) {
:root {
--bg: oklch(31.14% 0.021 285.75);
--text: oklch(90% 0.008 286.75);
--soft: oklch(78.61% 0.021 285.75);
}
}
body {
background-color: var(--bg);
color: var(--text);
line-height: 1.5;
margin: 1em;
max-width: 40rem;
}
@media (width > 40em) {
body {
margin: 4em;
}
}
p, blockquote {
margin-block: 2.25rem;
}
header {
margin-block: 2.25rem;
color: var(--soft);
font-style: italic;
}
ol {
padding-inline-start: 1rem;
}
li {
padding-inline-start: 1ch;
margin-block: 0.75em;
}
h3 {
margin-block-start: 5rem;
}
blockquote {
margin-inline-start: 0;
border-inline-start: 1px solid var(--soft);
padding-inline: 1rem;
color: var(--soft);
font-style: italic;
}
.quote {
color: var(--soft);
font-style: italic;
padding-inline: 1.5rem;
}
hr {
border: 0;
border-block-end: 1px solid var(--soft);
opacity: 0.1;
margin-block: 3.375rem;
}
footer {
margin-block: 20svh 40svh;
}
</style>
</head>
<body>
<p>
This is a yarn of three threads, and it got a bit long. The tldr is
</p>
<ol>
<li>Apple doesn’t care for me as a developer</li>
<li>I should write code for the web</li>
<li>Nothing is set in stone, really</li>
</ol>
<p>
The story is personal, but I hope readers find something they can relate to in
their own life stream.
</p>
<header>
<p>Manav<br>Feb 2024</p>
</header>
<h3>Apple doesn't care for you, Mr. Developer</h3>
<p>
Apple cares for me as a customer, but it doesn’t care for me as a developer.
This dynamic had been subconsciously griefing me for years, until I was able to
formulate it consciously recently.
</p>
<p>
The dependency goes <em>Developer -> Apple</em> and <em>Apple -> Consumer</em>,
there is no reverse arrow from Apple to the developers.
</p>
<p>
If all developers stopped building for Apple's platforms tomorrow, Apple will
still survive, almost intact, since it doesn’t hurt their core value prop (I'll
expand on this below). Apple has no dependency on individual developers. They
care for and need to collaborate with corporate dev “partners”, but that's
different.
</p>
<p>
Since companies, especially ginormous multinationals, behave in purely game
theoretic cost/benefit terms, and since Apple has no reason to care about
developers: indeed it doesn’t.
</p>
<blockquote>
Just to restate the obvious - such a stance isn't necessarily the case. There
are other multinationals who've figured that developers form a core part of
their strategy.
</blockquote>
<p>
This realisation has made me happier since I now know my place. I can like their
products without wanting to develop for them.
</p>
<hr>
<p>
Google has a bug. I have dynamic light/dark mode, and if I search on Google at
night, the first page shows up in light mode. With the rest of my machine in a
subdued state, the glaring white of the background hurts my eyes.
</p>
<p>
In the morning, my laptop automatically switches back to light mode. Now when I
search on Google, the results first show up in an unreadable black background.
</p>
<p>
One would think that of all the leetcode certified staff, there must be someone
there who would know an O(n) algorithm for fixing this bug. But no, this bug has
persisted for years (I've counted), and it is unlikely to be fixed in the future
unless it gets accidentally fixed as part of some overhaul.
</p>
<p>
Apologies for the snide, I know some great people who work there. My point is
that Google isn't fixing this bug not because it doesn’t know how to, but
because it doesn’t care. This bug has zero impact on its bottom line.
</p>
<p>
The people like me who use alternate search engines like DDG have already moved
on years ago. The rest of the (overwhelming) majority is stuck with Google. No
matter how bad their search is - UX or results - they have a captive audience.
</p>
<blockquote>
I think DDG etc also have a marketing blind spot - they keep pitching themselves
as a more privacy friendly alternative, they never go after the main course. I
don’t use DDG because of its privacy benefits, I use it because it reminds me of
early Google - simple low clutter UX, good quality verbatim search results, and
unobtrusive ads.
</blockquote>
<p>
Okay Manav, but I thought you were ranting about Apple, why bring in
Google?
</p>
<p>
Google is an example where I never grieved much because I understood the
dynamics. I know that I, the customer, am not their game theoretic target. So
when I have to invariably use their products and face another user hostile
interaction, I try to shrug it off and move on. I know that Google has entered a
rent seeking phase, and while it is sad that the world is giving all its video
content up to it for even more of a hostage situation in the future, but that’s
for governments to deal with.
</p>
<p>With Apple I didn’t understand the dynamics.</p>
<hr>
<p>
2009-ish. I struggled to find a computer for my mom. Windows (at that time, I
don't know about now) was just too insecure. Linux required constant tech
support. Eventually I prepared for her an OpenBSD machine running Firefox and a
basic game (Bubbles I think).
</p>
<p>
Obviously, this was not ideal. It fulfilled some goals - it worked without
requiring any tech support when I wasn't around, and I was ensuring her data
safety and privacy - and she was surprisingly happy with too. But I was not
happy about how this was such a shrivelled parody of what things could be, and
how it limited the ways she could use computers to enrich her life.
</p>
<p>
Around this time, I joined a new job as a developer for a company that was
making iOS apps. After a week or so of using the mac at work it hit me -
<em>this is the computer I wanted for my mom!</em>
</p>
<p>That is Apple’s value prop.</p>
<p>
As soon as I had saved enough I bought her a MacBook. And heartfeltly thanked
Steve Jobs for engendering it.
</p>
<p>
The earth has done many a revolutions since then, and Jobs has left earth, and
the form factor my mother uses has changed from a laptop to an iPad. But it
still satisfies that core value prop.
</p>
<p>
Let's consider a different context. Even if there were no apps in my phone, I
would still buy an iPhone. For myself likely, but most certainly for her.
</p>
<p>
The people running Apple know all this. In the deep dungeons of Menlo Park when
there are meetings of the core council, after all the sacrificial lambs have
been slain and the blood and gore washed away, out comes the elder spreadsheet
that encodes Apple’s business model, but nowhere in them is any cell, input or
output, which involves developers. Sure, Apple doesn't mind if developers are
also happy. But it knows it doesn’t need to care if they are.
</p>
<p>
This lack of caring is never expressed out loud. It isn’t some conspiracy, it
just is one of those things - you wouldn’t walk up to someone who you don’t care
about and tell them you don’t care.
</p>
<p>
Unfortunately all this results in sometimes schizophrenic behaviour on Apple’s
part, as there are many individuals working at Apple who <em>do care</em> about
developers and are trying to make things better.
</p>
<hr>
<p>
2016-ish. As part of my annual Apple simping I was watching WWDC when they
announced Apple Music APIs.
</p>
<p>
I was ecstatic. My coworkers were puzzled at my ecstasy, “All this, can’t we
already do with Spotify’s API?”. I didn’t know how to answer that, so I just
repeated how <em>this changes everything</em>.
</p>
<p>
Of course, and as is usual, I was wrong. It didn’t change everything. In fact,
it didn’t change <em>anything</em>.
</p>
<p>
Apple’s own music player was, and still is, unusably bad. Even talking about it
makes me angry. The people making it can’t be so incompetent, and it seems to be
working for the rest of the world, so I've never known what to make of this
situation.
</p>
<p>
With the APIs out, I'd thought maybe things will change. But nothing happened.
Apple’s own player continues to make my blood pressure high anytime I have to
use it. And whatever alternative players I have tried just all seem to go for
the same generic “Spotify” approach to music.
</p>
<blockquote>
<p>
I think it is because the people who're making these apps were never around in
the Justin Frankel era of Winamp, and haven't seen how a music player can
provide a fast, seamless, endless <em>yet</em> still personal approach to music.
</p>
<p>
That era is not coming back because it relied on piracy, but luckily we don't
need to anymore - that's the great thing about Apple's music catalog! We can
recreate that experience without needing to sail the high seas.
</p>
</blockquote>
<p>
So that's the backstory. Now recently I had a bunch of free time, and thought
that I’ll write a music player. Mostly for myself, but I also wanted to write a
tutorial. This is what I wrote in the README in the first commit:
</p>
<p class="quote">
Here I'll be writing down my notes as I build Flowers. The world needs not one
music player, or two, but many: each of us has our own way of connecting with
music, and so maybe these notes will help others build the flower they want, nay
need.
</p>
<p>Cute, dumb, and in vain.</p>
<p>
As I went about it, I realized that 8 years down the line, not only is the API
still buggy, it is also still not public!
</p>
<p>
Firstly you need to pay Apple. No, not for bulk usage etc, but <em>just to try
out the API</em>. So there there goes my dream of writing a walkthrough –
nobody’s going to pay Apple 100 bucks just to try things out. And it also
partially explains why there has been no innovation.
</p>
<p>But that's not even it - Even if you pay them, you get a restricted API.</p>
<p>
The point where I disgustedly gave up was when I found out that while I was
jumping all these kafkaesque hoops, instead you could just go to Apple's own web
music player, type <code>MusicKit.getInstance().developerToken</code> in your
browser console, and you’ll get an unrestricted root token for free!
</p>
<hr>
<p>All these anecdotes Manav, what does all this mean?</p>
<h3>Write code for the web</h3>
<p>
Write code that runs on the web. We’re lucky to have a shared platform that no
single entity owns. Even benevolence can be ruined by incompetence.
</p>
<p>
The web platform is in a precarious place – overreaching governments, browser
duopolies, a complex developer ecosystem – so it is not a given it’ll remain
thriving. But so far it has survived. And every year longer it survives, the
more the chances that it’ll continue to thrive in the future.
</p>
<p>
Ironically Google is the good guy here, they’re doing great work for the web. On
the other hand, literally every single workaround I’ve had to write in the
recent past in web related code has been due to Safari's princessness.
</p>
<h3>Nothing is set in stone</h3>
<p>
Which brings me to the third thread of this story, how all this made me
reevalute my relationship with companies.
</p>
<p>
Someone I know, someone who has a better grip on living than me, told me once
that it's not useful to put people into the buckets of good and bad. People are
a mix. Bad folks can do good actions sometimes, and vice versa.
</p>
<p>
I don't know to what extent I've been able to internalize their message, but
that's for another day. What I realized is that the same applies to companies.
</p>
<p>
Companies are like people. I don't know if they're sentient, but otherwise they
share many attributes with us: they're intelligent (they were the AI before AI),
have personalities, they are born, thrive, live and die, they're even legal
persons.
</p>
<p>
Just like we can't live without other people, we can't live without companies.
They have many inhumane characteristics, but like them or not, such fractal
conceptions of human organizations will always be around.
</p>
<p>
By not permanently bucketing companies into good or bad, I can have a more fluid
interaction with them - I can reduce my dependence on them when they try to put
me in a zero sum game, or reengage more with them if they're willing to be more
symbiotic. Nothing is set in stone, really.
</p>
<hr>
<footer class="quote">
<p>
I think most large companies and medium-size companies, and even small
companies, are starting to look at the web as the ultimate direct-to-customer
distribution chain, bypassing all middlemen, going directly from the supplier
to the consumer.
</p>
<small> ⸻ Steve Jobs, 1996, Make Something Wonderful</small>
</footer>
</body>
</html>