PodSearch

ATP

175: Dance Palace

 

00:00:00   I was always just thinking that this file system would save me. I just thought, like,

00:00:03   well, I'll just, I'll stick it out and there'll be a new file system here probably next year,

00:00:07   and I've been thinking that for a lot of years now.

00:00:09   Well, I spent this morning trying to parallelize the lame MP3 encoder.

00:00:16   Why?

00:00:16   Why not? Because it's a very hard problem that hasn't been solved since, like, the early 2000s.

00:00:22   And I often need to encode our show MP3,

00:00:27   which takes probably, I don't know, 90 seconds to encode.

00:00:30   It's a surprisingly long time

00:00:33   for a modern computing task like that, and that annoys me.

00:00:37   And so I figured, why don't I spend the afternoon

00:00:39   seeing if I can parallelize the MP3 encoder?

00:00:42   And there are faster encoders than the lame encoder,

00:00:47   and I know, this is hard for me to talk about

00:00:50   because I know that the word LAME is really not a nice word to say, but it's kind of like

00:00:56   the GIMP photo editor, like also not a nice word to say, and for whatever reason these

00:01:01   open source projects name themselves these acronyms without regard to what those words

00:01:05   mean and how they hurt people, so I'm sorry in advance, but it's called the LAME MP3 encoder,

00:01:11   and it is, I have tested many different encoding options for podcast audio from MP3, AAC, the

00:01:17   HE, AAC, all like the MP3 Pro,

00:01:21   like all like the add-on, like spectral things

00:01:24   to these formats, and simple joint stereo

00:01:28   with the Lame MP3 encoder is by far the highest quality

00:01:31   and at the best bit rates that I have found.

00:01:34   It's really quite good.

00:01:35   So problem is MP3 encoding is very difficult

00:01:38   to parallelize, at least while also doing it well.

00:01:42   And so that's what I'm kinda trying to do here.

00:01:45   - Just for ATP?

00:01:46   Well, I mean, ideally I would ship this to other people as well. You know, maybe open

00:01:51   source it or maybe just embed it into my pre-production tool that I have to at some point hopefully

00:01:56   maybe release. So it could be very helpful because one of the problems is like we've

00:02:01   basically hit a wall of single-threaded performance on modern computers. Like, we're not really

00:02:06   getting much better at that and that's like one of the only tasks that I do on a regular

00:02:10   basis on my computer where I'm just like dying for more gigahertz on one core. So if

00:02:16   So if I can eliminate that, that makes me happier with my computers, and it makes me

00:02:20   happier with potential future iMacs and MacPros and MacBooks and things, because I can encode

00:02:26   our show four, eight times faster, fast enough that it doesn't matter anymore.

00:02:31   Well, that makes sense.

00:02:33   Well, good luck.

00:02:34   I mean, I'd love to see that happen, because I think it would make a lot of people very

00:02:38   happy, but, God, that sounds like a royal pain in the hindquarters.

00:02:42   It really is.

00:02:43   The one saving grace of this is that,

00:02:45   you know, normally if you're dealing with like a,

00:02:48   a non-trivially sized open source project,

00:02:51   or heck, even a trivially sized one,

00:02:53   usually they have, it's just dependency hell.

00:02:55   And usually it is so hard to get to the point

00:02:58   where you can even build the thing,

00:03:00   let alone like trying to make changes

00:03:03   and you know, try to test things and it,

00:03:05   it is such a pain 'cause they all depend

00:03:07   on these weird crazy libraries that you don't have

00:03:09   or that are hard to install on Mac OS X or something.

00:03:12   and it's such a pain usually.

00:03:15   Lame is actually really simple.

00:03:17   There's not much to it.

00:03:18   It's not very many files, and there's,

00:03:21   as far as I know, there's no external dependencies,

00:03:24   except maybe like basic libc stuff that everything has.

00:03:27   So it's pretty, it's really actually

00:03:30   quite pleasant to work on.

00:03:33   So kudos to the Lame project.

00:03:35   - Is this all C or C++?

00:03:37   - It's all C, which is also nice,

00:03:38   'cause I don't really know a lot of C++,

00:03:41   so to have something to be pure C

00:03:42   is also kind of a welcome change.

00:03:45   - Yeah, it's like back a few jobs ago.

00:03:48   Back when you actually had a job.

00:03:49   - Yeah, exactly.

00:03:50   I still like C a lot.

00:03:52   I mean, I recognize that working in C nowadays,

00:03:56   it's like having a classic car

00:03:59   that you work on in your garage.

00:04:01   You know, it's like, it's really fulfilling,

00:04:04   and it's really nice and cool

00:04:06   if that's your personality type,

00:04:08   But I really would be hard-pressed to justify using it

00:04:12   for like, quote, real work anymore.

00:04:15   But I really do enjoy working with it

00:04:17   on the occasion that I need to work on it.

00:04:22   - Fair enough.

00:04:22   I mean, anything's better than Perl or PHP, am I right?

00:04:25   So anyway, we should do some follow-up.

00:04:27   The Sierra Mac Pro support.

00:04:29   This is not good times for John Syracuse.

00:04:31   (laughing)

00:04:32   - It's not so bad times either.

00:04:34   - Marco's theory was that it was

00:04:36   because of the instructions.

00:04:38   Yeah, my theory was the hardware encryption instructions

00:04:41   that Intel has added over time, but turns out, nope.

00:04:44   - Well, I mean, we didn't get any official word on it,

00:04:46   but talking to a whole bunch of people,

00:04:47   hey, why do you think they dropped support

00:04:49   for this computer or that computer?

00:04:51   The general consensus was that they just dropped support

00:04:54   for computers that are old because it's a pain in the butt

00:04:56   to keep supporting them.

00:04:57   And there's lots of things that are a pain

00:04:58   to keep supporting.

00:04:59   If you do anything to the OS that changes

00:05:02   sort of the driver model or that requires drivers

00:05:05   be even just recompiled or changed in some subtle way.

00:05:09   Supporting old hardware like say the airport card that could be put into my 2008 Mac Pro,

00:05:15   that's kind of a pain and you don't want to bother with that.

00:05:17   But the big one I think is video drivers because there is usually some participation from the

00:05:22   video card vendor, whether it be AMD, ATI, or NVIDIA in the creation of the drivers for

00:05:29   OS X for these various GPUs.

00:05:32   Apple doesn't want to keep doing that and usually if you were to go to AMD and say hey

00:05:36   We're making a new version of the operating system

00:05:38   Can you help us or either help us to or do it entirely on your own drivers for?

00:05:44   The work with the Sierra kernel and this ancient 2008 Mac Pro. I don't think they're keen to do that

00:05:51   But anyway, lots of reasons why you might want to support old hardware

00:05:55   And yeah, no no specific smoking gun for any particular hardware feature

00:06:02   that is not supported and adding

00:06:04   into this pile of

00:06:06   Support for the idea that it's just because it's old is that 2009 Mac pros are also not supported contrary to what I had hoped

00:06:12   On the last show so that means my work Mac can't run Sierra either

00:06:16   What are you gonna? Do I'm gonna wait? I'm gonna wait until the new it's almost

00:06:21   It's almost this you have to buy a new computer. Oh, yeah, everyone gets laptops at work now

00:06:25   so I'm gonna wait until the new MacBook pros come out and

00:06:27   And then I'm going to wait another month, and then I'm going to get a new computer at work.

00:06:32   Now you do realize that the new MacBook Pros will almost certainly have the arrow key layout that you hate.

00:06:39   I'm not gonna use that keyboard.

00:06:41   It's just gonna be sitting off to the side of the screen that I never look at, connected to an external screen.

00:06:48   Like I'm just using it as a weird shaped Mac Mini.

00:06:51   That's my plan, because I only have one screen at work, and it's not a great screen, but whatever, it's fine.

00:06:56   So I'll keep doing that. I want to get the 15 inch so I can put it in mirrored display mode

00:07:01   That's how much I'm not going to use a second screen

00:07:03   Just so my windows and crap won't move when I disconnect the monitor. It'll be the same rez on both

00:07:08   You know what I mean? That's my current plan.

00:07:10   I love that your current plan like clearly didn't even consider another Mac Pro

00:07:16   Well, I can't work would never buy that for me

00:07:19   Like I my Mac was the first Mac at the entire company and I had to get special

00:07:24   Dispensation to get it and it was like way more expensive than the $400 piece of crap Dell laptops

00:07:28   They were getting everybody back then mine was like the cheapest possible Mac Pro you could get in the minimum configuration

00:07:35   It was like $1,500 and it took so much for them to choke that down

00:07:38   Nowadays, they're better about buying Macs if you want one and they'll buy, you know

00:07:43   13 inch or 15 inch MacBook Pro and that's what I plan on getting but no Mac Pro is not an option

00:07:50   Neither is an iMac for that matter.

00:07:53   Would you get an iMac over a MacBook Pro if you had the choice?

00:07:56   Yes I would.

00:07:57   Is the base model 5K iMac not price competitive with the 15-inch MacBook Pro?

00:08:02   I don't think it's price.

00:08:03   I think it's…

00:08:04   You don't understand big corporations.

00:08:06   They just want to do things the way they want to do them and they want regularity and uniformity

00:08:11   and they don't want you to be a special snowflake who wants a specific computer.

00:08:14   They only have and support and know and understand two kinds of computers on the Mac side and

00:08:20   It's whatever.

00:08:21   I don't know.

00:08:22   I mean maybe I'll ask about it but…

00:08:23   No, this is exactly my experience.

00:08:25   My company gets leased Macs and I think they're two-year leases and basically your choices

00:08:32   are MacBook Pro if you do some sort of development work, I believe a MacBook Air if you don't,

00:08:37   or some sort of god-awful Dell.

00:08:39   And those are…

00:08:40   Actually it might be an HP, some sort of god-awful PC, but it's one of those three.

00:08:44   And if you want anything else under the sun, well, tough noogies because the help desk

00:08:48   does not want to support it.

00:08:49   So I'm right there with you, John.

00:08:51   Now to be fair, my MacBook Pro is very nice.

00:08:53   I have no complaints.

00:08:53   I'm just saying that that is the way

00:08:55   corporate America works.

00:08:56   You must conform, you must be one of the people

00:08:59   in that 1984 commercial.

00:09:01   You must be a faceless number in the crowd

00:09:05   that is using one of the blessed computers.

00:09:08   - I miss the days when I was unsupported too

00:09:09   because when I was the first Mac in the company,

00:09:11   they're like, all right,

00:09:12   but you're gonna be totally unsupported?

00:09:13   I'm like, yes, that's exactly what I want.

00:09:14   I want to be totally unsupported.

00:09:16   Don't touch my computer ever.

00:09:18   do nothing to it. Unfortunately now that Macs are officially supported, I am beset on all

00:09:22   sides by terrible things like add your Mac to the Active Directory network. No! Oh no!

00:09:28   Run Symantec Antivirus on your Mac. Oh, that's real important. Run these other applications

00:09:33   in the background that will grind your CPU to death as it does who knows what. Oh, it's

00:09:37   really terrible. Wait, I have one question. Do you have to install Adobe Acrobat? I don't

00:09:43   have to, but it could be installed on my behalf silently in the background any day I come

00:09:47   to work who knows what's happened to my computer because it's not under my control they just

00:09:51   force install software on it whenever they want none of that software makes my experience

00:09:54   of using the computer better but supposedly now I'm protected from viruses yeah whatever

00:10:01   I can't believe you stand for anyone else having any sort of access to your computer

00:10:05   like I understand that you have no choice I totally get that but you of all people allowing

00:10:10   that vulnerability if you will I am stunned that you that you stand for that it's rough

00:10:15   but what can you do? Like I said, you have no choice.

00:10:17   The final bit is, like, how sad is this really? It's not really that sad. I installed Sierra

00:10:22   on my 2008 Mac Pro and it runs fine. Because I have an aftermarket GPU, the installer's

00:10:26   a little bit cranky about it, but if you just, like, I'm installing an external disk at this

00:10:30   point because I'm not going to install it on my main system, it's the first developer

00:10:33   release. So I installed it on an external hard drive using my 2011 MacBook Air, and

00:10:38   then I just deleted a single file from the thing, System Library Core Services PlatformSupport.plist,

00:10:42   I renamed it or whatever.

00:10:45   And then my Mac Pro 2008 boots from it just fine.

00:10:50   And it runs fine, as far as I can tell.

00:10:51   So I don't think it'll be that big a deal.

00:10:53   I may end up doing the same thing with my Mac at work, although I'm sure corporate IT

00:10:57   will love that.

00:10:59   But, you know, I could try that right before I give up and say, "Okay, fine, get me the

00:11:04   new laptops or whatever."

00:11:06   But anyway, if you have a 2008 Mac Pro or another unsupported computer, Sierra might

00:11:11   work for you if the set of hardware you have is not the stock set of hardware that came

00:11:15   with that computer.

00:11:16   So now hold on a second.

00:11:18   So you generally do some amount of work at home on a semi-regular basis, is that correct?

00:11:25   So you're doing that on your personal machine because you have a Mac Pro at work and a Mac

00:11:29   Pro at home, right?

00:11:31   So that's cool with you?

00:11:33   Like it's just an external hard drive.

00:11:34   It's just I have like seven hard drives connected to my computer, like four internal and three

00:11:39   external and half of them are turned off most of the time.

00:11:41   the other ones are unmounted most of the time. It's really easy to just put a beta OS on

00:11:44   an external drive and then reboot and boot off of that drive and it's fine. I immediately

00:11:48   unmount all my other drives when I launch and it's like it's not a concern.

00:11:52   Right, no, no, I'm not on Sierra at all. On a general level, you have infected your home

00:11:58   computer with work-related things, is my point.

00:12:01   Well, no, because I just remote desktop into my Mac at work to do stuff.

00:12:05   Okay, so you have infected it with some sort of VPN connection.

00:12:07   - I have in fact, the VPN software is installed

00:12:10   for me to get out of the VPN and off to remote desktop.

00:12:13   - I gotcha, okay, so any of the development

00:12:15   isn't really strictly speaking happening locally.

00:12:18   - And really it's not even happening on my Mac either.

00:12:20   I mean, then I'm just SSHing into, you know, like it's,

00:12:23   unlike you, I'm not actually doing development

00:12:26   on my Mac really, I mean, except for like the web browsers

00:12:29   that are on it, all the actual code

00:12:30   and everything else is on servers, you know.

00:12:33   - Gotcha, all right, that's actually fairly fascinating.

00:12:36   I did not know that.

00:12:37   Okay, anything else about the Mac Pro support?

00:12:40   - It will never end.

00:12:41   - Anything else today?

00:12:43   All right, the talk show live.

00:12:45   This was recorded Tuesday,

00:12:48   I'm sorry, Tuesday before this passed.

00:12:51   God knows, by the time this thing is released,

00:12:52   it was probably two months ago.

00:12:54   But anyway, the Tuesday that WWDC was going on,

00:12:59   there was the talk show again this year.

00:13:01   Was it two years ago that we were guests, I think?

00:13:04   And then the only the only reasonable conclusion after having this this impossibly awesome and attractive trio on stage is

00:13:11   to have

00:13:14   Phil Schiller who followed up last year and then this year. What are you gonna do? Well, why not have Phil Schiller and

00:13:21   Craig Federighi and we were all there

00:13:24   We were sitting in the front row and it was amazing and I cannot say enough good things about this

00:13:31   This talk show if you are not a regular talk show listener

00:13:34   If you're one of the ten people that do not listen to the talk show, but do listen to this show I cannot

00:13:38   Encourage you enough to listen to this episode of the talk show. We'll have a link in the show notes. It is excellent

00:13:44   There's also a video

00:13:45   Which was very good from what I've gathered. I haven't actually watched it myself, but

00:13:49   seeing Craig and Phil

00:13:52   Talk to each other and talk to the audience and talk to John Gruber all of all the above

00:13:59   Was amazing and there's a few line items that we'd like to go through about that

00:14:03   but one of the things that made me kind of laugh and and

00:14:06   Really that I loved about it and made me love Craig Federighi even more

00:14:11   Was as the talk show was going on

00:14:14   Craig on the surface looked comfortable

00:14:18   But if you really looked at him for more than a second you realized he is not in love with what he's doing right now

00:14:23   Not in like not that John was doing anything wrong. Not that that Phil was doing anything wrong

00:14:27   But you could just tell that Craig was like a little nervous and not entirely comfortable with what was going on

00:14:33   And he was leaning forward a lot. He he kept it. I did the same thing when we were on the talk show

00:14:38   Dub-dub he kept leaning forward and then like putting his his elbow on his knee and then propping his head up

