6

My First Podcast: A Tale of a Broken Ecosystem :: Jon Gjengset

 2 years ago
source link: https://thesquareplanet.com/blog/my-first-podcast-a-tale-of-a-broken-ecosystem/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

My First Podcast: A Tale of a Broken Ecosystem (9 min. read)

Posted on Jul 10, 2019 — shared on Hacker News Twitter

I’ve been play­ing around with the idea for a new pod­cast along with a cou­ple of other Rus­taceans re­cently, and a lit­tle while back we de­cided to go ahead and record an episode on the newly re­lease Rust 1.36.0 (stay tuned!). Yes­ter­day, I spent some time try­ing to get all the “stuff” set up to ac­tu­ally re­lease the pod­cast, and it re­sulted in per­haps the most frus­trat­ing few tech-re­lated hours I’ve had in a few years.

I de­cided I didn’t want any­thing fancy; I’d just up­load the recorded episode to Back­blaze B2, where I al­ready have an ac­count for backup pur­poses, and then use GitHub Pages for a su­per-bare­bones web­site and an RSS feed for the pod­cast episodes. Seems sim­ple enough, right? I just needed to fig­ure out the feed stuff, and then I’d be good to go.

So, as any lazy pro­gram­mer does, I started by search­ing for “jekyll pod­cast rss”, since GitHub pages is ba­si­cally Jekyll. And lo and be­hold, “Pod­cast­ing with Jekyll in 4 Steps” pops up. Great! I’ll be done in no time. Seems easy enough. Steps 1 and 2 I’ve al­ready com­pleted. Copy-paste the RSS tem­plate, and it seems to gen­er­ate cor­rectly, great!

Now just to dou­ble check, let’s run it through a val­ida­tor. “itunes pod­cast rss val­ida­tor” brings up Cast Feed Val­ida­tor, pod­base, and FEED val­ida­tor. I guess let’s try all three. They all com­plain about slightly dif­fer­ent things, like the <atom::link> tag not point­ing to the right URL, so I do some tweak­ing to make things work on GitHub Pages. Oh, yeah, and ap­par­ently iTunes only ac­cepts cer­tain HTTPS cer­tifi­cates, and the one used by GitHub Pages isn’t one of them. I guess I’ll have to proxy through Cloud­Flare or some­thing.

This process does cause me to read through the XML more care­fully though, and I see a num­ber of other things that seem odd. First, there are sev­eral calls to xml_escape, which seems weird given the ex­is­tence of CDATA. Sec­ond, <description>, <itunes:subtitle>, and <itunes:summary> seem very over­lap­ping – how do they dif­fer? It’s time to look for the spec!

iTunes seems to be the pri­mary stan­dard-set­ter for pod­cast RSS feeds, so I quickly end up at Apple’s Pod­cast feed sam­ple. Ex­cept this also has a num­ber of tags my feed does not, such as <itunes:type> and <itunes:title> (how does it dif­fer from <title>?). I also see that they are nest­ing some­thing called <content:encoded> in­side of <description>, and also using CDATA. Their value in <itunes:duration> is in sec­onds, not as HH:MM:SS. I try to match my XML to theirs — it now fails val­i­da­tion. Okay… Is there a full spec­i­fi­ca­tion some­where?

I find Apple’s Pod­cast best prac­tices, which goes into some more de­tails about the dif­fer­ence be­tween dif­fer­ent tags (like sum­mary and de­scrip­tion). They say that <content::encoded> should be sep­a­rate from <description>, in di­rect con­tra­dic­tion of the feed ex­am­ple. They also rec­om­mend <itunes:type>, ex­cept that tag is re­jected by the val­ida­tor as not part of the schema.

I find Apple’s Pod­caster’s guide to RSS. This has an of­fi­cial-look­ing table with “re­quired tags” and “rec­om­mended tags”. Fi­nally! Ex­cept here, for <description>, the ex­am­ple shows <content:encoded>? The “best prac­tices” doc­u­ment also said that <content:encoded> could be used at “episode-level only”, whereas this doc­u­ment seems to say that all de­scrip­tion el­e­ments should have it? At the bot­tom, it says “only use markup or HTML con­tained within <content:encoded> tags in­side of <description> tags”, re­it­er­at­ing that one should be in­side the other, even though this seems con­trary to the RSS spec (see also Stack­Over­flow). The spec also says that if <content:encoded> is pre­sent, <description> should be used as a sum­mary (so what is <itunes:summary> for?).

This doc­u­ment also spec­i­fies that <itunes:title> should be used for episode ti­tles, not <title>, whereas the same is not true for the chan­nel title. At least it clar­i­fies that <itunes:duration> can take “dif­fer­ent du­ra­tion for­mats”, so that (maybe) ex­plains it being given in both sec­onds and HH:MM:SS for­mat. Oh, and <itunes:keywords> is also ap­par­ently not a thing. And when it says that you can use false or true for things like <itunes:explicit>, that’s a lie – you must use no or yes.

