I have compiled a 64 bit binary for my xkbgrowl program, while the 32 bit version still works on Mac OS X 10.9, the last release was from 2011, so a fresh compile was probably due. The binary is available in the releases for the project.
If you had told me ten years ago that animated gifs would be so big in 2014, I would have laughed at you: the format was already obsolete then, and surely in ten years we would have been able to develop a better format for delivering animation.
It is easy to under-estimate the legal intricacies of intellectual property and the corporate intrigue that results of this. The fact that it took years to come up with a tag to host video after two earlier ones (
embed) did not help.
So in the end, the only thing that works is a format designed in 1989 that can be displayed in the
In the mid nineties, when Apple introduced Macintoshes based on the 68040 processor, Word for Macintosh started crashing systematically. The reason for this was that Motorola had introduced two separate caches into their processor: one for data, one for instructions. Programs that would modify their own code, a practice that was discouraged for years, would fail because of cache inconsistencies.
Years have passed, and Unix systems have come to dominate, to the point where younger programmers have only ever coded on Linux. One of the strong points of Unix is its flexibility: everything is a file, most files are in human readable format, and many components can be reconfigured or re-assembled, in a lego-like way. As Douglas McIlroy one of the first contributors to Unix said:
This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.
This has led Unix to adopt prefer human readable formats and to represent configuration as an executable program, sometimes reusing the shell interpreter for that purpose, sometimes not. Because everything is text, there is no real typing and because everything has to be human readable, there are many escaping rules. Learning which quotes do what is one the most confusing things when learning a Unix shell.
This flexibility made Unix very versatile and adaptable, but we are now paying the price of this flexibility: if you conflate data and code, it is easier for an attacker to inject code into data, if your system has arcane escaping rules, there is a good chance someone will find a way to abuse them.
Shellshock shows this in an exemplar fashion: the bug has been there for ages, hidden in the way the shell interprets environment variables (un-typed text) and interprets the data as code. As this component is reused practically everywhere, the potential attack surface is huge and it is not just a matter of fixing a bug, the issue is systemic and for certain systems this is certainly a feature, i.e. they need it to work, fix the bug, and you break those elements.
Technical standards are a part of our daily life, some seem to have been around forever, some die out. In some cases, standards are a marker for a generation, like audio tapes for mine. Usually, when a standard replaces another, we expect the new one to be better in some way, but this is not always the case, some come laden with locks and DRM, sometimes it is just one standard (often the US one) dominating for commercial reasons.
Analog audio connectors have seen a profusion of standards, as the notion of analog audio is dying out, there are still two connectors, the 3.5 phone connector and the RCA connector. The first is interesting because the shape evolved in the world of phone operators, then shrunk and gained one ring for stereophonic sound. Lately it gained another ring for the microphone as it became the de facto standard for mobile phones, an interesting circle.
RCA is a case where a simple and cheap standard replaced a more complete standard, the audio 5/180° DIN connector: there was a time where a single connector was enough to connect audio equipment, with enough lines to handle both input and output. This connector died out in the 80’s, replaced by the US standard. The connector is still used for other purposes, including MIDI connections.
DIN-5 Diagram – Public Domain.
We always learn that languages are for communicating, but people usually forget to specify what is meant to be communicated. A large fraction of what is communicated is not the official message, but some sub-text: emotional, social. That subtext is usually not explicit, you learn there is correct language, and the interpretation of deviations and style is something you acquire on the side, you learn that this kind of mistake is a sign of this social group, this style is from that region of the planet. Life would be pretty hard if you cannot judge people based on their writing.
Internet has made it so easy for people to communicate between group, that we are faced with the problem of understanding each other, without any context, sentences like I play football, or I live on the first floor cannot be interpreted. Figures of speech like irony or exaggeration further confuse the conversation, to the point where it was necessary to make implicit communication explicit: for instance by using emoticons. Emoticons are one example of out-of-band communication, a narrative on a different level, but of course you could make it the main channel: emojili is an app that lets you communicate using only emoji.
While we tend to think of text as a single flow, there is a layering of communication systems, consider an old-school book, we have the following layers (theoretically, each layer except the first could be omitted).
- The text.
- The style of the text.
- First subordinate level: parentheses.
- Text formatting: italics, bold, fonts.
- Second subordinate level: footnotes.
- Page formatting.
- Inset, figures and sidebars
- Third subordinate level: foreword, appendix, etc.
Like most things, those levels are linked to a culture, typography rules change from one country to another, so do the rules of layout, and even the meanings of typography and font styling. Punctuation, capitalisation, even spaces are in a sense out-of-band information, you do not strictly need them to read the text, and there was a point in time when such artifices were optional. Nowadays they are considered an integral part of the text in western languages.
One type of out-of-band channel I like is furigana, a type of phonetic annotation that is used to give phonetic hints for kanji that are not well-known to the public, either because they are obscure, not used in Japanese, or the word they are used in is not read in a Japanese mode. For instance 上海 would be read as Jokai in Japanese, or even Ueumi; furigana tells the reader the way the kanji ought to be read. This annotation is not just a help to the reader, Japanese has a phonetic alphabet, so you could just write シャンハイ, but writing it 上海 emphasises that this place is in China, and the relationship with the Japanese writing system, and carries semantic information about the name of place: top of the sea…
I often wish that this system would more widely used, as many words and names, because they have been taken out of the original context, do not have a pronunciation that can be guessed from their writing. This is particularly bad in English.
The web has brought another level of subtext, as text is now not only read by humans, but by algorithms. The web browser is the simplest of these algorithms, it re-creates some of the subtext levels for the viewer: adapting the layout for the device the user has, but also translating some of the sub-text, if the user is blind, the whole sub-text must be transformed, as it cannot be expressed visually. Other algorithms transform, synthesise and aggregate the information, search engines are the most visible example, but the logic that builds the snippet for a page when you share in on a social network is another, so are systems that extract dates and tracking numbers from confirmation e-mails.
While many concentrated on features to build applications inside web-pages, HTML5 actually contains many changes around making the semantic information in a web-page explicit:
- Tags like
<u>changed meaning: this tag now marks text that is stylistically different, and indicates a proper noun in Chinese. Underline should be done using CCS
- New tags like
<time>are used to indicate elements with a specific semantic meaning, with an attribute specifying the time in machine readable format.
<input>tag now supports many more semantically defined input types, like phone numbers.
This concept has always been present in the web (
<address> was there from day one), but were mostly abused by people trying to do page-layout in web-pages. Two things have happened since: more and more algorithms are parsing web-pages, and more and more people on the web cannot handle the content in its original form, either because of a handicap, or because they do not understand the language.
What I find interesting is that the same thing is happening in reality, more and more things get annotated with barcodes and QR-Codes so that machines can make sense of them, they are just another form of sub-titles, but in turn people are now learning to make them pretty, to stylise them, playing with the sub-text once again…