00:14:45   And then I think you could he realized that that kind of looks a little weird

00:14:49   For those in the audience then he would try to like casually put his arm down which I'm sure if we looked at the video

00:14:53   of me on stage. I probably did this 35 times, but there was a lot of that. But the thing

00:14:59   that struck me the most was when Jon Gruber talked about something developer related,

00:15:09   not only did Craig have impossibly good answers for all the questions, sometimes more forthcoming

00:15:15   than maybe he should have, but he sat bolt upright every time. And he was so confident

00:15:22   and so sure of himself, and it was so awesome to see,

00:15:26   and God, I love that guy so much.

00:15:28   - Yeah, it was such a good show.

00:15:30   I mean-- - It really was.

00:15:32   - You know, you can think about like, you know,

00:15:34   what kind of show would you expect to have

00:15:37   where Apple executives give an interview, you know?

00:15:40   And if you think about it just like that,

00:15:42   you might think, well, they're just gonna be, you know,

00:15:44   going over PR talking points and everything.

00:15:46   And certainly, some of what they say is PR talking points,

00:15:50   but most of it isn't.

00:15:52   And most of it is, like,

00:15:54   I was on the talk show this week,

00:15:56   I don't think it's out yet,

00:15:57   but I basically reviewed the show for Jon

00:16:00   on his own chokes, I knew he wouldn't do it himself.

00:16:03   So forgive the repetition here,

00:16:06   but I think one of the best things I liked about it,

00:16:09   first of all, is that we got to see two Apple executives

00:16:13   interacting with each other, and you never see that.

00:16:16   Like, even people in Apple hardly ever see that.

00:16:19   And so to see that in this context, these two people who clearly have known each other

00:16:25   for a very long time and have worked together for a very long time, two people on top of

00:16:29   their game, Phil and Craig, are really excellent at their jobs. And they both have incredibly

00:16:37   deep knowledge about the stuff that we care about and the stuff that Gruber would be asking

00:16:41   questions about at WWDC. So like, I was thinking like, you know, we were kind of speculating

00:16:46   sitting beforehand, oh, who's you gonna have this year?

00:16:48   Who's you gonna have this year?

00:16:49   And one of the ideas is what if he has Tim Cook?

00:16:53   And having Tim Cook would be like,

00:16:55   it'd be really like a great badge of honor.

00:16:57   It would be like a really noteworthy thing.

00:17:00   But I think having Phil and Craig is actually a better set

00:17:03   for that audience for that time.

00:17:06   Because Phil is really, in many ways,

00:17:10   it seems like he is kind of like the head

00:17:12   of product direction on some level,

00:17:15   And it seems to be kind of a shared role

00:17:17   in Steve's absence.

00:17:19   Johnny obviously has something to do with it.

00:17:21   I think Tim probably has something to do with it as well,

00:17:24   and who knows who else,

00:17:24   but it seems like a lot of that falls on Phil.

00:17:27   So just product decisions in general also.

00:17:30   Phil is the head of the App Store now.

00:17:32   So again, very relevant to this audience.

00:17:34   And then you have Federighi, who is,

00:17:39   yes, we knew he was the executive in charge

00:17:41   of software engineering stuff,

00:17:44   But I don't think a lot of us knew quite how much of an engineer he is.

00:17:48   And also, not only does he have deep technical chops, but he also has deep knowledge of specific

00:17:55   implementation details of the stuff they're doing now.

00:17:58   So it's not like he ascended into this ivory tower and is just dictating things down to

00:18:03   his minions to have them do all the work and he's just being a figurehead.

00:18:06   He's clearly still very much involved in those decisions and very, very, very technical down

00:18:13   to deep levels and able to explain that very well.

00:18:18   So to have that combo of like the product guy

00:18:21   and the app store guy in Phil, and then to have Craig

00:18:25   as like the technical head is really, I think,

00:18:29   the perfect combo to have at WWDC.

00:18:31   Plus, I think their personalities work really well,

00:18:34   both in general and also with John Gruber

00:18:36   being the interviewer.

00:18:38   So overall, I would much rather have them than have Tim

00:18:42   in that context. And I think it was as good as it could possibly have gone. I think it was great.

00:18:47   I mostly agree with that Tim would have been more boring, but I've been thinking about it more since

00:18:51   WWC week. Like it really does depend on the topic that you're interested in. You know,

00:18:55   if I'd mentioned Johnny Ive, obviously if you're going to have a bunch of questions about design

00:19:00   stuff, he's the guy you want and Phil is not going to be able to give you much there and neither is

00:19:05   Craig for that matter because like, you know, product design, whether it be hardware or software

00:19:09   is Johnny's domain and a lot of the decisions that are made there, you know, I would imagine that

00:19:13   they could add some insight into them, but you want the man himself if you want to get that

00:19:16   information. So there's Johnny set aside. And then Tim, after Apple comes out with the car,

00:19:21   the guy you want to talk to is Tim Cook, until you know like the deep car people, because your main

00:19:25   question is why has Apple chosen to make a car? And the person who can answer that best is Tim

00:19:29   Cook, right? Because that's a decision at his level. So I would actually like to see Tim Cook

00:19:34   at some point, but for the topics I was interested in this year and most years, yeah, I'd rather

00:19:39   I'd rather hear from Craig and to a lesser extent Phil because I'm much more interested

00:19:43   in the technical and less interested in the App Store stuff, but at WWC, like you said,

00:19:47   a lot of people are interested in App Store.

00:19:49   Exactly.

00:19:50   The reason the talk show live is a topic in the follow-up here is because I was adding

00:19:54   items to the follow-up of bits and pieces and I realized most of them were information

00:19:58   from the talk show live.

00:20:00   The main reason I would suggest people listen to it is that it has information that you

00:20:04   probably won't see elsewhere because you know again Phil and Craig were on there

00:20:08   and they didn't just say things that were already said at WWDC they didn't

00:20:13   just say things that have already been said by Apple PR they provided new

00:20:16   information and some of it I thought was interesting and you won't know it unless

00:20:20   you listen to that or listen to these two tidbits that I pulled out of it

00:20:24   the first one is about an iOS 10 how you can get rid of the Apple apps like if

00:20:29   you don't want the stock apps or the the tips app or whatever you don't have to

00:20:33   hide them in a folder anymore, you can now delete them, but they aren't actually deleted.

00:20:37   As many people speculated, and as has been speculated for a long time before this feature

00:20:41   even appeared, they're not actually removed from the system.

00:20:44   Even though when you delete them, you can go to the store and then redownload them,

00:20:47   but as I think it was Craig said on stage, that download will run suspiciously fast because

00:20:52   they haven't actually been removed from your computer.

00:20:54   All the App Store is saying, "Oh yeah, I'll redownload those for you," and then it just

00:20:57   reveals them again.

00:20:58   And a bunch of reasons were given for actually leaving them on the system.

00:21:01   delete I think the documents and data associated with it but you won't delete the actual executable

00:21:05   so that was interesting tidbit and the other one is relevant to a couple of stories and tweets that

00:21:11   have been going around about the the current beta of the app store ad service where they'll you know

00:21:15   people can try it out for free now and all you do at this point is say yes I want to opt my

00:21:21   app into the ad service I don't know can you do the keywords and everything as well but anyway

00:21:25   I looked around and couldn't find anything else to do so I opted my my app in but I think that

00:21:30   that just means that Apple will like kind of shove it on top of search results sometimes,

00:21:34   but I don't think I have any controls over that.

00:21:37   Yeah, it's like the automated one where they said, "If you don't want to pick your keywords

00:21:40   and doing that stuff, just we'll figure it out for you." And so one of the little controversies

00:21:44   that spun up on Twitter was, I think it was someone from Tweetbot was saying they searched

00:21:49   for Tweetbot, like the actual name of their application, and the number one hit to the

00:21:53   ad at the top of the search results was an ad for Twitterific. And it looks like, "Oh,

00:21:59   has purchased the Tweetbot keyword, but they haven't because you can't even do that at

00:22:03   that point, and they didn't.

00:22:05   And that brings up the whole topic that we discussed before about buying someone else's

00:22:09   trademark as a keyword.

00:22:11   So if you have an application, if you were, you know, the maker of Twitterific and you

00:22:15   wanted to buy the word, the keyword "Tweetbot," could you do that?

00:22:19   That was addressed by Phil Schiller and the Talk Show Live.

00:22:23   And he said that they are explicitly allowing this.

00:22:26   I think this is a direct quote from the transcript.

00:22:28   It says, "You can use someone else's brand in your AdWords

00:22:31   that you want.

00:22:32   As we thought about it, that is more

00:22:34   likely to benefit the small developer

00:22:35   than the big developer."

00:22:37   And the idea is that if you have a well-known brand,

00:22:40   if you like Clash of Clans or something,

00:22:42   you're not going to buy a keyword

00:22:44   for some tiny little application that doesn't--

00:22:46   tiny little similar game that doesn't sell a lot of copies.

00:22:48   But if you make a game that's similar to Clash of Clans

00:22:51   and you want to break into the market, and really, right now,

00:22:53   you don't have any customers, maybe you

00:22:55   the Clash of Clans keyword. That is the theory behind this, and Phil articulates it in the

00:23:00   most straightforward manner as you're going to get. And it was surprising to a lot of

00:23:04   people, and we'll see how it plays out in real life, but from the perspective of app

00:23:09   developers, especially app developers who sort of are on even footing, it seems like

00:23:12   a pretty scummy thing to do to buy your competitor's trademark. So I think a lot of people are not

00:23:18   going to do it because it seems rude, and I would imagine the companies that would do

00:23:22   it are exactly the companies that are big because they have no scruples and aren't run

00:23:26   by an individual who is answerable to their practices and they have a marketing department

00:23:29   who's measured on how well they boost sales.

00:23:32   And so I think this is going to happen a lot.

00:23:34   I'm not entirely convinced that it's going to benefit the small developer more than the

00:23:37   big developer.

00:23:38   But we'll see.

00:23:40   And again, Phil talked directly about this issue when questioned about it on TalkToYourLive,

00:23:43   so check it out.

00:23:44   I think there's a number of issues and factors that go into this.

00:23:49   What exactly is a small developer?

00:23:51   I think who this will actually hurt most are people like Twitterific and Tweetbot and maybe

00:23:58   Overcast where kind of like medium-sized developers were like, "We're not big enough for like

00:24:03   the Clash of Clans people to bid on our keywords because who cares? Like, you know, we are

00:24:08   nothing compared to what they get and we're also not related." But other people who make

00:24:13   apps that are related to podcasting or related to Twitter would very easily like bid on like

00:24:20   the medium sized apps in their category on those keywords.

00:24:23   So I view myself as a small developer

00:24:26   in the grand scheme of things.

00:24:28   But a lot of people view Overcast as a big app

00:24:30   in the category relative to their app.

00:24:33   So I think when Phil says he thinks this will benefit

00:24:37   small developers, I don't think he's talking about people

00:24:40   like Overcast and Tweetbot and Twitturrific.

00:24:42   I think he's talking about little things

00:24:44   that most of us have never heard of

00:24:46   that happen to be in these same categories.

00:24:48   he's right that it would probably benefit them.

00:24:51   Like, you know, the kind of thing where like,

00:24:52   if you search for like, you know, Twitter or whatever,

00:24:55   you know, you get a couple of Twitter apps

00:24:57   and then you get a whole bunch of what looks like

00:24:58   just garbage and spam and it's like, you know,

00:25:00   photo rotation apps for Twitter or stuff like that,

00:25:03   you know, that kind of stuff.

00:25:04   It's gonna be that kind of app, I think,

00:25:08   that could benefit from this, not medium-sized apps

00:25:11   like Twitter Effect, Tweetbot, Overcast.

00:25:14   The other problem here is,

00:25:16   Well, and I think there's two other problems here.

00:25:18   One is that we've had kind of like download

00:25:23   keyword spam issues in iTunes Connect

00:25:25   since the beginning of the App Store.

00:25:27   The apps have a keywords field

00:25:29   that they can enter keywords into for search,

00:25:31   and those have historically been used

00:25:34   pretty strongly for relevance in search,

00:25:36   more so than the description that is publicly shown.

00:25:39   The problem is these keywords

00:25:41   are not publicly visible anywhere,

00:25:43   and so there's kind of no downside

00:25:45   for an app to put its competitors or other large apps' names

00:25:50   in those keywords.

00:25:51   And Apple has a rule against this,

00:25:53   but in practice that rule is only really enforced

00:25:55   and enforceable against like large trademark, like Disney.

00:26:00   So it'd be hard to put Disney in your keywords

00:26:02   and get accepted through App Review.

00:26:04   But if another Twitter app puts Tweetbot in its keywords,

00:26:09   that is way more likely to get in and to get through.

00:26:12   and historically that has been seemingly very badly enforced

00:26:16   by App Review.

00:26:17   And Phil even kind of said something along the lines of like

00:26:20   we're gonna be trying to step that up.

00:26:23   Something to that degree.

00:26:25   And then thirdly the problem is the name of,

00:26:29   if you put down overcast as your keyword

00:26:31   and you might search for the word overcast to test this out

00:26:35   and then my app shows up below some ad

00:26:37   and you might think this is horrible.

00:26:39   My app is not called Overcast in the app store.

00:26:43   My app is called Overcast colon podcast player.

00:26:46   And if you look at almost every other instance

00:26:48   of this kind of like ad doing what seems

00:26:50   like the wrong thing, like Tweetbot is not just named

00:26:54   Tweetbot, Twitturific is not just named Twitturific.

00:26:57   So it's called like, you know, Tweetbot for Twitter,

00:26:59   Twitturific Twitter client, stuff like that.

00:27:01   We've, you know, in the last couple years,

00:27:04   we've all kind of succumbed to having to add keywords

00:27:08   to our app names because quite simply it works better and the search has been horrible and

00:27:13   it's been one of the only ways.

00:27:14   You gave up on the search improving. You're like, "You know what? Forget it. We will

00:27:19   mangle the name of our application because there's no other way to come up in the search

00:27:23   results." I mean, I remember when Twitteriffic did it years ago. It was a sad day because

00:27:26   it just really uglies up the name, but the problem was people would search for Twitter

00:27:29   and just Twitteriffic would be 700 results down. The relevance was so bad even though

00:27:35   it was a popular third-party Twitter client and when someone searches for Twitter, it

00:27:39   would be a good idea to show them the, you know, well-reviewed, popular, frequently updated

00:27:44   Twitter clients and instead it's like, no, Twitter doesn't appear anywhere in your name.

00:27:48   Or it does, but it's just a prefix and like the fact that Twitterrific didn't show up

00:27:52   in a search result for Twitter until way low down, that's just sad.

00:27:56   So I would hope that as part of this effort to like police the keywords for trademarks

00:28:00   more often and stuff, they will also improve the search to the point where you don't have

00:28:03   have to name mangle essentially anymore, but we'll see.

00:28:06   - Well, the other thing is like, I try with Overcast,

00:28:08   I tried not name mangling, but you know,

00:28:11   I launched Overcast fairly late in the App Store

00:28:13   relative to the other apps.

00:28:14   There was already an app named exactly the string Overcast.

00:28:18   In fact, I even contacted the developer

00:28:19   and tried to buy it from him, and he agreed,

00:28:21   and we had agreed to actually transfer this app to me

00:28:24   just so I could like delete it and reuse the name,

00:28:27   but the app used iCloud, and so we couldn't transfer it.

00:28:30   Why didn't you just pay him to rename it?

00:28:33   - I think somehow we just kind of dropped the ball

00:28:36   on continuing the conversation,

00:28:37   so it probably just fell apart just through apathy,

00:28:41   but there is an app called Overcast.

00:28:43   I believe the seller's name is Willis Ingersoll,

00:28:46   something like that,

00:28:47   and it's like a file transfer app for cloud services.

00:28:49   And the App Store, even though the world of trademark

00:28:53   allows for the same name to be used

00:28:56   in different industries and different contexts,

00:28:59   The App Store doesn't, unless you do weird tricks

00:29:01   with international titles.

00:29:02   So it sometimes does, but usually doesn't.

00:29:04   It's a mess.

00:29:05   It's such a mess.

00:29:08   So this is like, you know, the combination of lots

00:29:11   of long-standing App Store problems results in this

00:29:16   mediocre situation we have with titles with keywords

00:29:19   after them, along with the new ads not matching things

00:29:23   exactly, probably, yeah, it's gonna be interesting.

00:29:27   Let's talk about Apple Photos and the John Saracusa controller search.

00:29:32   >> Yeah, that was my quality metric.

00:29:36   The original problem that I had was that I couldn't find a picture of my PlayStation