Okay, so that is a hot mess. Let’s see what schema Google rec­om­mends for its pod­cast feeds. Some ini­tial Googling leads us to this page, which has a link to the XSD schema file and a Google Sup­port an­swer. The lat­ter does give an out­line of the re­quired tags, but it seems to mostly be “do what iTunes re­quires and we’ll fig­ure it out”. They pro­vide their own googleplay name­space if you need to, say, use a dif­fer­ent e-mail ad­dress on Google. Un­for­tu­nately, their “Sam­ple pod­cast RSS feed” doesn’t val­i­date, be­cause:

Use of un­known name­space: http://​www.​google.​com/​schemas/​play-​podcasts/​1.​0

Great, so the googleplay name­space doesn’t work, so you can’t use a dif­fer­ent e-mail ad­dress for iTunes and Google Play. Fan­tas­tic.

Okay, what­ever, let’s at least just see whether iTunes will ac­cept what I now have. I’m just going to sign up for an Apple ID real quick. Just have to fill out this lit­tle form (which re­quires JavaScript, be­cause of course it does) and then ver­ify my e-mail. Easy enough.

Your ac­count can­not be cre­ated at this time.

Err, what? Okay, dif­fer­ent e-mail ad­dress?

Your ac­count can­not be cre­ated at this time.

Err, okay, dif­fer­ent browser?

Your ac­count can­not be cre­ated at this time.

Dif­fer­ent browser, e-mail ad­dress, and over VPN?

Your ac­count can­not be cre­ated at this time.

I guess it’s time to con­tact Apple sup­port. My only op­tion is to ei­ther have them call me or sched­ule a call for later. No idea why on­line sup­port isn’t a thing, but okay. I put in my phone num­ber and the cryp­tic error mes­sage and wait. Two min­utes later, I get a text from Google Fi that I have a missed call. Ap­par­ently Apple Sup­port tried to call me and it went to voice­mail. Huh, weird. I was by my phone the whole time and it never rang. I get an e-mail say­ing they failed to reach me and will try again. I get an­other missed call from voice­mail. Apple gives up.

After dig­ging through my calls list, I no­tice that the missed calls show the in­com­ing calls from Apple with the “Blocked spam caller” icon. Uh-oh. I guess Google Fi marks Apple Sup­port as spam? Great. I un­mark as spam and file an­other sup­port ticket. The call goes through im­me­di­ately.

Okay, so I’m speak­ing to Porschia. Seems friendly enough. I tell them my issue again and my e-mail ad­dress. They dis­ap­pear for a while, oc­ca­sion­ally check­ing back that it’ll just be a bit longer. After about 10 min­utes of mostly si­lence, they tell me to try again. It works! I ask why. “Your e-mail had to be whitelisted”. What?! Ap­par­ently Apple doesn’t like peo­ple with e-mail ad­dresses under cus­tom do­mains sign­ing up for an Apple ID? How bizarre.

Well, I have an Apple ID ac­count now, so on­wards! The In­ter­webs tell me that I should now go to Pod­casts Con­nect, so I do.

Pod­casts Con­nect re­quires an iTunes Store ac­count.

Err… And that’s dif­fer­ent from an Apple ID? Ap­par­ently a magic “bless­ing” hap­pens to your Apple ac­count the first time you log in through an Apple prod­uct (ei­ther a de­vice or iTunes). And that bless­ing is needed to pub­lish a pod­cast. I guess that’s next. But… I’m on Linux, and I own no Apple de­vices. There is quite lit­er­ally no way for me to log into an Apple prod­uct. Un­less…

A while back, Mi­crosoft re­leased Win­dows vir­tual ma­chine im­ages to allow you to test stuff in older ver­sions of In­ter­net Ex­plorer. They’re free to down­load, but ex­pire after 90 days. That’s fine. I just need to log in to iTunes. So, I down­load a Win­dows VM, in­stall iTunes on there, log in with my new Apple ID, give my ad­dress, and click con­tinue ex­pect­ing that there’s some ad­di­tional process I have to go through in­volv­ing a credit card and what­not to get my ac­count blessed.

You have been logged in to iTunes.

So, let me get this straight. I had to down­load a 6GB Win­dows VM + 200MB of iTunes just so I could fill in my ad­dress? There re­ally wasn’t any way I could have done this through the web Apple? At least I’m not the only one who has com­mented on this being stu­pid in the past.

Any­way, with my spe­cial iTunes Store ac­count in hand, I now nav­i­gate back to Pod­casts Con­nect, and am met with a mostly blank page with a sin­gle text input field named “RSS Feed URL”. I give it what it wants, and it spins for a while. Then

Failed Val­i­da­tion

No fur­ther ex­pla­na­tion. It just.. Failed. Back to the other val­ida­tors I guess. The un­rec­og­nized Google Play schema de­f­i­n­i­tion was the only re­ported error, so I re­moved that. An what do you know, that was it. iTunes val­i­dated my XML! Now let’s just dou­ble-check the de­tails it has ex­tracted. Huh, that’s weird. The episode list­ing shows a blank string under “De­scrip­tion” for the in­cluded episode. After some dig­ging, it turns out that the pod­cast episode “De­scrip­tion” in this list is, wait for it… <itunes:subtitle>. Be­cause it’d be silly if it was any of the three other tags that are meant to be de­scrip­tions.

But hey, at least now I think I’m about ready to pub­lish this thing. Cue record scratch…


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK