Creating Domain Specific Error Helpers in Go With errors.As

The other day, I was reading a website about some historical documents, when I saw that it had an error message on top:

Screenshot of a WordPress site with an error message

Screenshot from the site

Some quick searching online for the error message revealed that it was caused by a mismatch between the site’s versions of PHP and WordPress. Older versions of WordPress had a bug in the switch statement of a certain localization component, and later versions of PHP dump a warning about this bug out to the end user HTML. When I came back to the site a few days later, it had been fixed.

The ultimate reason for my seeing for the error message as a random reader is that PHP has too many ways to deal with errors:

Builtin PHP functions, and therefore any PHP project, have a whole range of error handling mechanisms — errors, warnings, returning error values, and exceptions. At every point, calling code needs to know which system will be used to handle errors.

PHP often chooses to send warnings like this right out to the end user because it doesn’t trust operators to actually read their Apache logs. Such a practice would be very out of place in the Go programming language.

Read more…

Link: Rachel by the Bay · Tripping over the potholes in too many libraries

In short, I think it’s become entirely too easy for people using certain programming languages to use libraries from the wide world of clowns that is the Internet. Their ecosystems make it very very easy to become reliant on this stuff. Trouble is, those libraries are frequently 💩. If something about it is broken, you might not be able to code around it, and may have to actually deal with them to get it fixed.

Repeat 100 times, and now you have a real problem brewing.

I have a simple rule: never use a dependency that you could replace with an afternoon of programming.

Read more…

Heidegger, Cookies, and NoSQL

Life with a toddler is always a strange combination of charming, frustrating, philosophical, exhausting, and funny. The other night, my wife tried to give my daughter a cookie. “Cut, cut!” my daughter said. So, my wife took the cookie and cut it in half. “No, no, no!” cried the toddler. “Okay, which one?” said wife, holding out a whole cookie in one hand and the half cookie in the other. “Two!” said the toddler, grabbing a cookie with each hand. She was finally happy.

But I couldn’t help but notice. “You don’t have two,” I said. “You have one and a half.” Naturally, she ignored me.

Read more…

Writing Go CLIs With Just Enough Architecture

As someone who has written quite a few command line applications in Go, I was interested the other day when I saw Diving into Go by building a CLI application by Eryb on social media. In the post, the author describes writing a simple application to fetch comics from the XKCD API and display the results. It looks like this:

$ go-grab-xkcd --help

Usage of go-grab-xkcd:
  -n int
        Comic number to fetch (default latest)
  -o string
        Print output in format: text/json (default "text")
  -s    Save image to current directory
  -t int
        Client timeout in seconds (default 30)

I came away a little disappointed though because I felt like the final result was both a little undercooked and a little overcooked: undercooked in that it didn’t handle errors robustly enough and overcooked in that it created some abstractions speculatively in a way that I felt were unlikely to pay off in the long run.

Naturally, one thing lead to another, and I forked and rewrote the demo app myself to demonstrate what I consider to be just enough architecture for a Go command line app.

Read more…

Link: Reddit · Why does all() return True if the iterable is empty?

The other day on Reddit someone asked this:

Why does all() return True if the iterable is empty? Shouldn’t it return False just like if my_list: would evaluate to False if the list is empty? What’s the thinking behind it returning True?

They have since removed their question, but it sparked a long discussion thread, and my comment was heavily upvoted, so I thought I would record it here:

This is literally a 2,500 year old debate in philosophy. The ancients thought “all unicorns are blue” should be false because there are no unicorns, but modern logic says it is true because there are no unicorns that aren’t blue. Python is just siding with modern predicate logic, but your intuition is also quite common and was the orthodox position until the last few hundred years.

Read more…

How to Use Netlify to Deploy a Free Go Web Application

Netlify is an web host that specializes in hosting static files. That makes it ideal for hosting a developer blog, a brochure site, or even just a one-off joke. It even has built-in support for Hugo. But Netlify also has various solutions for dynamic hosting, and their “Functions” service turns out to be a very easy way to host a Go web application, often for free. In this post, I will walk through a demo repo I’ve made that shows how to do this.

Netlify’s documentation is pretty good, so I definitely recommend to consult them for more in-depth information, but here I would like to walk through a basic scenario for why you might want a Go backend service and how to set it up. You can see the final version of all of the code on Github and a live demo on Netlify.

Read more…

Link: Matt Stoller · Will Spotify Ruin Podcasting?

Matt Stoller at Big has a newsletter post about Spotify’s attempt to take over podcasting that also includes a great history of the death of publishing on the web:

Why the Open Web and Publishing Began Dying

Anyone trying to understand modern media or monopoly has to spend a lot of time understanding Google and Facebook, because they are the pace-setters in our economy. Every corporate leader, from agricultural to podcasting, sees what they have done, and tries to reproduce their success in their own industry.

While Google and Facebook are framed as tech companies, they are in fact advertising companies and middlemen in the flow of information.

Google and Facebook did this through two key techniques. The first was to acquire gatekeeping power in distribution. Google is gatekeeper in search, online video, and maps, whereas Facebook is a gatekeeper in social networking. To get to users, you have to go through Google and Facebook.

The second was to use this gatekeeping power to vertically integrate into dominant advertising platforms. Google and Facebook both sell large amounts of advertising, and they both bought up adtech companies in a merger spree from 2004-2014. They force partners to hand over data - and data is a key input into advertising - as a condition of getting access to their networks.

The result of these public policy decisions was Google and Facebook, the death of the open web, and increasingly, independent publishing on the internet.

What do you call the parts of a story? Or: why can’t journalists spell “lead”?

I’ve been working as a journalism-adjacent programmer for some time. It’s an area I find very rewarding, but no job is without its downsides. Let’s face it: for people whose job involves writing professionally, journalists are bad at spelling.

“Hed”, “lede”, and other bits of jargon are just part of the problem. The deeper issue is that every publication has its own nomenclature, and jargon has drifted in meaning since the switch to web publication. “Slug”, for example, began as a literal slug of lead melted into a row of letters by a Linotype machine. Now, it generally refers to a “short label for something, containing only letters, numbers, underscores or hyphens”, and it might mean the keywords in a URL or an internal ID system used by a publication for editorial workflow. Those two meanings overlap but aren’t actually the same, which leads to confusion when developers talk to journalists and editors.

I have been working on the website for Spotlight PA, and I wanted to try to give the parts of an article more-or-less standard names in our CMS. There was only one problem: just what are the standard names? To find out, I made a survey and asked in chatrooms and on Twitter for other news nerds to fill it out.

Read more…

Link: Maciej Cegłowski · Privacy Rights and Data Collection in a Digital Economy

For sixty years, we have called the threat of totalitarian surveillance ‘Orwellian’, but the word no longer fits the threat. The better word now may be ‘Californian’. A truly sophisticated system of social control, of the kind being pioneered in China, will not compel obedience, but nudge people towards it. Rather than censoring or punishing those who dissent, it will simply make sure their voices are not heard. It will reward complacent behavior, and sideline troublemakers. It’s even possible that, judiciously wielded, such a system of social control might enjoy wide public support in our own country.

But I hope you will agree with me that such a future would be profoundly un-American.