00:29:39   4 controller in Apple's Photos application.

00:29:43   This is before iOS 10, before I debuted.

00:29:44   So I put all my photos into Google Photos, and amazingly, Google Photos was able to find

00:29:48   it just by me typing the word "controller."

00:29:51   of course apple announced similar photo search for iOS 10 and Mac OS Sierra and I speculated on last

00:30:00   show that it would not be able to find controller by me typing controller because apple is not good

00:30:06   at that type of thing and google is. So now having installed, oh actually I haven't installed it,

00:30:12   many other people have installed, I've installed Mac OS Sierra but I haven't installed iOS 10,

00:30:15   many other people have installed all these betas onto their iPhones because they're very brave

00:30:20   people and they have taken my exact pictures of the controller. They pulled them from Twitter

00:30:24   and put them into their photo libraries and done the search to see if we would find it.

00:30:28   And it doesn't find it if you type controller, but because Apple search, Apple's photo search

00:30:32   works a little bit differently or at least presents a different UI than Google photo

00:30:35   search, it does find it when you type control stick or I think also gamepad. And this brings

00:30:42   up the UI that Apple provides is as you type it shows like category results as if it puts

00:30:48   things into buckets and indeed it does. K. Yin has a blog post that lists out all of

00:30:54   the buckets that it has. It has something like 4,000 buckets to put things in. There's

00:30:59   a lot of stuff in there. Dance palaces, banana, chairlifts.

00:31:04   Wait, what's a dance palace? Yeah, seriously.

00:31:07   I don't know, I'm just reading some of the keywords here. Orchid, kiln, that's got kiln,

00:31:12   that's a good one. Polos, blocks, pulley, trikes, trumpets, tuba, bass, horn. I mean

00:31:17   Like it's got huge amounts of things.

00:31:19   So basically, if you type a word that is not one of the words on this list, it won't find it.

00:31:23   So as you type, it's showing you the words that begin with or contain these things.

00:31:27   So it's a little bit different UI, but it's trying to lead you to its notion of those things.

00:31:31   So if you type control, start typing controller and you see control stick, you probably tap that one.

00:31:36   So good job, Apple Photos, so far on finding the controller that I didn't think you would

00:31:43   ever find because that's good photo recognition because the controller was upside down.

00:31:47   That's not an easy search, and it's a pretty obscure category.

00:31:49   On the other hand, someone also said that Apple's photo search stinks because it couldn't

00:31:53   find birthday pics or babies or pictures of a couch.

00:31:57   So I don't know if their thing just hadn't indexed everything yet or those things aren't

00:32:00   among keywords or anything like that.

00:32:02   But we'll see as this rolls out.

00:32:04   But you can find all your dance palaces.

00:32:06   If you have pictures of dance palaces, it will find that before it will find your couch.

00:32:09   Not quite sure what would come up for dance palace.

00:32:11   But yeah, I have my entire photo library in Google Photos and also my entire photo library

00:32:16   in Apple's photos, so when these things release for real, I can do A/B tests right next to

00:32:20   each other with the exact same library and do a little bake-off, and when that happens,

00:32:24   I will definitely have some results. But so far, so good for Apple. It is more impressive

00:32:30   than I thought it would be.

00:32:31   I'm looking up what a dance palace is.

00:32:34   Our first sponsor tonight is Fracture. Go to fractureme.com and check it out with code

00:32:39   ATP10 for 10% off. Fracture is a company that prints photos in vivid color directly onto

00:32:45   to panes of glass.

00:32:47   It looks fantastic.

00:32:48   The colors pop like you won't believe

00:32:50   and it comes in a nice solid foam backing

00:32:52   which is ready to mount right out of the package.

00:32:54   So here's how this works.

00:32:55   It looks just like a complete picture.

00:32:58   You don't have to frame it,

00:32:59   you don't have to do anything else to it.

00:33:00   It is a complete picture.

00:33:02   It is a rectangle or square of glass

00:33:03   with your photo printed right behind the front layer

00:33:06   of glass and then behind that is a little tiny bit

00:33:09   of foam board so that you can hang it easily

00:33:12   'cause then things can hook into the foam board

00:33:14   without having to scratch the glass or the ink layer.

00:33:16   So it just looks fantastic.

00:33:18   It looks very modern and clean.

00:33:20   And I have these all over our house, our office.

00:33:23   They're everywhere.

00:33:24   People always compliment them.

00:33:26   They make great gifts.

00:33:27   They make great keepsakes.

00:33:28   You can get your photos and actually print them

00:33:30   and actually have a physical representation

00:33:32   so you can remember this photo for more than like

00:33:34   the two days that it sits on your Facebook feed or whatever.

00:33:36   Check it out.

00:33:37   The prices are very reasonable for Fractures.

00:33:39   They start at just $15 for their small square size,

00:33:42   which is great for Instagram prints.

00:33:44   And they also make non-square rectangles.

00:33:46   They are awesome.

00:33:47   Again, they make fantastic gifts.

00:33:49   We've given them as gifts many times.

00:33:51   These prints look fantastic from Fracture.

00:33:53   So check it out today at fractureme.com

00:33:56   and use code 10% off with the code ATP10.

00:34:00   I recommend them, they're great.

00:34:02   Check out Fracture, thanks a lot.

00:34:04   - Alright, so some slightly late-breaking news

00:34:10   before we recorded.

00:34:12   The Thunderbolt display, the thing that I've been lusting after since September 2011, when

00:34:17   it was brand new, which was the last time it was updated.

00:34:22   Anyway.

00:34:23   Even that was a minor update over the LED display that came out right before it.

00:34:26   Yeah, fair enough.

00:34:28   The Thunderbolt display has been discontinued.

00:34:30   Sad times.

00:34:31   So at this point, Apple does not sell an external display.

00:34:34   It did have a minor update where they started shipping the MagSafe 1 to 2 adapter in the

00:34:40   box.

00:34:41   - That's a hardware change, right?

00:34:42   - Something like that.

00:34:43   - So they never actually gave it the MagSafe 2 natively,

00:34:46   they just kind of shipped through this $8 adapter

00:34:48   in the box.

00:34:49   - Yeah.

00:34:50   - Excuse me, I believe that adapter's $10,

00:34:52   thank you very much.

00:34:53   - Sorry, you're right, you're right.

00:34:55   - So this is somewhat sad times,

00:34:57   if you fancied having a non-retina external display

00:35:01   that's very pretty to look at,

00:35:03   and presumably for non-retina being very, very pretty

00:35:06   to see what's on the screen as well.

00:35:08   However, does this make us think that maybe a retina display is coming soon?

00:35:13   Maybe with a GPU built in?

00:35:15   I don't know.

00:35:16   I would think so, but it seems odd to me that they would just continue without having something

00:35:20   to replace it.

00:35:22   Maybe they just don't sell enough of them.

00:35:23   Maybe they can't get that screen from the vendor anymore because it's so terrible, because

00:35:26   the pixels are the size of boulders.

00:35:28   I don't know.

00:35:30   Did you read Apple's official statement that I put in the notes?

00:35:32   Yeah, it was really short, wasn't it?

00:35:34   Where did it go?

00:35:35   We are discontinuing the Apple Thunderbolt display.

00:35:37   It will be available through apple.com,

00:35:39   Apple's retail stores, and Apple-authorized resellers

00:35:41   while supplies last.

00:35:42   There are a number of great third-party options

00:35:44   available for Mac users.

00:35:46   - It's kind of surprising that they even gave a statement

00:35:49   about it, like that they call any attention to it at all.

00:35:51   I mean, usually when Apple discontinues a product,

00:35:54   like one that's not very important,

00:35:56   the user's kind of quietly removed it from sale.

00:35:59   Like, I think it's unusual to--

00:36:00   - But there's usually a clear replacement when they do that.

00:36:02   - That's true. - Like, they remove the old one

00:36:03   and there's always the new one,

00:36:04   and this is a little bit weird,

00:36:05   where they're removing the old one without a new one to replace it, I still put the odds

00:36:10   at greater than 50% that there will be a replacement for this product.

00:36:13   Oh yeah.

00:36:14   Just because it's such a gimme, they have the screen, it's in the 5E iMac, we've been

00:36:17   staring at it for a long time, you put it in a case, you just ship it.

00:36:21   But maybe that's not ready yet, or maybe it's part of a hardware announcement, and for whatever

00:36:25   reason, I don't think they sell a lot of Thunderbolt displays.

00:36:30   It's a thousand dollar monitor that is not worth a thousand dollars at this point.

00:36:34   You could argue about it when it was first introduced, but it is a really nice monitor,

00:36:37   and back before there were no options for 27-inch retinas when it was introduced in

00:36:41   2011, so it was good.

00:36:43   Whether it was worth $1,000, who knows?

00:36:45   But at this point, it's definitely not worth $1,000.

00:36:46   So they must not have been selling a lot of them, and as they note, you know, while supplies

00:36:51   last they need to get rid of all this inventory.

00:36:53   Maybe it takes this long to get rid of the inventory at the rate that they sell.

00:36:57   Like maybe they have a lot of Thunderbolt displays hanging around, and they did the

00:36:59   math and said, "If we want these flushed out of the inventory by the time we introduce

00:37:03   the 5K external display, we need to discontinue it now and just let them sell out the rest

00:37:08   of them. It would also help, by the way, Apple, if you lowered the price, because that's

00:37:10   a way that you can sell things faster. But I know you don't do that.

00:37:12   David Schmittle I think it's more likely that the rumors

00:37:16   were all really clear and the timing makes a lot of sense that the new Skylake-based

00:37:22   MacBook Pros were supposed to be out by now, and it seemed that they were probably delayed

00:37:27   because of various Intel issues. Have you heard, every time we mention Skylake and laptops,

00:37:33   we usually hear from people who tell us that like,

00:37:35   that Skylake chips that would be appropriate

00:37:39   for the 15 inch were kind of out in the PC world,

00:37:42   and they actually had tons of problems,

00:37:44   and like, they were, it seemed like Intel might have like,

00:37:46   partly maybe recalled them or something,

00:37:48   there were some problems with them

00:37:50   that the manufacturers were having,

00:37:52   even after they'd shipped.

00:37:53   So it seems like there's some kind of unexpected

00:37:55   Intel delay that caused the MacBook Pros

00:37:57   to most likely be delayed.

00:37:59   So it seems like, if Apple's gonna release

00:38:01   new 5K display, it would need Skylake most likely

00:38:04   to drive it, so that they were probably planning

00:38:06   on releasing the 5K external display that succeeded

00:38:09   this Thunderbolt display at the same time

00:38:11   as new MacBook Pros that were all supposed

00:38:13   to already be out by now.

00:38:15   So chances are they probably gave the order months ago

00:38:20   to stop taking these component orders,

00:38:22   stop making these things, stop manufacturing these,

00:38:25   and then this delay happened sometime in the meantime.

00:38:29   This was probably just like the replacement product

00:38:31   was supposed to be out by now, and it might be done,

00:38:34   but there's no computer that can drive it yet.

00:38:36   So they're not gonna release a display

00:38:38   with no computer that can drive it,

00:38:40   so they kinda held the display for the MacBook Pro,

00:38:43   which got delayed.

00:38:45   So now they just have like,

00:38:46   "Well, we already told the manufacturing line

00:38:48   "to stop making these,

00:38:50   "and we're not gonna start it back up again,

00:38:51   "because that's crazy."

00:38:53   So I'm guessing we're just in this weird hole

00:38:56   in the middle of this like,

00:38:57   You know, these weird delays cause this operations hole

00:39:01   to happen and it'll make sense in a few months

00:39:04   or whenever the new MacBook Pros come out.

00:39:06   - And by the way, I think the reason they're gonna

00:39:07   make this product is everyone's like,

00:39:08   maybe they're just not gonna sell external displays.

00:39:10   The reason they'll make it is because the margins

00:39:12   have to be pretty darn good.

00:39:13   - Oh yeah. - They're probably gonna sell

00:39:14   it for the same kind of margin.

00:39:17   Thunderbolt display, like I said, it was a $1,000 monitor

00:39:19   in an age when you could get monitors with,

00:39:21   sometimes monitors with the exact same panel in them

00:39:24   for less money if you knew the right, you know,

00:39:26   right weirdly numbered Dell thing or whatever to buy. Like, good healthy margins on those.

00:39:31   And Apple sells mostly laptops for people who buy Macs. And people with laptops often

00:39:37   want a really big external display. Like, they don't want an external display that's

00:39:40   like 17 inches, but if people who want an external display, they want a really big one.

00:39:44   And so Apple should sell you a really big one because it's, you know, the same reason

00:39:47   they sell battery cases for crying out loud. If there's—if this is a product that people

00:39:50   want and we can sell it at high margin and it can look nice and Johnny Eye won't be upset,

00:39:56   by someone connecting a disgusting looking Dell monitor

00:39:58   to their beautiful MacBook Pro.

00:40:00   Like all signs point towards Apple continuing to sell

00:40:03   one really big, really expensive,

00:40:05   high margin external monitor.

00:40:06   And all signs point to me buying one

00:40:08   once I can hook it up to a computer.

00:40:10   - We are also sponsored this week by Hover.

00:40:15   We go to hover.com and use promo code APFS at checkout

00:40:19   for 10% off your, it's perfect timing,

00:40:21   for 10% off your first purchase.

00:40:23   Hover is a great place to buy domain names,

00:40:26   So when you have a great idea for your project or blog or startup or whatever, you need to

00:40:30   give it a great domain name.

00:40:31   And finding that name is very, very easy with Hover and of course they make it very easy

00:40:35   to then buy it and manage it.

00:40:37   And I use Hover for tons of my domains and it's great.

00:40:39   They have over 400 domain extensions to end your domain with.

00:40:42   You know, all the classics like .com, .net, some of the new, you know, new kind of narrow

00:40:46   ones like design and tech and some of the weird kind of jokey ones like .pizza and .ninja.

00:40:52   Now, new this week, they just launched .store,

00:40:56   and this is one of the rare occasions

00:40:58   where there's a name that is straightforward,

00:41:01   it's not goofy or amateurish like .ninja and .pizza.

00:41:04   You can build a real business

00:41:05   on something that ends in .store.

00:41:07   This is a very rare occasion where brand new real estate

00:41:11   has opened up that ends in a domain extension

00:41:13   that is not dumb, right?

00:41:15   So, and it's wide open 'cause it just opened up.

00:41:18   So go to hover.com, go get a .store name,

00:41:22   and you have a very, very good chance now,

00:41:23   because it's brand new, of getting a really good one.

00:41:26   So whether it's .store or any of the other 400

00:41:28   domain extensions out there, you can find

00:41:30   the perfect domain name for your idea at Hover.

00:41:32   Go to hover.com and use promo code APFS at checkout.

00:41:36   Book stands for, I believe, Apple Platform File System,

00:41:39   APFS at checkout, to save 10% off your first purchase.

00:41:42   Thanks to Hover for sponsoring our show.

00:41:45   (upbeat music)

00:41:47   - John, tell us about Apple File System.

00:41:50   Are you getting the platform part from Apple Platform File System?

00:41:55   Somebody said that.

00:41:56   I thought I'd heard that as well.

00:41:57   Yeah, a lot of people said a lot of things, but I'm like, "Is that from official?

00:41:59   I haven't heard any official thing.

00:42:00   I think it's just for Apple."

00:42:02   Anyway, there's a WWDC session that is entirely open to the public, session 701.

00:42:06   We will put a link in the show notes so that if you're interested in Apple File System,

00:42:09   you can watch this presentation.

00:42:11   At the time we recorded the WWDC episode, we had not seen this presentation yet because

00:42:16   it was two days in the future.

00:42:18   And there wasn't much new information in that thing that wasn't already in the State of

00:42:22   the Union, but there were two tidbits worth discussing.

00:42:26   One is, all right, so APFS, as we saw in the State of the Union, will be a developer preview.

00:42:32   I think a lot of people were confused by that, like, okay, so everything's developer preview,

00:42:35   right?

00:42:36   But no.

00:42:37   When Sierra ships for real, like the final version that ships to customers, APFS will

00:42:41   be included in Sierra as a developer preview, as in you will get the official release version

00:42:46   of Sierra and part of it of that product will be provisional developer level support for

00:42:52   APFS.

00:42:53   So, what does that mean for you know, how far in the future is APFS?

00:42:57   As I said in the State of the Union, APFS is developer preview this year and coming

00:43:00   in 2017, but what does that even mean?

00:43:03   A slide in session 701 had these words on it and we'll see how this rolls out.

00:43:09   APFS will be the default file system for all Apple products in 2017.

