Shared posts
Phil Collins' 'In The Air Tonight' Drum Solo, Self-Quarantine Edition
Almost 250 US cities and counties are "still in" the Paris Agreement
The Death Penalty is Disappearing
Simon Pegg And Nick Frost Perform Coronavirus Themed Reenactment Of 'The Plan' Call From Shaun Of The Dead
Representative Line: hnjbbbbynbhhhhhhhhhhhh
Five years ago, someone at Adam’s company made a commit. Like all good commits, it touched 200 individual files and 3,500 lines of code, and the commit message was simply: “Fixed”.
One of those 200 files was a .h
header file, declaring a long pile of function prototypes. One of them is this one. It has no implementation, and isn’t used anywhere:
void eXosip_suhnjbbbbynbhhhhhhhhhhhhbscribe_free (eXosip_subscribe_t * js);
One of the most famous survival horror games ever implemented, which combines lo-fi, character-oriented “graphics” with escape room puzzles is VIM. Endlessly customizable, it offers a huge amount of replay value, if you ever successfully exit it.
Adam’s suspicion is that the developer was unwittingly in VIM’s edit mode, and accidentally mangled this. Either that, or a cat decided to do a softshoe routine on his keyboard while he wasn’t looking.
Regardless, that commit never got reviewed, as you can imagine, and thus this little “treat” has been sitting in the code base for five years. The real question is: what else got mashed into the code that no one knows about?
Science Teacher Demonstrates Slow Moving Waves In A Variety Of Hanging Motorized Loops
The speed of waves through a stationary ropes or chain can vary due to the tension and the density of the material. What happens when the rope itself is put into motion and then a wave disturbance is added? This idea is the start of our investigation using a few different loops of ribbon, rope and plastic chain. The ropes are made into loops by melting and joining the two ends together and then hang limply until put into motion. The behavior of the rope as it hangs stationary and limp versus when it is put into motion is quite remarkable.The closest analogy that might help to understand what is going on would be to imagine throwing rock in a moving stream or river. The waves traveling upstream would slow down and if the stream would be fast enough, the waves wouldn't be able to move in that direction at all. The waves headed downstream would move very fast since both movements would be in the same direction. Could we possibly stop a wave, and then reverse it's direction? This is something that I am attempting to explore.Science! "What about it?" It's just another word for magic, which is just another word for God. "What did you smoke this morning, GW?" Banana peels! *shrug* If it's the end of the world I've got a list that needs crossing off. Keep going for the interesting, informative video.
A Joyful Flash Mob Plays Beethoven’s Symphony No. 9
This is an oldie but a goodie. Watch as a single busking bass player grows into the Vallès Symphony Orchestra and a pair of choirs to perform a rousing rendition of Beethoven’s Symphony No. 9 (Ode to Joy) in front of a delighted crowd. (via @victoriamia)
Tags: crying at work Ludwig van Beethoven music videoHow to Stop the Spread of COVID-19: Cancel Everything
Yascha Mounk writing for The Atlantic:
These three facts imply a simple conclusion. The coronavirus could spread with frightening rapidity, overburdening our health-care system and claiming lives, until we adopt serious forms of social distancing.
This suggests that anyone in a position of power or authority, instead of downplaying the dangers of the coronavirus, should ask people to stay away from public places, cancel big gatherings, and restrict most forms of nonessential travel.
Given that most forms of social distancing will be useless if sick people cannot get treated-or afford to stay away from work when they are sick-the federal government should also take some additional steps to improve public health. It should take on the costs of medical treatment for the coronavirus, grant paid sick leave to stricken workers, promise not to deport undocumented immigrants who seek medical help, and invest in a rapid expansion of ICU facilities.
This is very close to my own personal thinking right now, particularly after watching this excellent video about exponential growth and epidemics.
Tags: COVID-19 medicine Yascha MounkThe 15th Anniversary of Doing Kottke.org as a Full-Time Job
Fifteen years ago this week, on Feb 22, 2005, I announced that I was going to turn kottke.org, my personal website, into my full-time job.
I recently quit my web design gig and — as of today — will be working on kottke.org as my full-time job. And I need your help.
I’m asking the regular readers of kottke.org (that’s you!) to become micropatrons of kottke.org by contributing a moderate sum of money to help enable me to edit/write/design/code the site for one year on a full-time basis.
It seemed like madness at the time — I’d quit my web design job a few months earlier in preparation, pro blogs existed (Gawker was on its 3rd editor) but very few were personal, general, and non-topical like mine, and I was attempting to fund it via a then-largely-unproven method: crowdfunding. As I wrote on Twitter the other day, attempting this is “still the most bonkers I-don’t-know-if-this-is-going-to-work thing I’ve ever done”.
These days, people are used to paying directly for online media through services like Kickstarter, Patreon, and Substack and kids want to run their own personality-driven businesses online when they grow up. But back then, aside from the likes of the WSJ, websites were either a) free to read or b) free to read & supported by advertising and being an online personality was not a lucrative thing. But I figured that enough of you would pitch in to support the site directly while keeping it free to read for everyone with no advertising.
In order to make it feel somewhat familiar, I patterned it after a PBS/NPR fund drive. During a three-week kick-off period, I asked people to support the site by becoming micropatrons. The suggested donation was $30 (but people could give any amount) and there were thank you gifts — like signed books, software, signed photo prints, a free SXSW ticket — for people who contributed. Several hundred people ended up contributing during those three weeks, enough for me to do the site for a year. I still remember that first day, responding to well-wishes from friends on AIM and watching my PayPal account fill up, and it hitting me that this bonkers scheme was actually going to work and pretty much bursting into tears.
Fast forward to the present day and this little website is still chugging along. In its almost 22 years of existence, kottke.org has never gotten big, but it’s also never gone away, predating & outlasting many excellent and dearly missed sites like Grantland, Rookie, The Toast, The Awl, Gawker, and hundreds of others. I have other people write for the site on occasion, but it’s still very much a one-person production by a reluctant influencer (*barf*) who, as an introvert, still (naively?) thinks about posts on the site as personal emails to individual readers rather than as some sort of broadcast. I’d like to thank those early supporters for having faith in me and in this site — you’re the reason we’re all still here, gathered around this little online campfire, swapping stories about the human condition.
About 3 years ago, I returned to the crowdfunding model with kottke.org’s membership program. Since then, I’m very happy to report, readers like you who have purchased memberships have become the main source of financial support for the site. As I’ve written before, I have come to love the directness of this approach — I write, you pay, no middlemen, and, crucially, the site remains part of the Open Web, unpaywalled & free for everyone to read. If you’ll indulge me in a request on this anniversary, if you’re not currently a member of the site (or if your membership has lapsed) and can afford to do so, please consider supporting the site with a membership today. I really appreciate everyone who has become a member over the past few years — thank you!! — and I hope you will consider joining them.
Note: I have no photos of myself taken around this time in 2005, so the photo at the top of the post is me circa spring 1996. I’d dropped out of grad school & was back living at my dad’s house, spending 10-12 hours a day online (via a 28.8K modem) trying to figure out how to build websites. I applied for jobs & internships at places like Wired/Hotwired, Razorfish, Studio Archetype, and MTV but no one wanted to hire a physics major w/ no art or design education or experience to design websites. kottke.org was still a couple of years off at this point…
Tags: Jason Kottke kottke.org webdevFirefox enables Cloudflare’s DNS over HTTPS by default for US users
Onderzoekers gebruiken kunstmatige intelligentie om nieuwe antibiotica te vinden
My 72 Hours in a Viral Tweet Vortex
Neo Takes The Blue Pill: The Matrix/Office Space Keanu Reeves Deepfake Mashup
Robin Sloan on building a tiny messaging app for his family
Universe Sandbox
Universe Sandbox is a interactive space & gravity simulator that you can use to play God of your own universe.
You can create star systems: “Start with a star then add planets. Spruce it up with moons, rings, comets, or even a black hole.” You can collide planets and stars or simulate gravity: “N-body simulation at almost any speed using Newtonian mechanics.” You can model the Earth’s climate, make a star go supernova, or ride along on space missions or see historical events.
I found Universe Sandbox after watching this video about what would happen if the Earth got hit by a grain of sand going 99.9% the speed of light (spoiler: not much). This game/simulator/educational tool is only $30 but I fear that if I bought it, I would never ever leave the house again.
Tags: astronomy gravity physics science space video video gamesInglourious Basterds’ Witty Slate Clapper
Geraldine Brezca has worked on several of director Quentin Tarantino’s movies,1 and for Inglourious Basterds, she was the slate operator — i.e. she clapped the clapper before each scene. And as this video shows, she was very entertaining and creative in her duties:
For each scene’s label, Brezca came up with something funny (A66F = “au revoir 66 fuckers”), ribald (29B = “29 blowjobs”), appropriate (39FE = “39 feet essential” on a scene featuring feet), respectful (4AK = “4 Akira Kurosawa”), or profane (79E = “79 fucking explosives”, which got quite a chuckle from Brad Pitt). See also Here’s Why Slate Operators Matter (And Why Quentin Tarantino’s is So Great).
Brezca’s IMDB page shows that the last movie she worked on was Django Unchained in 2012. Not sure if she left the industry or passed away or what…↩
Botnet
Dutch court rules against welfare surveillance
The creation and adoption of surveillance systems based on Artificial Intelligence often feels like it’s widely outpacing the speed at which cities and countries can legislate any kind of control. So it’s always an encouraging sign when new well considered decisions are rendered and put the public good and human rights first.
One such decision is the Dutch courts’ ruling that a welfare surveillance system violates human rights.
A Dutch court has ordered the immediate halt of an automated surveillance system for detecting welfare fraud because it violates human rights … The case was seen as an important legal challenge to the controversial but growing use by governments around the world of artificial intelligence (AI) and risk modelling in administering welfare benefits and other core services.
It’s especially encouraging since disfranchised and minority populations are usually the ones facing the brunt of surveillance, with little recourse for corrections and / or without the means to pursue legal options.
Deployed primarily in low-income neighbourhoods, it gathers government data previously held in separate silos, such as employment, personal debt and benefit records, and education and housing histories, then analyses it using a secret algorithm to identify which individuals might be at higher risk of committing benefit fraud.
One hopes the decision will have repercussions far outside the Netherlands.
Alston predicted the judgment would be “a wake-up call for politicians and others, not just in the Netherlands”. The special rapporteur presented a report to the UN general assembly in October on the emergence of the “digital welfare state” in countries around the globe, warning of the need “to alter course significantly and rapidly to avoid stumbling, zombie-like, into a digital welfare dystopia”.
Image credit: Rotterdam at night by Joël de Vriend.
Tags: netherlands surveillanceThe WHO Has Taken Trans Identities Off Its List of Mental Health Disorders
Netflix voegt optie toe voor uitschakelen autoplay
Eevee’s whirlwind history of CSS and web design
Map of Emotions Evoked by Music
Avast Antivirus shuts down data-collection arm after exposé
Schwerkraftprojektionsgerät
AR Pianist
CodeSOD: Microsoft's English Pluralization Service
Despite founding The Daily WTF more than fifteen years ago, I still find myself astonished and perplexed by the curious perversions in information technology that you all send in. These days, I spend most of my time doing "CEO of Inedo stuff", which means I don't get to code that much. And when I do, it's usually working with the beautiful, completely WTF- and bug-free code that our that our world-class engineers create.
I mention this, because when I come across TDWTF-worthy code on my own, in the wild, it's a very special occasion. And today, I'm excited to share with you one of the worst pieces of code I've seen in a very long time: EnglishPluralizationServices.cs
Anyone even remotely familiar with the English language knows that pluralization is hard, and not exactly something that should be generalized in library... let alone Microsoft's most strategic programming asset of the past two decades. And yet, despite that:
internal class EnglishPluralizationService : PluralizationService, ICustomPluralizationMapping { private BidirectionalDictionary _userDictionary; private StringBidirectionalDictionary _irregularPluralsPluralizationService; private StringBidirectionalDictionary _assimilatedClassicalInflectionPluralizationService; private StringBidirectionalDictionary _oSuffixPluralizationService; private StringBidirectionalDictionary _classicalInflectionPluralizationService; private StringBidirectionalDictionary _irregularVerbPluralizationService; private StringBidirectionalDictionary _wordsEndingWithSePluralizationService; private StringBidirectionalDictionary _wordsEndingWithSisPluralizationService; private StringBidirectionalDictionary _wordsEndingWithSusPluralizationService; private StringBidirectionalDictionary _wordsEndingWithInxAnxYnxPluralizationService; private List _knownSingluarWords; private List _knownPluralWords; private string[] _uninflectiveSuffixList = new string[] { "fish", "ois", "sheep", "deer", "pos", "itis", "ism" }; private string[] _uninflectiveWordList = new string[] { "jackanapes", "species", "corps", "mackerel", "swine", "debris", "measles", "trout", "diabetes", "mews", "tuna", "djinn", "mumps", "whiting", "eland", "news", "wildebeest", "elk", "pincers", "police", "hair", "ice", "chaos", "milk", "cotton", "pneumonoultramicroscopicsilicovolcanoconiosis", "information", "aircraft", "scabies", "traffic", "corn", "millet", "rice", "hay", "----", "tobacco", "cabbage", "okra", "broccoli", "asparagus", "lettuce", "beef", "pork", "venison", "mutton", "cattle", "offspring", "molasses", "shambles", "shingles" };
I'm not sure what's more baffling. Is it the fact that someone knew enough about language constructs to use words like uninflective or assimilatedClassicalInflection, yet didn't know enough to realize that automatic pluralization is impossible? Or perhaps, the fact that the same engineer thought that an Entity Framework user might not only have a database table named jackanapes or wildebeest, but would care about proper, automatic pluralization?
This code should never have been written, clearly. But as bad of an idea this all is, its implementation is just plain wrong. It's been a while since I've studied my sixth-grade vocabulary words, but I'm pretty sure that most of these are not irregular plurals at all:
private Dictionary _irregularPluralsDictionary = new Dictionary() { {"brother", "brothers"}, {"child", "children"}, {"cow", "cows"}, {"ephemeris", "ephemerides"}, {"genie", "genies"}, {"money", "moneys"}, {"mongoose", "mongooses"}, {"mythos", "mythoi"}, {"octopus", "octopuses"}, {"ox", "oxen"}, {"soliloquy", "soliloquies"}, {"trilby", "trilbys"}, {"crisis", "crises"}, {"synopsis","synopses"}, {"rose", "roses"}, {"gas","gases"}, {"bus", "buses"}, {"axis", "axes"},{"memo", "memos"}, {"casino","casinos"}, {"silo", "silos"},{"stereo", "stereos"}, {"studio","studios"}, {"lens", "lenses"}, {"alias","aliases"}, {"pie","pies"}, {"corpus","corpora"}, {"viscus", "viscera"},{"hippopotamus", "hippopotami"}, {"trace", "traces"}, {"person", "people"}, {"chili", "chilies"}, {"analysis", "analyses"}, {"basis", "bases"}, {"neurosis", "neuroses"}, {"oasis", "oases"}, {"synthesis", "syntheses"}, {"thesis", "theses"}, {"change", "changes"}, {"lie", "lies"}, {"calorie", "calories"}, {"freebie", "freebies"}, {"case", "cases"}, {"house", "houses"}, {"valve", "valves"}, {"cloth", "clothes"}, {"tie", "ties"}, {"movie", "movies"}, {"bonus", "bonuses"}, {"specimen", "specimens"} };
In fact, the "just add an s to make it plural" rule is perhaps the ultimate starting point for pluralization. Words like "pie" and "cow" are not irregular at all, because you just add an "s" to make them "pies" and "cows". And this brings us to our next questions.
Where exactly did this list of not-actually-irregular plurals come from? It was obviously copy/pasted from somewhere, right? An English textbook? Like, perhaps the the teachers' edition? You know, where there's like a handout with pictures of a cow, then a bunch of cows, and a line below it where you write the word? Did the engineer… just use that page?
Up next on our tour is actual the actual pluralization logic, which is handled by InternalPluralize
method. It's not nearly as simple as using those dictionaries. Consider this snippet from within that method:
// handle the word that do not inflect in the plural form if (IsUninflective(suffixWord)) { return prefixWord + suffixWord; }
Quick aside: please take a moment to appreciate the irony of improperly capitalization in the comment. "the word that do not inflect". Does this mean the author is not a native English speaker? Was this thing outsourced to Kerbleckistan? Does that even make sense to do for… English? Or was this just a typo?
I digress. Let's keep digging into IsUninflective
.
// handle irregular inflections for common suffixes, e.g. "mouse" -> "mice" if (PluralizationServiceUtil.TryInflectOnSuffixInWord(suffixWord, new List() { "louse", "mouse" }, (s) => s.Remove(s.Length - 4, 4) + "ice", this.Culture, out newSuffixWord)) { return prefixWord + newSuffixWord; } if (PluralizationServiceUtil.TryInflectOnSuffixInWord(suffixWord, new List() { "tooth" }, (s) => s.Remove(s.Length - 4, 4) + "eeth", this.Culture, out newSuffixWord)) { return prefixWord + newSuffixWord; } if (PluralizationServiceUtil.TryInflectOnSuffixInWord(suffixWord, new List() { "goose" }, (s) => s.Remove(s.Length - 4, 4) + "eese", this.Culture, out newSuffixWord)) { return prefixWord + newSuffixWord; } if (PluralizationServiceUtil.TryInflectOnSuffixInWord(suffixWord, new List() { "foot" }, (s) => s.Remove(s.Length - 3, 3) + "eet", this.Culture, out newSuffixWord)) { return prefixWord + newSuffixWord; }
It seems that in addition to not knowing English, the author of this class that's used within the .NET framework doesn't really know C# very well? And certainly not how string comparison works in .NET. On the bright side, is that a test for "ese"? Did... our engineer figure out that there are some basic pluralization patterns you can apply? Maybe there's hope after all!
private bool IsUninflective(string word) { EDesignUtil.CheckArgumentNull(word, "word"); if (PluralizationServiceUtil.DoesWordContainSuffix(word, _uninflectiveSuffixList, this.Culture) || (!word.ToLower(this.Culture).Equals(word) && word.EndsWith("ese", false, this.Culture)) || this._uninflectiveWordList.Contains(word.ToLowerInvariant())) { return true; } else { return false; } }
On the plus side, this "common" suffixes logic ensures that both titmouse and snaggletooth are properly pluralized.