Which apostrophe should I use?

As someone who regularly switches between keyboard layouts, I have a problem: I have at least three keys that can be used as an apostrophe, but I don't know which one is the correct one. Compare:

  • Backtick: Hamlet`s father
  • ASCII Apostrophe: Hamlet's father
  • Acute accent: Hamlet́s father
  • Single closing quote: Hamlet’s father

Do you know which one is the right one? If not, this small guide is for you. But you'll have to endure a lot of theory first.

The problem here is that using your keyboard requires mixing three different concepts: which key you pressed, which character it represents, and how is it visually represented. To explain that in clearer terms, let's take the backtick as an example.

The key itself can move around. The backtick key is located below the tilde (~) in a US keyboard, to the left of the backspace key in a German keyboard, and under the caret (^) in a Spanish keyboard.

Internally, this key is called "Grave accent" in ASCII but programmers know it it as "backquote" or "backtick". When you press it you send a code to your computer that, if you were using ASCII, would be reflected as the 0x60 hexadecimal value. And here we make another distinction: if your computer is configured to do so, this code can be interpreted as a dead key that only exists to modify the next character. If you want to type the è in the French word très (very) you use the combination <Grave accent key> + <e key>. If your computer is not configured in this way then you simply get a backtick.

But here we have a very subtle difference between a backtick and a Grave accent. The Grave accent is a modifier, changing the sound of the letter underneath. Therefore, it cannot exist by itself. If you see the character ` alone then it is not a Grave accent, it's a backtick. They both look the same, but they have different meanings.

Your program is another factor: some programs may replace the character you are using because it's very likely that you are using it wrong. If I type the double quote character (") in Microsoft Word it may be replaced by an Opening double quote (“), a German opening double quote („), an English closing double quote (”), or a German closing double quote (“, which is the same character as the Opening double quote in English).

And then we have the issue of fonts. Some fonts may represent two different characters in the same way, or straight up ignore it. If you have been staring at some of the quotes I mentioned above and see no difference, well, maybe that's why.