00:43:14   So that is pretty unequivocal except for the part where it says 2017.

00:43:19   So default file system for all Apple product means if you buy an Apple product after whatever

00:43:24   this point is, it will be formatted with APFS.

00:43:28   That includes all iPhones, all iPads, all Macs, everything.

00:43:31   That's the implication of this statement.

00:43:32   In 2017, it could mean anything.

00:43:34   It could mean starting January 1st, 2017.

00:43:37   It could mean starting December 31st, 2017.

00:43:39   So there's a big range in when this could happen.

00:43:43   But it is a pretty clear statement of intent in a publicly available video from official

00:43:48   Apple spokespeople that their goal is, 2017, not just that, oh, you'll be able to format

00:43:53   as APFS, but the default will still be HFS Plus or only on Macs or whatever.

00:43:57   Nope.

00:43:58   Every single product, every single device that has a file system across the entire product

00:44:01   range at some point, this is their goal anyway.

00:44:04   We'll see if they meet it.

00:44:05   So that seemed to me like an ambitious goal, but I'm also kind of excited about it because

00:44:09   as we all know, 2017 is the year of the file system.

00:44:13   And I hope they take their time because that's a little bit – I'm a little bit scared

00:44:18   for them.

00:44:19   Like, that means like when the next iPhone comes out or whatever, the 2017 iPhone, all

00:44:23   of those millions and millions of iPhones all going to be formatted with APFS.

00:44:28   I really hope that goes well.

00:44:29   You know, or I suppose they could say, "Okay, well, again, if they go December 31st, 2017,

00:44:35   then next year's iPhone will ship with HFS Plus and then December 31st, starting then

00:44:39   all the products will be formatted that way."

00:44:42   So in case anyone at Apple, anyone who knows any of the Apple file system people is listening

00:44:48   right now, consider that John Syracuse, your friend and mine, has been asking for a new

00:44:53   file system for years, has been begging for a new file system.

00:44:58   And as he just said, you guys, you know, Apple has said in 2017, I would just like to point

00:45:04   out that John Syracuse's birthday happens to be the very last day of 2017.

00:45:11   If you just decided, you know, maybe that would be the appropriate day to flip the switch

00:45:16   and hit the big red button, that would be a pretty solid birthday present.

00:45:19   A much better present than I've ever gotten, Jon.

00:45:21   Just throwing it out there, guys.

00:45:22   You run with it.

00:45:23   Yeah, I think they're gonna go before that.

00:45:26   And my impression is that this date, even though it seems ambitious to us, is not really

00:45:32   that ambitious from the perspective of Apple, who has been working on this file system for

00:45:35   a long time, obviously.

00:45:36   Like, they didn't just announce it and they started working on it last week, right?

00:45:40   So the impression I get from WWDC is that 2017 is not rushing it, and really they've

00:45:47   got the whole year, it's like, you know, it's a relaxing expanse of time in which they can

00:45:51   plan their roll out of this new file system.

00:45:53   And I really hope that's true, because if so, that's exactly how you want to do this.

00:45:57   The second tidbit that was in this WWDC session, which I'm sure everyone knows by now because

00:46:01   it's been on all of the Apple News sites, is the question of if you don't buy a new

00:46:06   piece of hardware, you know, which comes with APFS, but you have an existing piece of hardware,

00:46:12   how do you get APFS? Like, I can only think about it from the perspective of a Mac, because

00:46:17   I don't imagine they're going to let people like reformat their iPhones. Like, if you

00:46:20   restore your iPhone in 2017, in the post-APFS world, is it reformatted with APFS? I doubt

00:46:26   it. But certainly for the Mac, we know this is a straightforward situation. The way you

00:46:31   could do it is you back up your entire hard drive, you erase it, you reformat it as APFS,

00:46:35   restore your hard drive. You can do it with Time Machine, you can do it with SuperDuper,

00:46:38   lots of different solutions to doing this. All those should be possible. But in the 7.0.1

00:46:43   presentation at W3C, Apple said that they have something else in mind, and that is

00:46:48   in-place conversion of your volume format from HFS+ to APFS. So you've got a Mac,

00:46:54   this file system comes out in 2017, it's officially released, all the new hardware you buy comes with

00:46:58   it, you're like "I want to try that new file system, what do I do?" Well, first of all,

00:47:02   First of all, I would advise you to make a backup anyway.

00:47:05   And maybe two backups, and maybe three backups.

00:47:08   But you won't have to erase your disk.

00:47:09   You'd be able to take your existing disk that's formatted with HFS+ and do a thing and reboot,

00:47:17   and when it comes back, all your data will still all be there, you won't have erased

00:47:20   it, and it will be in APFS volume.

00:47:23   And the concept of this is freaking people out a lot.

00:47:26   I think I talked about the old Alsoft PlusMaker thing that would do the same conversion from

00:47:31   H of S to H of S plus in place, and that was terrifying

00:47:34   because if it screwed up in the middle,

00:47:35   you were left with nothing.

00:47:36   This, the situation with APS is a little bit different,

00:47:41   and you shouldn't actually be as terrified as you are.

00:47:45   It actually is, if you've ever seen from, I don't know,

00:47:48   was this on ATP or maybe it was hypercritical,

00:47:51   the BTRFS demo of a similar type of in-place conversion,

00:47:55   it's the same type of deal.

00:47:58   Because of the way this volume format works,

00:48:00   actually fairly safe. so here's the process and here's why it will not

00:48:05   probably destroy your data, although definitely make backups. so the first

00:48:09   thing it's going to do is it's going to unmount your volume. so obviously you can't be booted

00:48:12   from your volume to reformat it. you have to be booted from the recovery partition or

00:48:15   something like that or whatever. but anyway once it's unmounted no more

00:48:19   changes are happening to this volume that you're going to convert. so you don't

00:48:22   have to worry about chasing after some other change. it's not going to happen

00:48:25   live like the what we call the file vault conversion where you can encrypt a disk

00:48:29   while you're using it, which is kind of magical.

00:48:30   This is like unmounted, all right?

00:48:32   Next thing is it's gonna write

00:48:34   all the APFS metadata structures,

00:48:36   all the little pointers to where does this file begin,

00:48:39   where does it end, how many blocks are in it,

00:48:41   what is the file called,

00:48:42   what are all the dates about the file.

00:48:43   It's gonna write all that metadata

00:48:45   to the free space on the HFS+ volume.

00:48:47   So you can only do this conversion

00:48:48   if you have enough free space to fit the metadata.

00:48:50   I don't know how much it's gonna take,

00:48:51   but you do need some free space,

00:48:52   and hopefully you're just using it

00:48:54   filled to the brim anyway.

00:48:56   So it's writing just to the free area.

00:48:59   So at any point during this process,

00:49:00   when it's writing all this metadata,

00:49:01   when it's reading your HFS+ volume,

00:49:03   finding out where everything is, what everything is called,

00:49:05   what all the dates are, what all the permissions are,

00:49:07   all the ownership, everything about these files,

00:49:09   all the different forks, all the extended attributes,

00:49:11   all that stuff, and it's writing that metadata out

00:49:13   in APFS format to the free space.

00:49:15   If at any time something bad happens during this,

00:49:17   like someone yanks the plug in your computer,

00:49:19   your HFS+ volume is fine, 'cause if you reboot into it,

00:49:22   it doesn't care what's in the free space.

00:49:23   Like there's garbage in the free space.

00:49:25   It's free space on the HFS+ file.

00:49:26   Nothing is wrong with it.

00:49:27   It's perfectly fine.

00:49:28   This is the majority of the time it spends,

00:49:30   is looking at all your things and writing all the metadata

00:49:33   for all the things on your file system.

00:49:36   When it's finally finished doing that,

00:49:39   all it needs to do is this is sort of the critical section

00:49:41   when things can go wrong.

00:49:42   And the critical section should be very, very short.

00:49:44   It's basically delete the HFS+ superblock,

00:49:47   update the partition type to be APFS,

00:49:49   put the correct UUID in there, and you're done.

00:49:51   Like you just have to sort of do a switcheroo

00:49:53   in the front of the whole file system, say,

00:49:54   OK, now you're not HFS anymore, now you're APFS,

00:49:57   and then you reboot.

00:49:58   And that critical section of when something can go wrong,

00:50:00   like if they were halfway through,

00:50:01   and I bet even that probably is fairly well protected,

00:50:04   because, well, I guess once you would delete the HFS plus super

00:50:08   block, you're kind of screwed.

00:50:09   But anyway, this is a very small window of time

00:50:11   when something can go wrong.

00:50:12   All the rest of the time during the conversion,

00:50:14   everything is fine.

00:50:15   And I bet you could probably restore the HFS plus super

00:50:17   block if you were clever enough or some recovery program could

00:50:20   do that as well, because again, you haven't touched

00:50:22   any of the actual data.

00:50:24   Your actual files have not been modified.

00:50:25   The HFS+ metadata has not been modified.

00:50:28   None of that stuff has changed,

00:50:29   just sitting exactly where it was.

00:50:31   All you gotta do is change sort of the thing

00:50:34   that tells you where everything else in the file system is.

00:50:36   The superblock is metadata about the whole file system

00:50:38   that tells it how big the file system is

00:50:40   and where all the other metadata structures are

00:50:42   and all that stuff.

00:50:42   And by the way, speaking of the APSS UUID,

00:50:46   the thing that tells it what volume type this is,

00:50:48   one other tidbit that was sort of alluded to

00:50:50   in State of the Union and I think in the 701 thing

00:50:53   is that if you have an APFS volume

00:50:56   and you try to mount it on an older Mac operating system,

00:51:01   it'll say this disk is unreadable,

00:51:02   do you wanna initialize it, all that business.

00:51:04   But if you try to do that on El Capitan, it won't do that.

00:51:07   Not because El Capitan has secret support for APFS,

00:51:09   but just because it recognizes the UUID

00:51:12   and so it won't offer to erase it for you.

00:51:14   And that's, I guess, to try to prevent people

00:51:16   from accidentally erasing their newly converted disk

00:51:19   when they don't realize that that prompt asking them

00:51:21   to erase it was actually asking them to erase the disk they just converted.

00:51:25   So that's kind of clever.

00:51:26   And that's another secret thing you would never have known.

00:51:28   You're not going to be searching the El Capitan binaries for a UUID because you'd never find

00:51:32   it because it's all nonsense.

00:51:34   But anyway, I assume that I will do this in-place conversion again after making many, many backups.

00:51:41   But both in theory and in practice, this conversion method of writing new metadata structures

00:51:46   to free space pointing at the data in where it already exists is fairly well established

00:51:52   and not something crazy that Apple came up with on its own. And so I'm pretty confident

00:51:56   that this will actually work and it will seem like magic.

00:51:59   That's pretty high praise. I am very impressed. Why does it have the P in the name? Why not

00:52:06   AFS? Oh yeah. So that's a question I asked some

00:52:11   of the file system people at WWDC and it's as we speculate. Like we can't use AFS because

00:52:16   that's already Andrew file system. And you can go through every letter in the alphabet.

00:52:20   A lot of them are taken already, or every combination of two letters, they're either

00:52:23   taken or nonsensical. APFS is not great as an acronym, but it's probably better than

00:52:29   AFS, it's probably better than IFS, which I think is also already taken. Lots of the

00:52:34   cool letters like ZFS and XFS are also already taken. My complaint was, why isn't it a cool

00:52:39   name? Why isn't it like, forget about the four-letter acronym, or give it whatever four-letter,

00:52:43   or four letter abbreviation that you want. Why doesn't it have a cool name like, I don't

00:52:48   know, like "Thunder FS," "Swift," or "Grand Central Dispatch," or whatever, like with the

00:52:54   trains. Yeah, like you come up with a cool marketing name for it. And the upshot seems

00:53:01   to be that file systems are not something that most users know about. Certainly on iPhones,

00:53:07   no one knows what the heck their file system is, and even on Macs people don't know. The

00:53:10   The only time people are likely to encounter is if you're on a Mac and you go to Disk Utility

00:53:14   or something and you're trying to format a new disk, or like if you get info on a disk

00:53:18   and you see in the Get Info window.

00:53:19   But especially when you're formatting your disk, it says like, "Oh, how do you want to

00:53:22   -- what volume format do you want to use for this disk?"

00:53:24   And Disk Utility I think can do a bunch of different formats.

00:53:27   Or even, you know, OS X can -- OS X, whatever that operating system is called, yeah, Mac

00:53:32   OS, can mount a lot of different things.

00:53:34   it can mount like fat, ex fat, and like all these weird,

00:53:38   you know, all the weird CD file systems and stuff.

00:53:41   Sometimes if you present a user with this pop-up menu

00:53:44   of like, or you know, what volume format do you wanna

00:53:46   make this or what volume format is this?

00:53:48   They don't know what all those things mean.

00:53:49   They don't know what HFS+ means.

00:53:51   They don't know what Apple extended, journaled,

00:53:53   whatever case, they don't know what those things mean

00:53:55   at all.

00:53:56   So the goal of AFS, and it's a reasonable goal,

00:53:59   is to put an entry in that list that is absolutely clear

00:54:02   that that's the one that they want.

00:54:04   And so if you have a pop-up menu

00:54:05   and you're formatting a disk

00:54:06   and you don't know what the hell you wanna pick

00:54:07   and you see one called Apple File System,

00:54:10   you're gonna pick that one.

00:54:11   'Cause you're like, all right, this is an Apple.

00:54:12   I see a logo in front of me.

00:54:14   There's one in the corner of the screen.

00:54:15   I guess I want Apple File System.

00:54:17   And you know what?

00:54:17   That'll be the right answer.

00:54:19   You do want Apple File System.

00:54:20   You do not want, you know, Apple extended journaled,

00:54:24   whatever you want, Apple File System.

00:54:26   So as boring as it may be,

00:54:28   it makes sense from a user's perspective

00:54:30   that A, users should never have to see this,

00:54:32   but B, when they do see it,

00:54:33   They have no idea what all those weird names mean.

00:54:35   They just wanna pick the one that says Apple Fosse system.

00:54:37   - But don't you think there might be a problem,

00:54:39   like well that one has a plus, this one sounds deluxe.

00:54:42   Like the more words, it sounds like

00:54:43   that's the deluxe cool option.

00:54:45   Like I guess maybe I want the whatever journaling means.

00:54:48   That's, I like journaling.

00:54:51   - That's the prosumer problem that maybe those people,

00:54:55   they're the worst anyway, but regular people

00:54:57   are just gonna pick the safest one.

00:54:58   They're not gonna say maybe, I don't know what journaled

00:54:59   mean but they want maybe better.

00:55:01   What about extended?

00:55:02   That's better, and what about exFAT?

00:55:04   I like that one, 'cause it's got an X-E-X in it.

00:55:07   I think they're just gonna pick Apple File System.

00:55:09   Anyway, it's a boring name,

00:55:11   but it is certainly a straightforward name,

00:55:13   and it is a forward-looking name in that Apple feels like,

00:55:16   yes, this is the Apple File System.

00:55:17   Now, 30 years from now, when this is old and busted,

00:55:21   they might have a problem,

00:55:21   because what do you call the next one?

00:55:22   But for now, Apple File System works,

00:55:25   and because they can't use a FS,

00:55:27   a PFS is the awkward abbreviation for Apple File System.

00:55:31   - Honest question, do you honestly think

00:55:33   that when this file system is outdated,

00:55:35   we will still even have the option

00:55:38   to format our own partitions?

00:55:39   It's like, look at iOS, iOS doesn't give us any options.

00:55:42   - You're still gonna have to read the APS formatted volumes.

00:55:45   I don't know, the question is whether the Mac

00:55:47   will still be around then, 'cause you don't have,

00:55:50   you don't see volumes on iPads and Apple TV

00:55:52   or the Watch or iPhones, so we'll see.

00:55:55   But maybe they're out.

00:55:56   - I mean, at this point, I think we're lucky

00:55:58   that we even still have disk utility.

00:56:00   I mean, barely, but I think we're lucky

00:56:02   that we have it at all.

00:56:04   I'd be surprised if we still have the ability

00:56:08   to format disks the way we want to

00:56:09   and format partitions the way we want to,

00:56:11   you know, in even 10 years.

00:56:13   - Yeah, well, it could be, if the file system

00:56:15   continues to be pushed towards the geeky side of things,

00:56:19   then they're free to do whatever they want.

00:56:20   Like, sort of like, Grand Central Dispatch

00:56:22   is the marketing name, but Lib Dispatch

00:56:24   is the library name on disk.

00:56:26   It's just a clear separation between the names

00:56:29   present in the marketing and the actual names that programmers know them by, so it may become

00:56:32   less important.

00:56:34   Finally, when, in 30 years, when this file system is outdated and being replaced by the

00:56:41   next file system, can we get together when you are like, what, 72, 71 at that point,

00:56:49   and do a podcast then with a bell in it?

00:56:52   By then I plan to be living like a king in Patagonia, so.

00:56:57   They will probably have the internet there,

00:56:59   and microphones will probably still exist.

00:57:02   - I like throwing in yet another reference

00:57:04   that you guys don't get.

00:57:05   - I knew enough to know it was a reference,

00:57:07   but I also knew I did not get it.

00:57:08   - Partial credit.

00:57:10   - Yeah, I'll take it.

00:57:11   All right, do you wanna start

00:57:12   running through some of the features?

00:57:14   Do you want me to prompt this?

00:57:15   How would you like to proceed, sir?

00:57:17   - Well, in this part,

00:57:18   I'm gonna talk a little bit about file names,

00:57:20   but I thought this would be a good opportunity

00:57:22   to find out how much you guys know about Unicode.

00:57:26   Not nearly enough. I've read the, oh god, the Spolsky thing on Unicode and string handling,

00:57:32   and I've already forgotten all of it.

00:57:34   JE: Marco, do you come across this at all? You probably don't, because I know

00:57:37   string takes care of this for you, and you don't even care what the internal representation is.

00:57:41   What about in PHP land? Do you deal with any of this stuff when you do web things,

00:57:45   dealing with Unicode and text and everything?

00:57:47   MZF1 I know a lot about Unicode, yes.

00:57:49   JE Alright, well, so this will be new to Casey and maybe new to some people,

00:57:53   but I think we have to go over a little bit of the basics before I explain what the deal is.

00:57:57   So, talking about this in the context of APFS is because files have names and, you know,

00:58:01   directories have names, right? So, when you talk about a file path, which usually doesn't show up in

00:58:05   Mac operating system or anyplace else, that entire thing is presented as a string, and certainly file

00:58:10   names are presented in strings, and you would think this is a straightforward thing, like,

00:58:13   that nobody thinks about, "Oh, of course, like, files have names." Like, that's fine.

00:58:18   But names are strings, and strings are financially complicated, and it actually matters from the

00:58:22   perspective of the file system because it has to do a lot of stuff with strings. So the, I guess the

00:58:28   easiest way for people to understand this is that Unicode is a standard for defining all the

00:58:37   different things that go into making a string, and things in Unicode are identified by code points,

00:58:43   they have numbers, right, and the numbers go up really high, all right? They start low and go

00:58:49   up really really high because there's lots and lots of things that you can put into strings in

00:58:53   languages in the United States. And the other thing to understand is that when you write something out

00:58:59   to disk or store it in memory or whatever we tend to break things up into bytes. And we had a

00:59:05   lettering system in America and the sort of western world called ASCII that defined a very

00:59:10   small number of numbers that corresponded to things that can be in a string and each one of

00:59:18   of them fit into a single byte.

00:59:20   So all A through Z, 1 through 0 through 9,

00:59:24   all the punctuation characters or whatever,

00:59:26   they all fit into one byte.

00:59:27   So that's 255 possible combinations.

00:59:30   And everybody was happy until we realized

00:59:32   that there were other characters in other languages that

00:59:34   didn't fit in this, right?

00:59:36   So when they came up with Unicode,

00:59:38   they tried to be nice and give ASCII all the same numbers

00:59:41   that it always had for compatibility reasons.

00:59:43   But they just keep going from there.

00:59:45   And at a certain point, you get up to numbers, Unicode code

00:59:47   points that are way higher than 255.

00:59:50   And when it comes time for you to write them to disk,

00:59:53   what do you do with those?

00:59:54   You can't just write them out as the big numbers

00:59:56   in a series of bytes, because the first byte of the number

00:59:59   might look like a capital letter P or something, right?

01:00:01   Because it's the same-- you know what I mean?

01:00:03   So they have come up with a series of encoding systems

01:00:06   where when you've got this big number that does not

01:00:08   fit into a single byte, and you can't write the way

01:00:10   you would write that number out in a sequence of bytes,

01:00:13   we need some way to encode these things.

01:00:15   One of the ways to encode it is,

01:00:16   instead of writing one code point every byte,

01:00:19   write one code point every 32 bits.

01:00:21   So you got a huge space for each one.

01:00:23   So your capital letter A,

01:00:24   instead of taking up a single byte,

01:00:25   takes up what is 32?

01:00:27   Four bytes?

01:00:28   Eight bytes?

01:00:29   Yeah, eight bytes.

01:00:31   - Four bytes.

01:00:32   - Yeah, there you go.

01:00:33   It's eight times four.

01:00:34   I'll get it in a second.

01:00:34   Anyway, but that would be incredibly wasteful

01:00:38   because now all of a sudden,

01:00:40   if you're writing something in ASCII text,

01:00:41   it would take up four times as much room.

01:00:43   That's not good, right?

01:00:44   There's also, we could do it in 16.

01:00:46   Can we do it in 16?

01:00:47   Well, we actually have more Unicode code points

01:00:50   that fit into 16 bits, but I think for a while

01:00:54   maybe they all fit in.

01:00:55   I think NSString uses this encoding

01:00:57   called UTF-16 internally.

01:00:59   - Yeah, I believe the very first version of Unicode

01:01:02   that they did all fit in, and then once we started realizing,

01:01:05   oh, there's other parts of the world,

01:01:06   and like ancient scripts and different combining things,

01:01:09   and there's all sorts of new stuff now.

01:01:11   - Don't forget emoji.

01:01:12   - Yeah, that all came later, yeah.

01:01:13   But it's important.

01:01:15   - Yeah, that's not great either,

01:01:16   but it also takes up a lot of room.

01:01:18   And the one that's in most common use these days

01:01:22   is called UTF-8, which is a pretty clever encoding scheme

01:01:26   where ASCII gets to be exactly the way it normally is.

01:01:29   Like, so, you know, one byte, one byte for each character,

01:01:32   and all the ones that are bigger,

01:01:33   they have these unique sequences of multiple bytes.

01:01:36   You can have one, you know, two bytes, three bytes,

01:01:38   four bytes, I think even up to five bytes.

01:01:40   All of these are so that all the leading bytes

01:01:42   are not mistaken for plain old ASCII characters or whatever.

01:01:47   And that's the most common encoding we use.

01:01:49   And this is relevant because when you create a file name,

01:01:54   first of all, people don't want to use a file system

01:01:55   where you can only create file names in ASCII

01:01:57   'cause that would be annoying for people

01:01:58   who speak languages other than English

01:02:00   and even annoying for English speakers

01:02:01   'cause you can have curly quotes and stuff.

01:02:03   But you need to write this,

01:02:06   you need to have the stuff in memory

01:02:07   and you needed to write it out to disk.

01:02:09   So you need some sort of representation

01:02:11   And that's exactly what encoding is doing in Unicode,

01:02:13   is they take these Unicode code points, these big numbers,

01:02:16   possibly very large numbers, and write them out

01:02:18   in a series of bytes in a way according to some standard.

01:02:23   The additional complication here in Unicode

01:02:26   is that Unicode code points-- I've been trying to say this

01:02:28   and trying to say thingy in other words--

01:02:30   instead of saying character or letter,

01:02:32   because it's way more complicated than that.

01:02:34   So a Unicode code point might be like the capital letter A,

01:02:37   and that's something that everyone understands.

01:02:39   a Unicode code point might also be something called "combining acute accent" that when this

01:02:44   Unicode code point follows another letter it combines to make what looks like one thing on

01:02:50   your screen. So if you did the lowercase letter "e" plain old ASCII lowercase letter "e" followed

01:02:56   by Unicode code point 301, which by the way is a number bigger than 255, called "combining acute

01:03:03   accent" you would get the "e" with the little line pointing up and to the right on top of it,

01:03:07   the acute accent, so you're going to write the word "cafe" c-a-f-e combining acute accent,

01:03:14   you get the word "cafe" with the e with the little thing over it, right? But you can write that same

01:03:19   thing, "cafe" c-a-f and then e with a little thing over it, in a different way. You could write c-a-f,

01:03:24   just like in ASCII, and then you can include Unicode, cone point, e9, that's in hex, Latin

01:03:29   small letter e with acute. In other words, Unicode has two ways for you to write something that looks

01:03:35   the same on the page. And I'm not sure what the original motivation is for this, probably

01:03:41   because you could use combining characters in more flexible ways than including every

01:03:45   possible combination, but sometimes combinations are convenient to include. This adds yet another

01:03:50   wrinkle which is you can write the same thing in Unicode in multiple different sequences

01:03:55   of code points. That's a problem for something like a file system. It's not a problem for

01:04:00   like if you're writing a report or printing a page or even making a web page, but it's

01:04:03   a problem for file systems because file systems need to write file names out to disk, like to store

01:04:08   them in the metadata somewhere. And in general, file systems don't want you to be able to have

01:04:14   a file with the quote-unquote "same name" in the same place, ignoring file name extensions, which

01:04:19   just make this a mess. But if you wanted to make a file called "cafe" and then you wanted to make

01:04:23   another file called "cafe," you wouldn't want them both to be existing in the same folder staring you

01:04:27   in the face, like how can these files both be here? They both have the same exact name. But if you were

01:04:31   to merely write out the encoded bytes for this thing, whether it's UTF-32, UTF-8, UTF-16,

01:04:37   whatever encoding format the file system chooses, if you were to just write them out like that,

01:04:42   one application could make "CAF" Latin small letter "e" with a "cute" and one application

01:04:47   could make "CAFE" combining a "cute" accent.

01:04:49   As far as the file system is concerned, the sequence of bytes of these files is different.

01:04:52   So when it diffs them, it says, "Nope, there's no file with this name.

01:04:54   I'll just make this file."

01:04:55   But when you open the folder, you'd see two files called "cafe" and that is bad.

01:04:59   And I haven't even gotten into case sensitivity, but as you can see in a case-sensitive situation,

01:05:07   the file system has the same problem.

01:05:08   Is there already a file with this name?

01:05:10   Yes or no?

01:05:11   And that's where you would factor in, okay, well, is there a file with this name but with

01:05:14   like the capitalized letters ignoring case?

01:05:17   But ignoring that entirely, just for plain old case-sensitive whatever, there's multiple

01:05:22   ways you can write the same word.

01:05:24   And Unicode handles that by a system that calls, what is it called, normalization?

01:05:28   normalize forms of Unicode, it has a bunch of different forms, we'll link to them in the show note.

01:05:32   What it basically comes down to is, should we try to

01:05:36   break apart every character into its smallest possible pieces, decompose

01:05:40   them, you want to have the lowercase e and then the combining accent, or should we

01:05:44   try to compose them all into their canonical form by squishing

01:05:48   the e with the combining accent into the Latin small letter e with the cute, or should we

01:05:52   do different combinations of them in different orders, a whole bunch of different normalized forms.

01:05:56   The file system, if it wants to, well,

01:06:00   I was gonna say the file system has to pick one of these,

01:06:02   but it doesn't.

01:06:02   It could just do what I said and say,

01:06:05   I will accept whatever bytes you give me

01:06:07   and I have no idea what they mean

01:06:08   and I will just put them in the file system.

01:06:10   Or it could pick one of these normalized forms.

01:06:12   You pick a normalized form,

01:06:13   then it doesn't matter what the application gives you.

01:06:15   It will always be canonicalized

01:06:17   when it goes to the file system.

01:06:18   So this is what HFS+ does,

01:06:20   but of course, HFS+ being a very old file system

01:06:22   does not use any of the Unicode normalized forms.

01:06:25   It uses a variant of those normalized forms

01:06:27   that has changed in different versions

01:06:28   of the operating system.

01:06:30   If you look at TechNote 1150 from Apple,

01:06:32   which apparently is no longer online,

01:06:34   so we'll link to like another version of it.

01:06:36   It uses kind of decomposed form

01:06:40   except for a whole bunch of ranges that it changes

01:06:42   to be compatible with like the Mac Greek encoding

01:06:44   and it excludes a bunch of things.

01:06:46   It's really, really confusing.

01:06:49   But anyway, in HFS+,

01:06:50   if you try to make two files called Caffe,

01:06:52   and I wrote, of course, a little ProScript to test this out,

01:06:55   And you try those two different ways to do it.

01:06:57   The E with the combining accent

01:06:58   and then the E with the little hat already combined.

01:07:01   Doesn't matter what you write.

01:07:03   The HFS+ will be like,

01:07:04   "Oh yep, I totally made that file for you."

01:07:06   But when you read that file back in

01:07:07   and look at the file name,

01:07:09   it will have changed it to the normalized form

01:07:13   the HFS+ wants.

01:07:14   So you will not make two separate files.

01:07:16   If you try to make one file with that one name

01:07:18   and one file with the other name,

01:07:19   you will just overwrite the same file twice.

01:07:21   you like, HFS+ does not take your file name for what it is.

01:07:26   It does something to it first,

01:07:27   or rather the driver for HFS+ does

01:07:29   to be compliant with the file system, right?

01:07:31   This is one of the reasons that a lot of Unix nerds have,

01:07:33   and I think Linus Torvalds had a big rant about it,

01:07:35   but I couldn't find it on the internet,

01:07:36   have complained about HFS+.

01:07:38   I gave you what the file name is, it's supposed to be this.

01:07:42   And you said, "No, I totally made that file for you."

01:07:44   And then later, when I try to read that file

01:07:46   and look at its name, it's not what I told you.

01:07:48   And that's bad for things like Git,

01:07:50   or Linux for that matter, or other things that deal with files,

01:07:52   they don't expect that to happen.

01:07:54   The sort of Unix-style approach is, here's a sequence of bytes

01:07:57   that makes up this file's name, make that file.

01:08:00   And then later, when I read that file, I'm going to look at its name,

01:08:03   and it better be that.

01:08:05   And I better be able to look it up with that name,

01:08:06   and the name that comes on the disk better be with the bytes that I gave you,

01:08:09   and if it doesn't, your file system is broken.

01:08:11   But as I hopefully explained, if you do that,

01:08:14   it's very easy for applications to make names that look exactly the same

01:08:19   in the user interface, cafe and cafe,

01:08:21   like they're indistinguishable.

01:08:22   They're exactly the same pixel for pixel

01:08:25   because you can't see the bytes

01:08:26   that make up the Unicode string.

01:08:27   You shouldn't care about them.

01:08:28   And to users to be able to make the same file

01:08:30   with the same name, with apparently the same name,

01:08:32   that seems like a bug.

01:08:33   It seems like something shouldn't happen.

01:08:34   Which cafe file is the one that I want?

01:08:36   They both have the same name.

01:08:37   I don't know.

01:08:39   So you can't do that.

01:08:40   And that's why Apple doesn't do that.

01:08:42   APFS now has to make some decisions about this.

01:08:45   What should APFS do for file names?

01:08:47   Should it do it the HFS+ way exactly?

01:08:49   Probably not because that's got years and years of baggage

01:08:51   floating around in it from the fact that it existed

01:08:54   before Unicode, I think, or even when,

01:08:55   or maybe just it came out when Unicode was very young.

01:08:57   I think HFS+ predates Unicode, but not HFS+.

01:09:00   But anyway, doing what HFS+ does

01:09:04   would be best for compatibility,

01:09:06   but it would also be slightly crazy.

01:09:07   I don't think Apple wants to maintain

01:09:10   their weird mapping tables forever

01:09:13   with their different non-standard normalized forms.

01:09:17   Should it do what many Linux file systems do

01:09:20   and many other processes do,

01:09:21   which is I take no position on file names.

01:09:24   That's not my concern.

01:09:24   You gave me a sequence of bytes and that's the file name.

01:09:27   I will write that out to the file system.

01:09:28   Later when you read it,

01:09:29   you will get back that sequence of bytes.

01:09:30   I don't know what that sequence of bytes means.

01:09:32   Could mean anything.

01:09:33   I have no idea what that stuff is.

01:09:34   But anyway, here's what you said.

01:09:36   My understanding is that that's what APFS does today.

01:09:38   So if you run my little pro script in APFS,

01:09:41   You can make two files that apparently are both named Caffe,

01:09:45   but they're actually different sequences of bytes

01:09:47   because one uses the combining acute accent

01:09:49   and the other one uses the E

01:09:50   with the little accent already composed on it.

01:09:52   And by the way, I think it might be, well, anyway,

01:09:57   when you, if you were to do this, when I did it in Perl,

01:09:59   I had to choose how to encode the file name

01:10:02   and I chose UTF-8.

01:10:04   I think you can't, the API, well, I'm using Perl,