So back to our original question: what is each key good for?

  • The backtick quote (`) has no meaning in typography at all. The only reason a non-programmer would use it would be to type a Grave accent.
  • The apostrophe (') is the one I need for daily use. In truth, Unicode defines a different character as a "true" apostrophe (we'll get to that soon), but not all keyboards can generate it. Therefore, and just like the double quote example above, it is okay to use it.
  • The Acute accent (́) should only be used as a modifier. You can see that it insists on modifying whichever character is next to it, because it has no meaning by itself.
  • The Single closing quote (’) can be generated under certain combinations of keyboard and local configuration. If your keyboard supports it, this is the preferred key to use for apostrophes.

There are plenty other versions of the quote character that can be used. This list of commonly confused characters has been of great help, while this technical description of the apostrophe character also provides more info than you thought you needed. Sure, it may sound like a lot of work. But you'll thank me next time you need to write a phrase like “In a Déjà vu, René corrected ‘It’s x′, not x″’” knowing full well that you are right.

Internet should be an utility

Have you heard of Parler? In case you haven't, Parler is (was?) a social network for racists the alt-right that gained notoriety this week. Having allegedly been used to coordinate the storming of the U.S. Capitol, its app was removed from both the Google Play Store and the Apple Store and then pulled from Amazon AWS the next day. With no hosting and no app, Parler has been effectively killed by the tech giants.

The swift removal of Parler from the internet is the incident that, I hope, will bring together the right and the left under a common cause: that the internet should be considered a public utility and that Internet Service Providers (ISP) should be regulated as such.

A public utility is a service that everyone needs (think water and electricity) and where regulation is needed because the high cost of entry discourages competition (so-called natural monopolies). It has been argued that internet should be included in this list too - can you imagine your current daily life without internet? ISPs, on the other hand, are happy setting their own prices and policies, and have resisted for years efforts in this direction.

Parler was effectively removed from the internet by the tech giants under the argument that, as private companies, they have the right to refuse service to anyone they don't want to work with[1]. But ISPs are private companies too, and therefore free to do the same to you - if your live in a country with no ISP regulation, your provider has a right to stop giving you internet access and tank your business with little repercussions.

And here is where I hope both "the left" and "the right" will see that their interests overlap. The left should support ISP regulations (and net neutrality!) because they believe, as Germany and France put it, that free speech should be governed by law and not by tech giants. The right, on the other hand, should realize that they gave tech monopolies all the cards and that they are the only ones getting kicked out of their social media accounts. If the President of the United States himself can be banned from Twitter, Facebook, Snapchat and Youtube, then no one is safe.

Why ISPs?

You might have noticed that everyone I linked above talks about regulating Amazon, Google, and/or Apple. I, on the other hand, would suggest that we focus on ISPs instead for the following reasons.

First, because the internet parallels the history of the telephone almost perfectly: a communication technology that catches on and that, while not biologically required (unlike water and heating), plays a critical role for life in a society. And ISPs are not "like" the telephone companies, they are the telephone companies.

Second, because it makes sense that internet should be provided to everyone without discrimination: imagine a world in which your shower stops working because you said in public that you prefer bottled water, or where your telephone is disconnected because you bad-mouthed someone during a conversation.

And finally, because it's the last step down the technology chain at which you can still survive: there are alternatives to Amazon AWS, and if they won't have you then you could still plug your own server and keep going (ask the Pirate Bay). But if the only ISP in town denies you service, what are you going to do, move your family to the closest town? Ask people to send you letters?

So here's my proposal: make the internet a public utility and, in exchange, give ISPs immunity from what their customers do with it. Let's bring the internet into the 21st century.


[1] Leaving illegal discrimination aside, which doesn't seem to be the case here.

Unity and Internet-Oriented Software Development

I am developing a simple HTML5 game with Unity. The experience reminded me of my post about Rust and led me to coin a new term that I'd like to discuss today.

Ladies and gentlemen, in the spirit of Object-Oriented Programming I present to you Internet-Oriented Software Development (IOSD): a style of software development in which the official way to program is by trying something, giving up, asking strangers on the internet, and hoping for the best.

You may wonder: how is this new, seeing as that's what we are all already doing? The keyword here is "official". If you want to program with (say) Keras during a long trip with unreliable internet, you could do it with an offline version of the API reference alone. Sure, getting the offline docs will take a bit of work, but at least there's an official repository of knowledge that you can always go to. Of course you can search on the wider internet for help too, but you don't have to.

IOSD is different: when you release IOSD software you publish an okay guide to your software, and that's it. There is no need for you to keep it up to date nor for it to be useful, because your documentation is Internet-Oriented: if someone has a problem, they can ask the internet, IRC channels, their co-workers, anyone but you.

Rust came to mind because, as I complained before, that's how their intended development cycle apparently works: if you don't know how to do something, you are encouraged to either search the forums or ask the developers. In the later case, "we don't know, we won't do it, and we won't tell you who is doing it right" is a possible response. TensorFlow used to be like that too (ask me about the Seq2Seq tutorial!), but they reversed course and their current official suggestion is that you use Keras (no, seriously).

But Unity is an even better example. For starters, the official docs are essentially useless because they tell you what something does but neither why nor what to use it for. Can you guess in which situations is a Sprite renderer required, and what do you need it for? Because I can't. One might argue that Unity Learn is where you should look for answers, in which case one would be wrong. Taking the first course in the "Game development" section, for instance, gets you this tutorial which is only valid for an outdated version of Unity.

No, the real source of answers are YouTube tutorials. Sure, sometimes they refer to windows that aren't there anymore and/or changed their name, but you can always add a "2019.4" to your search and try again.

I am not entirely a beginner with Unity, as I worked with it for my PhD projects. Even then, the list of resources I needed to complete my current project so far includes 5 YouTube tutorials, 2 forum threads, and zero links to official documentation. Is this a problem? Is IOSD better than the thick manuals we had before? Am I the only one getting outdated answers for trivial problems? I have no idea. So I propose a compromise: I will point at the situation and give it a name, let someone else answer the hard questions, and we will share the credit.