01:10:07   so it has different rules about that.

01:10:08   But the bottom line is when you,

01:10:10   Somebody has to pick the byte representation.

01:10:13   You can't give it a sequence of bytes for your string

01:10:15   and use Unicode code point E9 or Unicode code point 301

01:10:19   because they don't fit in a byte.

01:10:20   So you have to figure out a way to fit them in a byte

01:10:22   and that's what Unicode encodings are.

01:10:23   And so I picked UTF-8.

01:10:24   If I had given it UTF-16,

01:10:26   I'm assuming it would have stored UTF-16

01:10:28   and given me back UTF-16 and so on

01:10:30   for all the other different encoding things.

01:10:32   So as far as I can tell, APFS is a bag of bytes.

01:10:34   That means it's case sensitive

01:10:36   because bag of bytes means you gave me these bytes,

01:10:38   here are these bytes.

01:10:38   And so if another file comes along and wants to write "Cafe" with a lowercase c instead

01:10:42   of a capital C, it's a different sequence of bytes, file system says, "Nope, no file

01:10:46   with that name, here you go."

01:10:49   I think this will...

01:10:51   I don't know.

01:10:52   I don't think this is the official position because APFS is not done.

01:10:55   You can't even boot from it right now.

01:10:57   It's obviously not finished.

01:11:00   This is what I'm gonna be looking for in the coming months and in the rest of 2017.

01:11:05   What will be the policy in APFS?

01:11:07   Will they add case insensitivity?

01:11:09   Once you decide to add case insensitivity,

01:11:11   you have to make some decisions.

01:11:13   At the very least, you have to make decisions about encoding

01:11:15   because you can't compare case on two things.

01:11:17   Like if someone writes one file name in UTF-16

01:11:19   and one file name in UTF-8,

01:11:21   something in the system has to understand that.

01:11:25   You can't do case comparisons with strings encoded

01:11:28   in different ways.

01:11:28   Or maybe you just straightforwardly compare it as if,

01:11:31   I don't know, it doesn't make sense.

01:11:32   Case comparisons,

01:11:33   you have to have an awareness of the encoding, right?

01:11:35   So if they ever want to make a case insensitive version of APFS,

01:11:39   they need to decide, here's how file names are encoded.

01:11:43   And then beyond that, they have to make a decision

01:11:46   about normalization.

01:11:47   Do we do normalization at all?

01:11:48   If you don't do normalization, you

01:11:50   can get into these weird situations

01:11:51   where you have files with apparently the same name.

01:11:54   You could handle this all at the framework level,

01:11:56   handle it all in Cocoa, handle it all in whatever

01:11:59   higher level frameworks you like it, so on and so forth.

01:12:04   I don't know if that's something that Apple will do.

01:12:05   And it's not, I think this is not a minor decision

01:12:08   because what you decide to do here has implications

01:12:12   that ripple down through history

01:12:13   as we saw with the HFS plus one.

01:12:14   After you make this decision, it's not easy to change it.

01:12:17   I suppose you could go with case sensitive now

01:12:20   and do case insensitive later,

01:12:22   but kind of like the opposite of what HFS did,

01:12:24   going with case insensitive from the beginning

01:12:25   and making a case sensitive variant.

01:12:27   But anyway, this I think is one of, to me,

01:12:30   the most important decisions that has not yet been made

01:12:33   for APFS.

01:12:35   And since it will probably happen before next year's WWDC,

01:12:38   the only way we'll be able to tell whether it's made

01:12:40   is looking at the APFS documentation online

01:12:43   and continuing to run tiny test programs

01:12:45   from languages other than Apple's frameworks

01:12:47   to see what does the file system accept.

01:12:50   I don't know what the right position,

01:12:52   I don't have a particular position here,

01:12:53   only I just want them to make a decision

01:12:56   and for it to be a reasonable one.

01:12:59   - And that's what I was about to ask,

01:13:00   is that you don't necessarily have a preference

01:13:04   between normalized and not normalized.

01:13:06   You just wanna see that there is a declared statement

01:13:11   as to how it's gonna work.

01:13:12   - Yeah, and like a philosophical,

01:13:14   some sort of philosophical statement of support,

01:13:16   because in many respects, making the file system itself

01:13:19   just be bag of bytes, which is you gave me bytes,

01:13:22   I stored them, is very straightforward.

01:13:24   It's the easiest to test.

01:13:26   It is the simplest.

01:13:28   It's the fastest.

01:13:29   You can do really fast comparisons with it.

01:13:32   It's everything you want from a performance perspective

01:13:34   if you were like, say, on the file system team

01:13:36   and you wanted to make a really fast file system.

01:13:38   But from a user's perspective, it

01:13:39   doesn't solve user problems.

01:13:41   It doesn't solve user problems that HFS+ does.

01:13:46   I don't know if you can solve it all at the framework level.

01:13:49   I have to think that you can't really at the framework level

01:13:52   entirely because there's so many different ways and so

01:13:57   different programs that can write files to disk, and not all of them go through your frameworks,

01:14:02   right? And it's madness to have some file names in UTF-16, some file names in UTF-8, some normalize,

01:14:10   some denormalize, some a weird mix. That seems untenable to me from just the basic perspective of

01:14:16   how do I correctly check whether a file exists? The file name, blah. How do I check whether that

01:14:22   exists? It's like, well, how many different ways can you write this? You know, the only way I can

01:14:26   I can check for this because the file system knows nothing about encoding.

01:14:29   I say, "Hey, file system, do you have a file named cafe?"

01:14:32   And the file system's like, "All right, well, what sequence of bytes do you want me to check

01:14:35   for?"

01:14:36   "Nope, I don't have one with that sequence of bytes."

01:14:37   "Hmm, I think is there another way that I could write cafe?

01:14:40   I could write it in UTF-32 with a combining accent.

01:14:42   Do you have this sequence of bytes?"

01:14:43   And the file system's like, "Nope, don't have that sequence of bytes."

01:14:45   And the application's like, "Hmm, maybe they did it in UTF-16, but with the Latin small

01:14:49   letter E with a Q on it."

01:14:50   And they're like, "That's untenable."

01:14:52   And so as scary as it is for the file system to make decisions about this, because they're

01:14:56   just they're very difficult to change after the fact.

01:14:59   If it doesn't, then every file system API

01:15:03   needs to either be incredibly thorough

01:15:04   or make it so that you can potentially

01:15:07   create files with apparently the same name from the user's

01:15:10   perspective.

01:15:11   And I think that's not healthy either.

01:15:12   So I don't know.

01:15:13   It could be that we don't care about any APIs,

01:15:15   except for the Cocoa ones, because we

01:15:16   don't care what people going straight through the C APIs

01:15:19   or writing Python scripts or whatever we're doing.

01:15:21   All we care about is the things that go through AppKit and UI

01:15:24   it and then you could have it be bag of bytes. I don't know. But I can hear arguments on either

01:15:31   side of it, but the fact that nothing has been said so far and the fact that it just does bag

01:15:34   of bytes now doesn't really tell me anything about their position. It just tells me they didn't get

01:15:39   to that part yet. Because I think if they had got to it, it would have been in that presentation.

01:15:43   Like the presentation of certain developers would say, "Test your application on APFS." They did

01:15:48   tell them to test it based on the case sensitivity part, and that makes some sense because Apple has

01:15:53   has shipped a case-sensitive file system for a long time,

01:15:55   and a lot of applications break on case-sensitive file systems,

01:15:58   like Adobe's applications and Microsoft applications,

01:16:01   all apps that were created in the days

01:16:02   before the Mac could even have a case-sensitive file system.

01:16:06   Many of them, believe it or not, attempt

01:16:07   to open files or libraries and stuff

01:16:09   by file paths that do not match the case of the actual files

01:16:12   on disk.

01:16:13   You would think that those are the type of bugs

01:16:14   that would have been fixed long ago,

01:16:16   but the bottom line is Mac users don't

01:16:17   run case-sensitive file systems for the most part.

01:16:20   iOS, luckily, has always had case-sensitive file systems.

01:16:22   But anyway, case sensitive is separate

01:16:24   from whether things are normalized.

01:16:26   So I think if Apple was committed

01:16:30   to Bag of Bytes file naming,

01:16:32   they would have maybe mentioned that

01:16:34   in the file system session, but I'm not sure.

01:16:36   But anyway, it's a thing I think about a lot,

01:16:38   and I have concerns.

01:16:39   - Our final sponsor this week is Backblaze.

01:16:43   Backblaze is unlimited native online backup for Mac and PC.

01:16:48   Go to backblaze.com/atp for a no credit card required,

01:16:52   no risk, free 15 day trial.

01:16:54   Now Backblaze is the best online backup.

01:16:58   That isn't in the script, I don't know if they can say that

01:16:59   but I can say that because I've used many online backup

01:17:02   programs and services and Backblaze is by far the best one

01:17:07   that's worked out for me and my favorite one

01:17:08   and I've been using them since long before

01:17:10   they were a sponsor.

01:17:11   I have them backing up my computer, TIFF's computer,

01:17:13   even my mom's computer.

01:17:15   I have them backing up something like six terabytes

01:17:17   of my data.

01:17:19   It is so solid, it is literally never caused us a problem

01:17:23   for the, I don't know, four or five years

01:17:25   I've been using them.

01:17:26   I highly recommend having online backup,

01:17:28   especially if you're gonna be playing around

01:17:30   with the file system on your computer.

01:17:32   You should really have online backup to save your butt

01:17:36   if you do anything stupid or if your local backups

01:17:38   are all corrupted by bit rot from HFS Plus.

01:17:41   So check out Backblaze today, backblaze.com/ATP

01:17:45   for that risk-free 15-day free trial.

01:17:49   Backplace has a bunch of other cool features too.

01:17:51   So for instance, you can of course restore your files

01:17:54   on the web, you can download files as a big zip file,

01:17:57   you can even have them overnight you a hard drive

01:17:59   with all your data, if it's like a ton of data

01:18:01   and it'll be taken to download.

01:18:02   And if you return the hard drive back to them

01:18:05   within 30 days, you get a refund

01:18:07   on the price of the hard drive.

01:18:08   So it's a very effective way to restore

01:18:09   a ton of data at once.

01:18:11   And not only that, on the other side,

01:18:13   if you wanna just restore one file,

01:18:15   You can do it in the web interface

01:18:17   or their iOS or Android apps.

01:18:19   So one great use for this is if you're on your phone,

01:18:22   or let's say you're traveling

01:18:23   and you only have your laptop or something,

01:18:24   and you wanna file it from your home computer,

01:18:26   you can do this with Backblaze,

01:18:27   'cause Backblaze has all your files.

01:18:29   It's just automatically there, running,

01:18:31   backing up everything.

01:18:32   You don't really have to think about it,

01:18:33   which by the way is how a backup should work.

01:18:34   If you have to think about it, it's not really a backup.

01:18:37   So with Backblaze, you can log in and just restore one file.

01:18:39   If you forgot a file on a trip or something like that,

01:18:41   it is incredibly convenient.

01:18:42   I've done this probably five or six times now,

01:18:44   because it's like, it doesn't happen often,

01:18:47   but when it does happen, I'm so glad I have it.

01:18:49   And that's kind of the story of online backup.

01:18:51   Like, you won't usually need to use it,

01:18:54   but you'll be really glad you've had it

01:18:56   on those few times that you do use it.

01:18:58   Just five bucks a month for unlimited space,

01:19:02   unthrottled speeds per computer.

01:19:04   So five bucks per month per computer,

01:19:06   it is a great deal, unlimited space.

01:19:08   So check it out today, go to backblaze.com/atp,

01:19:12   and our listeners get a 15 day free trial.

01:19:14   Backblaze.com/ATP.

01:19:17   Thanks a lot.

01:19:17   - You guys have any opinions on before we move on?

01:19:23   Case sensitivity?

01:19:25   (laughing)

01:19:27   - So for the two questions that you've basically posed here,

01:19:34   I think the file system should,

01:19:37   you know, on the topic of like, you know,

01:19:38   bag of bytes versus at least normalizing,

01:19:41   you know, normalizing to some degree,

01:19:42   whether you normalize for like Unicode normal forms

01:19:45   for combining characters and things,

01:19:47   or at least whether you normalize for character encoding,

01:19:49   I think encoding is an obvious win.

01:19:51   Like you should absolutely normalize for character encoding.

01:19:55   And whatever encoding they pick,

01:19:58   I'm less concerned about that.

01:19:59   If you pick UTF-8, cool.

01:20:02   Whatever encoding they wanna pick, that's fine,

01:20:05   but I think it is a clear win

01:20:07   that the encoding should be normalized

01:20:10   for file system access.

01:20:11   Whether or not normalizing forms of characters

01:20:16   and case sensitivity, I mean, that's kind of

01:20:18   two different degrees of the same kind of thing,

01:20:21   that I am less confident on, but my inclination would be,

01:20:26   I think the era of case insensitivity is probably over,

01:20:32   but I would say that if I were designing a system,

01:20:36   and having heard no other arguments

01:20:38   except for your large amount of them.

01:20:41   (laughing)

01:20:44   I think the Cocoa APIs should be responsible

01:20:48   for normalizing or not normalizing the name,

01:20:51   like you know, case and combining characters wise.

01:20:54   That the low level C APIs and like the raw interface

01:20:58   of the file system should not perform

01:21:01   that kind of like messing with characters.

01:21:03   - Should the file system throw a fatal error

01:21:05   if the encoding is incorrect,

01:21:08   like if you give an invalid UTF-8 sequence,

01:21:10   should that just not work?

01:21:11   Or should it dutifully write those to disk anyway?

01:21:14   - Yeah, 'cause if it doesn't do that,

01:21:15   then you have the same problems before,

01:21:16   where you can write a name,

01:21:19   and then you go to read that name and it's not there.

01:21:22   So I can see why that could be a problem.

01:21:24   So maybe yes, maybe the answer is that

01:21:27   if you try to have an invalid sequence in the name

01:21:30   that you give it, then maybe it does error out.

01:21:31   I don't know.

01:21:33   - All right, because it's basically a question of,

01:21:34   So say they pick UTF-8, which is exactly what they'd pick, because that's what everyone

01:21:37   picks, because all the other encodings are stupid-er.

01:21:41   If they pick that, then they could just say, "Oh, when you write your file names to APFS,

01:21:48   you should write them in UTF-8."

01:21:50   And then if you don't do it, that's your own stupid default.

01:21:53   In other words, there's a policy, not an implementation enforcement.

01:21:58   And so then later, when some other program tries to...

01:22:00   In other words, if you wrote it with an invalid UTF-8 sequence, and then later your program

01:22:03   tried to read it with that same invalid UTF-8 sequence, it would find it, right? But it would

01:22:07   be garbage and then any other API that's trying to like compare files or whatever would just,

01:22:12   you know, fail in weird ways because you have not even written a valid UTF-8 sequence and when it

01:22:17   does it, like if you tried to say, "Is there a file called CAFE?" it would be like, "Nope,

01:22:20   don't see it," because you just wrote an invalid sequence. The other one is to have the file system

01:22:26   enforced at the, you know, at the driver level and all the various operating systems.

01:22:30   if you pass some file name down through the system, down through the BSD layers,

01:22:34   at some point we're going to look over your entire sequence and confirm is this a valid

01:22:37   UTF-8 sequence? And if it's not, boom, everything blows up, forget it, nothing works, or you know,

01:22:42   whatever. And I don't know, I think checking for, checking that it's valid UTF-8 shouldn't take long

01:22:50   and should be fairly straightforward because we're not dealing with large volumes with data,

01:22:53   so that's what I think they would go with if they make that decision, that it will essentially be

01:22:56   impossible to write an invalid UTF-8 sequence to a file name, which could also break applications.

01:23:03   Every decision they make, aside from "make it work exactly like HFS+," is going to break

01:23:07   applications. And "make it work exactly like HFS+" is the one decision that I think is

01:23:11   entirely wrong.

01:23:12   I mean, heck, in this day and age, it wouldn't have been reasonable to have an actual Intel

01:23:17   hardware instruction to validate a sequence of UTF-8 characters.

01:23:21   Yeah, because the rules aren't that complicated.

01:23:24   No.

01:23:25   You don't even have to see whether it corresponds to a defined code point and a unified standard.

01:23:30   That's more difficult to do, certainly in hardware.

01:23:32   No, it's just like bit masking.

01:23:34   Yeah.

01:23:35   But anyway, I suspect that's probably what they'll end up being doing.

01:23:38   But case sensitivity, I think, is still a weird issue because I think users of computers,

01:23:45   even just on iOS where you're not really ever prompted to write a file name, but certainly

01:23:49   on the Mac, having two files called like, I don't know, like, you know, XMIS, and then

01:23:55   you write a file called XMIS but you decide to capitalize the X and you end up with two

01:23:58   files, you know, you thought you were overwriting the previous one, I don't know, that just—case

01:24:02   insensitivity I think is more like how regular people think computers work.

01:24:06   Case sensitivity is how programmers think computers work, for sure, so I'm sure that

01:24:11   it would be very popular with programmers, but I mean, or maybe not, because like I said,

01:24:16   The fact that there are still Mac applications that only work on case-sensitive file systems

01:24:20   due to eminently fixable errors in their source code, it's like that's never going to change

01:24:27   unless you force it to change.

01:24:28   So, I don't know.

01:24:29   Casey, you have opinions?

01:24:30   Yeah, you know, I think that of all the places you want to have the Wild West, the file system

01:24:36   is not it.

01:24:37   And I think that forcing and encoding makes sense.

01:24:41   I agree with you mostly that users expect case insensitivity, but I don't know.

01:24:52   I think what with the internet running on Unix for the most part and URLs generally

01:24:56   being case sensitive, I think that people are starting to become more comfortable with

01:25:01   that.

01:25:03   So if I had a vote, I would say enforce something like UTF-8.

01:25:08   If you write something that's garbage or not UTF-8 encoded, barfall over it and do so violently.

01:25:16   And I would favor a case sensitivity by default.

01:25:19   That's my vote.

01:25:20   I don't think anyone's in favor of normalization, but like I said, you end up in weird situations.

01:25:24   So I would suspect if they don't touch normalization at the file system level, then they do it

01:25:29   all at the API level.

01:25:30   But then it's just, it's pretty easy to make fairly absurd situations where I bet you could

01:25:36   pick some word or phrase that has a huge number of possible combinations, like in some language

01:25:42   that uses accents on its characters, and just, you know, the number of possible permutations

01:25:47   goes up pretty quickly as you add the accented characters. Then you can make a folder full of

01:25:51   literally hundreds of files that all appear to have exactly the same name in the Finder.

01:25:54   That's something you can't do in HFS Plus, and it's something that you shouldn't be able to do,

01:26:00   but will be able to do with the file system, even if they pick an encoding, but they don't

01:26:04   don't pick a normalization.

01:26:05   So that's why I'm thinking about it.

01:26:08   That's because it's not a straightforward problem.

01:26:09   It's not an obvious answer.

01:26:10   Oh, clearly Apple will do this.

01:26:12   There is no easy answer.

01:26:14   I never thought we'd talk this long

01:26:15   about the detailed implementations of dealing

01:26:18   with file names in a file system.

01:26:20   Well, it's more just about Unicode.

01:26:22   And even though you and I both know it having dealt with it,

01:26:25   but I can tell you the first five times I dealt with Unicode,

01:26:28   I still didn't understand it, only on the sixth time.

01:26:32   If you have never heard anything about Unicode, hearing what I just said about all the code

01:26:36   points and normalization is not going to sink in.

01:26:38   But it's weird, and if you don't know about it and think about it when dealing with strings,

01:26:44   you will eventually be sad.

01:26:45   No, I mean, dealing with Unicode, in my experience, is a lot like parenting, in that the more

01:26:52   you—the more experience you get in the area, the more you realize that you will just always

01:26:57   be wrong and there are no good answers.

01:26:59   Wow.

01:27:00   Well, I mean, there's one thing that's just understanding the standards, which I think

01:27:03   is difficult enough.

01:27:04   And then once you understand the standards, then you realize no matter what I pick, there

01:27:08   are downsides.

01:27:09   And then the real sad realization is that you realize all the places, if you're a programmer,

01:27:13   you realize all the places in your program where text is coming in without the encoding

01:27:18   specified.

01:27:19   And you're like, I don't even know what the right thing to do is.

01:27:22   How is this going to be encoded?

01:27:24   This is just bytes coming across some sort of, you know, reading out of a disk, a file

01:27:27   on disk, or coming across the network.

01:27:30   And then you end up rippling outwards and asking all of your input sources, "Hey, could

01:27:34   you tell me what encoding you're using?"

01:27:35   And they say, "Encoding?

01:27:36   What?"

01:27:37   And then you realize you basically have an intractable problem where, especially if you're

01:27:40   accepting input from the wider world, that it doesn't come tagged along with what encoding

01:27:46   it is, and you don't know how to make sense of it unless you know the encoding, so you

01:27:49   kind of have to, "I can detect the encoding through a bunch of heuristics, or I can guess,

01:27:52   or I can try to enforce downstream that you should only give it to me in this encoding."

01:27:55   And then you find out how many people are actually sending you things that don't conform

01:27:59   or all of a sudden you get a bunch of UTF-16 or shift-gis and you have, oh, this is terrible,

01:28:04   text is terrible, we should communicate through a series of ones and zeros, it would be much

01:28:08   easier.

01:28:09   [laughter]

01:28:10   Wow.

01:28:11   I've never heard shift-gis discussed in a podcast, and I don't think I ever will again.

01:28:17   Oh, yeah, but my first big normalization project was, like, I would have killed for UTF-8.

01:28:22   Like, that's how bad it was.

01:28:25   Before Unicode, things were worse, let's just put it that way.

01:28:27   - Yeah, no, I mean, that's what, like,

01:28:29   I mostly avoided having to deal with these issues

01:28:31   over time with my various web servers,

01:28:33   'cause like, you're right that like, in native apps,

01:28:36   you don't generally have to deal too much with this.

01:28:39   On the web, you gotta deal with it all the time.

01:28:41   And the easiest thing on the web is to just

01:28:43   make all your pages serve UTF-8, serve themselves as UTF-8,

01:28:48   which would then make all browsers default

01:28:49   to sending you UTF-8 in forms.

01:28:52   - Only the modern world will make your browsers do that.

01:28:54   In the old world, you could do whatever you wanted

01:28:56   with your web pages, but people in Japan

01:28:58   were gonna be sending you things in a different encoding,

01:29:00   and it doesn't matter if you put UTF-8 as the,

01:29:02   you know, like, that was great when browse

01:29:04   just finally started to honor the encoding of the page.

01:29:07   - Yeah, but that, I mean, that was,

01:29:09   most of my career has been after that.

01:29:10   I mean, like, when we were building Tumblr in 2006,

01:29:13   that was the case, so it's been okay.

01:29:15   But, and then, the only time I really had to think

01:29:18   about Unicode on web stuff recently

01:29:21   is when emoji came around, and I had to alter

01:29:24   all my MySQL tables to be the UTF-8 MB4 character set,

01:29:29   which is annoying.

01:29:30   But after that, it was fine.

01:29:33   - MySQL made some Unicode mistakes.

01:29:36   The best part of the web and coding is,

01:29:39   even coming into the case sensitivity,

01:29:41   is the old URL that we increasingly don't see

01:29:44   in our address bar.

01:29:45   The hostname part is not case sensitive,

01:29:47   whatever you think that means.

01:29:49   The encoding for URLs is,

01:29:51   I think it is basically limited to ASCII,

01:29:55   but there's this way you can encode Unicode code points

01:29:58   with the special escape sequence-y thing.

01:30:00   It's not-- - Yeah, in the hostname

01:30:01   there is, in the rest of the URL,

01:30:03   God knows what's going on there.

01:30:05   In the hostname, there's a special

01:30:06   international domain extension thing,

01:30:08   but that has a bunch of security problems, actually.

01:30:11   - Right, of course, and then like you said,

01:30:13   for the rest of the URL, it's kind of the Wild West,

01:30:16   and it's the worst that half of the string is case-sensitive

01:30:19   and half of it isn't, again, whatever the hell

01:30:20   think case sensitive means. URLs are still a problem. But in that respect, the body of your

01:30:27   HTML documents is blessedly normalized at this point. Because like you said, most modern browsers

01:30:32   honor the encoding. Anyway, text is hard. All right. Well, speaking of things that are hard,

01:30:39   how about data integrity? Yeah, I'm touching this last time. This is the one feature I wanted from

01:30:45   from APFS that it did not deliver, and we're speculating about why that might be or if

01:30:51   it really was the case.

01:30:52   Data integrity, just a quick review, is basically the idea that if a program writes some data

01:30:59   to disk, later it reads that data back, the data that it originally wrote should be the

01:31:04   data that it gets back.

01:31:07   And that could be a day later, a year later, ten years later.

01:31:11   If that's not the case, because hardware is fallible, you would like the file system to

01:31:16   know, "Hey, you asked for these bytes, but it turns out that since they were written,

01:31:22   they have been screwed up."

01:31:24   So restore from backup or solve this problem in other ways.

01:31:28   ZFS and some other file systems have a way to make multiple redundant copies of the same

01:31:32   data, and when they detect this error they can fix it, because they have a good copy

01:31:37   and a bad copy and they will just ignore the bad copy and use the good copy and write another

01:31:41   copy of the good one or whatever.

01:31:43   All that stuff is expensive because it

01:31:45   means you have to write out checksums with all of your data

01:31:47   and you have to sort of do end-to-end checksums

01:31:50   so that everyone is sure, yep, I'm sending you this

01:31:52   and here's the checksum.

01:31:52   Yep, I got that and here's the checksum.

01:31:54   I'm writing to disk and making sure everything is all good.

01:31:57   That's a feature of ZFS.

01:31:59   It's a very important and wonderful feature of ZFS.

01:32:02   But it has a cost associated with it,

01:32:04   both in terms of computation of computing all those checksums

01:32:06   and also dependency because you can't really

01:32:10   be done writing the data until you've also made sure all the data was written correctly

01:32:13   and then also written the checksum and made sure that, you know, so there's lots of dependencies

01:32:17   that are inherent in that. And mostly I wanted it for the case of bit rot as in over long

01:32:23   periods of time. I write out my family's photos to disk and I make backups of that disk and

01:32:28   I push that up to backblaze and it's on time machine and I'm doing super duper clones.

01:32:32   And if some of those bits are flipped because of errors in the hardware, all I'm doing is

01:32:36   copying those now corrupted bits over and over and over again over the years to different backups.

01:32:41   You know, the incremental backups don't go on forever. There's a window of time, you know,

01:32:44   before they'll fit on the disk and the same thing with backblaze. They don't think they keep your

01:32:48   backups forever and ever and ever, every different version. So eventually you will just have be

01:32:54   propagating the corruption over the years until 20 years later when you try to look at some baby

01:32:57   picture, your favorite baby picture is all messed up and all scrambled in JPEG because a bunch of

01:33:01   bits flipped and you don't know which ones. That's what I'm trying to protect against.

01:33:05   and APFS does not provide that feature, does not have the option to write out checksums with all

01:33:11   of its file data. Now APFS is a flexible file system intentionally designed to be extensible

01:33:16   without breaking backwards compatibility. This feature could conceivably be added in the future,

01:33:22   hell it could be added before 2017, they got a whole year right, but it's not there right now

01:33:26   and that's a little bit disappointing. It does write checksums for metadata. Metadata is like

01:33:31   here's what the file's name is, here's all the dates, the ownership, the permissions,

01:33:34   and here's where each individual piece of this file data is on the disk so you know where to go

01:33:38   get it. I keep saying disk but you know what I mean. And it writes checksums for metadata.

01:33:43   I mean there's good reasons to do that, mostly because this file system, like many others,

01:33:49   tries to... doesn't do always consistent on disk representation but it comes close. It wants to

01:33:56   know did I finish this operation? So if someone yanks out the plug to your computer and it was in

01:34:00   the middle of writing a file, what you want to happen when you reboot is either the entire file

01:34:04   is there or none of the file is there. And checksums on metadata could conceivably help

01:34:09   with that because what you're going to do is you're going to write the data and write the

01:34:13   metadata, but if the metadata is not complete, like if we didn't finish, if we're not done,

01:34:17   then you just ignore all of that. It's all invalid and the file basically isn't there.

01:34:20   You have a consistent file system. Don't worry about that partially written file or that partially

01:34:24   written metadata or whatever. And how do you tell whether the metadata is partially written? Well,

01:34:28   all your metadata has checksums. When you're looking at that piece of metadata, you can look

01:34:32   at it and do the checksum and say does the checksum match the metadata and if it does

01:34:36   it's complete and if it doesn't you know you can do that with journaling and stuff but

01:34:39   apfs does not use journaling journaling is a relatively expensive way to do the same thing

01:34:43   where you sort of write out what you plan to do then you do it then you write out that you're done

01:34:47   and that's how it can tell whether you finished an operation or not and metadata is in general

01:34:52   more important than data because if you screw up the metadata you could hose your entire disk like

01:34:56   screwing up the metadata for an entire directory and then everything under it becomes invisible

01:34:59   or whatever. And metadata is really small and the checksums are really fast on it,

01:35:03   so there's no real performance hit. So APFS does do checksums with metadata, does not do it with

01:35:08   data. This is a topic that came up a lot at WWDC, talking to other people who had... The other file

01:35:14   system nerds who had also talked to people on the file system team about APFS. And I think this was

01:35:23   a very popular feature suggestion. "Hey, it would be great if APFS had data integrity." Or the

01:35:28   question why doesn't APFS have data integrity and a lot of the the reasons

01:35:32   are you know things that I said that is potentially expensive one of the reasons

01:35:37   that I heard was that SSDs do their own checksumming internally which is true

01:35:42   they do because they have to deal with the pretty startlingly unreliable nature

01:35:48   of flash storage you know all sort of memory chips are inherently at the

01:35:55   bottom tiny little analog devices that are a little bit scary when you find out

01:35:58   how they work, and SSDs are no different.

01:36:01   SSDs have over-provisioning, where they have many more memory cells than they're going

01:36:05   to use, and there's actually a tiny little operating system in there that's trying to

01:36:08   distribute all this stuff to all the storage, and they wear out if you use them too much.

01:36:12   It's very, very complicated.

01:36:14   But they do copious, not just checksums, but also error-correcting code, so if they find

01:36:18   a bit flip because of some analog error or whatever, they can fix it before returning

01:36:22   the data.

01:36:23   So that's one of their stopgaps, is like, "Hey, spinning disks don't do that so much,"

01:36:27   they're going out and SSDs do the checksums.

01:36:30   That's not really a great solution

01:36:31   because there are other places

01:36:32   that errors can be introduced like,

01:36:35   other hardware other than the SSD itself,

01:36:37   like the bus and everything.

01:36:37   But since Apple controls that entire chain,

01:36:41   they control the bus, they control the SSDs in theory,

01:36:44   especially since they make Macs.

01:36:45   Don't make Macs anymore that you can swap

01:36:47   lots of different hard drives into and everything.

01:36:49   That they're a little bit better off than everyone else.

01:36:51   But it doesn't really help with bit rot.

01:36:52   If I write all my family photos to a one terabyte SSD,

01:36:55   they get there successfully.

01:36:56   And then five years later, I have no idea

01:36:58   if those bits are flipped.

01:36:59   The file system can't tell me because it doesn't know what

01:37:01   bits were originally written.

01:37:02   All it can do is read them and say,

01:37:03   here's what I've got on disk.

01:37:04   Is that what you wrote five years ago?

01:37:06   Beats the hell out of me.

01:37:07   I don't know.

01:37:07   So I've been thinking about possible other solutions

01:37:11   if Apple never builds in Data Integrity to APFS.

01:37:14   And one of them is something that I

01:37:16   think there's an HFS+ program that does this already.

01:37:18   User space solution.

01:37:21   Just scan all your files, checksum them,

01:37:23   write out the checksum someplace else.

01:37:25   And then if anything goes wrong with either the checksum

01:37:28   or the data itself, the two won't match anymore,

01:37:31   and you will know that your file is corrupted

01:37:33   and you can restore it from backup.

01:37:35   So it's sort of a user space manual process

01:37:38   of scanning all the files that you care about

01:37:40   and writing out the checksums,

01:37:41   then periodically scanning them all again

01:37:42   and making sure the checksums all match.

01:37:44   And if any of them don't match,

01:37:45   then restoring from your presumably good backup.

01:37:48   So it's basically protecting against bit rot

01:37:50   by actively doing some process periodically,

01:37:52   hoping that you don't propagate

01:37:54   whatever corruption has appeared into all of your incremental backups.

01:37:57   You will know about the error in enough time to restore from your backups.

01:38:00   And that's kind of a heavyweight solution.

01:38:02   I forgot what the name of the HFS+ program that does that.

01:38:06   Clusters, maybe?

01:38:08   Or maybe that's just the compression one.

01:38:10   Anyway, I'll try to look up for the show notes.

01:38:13   Of course, if you're a programmer and you think about this problem for more than a few

01:38:17   seconds, you realize that there is a big race condition here, where if you're trying to

01:38:22   to read a file and checksum it, and then write out that checksum, what if between the time

01:38:27   that you read that file and the time that you wrote the checksum, something modified

01:38:31   that file? What if it modified it while you were in the middle of reading it? Your checksum

01:38:35   in your file won't match, and it will appear as if corruption occurred. So you could do

01:38:39   a thing where you just say, "Okay, if I read the file, I'll calculate the checksum, then

01:38:43   I'll write the checksum. After I write the checksum, I'll read the file again, and if

01:38:47   it doesn't match the checksum, I won't assume it's corrupt, I'll just try to do it again."

01:38:51   You're just racing yourself over and over again until you get a matching set and you're

01:38:54   like, "Oh, finally, I got a matching set."

01:38:55   But you're not solving the race condition that way.

01:38:58   It's essentially an intractable race condition without help from some other part of the system,

01:39:03   without help, for example, a way to say, "I want to stop anything else in the system from

01:39:08   writing to this file."

01:39:09   And in general, operating systems don't provide ways to do that.

01:39:13   They provide advisory locking, but it's very difficult to stop anything else from writing

01:39:19   to a particular file in general.

01:39:23   Luckily, both HFS+ and, I assume,

01:39:26   APFS include a feature that can help with this.

01:39:29   I don't know why it was added to HFS+,

01:39:31   but it's been there for a couple of years now, I think.

01:39:34   And it is, what is it called?

01:39:36   It's called the Write Generation Counter.

01:39:39   You can get this on any file today on your Mac in HFS+

01:39:42   if you call get_adder_list.

01:39:43   It's called the constant in the get_adder_list man pages.

01:39:46   Adder common gen count.

01:39:48   It is a, according to the documentation, non-zero monotonically increasing generation count for this file system object.

01:39:55   So it's for all file system objects, not just files.

01:39:57   And it's basically a number that goes up anytime anything happens to a file.

01:40:00   So all you gotta do is store both the checksum and the generation count,

01:40:05   and then you will know this checksum is for this generation count of the file.

01:40:08   And if anything in the entire system does anything to that file, that number will go up, and you'll know your checksum is invalid.

01:40:14   So in the future, when you're checking for corruption, you won't be confused and say,

01:40:18   "Oh no, I've detected corruption," because you will know that, yeah, the checksum doesn't

01:40:21   match the file data, but that checksum was for generation count number five, and the

01:40:25   file is currently on generation count number seven, so it's time for you to recompute a

01:40:28   checksum.

01:40:29   So it is a system-guaranteed way for you to match up the checksum and the generation count

01:40:34   and the content of the file.

01:40:35   And that is very handy, and it makes me think that—I'm going to pull a Marco here—I

01:40:40   I should write my first Mac program, which is a file that just does these checksums,

01:40:44   and use it because, I mean, I'm not going to say I could write it in Perl, but I totally

01:40:47   could write it in Perl.

01:40:48   But no, like an actual Mac program that does this?

01:40:50   It's really straightforward.

01:40:52   The only real problem is where you write the checksums.

01:40:54   You could write them to extended attributes, that seems kind of antisocial to me.

01:40:57   You could write them to a separate database, but it better be able to handle millions of

01:41:00   things.

01:41:01   But anyway, I'm actually thinking about this.

01:41:02   A program, a simple program that you point to the subdirectory that does a bunch of checksums

01:41:06   for it and periodically scrubs it and tells you if anything has gone corrupt.

01:41:11   I think a local SQLite database would be a pretty good way to do that.

01:41:14   You say that because you have never inserted more than a million rows in a SQLite database.

01:41:18   I have, and I can tell you it falls over badly.

01:41:22   Even like a simple, because that would just be like, you know, a string key, well, God

01:41:26   knows how you'd represent the file name, but however you'd represent the file name, a string

01:41:30   key and a checksum.

01:41:32   You don't know how to do the file name, but you can do--

01:41:34   you have a unique ID for the file.

01:41:36   And that's another thing you can get from HFS bus, right?

01:41:39   So you just basically store only two integers?

01:41:41   Yeah, it doesn't do well.

01:41:43   If you try to do a graph of inserting--

01:41:46   I never tried it with pure integers.

01:41:48   I've always had some string in there.

01:41:49   But once you get into the millions,

01:41:51   the insert starts slowing way, way, way down.

01:41:55   I know this from experience.

01:41:56   Can you provide a custom value to be the row ID?

01:41:59   Oh, to get rid of the sequence?

01:42:01   Yeah, get rid of one integer. If you can provide a custom value to the row ID, then each row

01:42:06   would only have effectively one column. Yeah, I don't know why it's slow. Maybe I

01:42:10   had indexes on it, but anyway, I did it for data that was a couple of integers and a couple

01:42:14   of strings, and I left the row ID, and in the millions, disaster becomes unusable. It's

01:42:21   fine in tens of thousands, it's okay in hundreds of thousands, but once you get into millions

01:42:26   – and this was maybe three years ago, so maybe things are improved. But anyway, there

01:42:29   There are solutions to this.

01:42:30   It's not an impossibility, is what I'm saying.

01:42:33   I'll just start in a P list.

01:42:34   It'll be fine.

01:42:35   For whatever it's worth, I'm pretty sure there is some kind of optimization where if you

01:42:39   -- I think if you provide some kind of like big int column instead of the row ID, I think

01:42:45   it'll use that as the row ID or something like that.

01:42:47   You have to look at the documentation to be sure.

01:42:49   Yeah, there's a lot of optimizations to SQLite to make it sort of less safe but faster.

01:42:54   But doing it in extended attributes would be entirely straightforward, but I'm not sure

01:42:58   that's the best solution, especially if you have only read permission to the files and

01:43:01   you can't write extended attributes to them. Anyway, let's think about it, because extended

01:43:06   attributes is totally the way to do it. Time Machine, by the way, does keep checksums with

01:43:10   all of its files and has for many years. I forget where it stores them, probably in extended

01:43:13   attributes, but who knows. But anyway, in Time Machine, it owns the entire area that it's writing

01:43:17   to, so it doesn't have to worry about permissions issues. But anyway, there could be a limitation

01:43:22   of the program. Hey, if it can't checksum a bunch of files, it'll just tell you when it's done. Yeah,

01:43:26   you pointed me this directory and it turns out there were, you know, 7,000 files that I

01:43:31   could not check some because I can't write them. I don't know. I've been thinking about it a little

01:43:34   bit. This is the world's most boring program, but in the absence of file system support for

01:43:39   bitrot detection, we need some solution. And since it's technically possible on HFS+ too,

01:43:45   because like I said, this feature, this generation write counter is on HFS+ now. It's just that I've

01:43:49   never really thought about doing it, as I always assumed the file system would come and save me,

01:43:53   me, but if that doesn't turn out to be the case, I take matters into my own hands.

01:43:56   I mean, if there's ever an app that would be perfect for today's John Siracusa to make

01:44:04   and publicize, I mean, I can't think of something that would be better.

01:44:08   Yeah. I mean, the other solution, as many people will tell you, "Oh, just use FreeNAS

01:44:11   to make a ZFS NAS and put all your data on that," and that would be a solution.

01:44:16   Nah, nobody wants to do that.

01:44:17   My Synology doesn't—Synology supports BTRFS now, which I think has data check summing,

01:44:22   My Synology doesn't support it.

01:44:23   So maybe when I-- when I--

01:44:24   NASA eventually dies and I replace it,

01:44:26   I'll buy one with ZFS and that'll solve the problem.

01:44:28   But in the meantime, I may experiment with this someday.

01:44:31   Well, and the best thing is you'll

01:44:32   get Sherlocked in like two years when they add-- when they add--

01:44:35   Exactly.

01:44:36   So the full developer experience.

01:44:37   Yeah, exactly.

01:44:38   Just when I finally get it working, they'll be like,

01:44:41   now APFS has data integrity.

01:44:43   Yeah, get rejected from the Mac App Store

01:44:45   because it won't be sandboxable at all.

01:44:47   Yeah.

01:44:47   It'll be perfect.

01:44:50   Try to sell it.

01:44:51   get, you know, there'll be some like competitor that'll sell theirs for less.

01:44:54   And then, like I said, I think there's already a program that does this for HFS

01:44:57   Plus and presumably that same program will work on APFS.

01:45:00   I forget what the name of the program is, but yeah, this is not, this is not a new

01:45:02   idea.

01:45:03   I think this is already implemented in an application.

01:45:05   I just can't remember the name, which is probably why I don't have it installed.

01:45:08   Or like, seriously though, when I think about it, it's like, why haven't you done

01:45:11   this before?

01:45:11   Why aren't you running the HFS Plus one that does this?

01:45:14   I was always just thinking that this file system would save me.

01:45:17   I just thought like, well, I'll just, I'll stick it out.

01:45:20   And there'll be a new file system here probably next year, and I've been thinking that for

01:45:23   a lot of years now.

01:45:24   It finally came.

01:45:25   No data integrity.

01:45:26   All right.

01:45:27   What else is going on in the Apple file system?

01:45:31   Tell me about space sharing.

01:45:32   Is there more?

01:45:33   Yeah, we've got to save that for now, but I just wanted to get data integrity.

01:45:36   That's why I shuffled around.

01:45:37   We'll save the other details for the rest of the show.

01:45:39   These are the main points I wanted to get to that weren't discussed.

01:45:42   We'll talk about space sharing and atomic clones and snapshots next week probably.

01:45:45   All righty.

01:45:46   Thanks a lot for the responses this week.

01:45:48   fracture, hover, and backblaze, and we will see you next week.

01:45:55   This show is over, they didn't even mean to begin

01:45:59   'Cause it was accidental (accidental)

01:46:02   Oh, it was accidental (accidental)

01:46:05   John didn't do any research, Marco and Casey wouldn't let him

01:46:10   'Cause it was accidental (accidental)

01:46:12   Oh, it was accidental (accidental)

01:46:16   And you can find the show notes at ATP.fm

01:46:21   If you're into Twitter, you can follow them @C-A-S-E-Y-L-I-S-S

01:46:29   So that's Kasey Liss, M-A-R-C-O-A-R-M

01:46:34   Auntie Marco Arment, S-I-R-A-C

01:46:39   U-S-A-C-R-A-C-U-S-A

01:46:41   It's accidental (it's accidental)

01:46:44   They didn't mean to accidental (accidental)

01:46:49   Tech broadcast so long

01:46:54   Sorry talk about Tebow

01:46:56   Hey, I still only know something I forgot about that. I'm gonna get to it someday. We're never gonna talk about teeth

01:47:01   No, we are we are gonna talk about Tebow

01:47:04   But a time we get to it people are gonna care even less than they do now and that's pretty that's pretty impressive really

01:47:09   When you think about it, I'll care

01:47:11   You will be the only one when I own Apple buys what the hell's that name like?

01:47:16   I'm saying Rovio, but it's not the Angry Birds company. I below so when Apple buys them then all of a sudden we'll care

01:47:22   Well, then we will talk about it.

01:47:25   Until then, don't see the point.

01:47:26   (laughing)

01:47:29   But to be fair, I have nothing else to talk about,

01:47:31   so whatever.

01:47:33   - I discovered during our show that you can,

01:47:38   I don't know when this became possible,

01:47:41   but mail.app on the Mac now supports flagging

01:47:45   where the flags can be any color

01:47:47   of this list of multiple colors.

01:47:48   - Yeah, it's been that way for a while, I thought.

01:47:50   - How long have, I've always just hit,

01:47:52   Command + Shift + L or whatever it is, to set the flag.

01:47:55   I've never known there were multiple flags.

01:47:58   Now I can make my crappy email filing system even worse

01:48:01   by making all the flag messages that I never get back to.

01:48:04   Now I can make them different colors

01:48:05   that I never get back to.

01:48:06   - And color your shame.

01:48:08   - Yep.

01:48:09   - Wow.

01:48:10   You know, if you never get back to them,

01:48:11   maybe it's not worth flagging them.

01:48:13   - Yeah, that's probably right.

01:48:15   - No, that's not how that works.

01:48:17   He's flagging them because he thinks

01:48:18   he has to get back to them.

01:48:19   And by saying, "Because I failed to,

01:48:21   they must not have been important. But that's not true. One of them could be like, "Pick

01:48:25   up Adam from daycare." It's like, "Well, I never did it, so I guess that one's not

01:48:27   important. Let me un-flag it."

01:48:29   Well, the good thing is like when you are as crappy and as slacking as I am with dealing

01:48:35   with email and responding to email, most email removes the need to respond to it if you just

01:48:42   don't do it for like two weeks. But on the other hand, I'm probably losing a lot of friends

01:48:47   and colleagues by doing this, so it's definitely not free.

01:48:51   Sending email to Marco is sending an email into a black hole. It's sending it to Dev

01:48:55   Null.

01:48:56   We're just coming up with a new topic for a future show. Let me write this in.

01:48:59   What?

01:49:00   What? Email?

01:49:01   Email handling.

01:49:02   Yeah, no one's ever done a podcast on that before.

01:49:05   I know, but it sounds like you guys have very different systems, and I think it's worth

01:49:09   talking about.

01:49:10   You're assuming I have a system.

01:49:11   Exactly. That's right. This is a whole show. I'm writing it.

01:49:14   My collection of hacks is not really something I would describe as a system.

01:49:19   It is more just like a gradual progression of shame.

01:49:23   I know.

01:49:24   Wait, you're adding it in to the show notes?

01:49:27   How we handle email, future topic.

01:49:29   Screen time for kids is also, I don't know if it's still in the document, but that's

01:49:32   also a topic that I think we should get to.

01:49:34   My people have threshold of ancient history.

01:49:36   It doesn't say ancient, your kids just get older and they get more screens.

01:49:39   Declan's going to be getting into screen time now.

01:49:41   Adam is already into screen time.

01:49:43   It's a good topic. It's a whole show.

01:49:45   Yep.

01:49:46   Yes, because that's what we need to do as a parenting show.

01:49:48   Yes.

01:49:49   Not parenting. It's tech-related. It's tech-related parenting stuff.

01:49:52   We should do the parenting show right after doing the email show to really ensure that we get the most emails.

01:49:57   Oh, God.

01:49:58   People love these topics.

01:50:00   I know. Technology is part of their lives, and part of technology, as Casey will tell you, is your feelings about it.

01:50:08   Mm-hmm.

01:50:09   Are you still on Episode 5 of Analog?

01:50:12   - Sure.

01:50:13   (laughing)

01:50:14   I think I listen to random episodes.

01:50:17   Like I'm not going, you know,

01:50:19   every once in a while there's a random episode

01:50:20   that people say I have to listen to, so I listen to it.

01:50:22   But yeah, sequentially, yeah.

01:50:25   - I listen to all of them because I'm a good friend.

01:50:26   - Thank you, Marco.

01:50:27   Exactly, you're the one who cares.

01:50:29   - You have a lot of free time.

01:50:30   - That too.

01:50:31   (laughing)

01:50:32   - Because you're retired or something.

01:50:35   Oh goodness.

01:50:36   - I actually have a busy summer.

01:50:37   - Explain.

01:50:38   - Well, you know, I'm going on vacations.

01:50:40   No, I'm just--

01:50:41   (laughing)

01:50:43   - So busy.

01:50:45   - I mean, I'm busy trying to parallelize an MP3 encoder

01:50:47   from the early 2000s.

01:50:49   - I think it's a sign of not being busy,

01:50:51   I think that's what that is.

01:50:52   - This is also just kind of like a procrastination tactics

01:50:55   for to avoid me having to dive into the iOS 10 stuff

01:50:58   quite yet.

01:50:58   - I was gonna say, what are you not doing

01:51:01   that's making you parallelize the MP3 encoder?

01:51:04   - I have like a lot of like big things to do

01:51:07   on Overcast for iOS 10.

01:51:08   Just like, just you know, the obvious stuff

01:51:10   like rewriting the watch app for watchOS 3 and then looking into all the new widget and

01:51:15   notifications stuff everywhere. It's just going to be a lot of work like that and some

01:51:21   big projects that like even just starting them is kind of daunting. So I haven't had

01:51:25   a lot of good work time in the last few days so I've been kind of just like chipping away

01:51:29   at side projects and administrative work here and there just in the time I have.

01:51:33   You've been too busy in the bouncy house.

01:51:35   Yeah, well that's one of the side projects is bouncing.

01:51:37   That'll really take time out of your schedule.

01:51:39   Like, sorry, I would be doing development now, but that house is not going to bounce

01:51:42   itself.