Slashdot: Apple's Upcoming TV Service To Launch In Over 100 Countries In 2019, Starting With the US

A new report from The Information says that Apple's upcoming TV service that is in the works to showcase its original TV shows will be available in more than 100 countries next year. The service will launch in the United States in the first half of 2019, with a global expansion to follow later in the year. MacRumors reports: According to The Information, Apple's original content will be made available for free to Apple device owners, a rumor we heard earlier this month from CNBC. While Apple's content will be available at no cost, Apple will encourage users to sign up for television subscriptions from other cable networks such as HBO or STARZ. Apple has reportedly started negotiating with content providers about what it will pay to carry TV shows and movies, but programming is not expected to be the same in each country. It is also not quite clear how Apple content will be positioned alongside content from third-party services.

Read more of this story at Slashdot.

Recent additions: gingersnap

Added by TomBop, Tue Oct 23 22:03:40 UTC 2018.

snap-core + aeson + postgresql-simple = delicious

Recent additions: gingersnap

Added by TomBop, Tue Oct 23 21:44:54 UTC 2018.

snap-core + aeson + postgresql-simple = delicious

Slashdot: Coinbase Lets You Buy and Sell USDC Stablecoin

An anonymous reader quotes a report from TechCrunch: A few weeks after Circle announced the launch of USD Coin (or USDC for short), Coinbase also announced that customers can now buy, sell, send and receive USDC on Coinbase. A USDC is a token that is worth exactly 1 USD. Its value is going to stay stable against USD -- hence the name stablecoin for this type of coins. Unlike traditional cryptocurrencies, you can be sure that the value of your USDC wallet isn't going to fluctuate like crazy. It opens up new possibilities and use cases. While Coinbase lets you hold USD in your Coinbase account, this isn't safe. If somebody hacks into your account, you could end up with an empty wallet. That's why you should always try to control the keys of your wallet and transfer your coins to a safer wallet, such as a Ledger wallet or at least a software solution like MyEtherWallet. But if you want to short cryptocurrencies without sending your USD back to your bank account, you can now convert your tokens to USDC. This way, it'll be easier to buy cryptocurrencies again in the future. And maybe you can avoid paying taxes by hiding your tokens from taxation authorities USDC is an ERC-20 token that leverages the Ethereum blockchain and ecosystem. In an effort to regulate USDC, Circle, Coinbase and others have created the CENTRE consortium to define the policies around stablecoins. "For instance, if you want to handle stablecoins on your exchange, you need to send regular audited reports that prove that you have as many USD sitting on a bank account as issued tokens," reports TechCrunch.

Read more of this story at Slashdot.

Bifurcated Rivets: From FB


Bifurcated Rivets: From FB

Sal Nistico

Bifurcated Rivets: From FB


Bifurcated Rivets: From FB

Rather good

Bifurcated Rivets: From FB

Silly but fun

MetaFilter: Leonid & Friends

A band from Moscow that covers the hell out of the American soft-rock band Chicago.

Saturday In The Park
25 or 6 to 4
Does Anybody Really Know What Time It Is?
I'm A Man
Questions 67 & 68
Feelin' Stronger Every Day
If You Leave Me Now
You Are On My Mind
Make Me Smile
Wishing You Were Here
Old Days
Street Player

Recent additions: http2-client-exe

Added by LucasDiCioccio, Tue Oct 23 20:53:15 UTC 2018.

A command-line http2 client.

Slashdot: Multiple iCloud Services Experiencing Issues

Several iCloud services are experiencing problems this afternoon, users reported. While Apple PR has not issued a statement yet, the status page of Apple services reflect the issues, too. Citing people and the status page, news outlet MacRumors reports that Cloud Drive, iCloud Mail, iCloud Keychain, iCloud Contacts, iCloud Calendar, Mail Drop, Find My iPhone, and more services are performing "slower than normal" for some users.

Read more of this story at Slashdot.

MetaFilter: "It is to kill a cub before he becomes a beast."

"Why #MeToo Needs to Talk About Predatory White Women": Stacey Patton dives deep into the historical and contemporary dynamics driving white fear and violence against boys and men of color

MetaFilter: Everyone is for the birds

A lot of people love birds, but even avid birders sometimes only know species by sight. Yet you are often more likely to hear a bird than see it, so anyone who is interested in birds or appreciating nature really should consider learning to bird by ear. It is a valuable skill that only enhances your time in the field. But for the blind or disabled, learning birds calls and songs offers even more. It gives a whole new dimension and accessibility to the natural world. Trevor Attenberg on "Birding Blind"
There's a lot to look forward to in spring, including the welcomed hullabaloo of birdsong. The sheer volume of songs and calls to learn can often feel overwhelming for birders, but these sounds offer both an opportunity and a challenge. Here's how to bird by ear.

- How to start identifying birds by their songs and calls
- A beginner's guide to common bird sounds and what they mean
- How to memorize bird songs using mental images
- Why knowing your local bird sounds is the key to unlocking new IDs
- Start using spectrograms to read bird songs and calls
- Are you listening to a bird mimic or the real deal?
- Learn your local birds' regional dialects
- Listen: birds aren't the only ones singing

Birdability: a movement to make birding accessible to birders in wheelchairs
It's a sunny late afternoon on Lake Creek Trail in suburban Austin, where Rose lives, and she has been birding in her wheelchair since 7:30 this morning, as part of a self-imposed challenge to log as many birds as she could from dawn to dusk. The purpose: to raise awareness for Birdability, her new initiative to get mobility-impaired people out in the parks and enjoying nature, by way of birding—and in turn, to make birding more accessible. Birdability is one of the only efforts of its kind in the nation. Rose's first step has been to compile a list of bird-heavy parks in the Austin metro area whose trails are wheelchair-friendly. There are currently 34, from Barkley Meadows to Windermere, a list that spans flat, manicured city parks and rugged, hilly nature preserves.

Jason Ward: the woods are my safe haven, but that's not true for everyone
As Paper Boi runs for his life, the trees erupt in a cacophony of bird sounds: Common Loon, Carolina Chickadee, Blue Jay, Chuck-will's-widow, Eastern Whip-poor-will, Eastern Screech-Owl, and Great Horned Owl. Through it all, I find myself on the edge of my seat, smiling as I identify these birds. I'm two seconds away from grabbing my binoculars when I notice that the main character doesn't seem to be enjoying his experience. He even jumps as the sound of a bird taking flight near him. At that point, I realize we're on two very different wavelengths when it comes to the woods.
Wild Indigo, Which Connects Kids With Nature, Launches in Detroit
On an overcast Thursday in June, 30 middle-schoolers surrounded a marble fountain at Detroit's Cranbrook House and Gardens. The group listened attentively while they inspected the pieces of tree bark in their hands. Standing among them, Sanaa Green, Detroit Audubon's Wild Indigo fellow, told them of the many correlations between African American culture and nature, and how, in order to decipher history, they must understand environmental and ecological issues.
Benji Jones: For the LGBTQ Community, Birding Can Be a Relief—and a Source of Anxiety
If there's one reason so many queer folks love nature, it's that animals aren't judge-y: A raccoon doesn't care who you're attracted to, a garter snake isn't going to question your gender, and a bird of paradise isn't going to raise an eyebrow to how you're dressed. In fact, many animals are super queer by human standards, whether they're male flamingos that court other males, strutting and waving their heads from side to side, or parrotfish that can switch genders... But while queer people find comfort in nature—as many people do, regardless of how they identify—not all outdoor spaces offer the sanctuary they seek. Nature reserves and wildlife refuges tend to be located in remote areas that lack diversity. And although no organization tracks sexual orientation and gender-identity statistics among birders, the birding community lacks diversity, too.
Queer Nature:
Our program envisions and implements ecological literacy and wilderness self-reliance skills as vital and often overlooked parts of the healing and wholing of populations who have been marginalized and even represented as 'unnatural.' Our curriculums necessarily go beyond recreation in nature to deep and creative engagement with the natural world to build inter-species alliances and an enduring sense of belonging.
The feminist bird club: an inclusive bird watching club dedicated to providing a safe opportunity to connect with the natural world in urban environments while working to protect the rights of all womxn, non-binary folks, and members of the LGBTQ+ community.

Urban birding in New York City:
A taxonomy of birders, said Mr. Cooper, mirrors that of the birds. "Every year, you see the same species, but the experiences are different." Mr. Cooper noted new stars like Jacob Drucker, once an elfin teenager whose skills are now off the chart; veterans, like Roger Pasquier, a long tenured "Jedi master" in Mr. Cooper's estimation, and Lee, a homeless woman who joined their ranks some years ago. "She watched us watching the birds, and asked what we were doing and someone gave her a pair of binoculars," Mr. Cooper said. "We're all obsessed, but in our own ways."

Slashdot: DARPA Wants To Build 'Contextual' AI That Understands the World

The Defense Advanced Research Projects Agency (DARPA), a division of the U.S. Department of Defense responsible for the development of emerging technologies, is one of the birthplaces of machine learning, a kind of artificial intelligence (AI) that mimics the behavior of neurons in the brain. Dr. Brian Pierce, director of DARPA's Innovation Office, spoke about the agency's recent efforts at a VentureBeat summit. From the report: One area of study is so-called "common sense" AI -- AI that can draw on environmental cues and an understanding of the world to reason like a human. Concretely, DARPA's Machine Common Sense Program seeks to design computational models that mimic core domains of cognition: objects (intuitive physics), places (spatial navigation), and agents (intentional actors). "You could develop a classifier that could identify a number of objects in an image, but if you ask a question, you're not going to get an answer," Pierce said. "We'd like to get away from having an enormous amount of data to train neural networks [and] get away with using fewer labels [to] train models." The agency's also pursuing explainable AI (XAI), a field which aims to develop next-generation machine learning techniques that explain a given system's rationale. "[It] helps you to understand the bounds of the system, which can better inform the human user," Pierce said.

Read more of this story at Slashdot.

Recent additions: magic-wormhole 0.2.1

Added by jcalderone, Tue Oct 23 20:12:33 UTC 2018.

Interact with Magic Wormhole

Recent additions: cabal-debian 4.38.2

Added by DavidFox, Tue Oct 23 19:56:16 UTC 2018.

Create a Debianization for a Cabal package

MetaFilter: PLINK plink plink PLINK plink plink...

The theme to John Carpenter's Halloween on accordion and banjo, Resident Evil - Vacant Flat (Guardhouse Dormitory) on ukulele, banjo, ukulele bass, and other instruments, Silent Hill - Opening Theme cover on banjo, mandolin, octave mandolin, ukulele bass and concertina.

Slashdot: Almost 9 in 10 Android Apps Are Able To Share Data With Google, Says Study

A peer-reviewed study [PDF] of almost one million Android apps has revealed how data from smartphones are harvested and shared, with nearly 90 percent of apps set up to transfer information back to Google. From a report: Researchers at Oxford university analysed approximately a third of the apps available in Google's Play Store in 2017 and found that the median app could transfer data to 10 third parties, with one in five apps able to share data with more than 20. This year has seen unprecedented scrutiny over how websites use the data they collect from their users, but little attention has so far been paid to the sprawling and fast-growing world of smartphone apps. Reuben Binns, the computer scientist who led the project, said that because most apps have now moved to a "freemium" model, where they make revenues from advertising rather than sales, data sharing has spiralled out of control. Users, regulators and sometimes even the app developers and advertisers are unaware of the extent to which data flow from smartphones to digital advertising groups, data brokers and intermediaries that buy, sell and blend information, he said. "This industry was growing already on the webâ...âwhen smartphones came along, that was a new opportunity," he said. "It feels like this legitimate business model has gone completely out of control and created a kind of chaotic industry that is not understood by the people who are most affected by it."

Read more of this story at Slashdot.

MetaFilter: Working on the Levee

In 1978, Alan Lomax returned to the Mississippi Delta for another of his numerous field recording trips to the area. While there he recorded an interview with men who had worked levee building work teams during the depths of Jim Crow. This playlist has some of the work songs and hollers he recorded at the same time.

Greenville levee-camp conversation (part 1 of 12) (1978)
Greenville levee-camp conversation (part 2 of 12) (1978)
Greenville levee-camp conversation (part 3 of 12) (1978)
Greenville levee-camp conversation (part 4 of 12) (1978)
Greenville levee-camp conversation (part 5 of 12) (1978)
Greenville levee-camp conversation (part 6 of 12) (1978)
Greenville levee-camp conversation (part 7 of 12) (1978)
Greenville levee-camp conversation (part 8 of 12) (1978)
Greenville levee-camp conversation (part 9 of 12) (1978)
Greenville levee-camp conversation (part 10 of 12) (1978)
Greenville levee-camp conversation (part 11 of 12) (1978)
Greenville levee-camp conversation (part 12 of 12) (1978)

Colossal: Hand-Tufted Rugs Celebrate the Natural Beauty of Lichen and Mold

Dutch artist Lizan Freijsen explores our relationship to fungi, stains, mold, and moisture through modes of interior design. Freijsen creates rugs (as well as wallpapers and blankets) that mimic the unique patterns of natural formations in states of growth and decay. Each carpet has its own shape and color palette, and is comprised of concentric rings—some with eccentrically squiggling edges and others with more simple circles.

To produce these often large-scale textiles, Freijsen partners with Hester Onijs and Karen Zeedijk at the Textile Museum in Tilburg, NL. In addition to her own art practice, Freijsen has been teaching at the Willem De Kooning Academy in Rotterdam since 2000. You can see more of her work and peruse rugs that are available for purchase on her website.

Open Culture: Take a Free Animation Course from a Renowned French Animation School

An FYI for any aspiring animators who happen to speak some French...

A free course that covers the basics of computer animation has just gotten underway. Called Anima Podi, the free course is offered by the Gobelins, L'École de L'Image, the famed Parisian school of visual arts.

According to Cartoon Brew, the "MOOC [Massive Open Online Course] is aimed at first-time or self-taught animators. The first week of the course will be dedicated to introductory preparation, while each subsequent week will focus on a new animation exercise." "Anima Podi will also dedicate a significant amount of time to animation history ... and delve into styles and traditions from around the world 'so that people understand what is animation beyond Disney.'" Animation exercises will be completed with a software called Rumba.

The free course (register here) is currently offered in French, but an English version will appear down the road.

Follow Open Culture on Facebook and Twitter and share intelligent media with your friends. Or better yet, sign up for our daily email and get a daily dose of Open Culture in your inbox. 

If you'd like to support Open Culture and our mission, please consider making a donation to our site. It's hard to rely 100% on ads, and your contributions will help us provide the best free cultural and educational materials.

via Cartoon Brew

Related Content:

Take a Free Online Course on Making Animations from Pixar & Khan Academy

Pixars 22 Rules of Storytelling Makes for an Addictive Parlor Game

Download 15,000+ Free Golden Age Comics from the Digital Comic Museum

1300 Free Online Courses from Top Universities

Take a Free Animation Course from a Renowned French Animation School is a post from: Open Culture. Follow us on Facebook, Twitter, and Google Plus, or get our Daily Email. And don't miss our big collections of Free Online Courses, Free Online Movies, Free eBooksFree Audio Books, Free Foreign Language Lessons, and MOOCs.

Quiet Earth: New on Blu-ray and DVD for October 23, 2018

Del (Peter Dinklage) is alone in the world. After the human race is wiped out, he lives in his small, empty town, content in his solitude and the utopia he's methodically created for himself - until he is discovered by Grace (Elle Fanning), an interloper whose history and motives are obscure. Worse yet, she wants to stay.

Charlotte Gainsbourg and Paul Giamatti also star in I Think We're Alone Now, a PA film directed by Reed Morano.


[Continued ...]

Daniel Lemire's blog: Is WebAssembly faster than JavaScript?

Most programs running on web sites are written in JavaScript. There are still a few Java applets and other plugins hanging around, but they are considered obsolete at this point.

While JavaScript is superbly fast, some people feel that we ought to do better. That’s where WebAssembly comes in. It is a binary (“pre-compiled”) format that is made to load quickly. It still needs to get compiled or interpreted, but, at least, you do not need to parse JavaScript source code.

The general idea is that you write your code in C, C++ or Rust, then you compile it to WebAssembly. In this manner, you can port existing C or C++ programs so that they run on Web pages. That’s obviously useful if you already have the C and C++ code, but less appealing if you are starting a new project from scratch. It is far easier to find JavaScript front-end developers in almost any industry, except maybe gaming.

I think it is almost surely going to be more labor intensive to program web applications using WebAssembly.

In any case, I like speed so I was interested so I asked a student of mine (M. Fall) to work on the problem. We picked small problems with hand-crafted code in C and JavaScript.

Here are the preliminary conclusions:

  1. In all cases we considered, the total WebAssembly files were larger than the corresponding JavaScript source code, even without taking into account that the JavaScript source code can be served in compressed form. This means that if you are on a slow network connection, JavaScript programs will start faster.

    The story may change if you build large projects. Moreover, we compared against human-written JavaScript, and not automatically generated JavaScript.

  2. Once the WebAssembly files are in the cache of the browser, they load faster than the corresponding JavaScript source code, but the difference is small. Thus if you are frequently using the same application, or if the web application resides on your machine, WebAssembly will start faster. However, the gain is small. One reason why the gain is small is that JavaScript loads and starts very quickly.
  3. WebAssembly (compiled with full optimization) is slower than JavaScript during execution. Browser support is also problematic: while Firefox and Chrome have relatively fast WebAssembly execution (with Firefox being better), we found Microsoft Edge to be quite terrible. WebAssembly on Edge is really slow.

Thus while WebAssembly might be a compelling platform if you have a C++ game you need to port to the Web, I would bet good money that WebAssembly is not about to replace JavaScript for most tasks. Simply put, JavaScript is fast and convenient. It is going to be quite difficult to do better in the short run.

It is still deserving of attention since the uptake on WebAssembly has been fantastic. For online games, it has surely a bright future.

More content: WebAssembly and the Death of JavaScript (video) by Colin Eberhardt

Colossal: This Goal-Driven Calendar Rewards Your Daily Achievements With Illuminated Gold Stars

Inventor Simone Giertz is known for her hilariously disobedient robots like this breakfast machine designed to pour a bowl of cereal but which actually just sloshes milk across the counter, or her wake-up robot that jolts users awake by repeatedly slapping them in the face. Her latest invention started as a personal project, and has nothing to do with being harassed by a piece of metal machinery. The Every Day Calendar is an illuminated board with responsive buttons that correspond with each day of the year, and is intended to help users set and stick with their goals.

Giertz built the piece to encourage meditating, a habit she had been trying off and on for nearly 10 years. After each session she touched the light-up button, which allowed her to get a visual index of her daily accomplishment. The inventor recently completed her year-long goal, only missing the one day she underwent brain surgery. Every Day Calendar is not only an encouraging model for the easy days, but it is also meant to be a guiding light for the days that are not so easy. You can check out the project and learn a little bit more about Giertz on her Kickstarter page. (via Swissmiss)


ScreenAnarchy: Have Your Say: How Corrupt Do You Think We Are?

Another week, another troll on the Internet who claims I've been bought. Ugh... I wish things were that simple. It's fun to be able to claim you're untouchable, and of such strong moral fiber that you're incorruptible. But let's be honest, it would be even MORE fun if I could claim all those things while companies would bother to try and seduce me. As the guys over at Penny Arcade Webcomic stated when they discussed sites being bought for positive reviews: "Where do I sign up for that?" I've written positive, wait, VERY positive reviews for Marvel films in the past. Hell. I even got quoted on some 3D-IMAX posters. Think I got offered a 3D-pile of cash for that? Nope. Maybe thrashing DCEU films...

[Read the whole post on]

Colossal: Spaghetti-like Benches by Pablo Reinoso Twist into Interlocking Circles and Climb up Nearby Walls

"Huge Sudely Bench" (2010), Painted steel, h. 188 x l. 955 x w. 238 cm

“Huge Sudely Bench” (2010), Painted steel, h. 188 x l. 955 x w. 238 cm

French-Argentine artist and designer Pablo Reinoso has been designing and fabricating sculptural benches since he was just 15. Throughout his nearly five decades as an artist he has explored several iterations of both seating and sculptural forms, including his two most recent series Spaghetti and Garabatos. Each work is a bench at its very core, but its structure has been elongated and twisted into an object that expresses a little bit of anarchy and a lot of play.

“Reinoso stages benches that, having fulfilled their role as furniture, become once again branches that can grow and climb,” explains the artist’s statement on his website. “…they can at least express themselves freely by embracing architecture, roaming through places, exploring gaps, and giving free rein to their whims.”

Although Reinoso has always explored the structure of the bench, he has often diverged into other disciplines as a part of his wide-sweeping practice. He has explored sculpture, photography, architecture, and design, each with a bit of humor and a desire to test limits in understanding and form. His installation “The Circle,” from his series Garabatos, is currently installed in Paris’s Tuileries Garden through November 7, 2018. You can few a larger selection from this series on his website and Instagram.

"Huge Sudely Bench" (2010), Painted steel, h. 188 x l. 955 x w. 238 cm

“Huge Sudely Bench” (2010), Painted steel, h. 188 x l. 955 x w. 238 cm

"Circular Bench" (2012), Painted steel, h. 100 x diameter. 650 cm, photo by Eric Sander

“Circular Bench” (2012), Painted steel, h. 100 x diameter. 650 cm, photo by Eric Sander

"Spaghetti Bâle" (2008), Carved wood and steel, l. 320 x h. 253 x depth 168 cm

“Spaghetti Bâle” (2008), Carved wood and steel, l. 320 x h. 253 x depth 168 cm

"Spaghetti Ballade" (2007), Carved wood and steel, h. 473 x l. 376 x w. 375 cm

“Spaghetti Ballade” (2007), Carved wood and steel, h. 473 x l. 376 x w. 375 cm

"Vice Versa" (2012), Painted steel, 6.10 x h. 1, 2012

“Vice Versa” (2012), Painted steel, 6.10 x h. 1, 2012

"Ecuries Bench" (2012), Painted steel, h. 100 x diameter 600 cm

“Ecuries Bench” (2012), Painted steel, h. 100 x diameter 600 cm

"Double Bench" (2006), Wood and steel, 471 x 77 x 69 cm
, photo by Rodrigo Reinos

“Double Bench” (2006), Wood and steel, 471 x 77 x 69 cm
, photo by Rodrigo Reinos

"Chaises de l'harmonie" (2011), Painted steel, 12 elements, h. 5 x 8 m, semi-circular diameter (variable dimensions)

“Chaises de l’harmonie” (2011), Painted steel, 12 elements, h. 5 x 8 m, semi-circular diameter (variable dimensions)

"Little Talk L" (2017), Painted steel, h. 1 x l. 5.45 x w. 1.45 m, photo by Rodrigo Reinoso

“Little Talk L” (2017), Painted steel, h. 1 x l. 5.45 x w. 1.45 m, photo by Rodrigo Reinoso

ScreenAnarchy: Velasco Broca's AUTONOMOUS GODS Visits The God Zoo

We here at Screen Anarchy are proud to be hosting the world premiere of Spanish madman Velasco Broca's new short film series Autonomous Gods - a collaboration with audiovisual collective Canódromo Abandonado - and today we move on to episode two: The God Zoo. In an underwater cathedral, a grumpy priest explains a series of esoteric truths to a an altar boy: where do the cosmos and the Spanish regions come from? What is love? Where do the gods end up when we stop believing in them? Through his teachings, we find out about the world of the regional gods and get caught up in their fear, anger and sadness. Ever wonder what happens to a civilization's gods when that civilization dies out? It goes...

[Read the whole post on]

Open Culture: Yale Professor Jason Stanley Identifies Three Essential Features of Fascism: Invoking a Mythic Past, Sowing Division & Attacking Truth

New books on fascism are popping up everywhere, from independent presses, former world leaders like Madeleine Albright, and academics like Jason Stanley, Jacob Urowsky Professor of Philosophy at Yale University. Stanleys latest book, How Fascism Works: The Politics of Us and Them, has been described as a vital read for a nation under Trump." And yet, as The Guardians Tom McCarthy writes, one of the ironies Stanley points out is thatdespite the widespread currency of the term these daysfascism succeeds by making talk of fascism seem outlandish.

Is it?

The word has certainly been diluted by years of misuse. Umberto Eco wrote in his 1995 essay Ur-Fascism that "fascist" as an epithet was casually thrown around by American radicals to refer to a cop who did not approve of their smoking habits. When every authority figure who seems to abuse power gets labeled a fascist, the word loses its explanatory power and its history disappears. But Eco, who grew up under Mussolini and understood fascist Europe, insisted that fascism has clearly recognizable, and portable, if not particularly coherent, features.

The fascist game can be played in many forms, Eco wrote, depending on the national mythologies and cultural history of the country in which it takes root. Rather than a single political philosophy, Eco argued, fascism is "a collage... a beehive of contradictions." He enumerated fourteen features that delineate it from other forms of politics. Like Eco, Stanley also identifies some core traits of fascism, such as publicizing false charges of corruption, as he writes in his book, while engaging in corrupt practice.

In the short New York Times opinion video above, Stanley summarizes his formula for fascisma surprisingly simple pattern now repeating in Europe, South America, India, Myanmar, Turkey, the Philippines, and right here in the United States. No matter where they appear, fascist politicians are cut from the same cloth, he says. The elements of his formula are:

1. Conjuring a mythic past that has supposedly been destroyed (by liberals, feminists, and immigrants). Mussolini had Rome, Turkeys Erdoan has the Ottoman Empire, and Hungarys Viktor Orban rewrote the countrys constitution with the aim of making Hungary great again. These myths rely on an overwhelming sense of nostalgia for a past that is racially pure, traditional, and patriarchal. Fascist leaders position themselves as father figures and strongmen who alone can restore lost greatness. And yes, the fascist leader is always a he.

2. Fascist leaders sow division; they succeed by turning groups against each other, inflaming historical antagonisms and ancient hatreds for their own advantage. Social divisions in themselvesbetween classes, religions, ethnic groups and so onare what we might call pre-existing conditions. Fascists may not invent the hate, but they cynically instrumentalize it: demonizing outgroups, normalizing and naturalizing bigotry, stoking violence to justify repressive law and order policies, the curtailing of civil rights and due process, and the mass imprisonment and killing of manufactured enemies.

3. Fascists attack the truth with propaganda, in particular a kind of anti-intellectualism that creates a petri dish for conspiracy theories. (Stanleys fourth book, published by Princeton University Press, is titled How Propaganda Works.) We would have to be extraordinarily naïve to think that only fascist politicians lie, but we should focus here on the question of degree. For fascists, truth doesnt matter at all. (As Rudy Giuliani says, "truth isn't truth.") Hannah Arendt wrote that fascism relies on a consistent and total substitution of lies for factual truth. She described the phenomenon as destroying the sense by which we take our bearings in the real world.... [T]he category of truth verses falsehood [being] among the mental means to this end. In such an atmosphere, anything is possible, no matter how previously unthinkable.

Using this rubric, Stanley links the tactics and statements of fascist leaders around the world with those of the current U.S. president. Its a persuasive case that would probably sway earlier theorists of fascism like Eco and Arendt. Whether he can convince Americans who find talk of fascism outlandishor who loosely use the word to describe any politician or group they dont likeis another question entirely.

Related Content:

Umberto Eco Makes a List of the 14 Common Features of Fascism

Hannah Arendt Explains How Propaganda Uses Lies to Erode All Truth & Morality: Insights from The Origins of Totalitarianism

George Orwell Tries to Identify Who Is Really a Fascist and Define the Meaning of This Much-Abused Word (1944)

20 Lessons from the 20th Century About How to Defend Democracy from Authoritarianism, According to Yale Historian Timothy Snyder

Josh Jones is a writer and musician based in Durham, NC. Follow him at @jdmagness

Yale Professor Jason Stanley Identifies Three Essential Features of Fascism: Invoking a Mythic Past, Sowing Division & Attacking Truth is a post from: Open Culture. Follow us on Facebook, Twitter, and Google Plus, or get our Daily Email. And don't miss our big collections of Free Online Courses, Free Online Movies, Free eBooksFree Audio Books, Free Foreign Language Lessons, and MOOCs.

Planet Haskell: Mark Jason Dominus: Getting Applicatives from Monads and “>>=” from “join”

I conplained recently about GHC not being able to infer an Applicative instance from a type that already has a Monad instance, and there is a related complaint that the Monad instance must define >>=. In some type classes, you get a choice about what to define, and then the rest of the functions are built from the ones you provided. To take a particular simple example, with Eq you have the choice of defining == or /=, and if you omit one Haskell will construct the other for you. It could do this with >>= and join, but it doesn't, for technical reasons I don't understand [1] [2] [3].

But both of these problems can be worked around. If I have a Monad instance, it seems to work just fine if I say:

    instance Applicative Tree where
      pure = return
      fs <*> xs = do
          f <- fs
          x <- xs
          return (f x)

Where this code is completely canned, the same for every Monad.

And if I know join but not >>=, it seems to work just fine if I say:

    instance Monad Tree where
      return = ...
      x >>= f  = join (fmap f x) where
        join tt = ...

I suppose these might faul foul of whatever problem is being described in the documents I linked above. But I'll either find out, or I won't, and either way is a good outcome.

[ Addendum: Vaibham Sagar points out that my definition of <*> above is identical to that of Control.Monad.ap, so that instead of defining <*> from scratch, I could have imported ap and then written <*> = ap. ]

explodingdog: Photo

OCaml Weekly News: OCaml Weekly News, 23 Oct 2018

  1. NYC OCaml Meetup
  2. Structured-concurrency libraries
  3. ocaml-git 2.0
  4. Tutorial for Cohttp-lwt as API client
  5. Ocaml Github Pull Requests
  6. Other OCaml News


Lisa Ericson (previously featured here).

Lisa Ericson



Lisa Ericson



Lisa Ericson



Lisa Ericson



Lisa Ericson



Lisa Ericson



Lisa Ericson’s Website

Lisa Ericson on Instagram

Lisa Ericson at Thinkspace


Linda Brownlee is an Irish director and photographer currently based in London. Drawn to all sorts of communities and cultures, much of her work delicately explores the intricate energy of people and places she visits.












































Linda Brownlee’s Website

Linda Brownlee on Instagram

Open Culture: Free Guided Imagery Recordings Help Kids Cope with Pain, Stress & Anxiety

I dont have to tell you modern life is full of stressors that exacerbate hypertension, depression, and everything in-between. Therapeutic stress reduction techniques based in mindfulness meditation, trauma research, and a number of other fields have proliferated in our daily lives and everyday conversation, helping people cope with chronic pain, career anxiety, and the toxic miasma of our geopolitics.

These methods have been very successful among adult populationsof monks, veterans, clinical subjects, etc.but adults process information very differently than children. And as every parent knows, kids get majorly stressed out too, whether theyre absorbing our anxieties second-hand or feeling the pressures of their own social and educational environments.

We cant expect young children to sit still and pay attention to their breath for thirty minutes, or to change their mental scripts with cognitive behavioral therapy. Its far easier for kids to process things through their imagination, channeling anxiety through play, or art, oras pediatric psychologists at the Childrens Hospital of Orange County (CHOC) explainguided mental visualization, or guided imagery, as they call it. How does it work?

Guided imagery involves envisioning a certain goal to help cope with health problems or the task or skill a child is trying to learn or master. Guided imagery is most often used as a relaxation technique that involves sitting or lying quietly and imagining a favorite, peaceful setting like a beach, meadow or forest.

The therapists at CHOC teach patients to imagine sights, sounds, smells, tastes or other sensations to create a kind of daydream that removes them from or gives them control over their present situation. In the video at the top, Dr. Cindy Kim describes the technique as akin to biofeedback, and it has been especially helpful for children facing a scary medical procedure.

While all of us might need to go to our happy place once in a while, most kids find it hard to relax without some form of creative redirection, like the guided imagery program above from Johns Hopkins All Childrens Hospital. At the CHOC website, youll find over a dozen other audio programs tailored for pain and stress management and relaxation, for both young children and adolescents. Lifehackers parenting editor Michelle Woo describes a representative sampling of the programs:

  • For pain management for young kids, listen to The Special Cake. Sample line: With your next deep breath in, notice the sweet smell of the yummy frosting.
  • For pain management for teens, listen to Climbing a Ladder. Sample line: Lets have a look at the first step. As you put your foot on it, you begin to remember a time when you realize that you can have control over your body.
  • For anxiety, listen to The Magic Kite. Sample line: All of the uncomfortable feelings or sadness or anger or pain or worry are all on the ground and you are flying away from it.

As kids listen to audio, Woo writes, have them notice how their body feelstheir breathing may slow and their muscles might relax. And hey, theres no reason guided imagery cant work for grown-ups too. Try it if youre feeling stressed and let us know how it works for you.

via Lifehacker

Related Content:

Moby Lets You Download 4 Hours of Ambient Music to Help You Sleep, Meditate, Do Yoga & Not Panic

Daily Meditation Boosts & Revitalizes the Brain and Reduces Stress, Harvard Study Finds

How Stress Can Change Your Brain: An Animated Introduction

Meditation 101: A Short, Animated Beginners Guide

Josh Jones is a writer and musician based in Durham, NC. Follow him at @jdmagness.

Free Guided Imagery Recordings Help Kids Cope with Pain, Stress & Anxiety is a post from: Open Culture. Follow us on Facebook, Twitter, and Google Plus, or get our Daily Email. And don't miss our big collections of Free Online Courses, Free Online Movies, Free eBooksFree Audio Books, Free Foreign Language Lessons, and MOOCs.

things magazine: Downsized

On our obsession with model villages, an extract from Simon Garfield’s In Miniature: How Small Things Illuminate the World. A journey that takes you from the Floridian ruins of Splendid China to Jimmy Cauty’s The Aftermath Dislocation Principle (more), miniature … Continue reading

Open Culture: How an 18th-Century Monk Invented the First Electronic Instrument

We tend to think of electronic music as a modern phenomenon, dating back only to the 20th century, but the invention of the first instrument made to use electricity occurred a couple centuries deeper than that. The man pictured above, Czech theologian and scientist Václav Prokop Divi, "is now regarded as the earliest visionary of electronic music," writes Motherboard's Becky Ferreira, owing to the fact that "his dual interests in music and electricity had merged into a single obsession with creating an electrically enhanced musical instrument." Around the year 1748, that obsession produced the "Denis d'or," or "Golden Dionysus," a "keyboard-based instrument outfitted with 790 iron strings that were positioned to be struck like a clavichord rather than plucked like a guitar." Through the electromagnetic excitation of the piano strings, the monk could "imitate the sounds of a whole variety of other instruments."

"Divi was an interesting character, having also invented the lightning rod at the same time as, but independently of, Benjamin Franklin," says the Cambridge Introduction to Electronic Music. He designed the Denis d'or with "an ingenious and complex system of stops" that reportedly allowed it to "imitate an astonishing array of instruments, including, it was claimed, aerophones." The same applied to "chordophones such as harpsichords, harps and lutes, and even wind instruments."

The term aerophone (which denotes any musical instrument that makes a body of air vibrate) might not sound familiar to many of us, but the functionality of Divi' invention will. Don't we all remember the thrill of sitting down to our first synthesizer and discovering how many different instrumental sounds it could make, vague though the sonic approximation might have been?

Whether the Denis d'or counts as the founding instrument of all electronic music or a mere early curiosity, you can learn more about it at 120 Years of Electronic Music and Electrospective Music. The pre-history of electronic music (since its history proper begins around 1800) has remembered it as a practical-joke device as much as an instrument. "Divi devised a novel method of temporarily charging the strings with electricity in order to 'enhance' the sound," says the Cambridge Introduction. "What effect this had is unclear (unfortunately only one instrument was made and this did not survive), but it apparently allowed Divi to deliver an electric shock to the performer whenever he desired." Nobody ever said a polymath couldn't also be a prankster.

via Motherboard

Related Content:

The History of Electronic Music in 476 Tracks (1937-2001)

Meet the Telharmonium, the First Synthesizer (and Predecessor to Muzak), Invented in 1897

The History of Electronic Music Visualized on a Circuit Diagram of a 1950s Theremin: 200 Inventors, Composers & Musicians

Moog This!: Hear a Playlist Featuring 36 Hours of Music Made with the Legendary Analog Synthesizer

Based in Seoul, Colin Marshall writes and broadcasts on cities, language, and culture. His projects include the book The Stateless City: a Walk through 21st-Century Los Angeles and the video series The City in Cinema. Follow him on Twitter at @colinmarshall or on Facebook.

How an 18th-Century Monk Invented the First Electronic Instrument is a post from: Open Culture. Follow us on Facebook, Twitter, and Google Plus, or get our Daily Email. And don't miss our big collections of Free Online Courses, Free Online Movies, Free eBooksFree Audio Books, Free Foreign Language Lessons, and MOOCs.

Planet Haskell: Mark Jason Dominus: Applicative WTF?

While I was writing up last week's long article about Traversable, I wrote this stuff about Applicative also. It's part of the story but I wasn't sure how to work it into the other narrative, so I took it out and left a remark that “maybe I'll publish a writeup of that later”. This is a disorganized collection of loosely-related paragraphs on that topic.

It concerns my attempts to create various class instance definitions for the following type:

    data Tree a = Con a | Add (Tree a) (Tree a)
        deriving (Eq, Show)

which notionally represents a type of very simple expression tree over values of type a.

I need some function for making Trees that isn't too simple or too complicated, and I went with:

    h n | n < 2 = Con n
    h n = if even n then Add (h (n `div` 2)) (h (n `div` 2))
                    else Add (Con 1) (h (n - 1))

which builds trees like these:

    2 = 1 + 1
    3 = 1 + (1 + 1)
    4 = (1 + 1) + (1 + 1)
    5 = 1 + ((1 + 1) + (1 + 1))
    6 = (1 + (1 + 1)) + (1 + (1 + 1))
    7 = 1 + (1 + (1 + 1)) + (1 + (1 + 1))
    8 = ((1 + 1) + (1 + 1)) + ((1 + 1) + (1 + 1))

Now I wanted to traverse h [1,2,3] but I couldn't do that because I didn't have an Applicative instance for Tree. I had been putting off dealing with this, but since Traversable doesn't really make sense without Applicative I thought the day of reckoning would come. Here it was. Now is when I learn how to fix all my broken monads.

To define an Applicative instance for Tree I needed to define pure, which is obvious (it's just Con) and <*> which would apply a tree of functions to a tree of inputs to get a tree of results. What the hell does that mean?

Well, I can kinda make sense of it. If I apply one function to a tree of inputs, that's straightforward, it's just fmap, and I get a tree of results. Suppose I have a tree of functions, and I replace the function at each leaf with the tree of its function's results. Then I have a tree of trees. But a tree that has trees at its leaves is just a tree. So I could write some tree-flattening function that builds the tree of trees, then flattens out the type. In fact this is just join that I already know from Monad world. The corresponding operation for lists takes a list of lists and flattens them into a single list.) Flattening a tree is quite easy to do:

    join (Con ta) = ta
    join (Add ttx tty) = Add (join ttx) (join tty)

and since this is enough to define a Monad instance for Tree I suppose it is enough to get an Applicative instance also, since every Monad is an Applicative. Haskell makes this a pain. It should be able to infer the Applicative from this, and I wasn't clever enough to do it myself. And there ought to be some formulaic way to get <*> from >>= and join and fmap, the way you can get join from >>=:

    join = (>>= id)

but I couldn't find out what it was. This gets back to my original complaint: Haskell now wants every Monad instance to be an instance of Applicative, but if I give it the fmap and the join and the return it ought to be able to figure out the Applicative instance itself instead of refusing to compile my program. Okay, fine, whatever. Haskell's gonna Hask.

(I later realized that building <*> when you have a Monad instance is easy once you know the recipe; it's just:

    fs <*> xs = do
      f <- fs
      x <- xs
      return (f x)

So again, why can't GHC infer <*> from my Monad instance, maybe with a nonfatal warning?

    Warning: No Applicative instance provided for Tree; deriving one from Monad

This is not a rhetorical question.)

(Side note: it seems like there ought to be a nice short abbreviation of the (<*>) function above, the way one can write join = (>>= id). I sought one but did not find any. One can eliminate the do notation to obtain the expression:

    fs <*> xs = fs >>= \f -> xs >>= \x -> return (f x)

but that is not any help unless we can simplify the expression with the usual tricks, such as combinatory logic and η-conversion. I was not able to do this, and the automatic pointfree converter produced (. ((. (return .)) . (>>=))) . (>>=) ARGH MY EYES.)

Anyway I did eventually figure out my <*> function for trees by breaking the left side into cases. When the tree of functions is Con f it's a single function and we can just use fmap to map it over the input tree:

    (Con f) <*> tv = fmap f tv

And when it's bigger than that we can break it up recursively:

    (Add lt rt) <*> tv = Add (lt <*> tv) (rt <*> tv)

Once this is written it seemed a little embarrassing that it took me so long to figure out what it meant but this kind of thing always seems easier from the far side of the fence. It's hard to understand until you understand it.

Actually that wasn't quite the <*> I wanted. Say we have a tree of functions and a tree of arguments.

three-node tree diagram of the expression below
Add (Con (* 10))
    (Con (* 100))
5-node tree diagram of the expression below
Add (Add (Con 3) (Con 4)) (Con 5)

I can map the whole tree of functions over each single leaf on the right, like this:

tree diagram of the expression below, showing how each of the leaves of the second tree has been replaced by a complete copy of the first tree. The complete tree has five 'Add' nodes and six leaves with values 30, 300, 40, 400, 50, 500.
Add (Add (Add (Con 30) (Con 300))
         (Add (Con 40) (Con 400)))
    (Add (Con 50) (Con 500))

or I can map each function over the whole tree on the right, like this:

tree diagram of the expression below, showing how each of the leaves of the first tree has been replaced by a complete copy of the second tree. As before, the complete tree has five 'Add' nodes and six leaves with the same values, but this time the structure is different and the leaves are grouped by length instead of by leading digit.
  (Add (Add (Con 30)  (Con 40))  (Con 50))
  (Add (Add (Con 300) (Con 400)) (Con 500))

The code I showed earlier does the second of those. You can see it from the fmap f tv expression, which takes a single function and maps it over a whole tree of values. I had actually wanted the other one, but there isn't anything quite like fmap for that. I was busy trying to understand Applicative and I was afraid if I got distracted trying to invent a reverse fmap I might lose the thread. This happens to me a lot with Haskell. I did eventually go back and figure it out. The reverse fmap is

    pamf fs v = fmap ($ v) fs      -- good


    pamf = flip (fmap . flip id)   -- yuck

Now there's a simple answer to this which occurs to me now that I didn't think of before, but I'm going to proceed with how I planned to do it before, with pamf. The <*> that I didn't want looked like this:

    (Con f) <*> tv = fmap f tv
    (Add lt rt) <*> tv = Add (lt <*> tv) (rt <*> tv)

I need to do the main recursion on the values argument instead of on the functions argument:

    tf <*> (Con v)    = pamf tf v
       where pamf fs v = fmap ($ v) fs
    tf <*> (Add lv rv) = Add (tf <*> lv) (tf <*> rv)           

(This is an interesting example: usually the base case is trivial and the recursive clause is harder to write, but this time it's the base case that's not perfectly straightforward.)

Anyway, this worked, but there was an easier solution at hand. The difference between the first version and the second is exactly the same as the difference between

        fs <*> xs = do
          f <- fs
          x <- xs
          return (f x)


        fs <*> xs = do
          x <- xs
          f <- fs
          return (f x)

Digging deeper into why this worked this way was interesting, but it's bed time, so I'm going to cut the scroll here.

Tea Masters: Un dimanche d'automne

Dimanche fut un rayon de soleil dans un automne pourri car inhabituellement pluvieux, même pour Taiwan. Je pris la direction de la maison Lin, à trois coups de pédales de chez moi, à Banciao. Le ciel bleu m'appelai à déguster du thé en plein air. Et je résiste à tout, sauf à la tentation de boire un bon thé!
Je choisis ma boule de puerh cru sauvage du printemps 2018. Elle provient de feuilles d'arbres cinq fois centenaires. C'est le genre d'affirmation qu'il faut prendre avec des pincettes et un paire de gants après avoir revêtu d'une combinaison Hazmat! Comment savoir si c'est du pipeau ou non? A la vue, ce n'est pas évident.
Le test le plus simple est une infusion longue avec très peu de feuilles. Sur la photo ci-dessus, on peut voir que j'ai à peine entamé ma petite boule. 2 grammes tout au plus. Et j'ai infusé ces quelques feuilles dans ma grande théière zisha d'Yixing. Le résultat fut intense. La longueur en bouche est phénoménale. Le palais est comme tapissé par ce nectar soyeux. Les dernières coupes de la première infusion (celles où l'infusion fut la plus longues) furent si concentrées que je les coupai avec l'infusion suivante. (Le gongfu cha, c'est aussi savoir s'adapter!) Et quelle pureté dans les arômes!
Après deux longues infusions, la troisième perdit (naturellement) beaucoup de sa force, mais resta très agréable. Je sentais encore la force derrière cette fine légerté. C'est la force d'un terroir rocailleux où ces arbres de thé sauvages poussent encore complètement en harmonie avec leur environnement. Or, il leur faut beaucoup de force pour survivre si vieux sans la protection d'un fermier. C'est pourquoi leur feuilles sont de tels concentrés d'arômes qu'un ou deux grammes suffisent déjà pour les apprécier.
L'odeur des feuilles sèches est si persistantes que je la sens encore dans ma jarre (vidée, mais pas nettoyée). Quelques poussières de thé continuent d'émettre des odeurs de folie!

Et magie de la prise de vue ou de la céramique: les courbes de la jarre semblent épouser celles du bec de ma théière antique!
J'avais amené de quoi lire, mais les plaisirs du thé et la beauté de ce jardin chinois de la fin de la dynastie Qing me distrayèrent amplement. Je passe déjà trop de temps sur mon portable ou devant l'ordinateur. Cette reconnexion avec la nature me fit le plus grand bien.

Penny Arcade: News Post: Australiana, Part One

Tycho: I’m heading down to Australia solo, well, not really solo but certainly without Mike.  There is certainly an entourage associated with the journey, to say nothing of the dutiful constellation of technology I am bringing to mediate my experience of the world.  I’ll be chronicling the entirely factual, fact-based journey here on the site.  Join me, won’t you? Speaking of Technology, I’ve been living with the Pixel 3.  That makes it sound like an illness.  Let’s try again: I’m suffering from… No, that’s worse.  In truth, I…

new shelton wet/dry: ‘Just basic memory functions and also just the level of norepinephrine and the epinephrine in the brain that as you know encodes that neurotransmitter that codes memories into the hippocampus and so the trauma-related experience is locked there, whereas other details kind of drift.’ –Dr. Christine Blasey Ford

30 years ago, Spy magazine sent “refund” checks for $1.11 to 58 rich people. The 26 who cashed those got another check, for $.64. The 13 who cashed those each got a check for $.13. Two people cashed the $.13 checks—Donald Trump and Jamal Khashoggi’s arms-dealer uncle Annan. { Kurt Andersen | Spy, July, 1990 [...]

new shelton wet/dry: Every day, the same, again

Sex doll rental company will make a replica of your dead lover Man run over by lawn mower while trying to kill son with chainsaw Assessing the calorific significance of episodes of human cannibalism in the Palaeolithic (This paper presents a nutritional template that offers a proxy calorie value for the human body) How to Order a Beer [...]

new shelton wet/dry: Light travels faster than sound, this is why some people appear bright until they speak

Case of Tetanus, in Which a Large Quantity of the Tincture of Opium Was Administered by Mistake (1819) On the Cure of Tetanus by Opium and the Warm Bath (1812) { PubMed }

Colossal: Striking Aerial Photographs of Namibia’s Arid Landscape Appear as Abstract Paintings

Australian photographer Leah Kennedy captured Namibia’s colorful, dry topography on a recent aerial safari. Much of the artist’s work is aerial, which satisfies her creative affinity for combining abstraction and duality in her photography. Kennedy traveled in a Cessna light aircraft, as well as in a helicopter sans doors, using a medium format camera. She shares with Colossal, “The resulting images are, at least temporarily, removed from their reality they take on different forms and in some cases appear to be of microscopic origins or reminiscent of something else entirely. This ambiguity and departure from reality is what intrigues and inspires my work.”

In addition to her fine art portfolio, Kennedy teaches workshops and offers tutorials on photography and Photoshop. You can see more of her site-specific series and purchase prints of select photographs on Kennedy’s website, and follow her work and travels on Instagram.

Planet Haskell: Philip Wadler: Co-Recursive Interview

Adam Gordon Bell interviewed me for his Co-Recursive podcast. Thanks, Adam!

ScreenAnarchy: Blood In The Snow 2018: Canadian Genre Festival Announces First Wave

I want to start by saying I really wish I could give more of my time to BITS, the Blood in the Snow Film Festival, here in Toronto at the end of November each year. I have been so impressed with their growth these past seven years. With the expansion of their programming and facilities offered to fans and filmmakers like the Deadly Exposure BITS Film Industry Market, they are doing so much for a festival of their size, by comparison.    The festival announced the first four titles of this year's lineup. The festival will open with Lowell Dean's post apocalyptic Supergrid and close with Danishka Esterhazy's dystopian thriller Level 16. BITS alumni Rob Grant will bring his new film Alive and Jesse Thomas Cook...

[Read the whole post on]

ScreenAnarchy: Guillermo Del Toro to Direct Stop Motion Animated PINOCCHIO For Netflix

Guillermo Del Toro will make his animated feature film debut co-directing a long desired project, a stop animated version Pinocchio for Netflix. He will also write and produce this stop motion musical set in Italy during the 1930s.    Del Toro will be joined by The Jim Henson Company (The Dark Crystal: Age of Resistance), and ShadowMachine (Bojack Horseman), which will house the stop-motion animation production.    The number of excellent people joining the team is staggering. Fantastic Mr. Fox's Mark Gustafson will co-direct and Adventure Time's Patrick McHale will co-write the script. Corpse Bride's Mackinnon and Saunders will create the puppets based on a design by frequent Del Toro collaborator, illustrator Guy Davis. He will serve as co-production designer and reportedly be taking inspiration...

[Read the whole post on]

Colossal: Alarming Studio Works by Pejac Focus on Earth’s Environmental Crisis

After taking a much-needed break over the summer following his successful presentation in Paris in June, Pejac is now back in his studio, developing new works for his U.S. debut in New York City and preparing a special limited edition that will be released toward the end of the year. Mixing his most recognizable techniques and mediums, he’s been sharing some of the alluring new pieces via his Instagram, including most recent drawings and works on pressed wood panels.

The Spanish artist first introduced the captivating works on wooden chipboard from the Redemption series back in January 2017, and eventually had an entire showcase focused on these pieces back in September 2017 in Venice. Known for revisiting his ideas and concepts, he recently finished this poignant new piece titled Safari. Mixing some of the previously seen imagery, such as patrolling helicopters with a spotlight, or a lonely stag, Pejac combines these visuals into a dynamic image that depicts a wild animal caught in the open by an unknown authority. Using fastidious shading and light effects, he uses the unorthodox composite wood medium to create a powerful effect of objects flying around the animal as its surrounding crumble around it. Once again putting a focus on the careless and ignorant bearing of humans towards nature, the artist constructed a gripping image utilizing an original technique he developed.

With similar thematic content, Pejac’s most recent solo exhibition on an old waterway barge on the Seine in Paris included three masterful large-scale drawings, along with other works on paper. Portraying a post-apocalyptic, surreal future, these meticulously rendered drawings mounted on thick frames were matched the quality of his paintings while depicting the hefty subject with a direct and delicate technique. Showing a lone character diving deep to retrieve a sinking lifebuoy ring in between plastic waste, or a helicopter removing a lighthouse over a desert, these images showcase Pejac’s poetic vision and his ability to pass a sharp and weighty message in the most poetic way.

A great example of such narrative is his canvas Le Bateau Ivre (The drunken boat) from 2015, titled after a poem written by Arthur Rimbaud, describing the drifting and sinking of a boat lost at sea in a fragmented first-person narrative saturated with vivid imagery and symbolism. Making an analogy with poem’s verbal saturation, the image shows two boys finishing from a small boat drifting through a sea densely polluted with garbage. Originally exhibited at his 2016 London solo show “Law of the Weakest,” this troubling vision from only three years ago is repeatedly becoming an alarming reality around the globe. You can see Pejac’s works in progress and stay up to date on show and print release announcements by following him on Instagram.

Planet Haskell: Functional Jobs: Haskell Developer Position at Karamaan Group (Full-time)

Karamaan Group is an investment firm based in Manhattan. We are looking for an outstanding software developer to develop tools for financial analysis and knowledge management. Since we are investors and not traders, our focus is not on building trading systems, but on business and data analysis. We strongly value people who take pride in their work and have a craftsman’s dedication to building bespoke products. Our ideal candidate is an experienced software developer with a penchant for abstraction and analysis, a solid sense of organization, and an ability to communicate and persuade. While we are looking for a candidate who demonstrates an intense focus on quality, she also needs a master engineer’s intuition for how to make trade offs that are a necessary part of day-to-day software development.

Candidates should have some formal training in a quantitative field and a keen interest in building robust and elegant software. This is a high-impact, high-visibility position where successful candidates will be entrusted with a lot of responsibility for products that have a direct effect on the P&L of the firm and influence on our workflow.

The ideal candidate will have production experience with Haskell or another functional language, relational databases and relational data modeling, Python, and Java. Additionally, as this is a startup environment, the ideal candidate will be comfortable filling many different technology roles, and contributing to the success of the firm wherever they can, not just in agreement with their job description.

Karamaan Group is an investment adviser and manager catering to family offices and institutional investors. We value innovative thinking, encourage an entrepreneurial atmosphere, and enjoy spirited discussions.

Get information on how to apply for this position.

Penny Arcade: Comic: Australiana, Part One

New Comic: Australiana, Part One

The Geomblog: On teaching ethics to tech companies

Kara Swisher (who is unafraid to call it like it is!) has a new op-ed in the NYT titled "Who will teach Silicon Valley to be ethical". She asks
How can an industry that, unlike other business sectors, persistently promotes itself as doing good, learn to do that in reality? Do you want to not do harm, or do you want to do good? These are two totally different things. 
And how do you put an official ethical system in place without it seeming like you’re telling everyone how to behave? Who gets to decide those rules anyway, setting a moral path for the industry and — considering tech companies’ enormous power — the world.

There are things that puzzle me about this entire discussion about ethics and tech. It seems like an interesting idea for tech companies to incorporate ethical thinking into their operations. Those of us who work in this space are clamoring for more ethics education for budding technologists.

There is of course the cynical view that this is merely window dressing to make it look like Big Tech (is that a phrase now?) cares without actually having to change their practices.

But let's put that aside for a minute. Suppose we assume that indeed tech companies are (in some shape of form) concerned about the effects of technology on society and that their leaders do want to do something about it.

What I really don't understand is the idea that we should teach Silicon Valley to be ethical. This seems to play into the overarching narrative that tech companies are trying to do good in the world and slip up because they're not adults yet -- a problem that can be resolved by education that will allow them to be good "citizens" with upstanding moral values.

This seems rather ridiculous. When chemical companies were dumping pesticides on the land by the ton and Rachel Carson wrote Silent Spring, we didn't shake our heads sorrowfully at companies and sent them moral philosophers. We founded the EPA!

When the milk we drink was being adulterated with borax and formaldehyde and all kinds of other horrific additives that Deborah Blum documents so scarily in her new book 'The Poison Squad', we didn't shake our heads sorrowfully at food vendors and ask them to grow up. We passed a law that led eventually to the formation of the FDA.

Tech companies are companies. They are not moral agents, or even immoral agents. They are amoral profit-maximizing vehicles for their shareholders (and this is not even a criticism). Companies are supposed to make money, and do it well. Facebook's stock price didn't slip when it was discovered how their systems had been manipulated for propaganda. It slipped when they proposed changes to their newsfeed ratings mechanisms to address these issues.

It makes no sense to rely on tech companies to police themselves, and to his credit, Brad Smith of Microsoft made exactly this point in a recent post on face recognition systems. Regulation, policing and whatever else we might imagine, has to come from the outside. While I don't claim that regulation mechanisms all work as they are currently conceived, the very idea of checks and balances seems more robust than merely hoping that tech companies will get their act together on their own.

Don't get me wrong. It's not even clear what has to be regulated here. Unlike with poisoned food or toxic chemicals, it's not clear how to handle poisonous speech or toxic propaganda. And that's a real discussion we need to have.

But let's not buy into Silicon Valley's internal hype about "doing good". Even Google has dropped its "Don't be evil" credo.

Open Culture: Roger Waters Adapts and Narrates Igor Stravinsky’s Theatrical Piece, The Soldier’s Story

Roger Waters has always had an ego to match the size of his musical ambitions, a character trait that didnt help him get along with his Pink Floyd bandmates. But it gave him the confidence to write daring operatic albums like The Wall and stage the massive theatrical shows for which the band became well-known. He's a natural storyteller, eager to use music to communicate not only trenchant political critique, but the emotional lives of characters caught up in the machinations of warmongers and profiteers.

Throughout the autobiographical The Wall runs a narrative of wartime trauma, a thread that turned into The Final Cut, essentially a solo album that brought together Waters' critique of Margaret Thatcher and the Falklands War with a memorial for WWII British servicemen, so many of whom, like his father, gave their lives for a country Waters felt betrayed their memory. While his solo career and activism have focused squarely on anti-war messages, he has shown much sympathy for the common soldier.

Waters latest project, then, is fittingly called The Soldiers Story, but this time, he is neither author nor composer. Rather, the piece comes from 100 years ago, adapted by Igor Stravinsky from an old Russian folk tale. In Stravinsky's version, a WWI soldier relinquishes his violinand his musical abilityto the devil in exchange for a book that predicts the future economy. The soldier uses the book to get rich, then gives up his fortune to regain his talent, heal a dying princess, and beat the devil, for a time.

In its timeless, archetypal way, the story evokes some of the sprawling themes Waters has taken on many times, with a similarly sardonic tone. But unlike the rock star's big theatrical productions, Stravinsky's piece is a simple morality play, full of humor and an innovative use of jazz and ragtime elements in a classical setting. There are three speaking partsthe soldier, the devil, and the narrator. Waters has added others to this updated version: "the bloke in the pub" and the king, who remains mute in the original. He not only narrates the piece, but plays all of the characters as well.

Working with seven musicians associated with the Bridgehampton Chamber Music Festival, reports Consequence of Sound. The ensemble seeks to honor Stravinskys work while reinterpreting it for a new audience. Stravinsky himself recorded the piece three times, first in 1932, notes James Leonard at AllMusic, then again in 1954, and finally in 1961. The last recording saw a re-release in 2007 with Jeremy Irons dubbed in as narrator. Other famous actors who have recorded it include John Gielgud as the narrator in a set of performances from the early 70s and Dame Harriet Walter in the role in a 2017 release.

These are huge dramatic shoes to fill. A press release for the new adaptation, displaying Waters characteristic self-confidence (or maybe hubris), assures us that he felt up to the task: He has wanted for a long time to engage more deeply with the work of a composer whose weight and occasional inaccessibility may perhaps have much in common with his own, were told. Whatever affinities might exist between Waters progressive rock operas and the radical modernist symphonies of Stravinsky, The Soldiers Story seems like a natural fit for Waters' literary sensibilities.

See the official trailer above, and pre-order the album here. (Consequence of Sound reports a release date of October 26th, but Amazon gives the date as November 9th.)

via Consequence of Sound

Related Content:

How Pink Floyds Comfortably Numb Was Born From an Argument Between Roger Waters & David Gilmour

Igor Stravinsky Remembers the Riotous Premiere of His Rite of Spring in 1913: They Were Very Shocked. They Were Naive and Stupid People.

The Night When Charlie Parker Played for Igor Stravinsky (1951)

Josh Jones is a writer and musician based in Durham, NC. Follow him at @jdmagness.

Roger Waters Adapts and Narrates Igor Stravinsky’s Theatrical Piece, <i>The Soldier’s Story</i> is a post from: Open Culture. Follow us on Facebook, Twitter, and Google Plus, or get our Daily Email. And don't miss our big collections of Free Online Courses, Free Online Movies, Free eBooksFree Audio Books, Free Foreign Language Lessons, and MOOCs.

ScreenAnarchy: Behold The Madness Of Velasco Broca's AUTONOMOUS GODS

Long time readers of this site will need no introduction to the cinematic oddity that is Spanish director Velasco Broca. We've been following the oddball experimentalist in these pages for over a decade now, initially drawn in by his blend of mystically inspired experimentalism - imagine Jodorowsky with, if you will, even more drugs - fused with classic 50's drive-in science fiction. That particular phace of his career arguably peaked with the Cannes selection of his 2006 short film Avant Petalos Grillados but that doesn't mean Velasco Broca has stopped. Oh, no. And we are beyond pleased to present the world premiere of his new collaboration with audivisual collective Canódromo Abandonado in the short film series Autonomous Gods. In an underwater cathedral, a grumpy priest...

[Read the whole post on]


Dreamy landscapes by New York City-based artist Mischelle Moy. See more images below.

Each week our members share their work with us and we highlight the best of these submissions as Editors’ Picks. If you have work to share, you can learn more about becoming a member.

Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy



Mischelle Moy’s Website

Mischelle Moy on Instagram


Matt Byle

Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle



Matt Byle’s Website

Matt Byle on Instagram

things magazine: Rip it up and start again

The Archivists of Extinction, ‘Architectural history in an era of capitalist ruin’. Or how architectural preservation is a luxury in a fast moving capitalist society (via MeFi). From the piece, the US has less than 2,600 buildings designated as National … Continue reading

Disquiet: Stasis Report: Basinski ✚ Skeen ✚ More

The latest update to my Stasis Report ambient-music playlist on Spotify and Google Play Music. The following five tracks were added on Sunday, October 21. All are from 2018, four of the five from this month. No room for a classic track this week — too much new music coming out as the end of 2018 approaches.

✚ “Mono No Aware 1.4” from William Basinski and Lawrence English off Selva Oscura. It was released by the Temporary Residence label on October 12, 2018:

✚ “A Parallel Array of Horses,” the title track off the new album by Geneva Skeen. It was released by the Room40 label on October 19, 2018:

✚ “Glacial Tongues” is off the new r beny album, Eistla, self-released on October 5, 2018:

✚ “Jordan Beckons,” off the new album Valet to Iowa by Carey Moore. It was self-released on October 11, 2018:

✚ “At Dawn” by Lea Bertucci off Metal Aether, released back on February 9, 2018, by the NNA Tapes label:

Some previous Stasis Report tracks were removed to make room for these, keeping the playlist length to roughly two hours. Those retired tracks — from Eashwarashwar Subramanian, Laura Karpman, Less Bells, Field Works (with Loscil), Suss, ioflow, and Aphex Twin — are now in the Stasis Archives playlist (currently only on Spotify). Comic for 2018.10.22

New Cyanide and Happiness Comic

Planet Haskell: Michael Snoyman: Kick the Tires - Rust Crash Course lesson 1

In this lesson, we just want to get set up with the basics: tooling, ability to compile, basic syntax, etc. Let’s start off with the tooling, you can keep reading while things download.

This post is part of a series based on teaching Rust at FP Complete. If you’re reading this post outside of the blog, you can find links to all posts in the series at the top of the introduction post. You can also subscribe to the RSS feed.


Your gateway drug to Rust will be the rustup tool, which will install and manage your Rust toolchains. I put that in the plural, because it can manage both multiple versions of the Rust compiler, as well as cross compilers for alternative targets. For now, we’ll be doing simple stuff.

Both of these pages will tell you to do the same thing:

  • On Unix-like systems, run curl -sSf | sh
  • Or run a Windows installer, probably the 64-bit installer

Read the instructions on the rust-lang page about setting up your PATH environment variable. For Unix-like systems, you’ll need ~/.cargo/bin in your PATH.

Along with the rustup executable, you’ll also get:

  • cargo, the build tool for Rust
  • rustc, the Rust compiler

Hello, world!

Alright, this part’s easy: cargo new hello && cd hello && cargo run.

We’re not learning all about Cargo right now, but to give you the basics:

  • Cargo.toml contains the metadata on your project, including dependencies. We won’t be using dependencies quite yet, so the defaults will be fine.
  • Cargo.lock is generated by cargo itself
  • src contains your source files, for now just src/
  • target contains generated files

We’ll get to the source code itself in a bit, first a few more tooling comments.

Building with rustc

For something this simple, you don’t need cargo to do the building. Instead, you can just use: rustc src/ && ./main. If you feel like experimenting with code this way, go for it. But typically, it’s a better idea to create a scratch project with cargo new and experiment in there. Entirely your decision.

Running tests

We won’t be adding any tests to our code yet, but you can run tests in your code with cargo test.

Extra tools

Two useful utilities are the rustfmt tool (for automatically formatting your code) and clippy (for getting code advice). Note that clippy is still a work in progress, and sometimes gives false positives. To get them set up, run:

$ rustup component add clippy-preview rustfmt-preview

And then you can run them with:

$ cargo fmt
$ cargo clippy


There is some IDE support for those who want it. I’ve heard great things about IntelliJ IDEA’s Rust add-on. Personally, I haven’t used it much yet, but I’m also not much of an IDE user in the first place. This crash course won’t assume any IDE, just basic text editor support.


Alright, we can finally look out our source code in src/

fn main() {
    println!("Hello, world!");

Simple enough. fn says we’re writing a function. The name is main. It takes no arguments, and has no return value. (Or, more accurately, it returns the unit type, which is kind of like void in C/C++, but really closer to the unit type in Haskell.) String literals look pretty normal, and function calls look almost identical to other C-style languages.

Alright, here’s the first “crash course” part of this: why is there an exclamation point after the println? I say “crash course” because when I first learned Rust, I didn’t see an explanation of this, and it bothered me for a while.

println is not a function. It’s a macro. This is because it takes a format string, which needs to be checked at compile time. To prove the point, try changing the string literal to include {}. You’ll get an error message along the lines of:

error: 1 positional argument in format string, but no arguments were given

This can be fixed by providing an argument to fill into the placeholder:

println!("Hello , world! {} {} {}", 5, true, "foobar");

Take a guess at what the output will be, and you’ll probably be right. But that leaves us with a question: how does the println! macro know how to display these different types?

Traits and Display

More crash course time! To get a better idea of how displaying works, let’s trigger a compile time error. To do this, we’re going to define a new data type called Person, create a value of that type, and try to print it:

struct Person {
    name: String,
    age: u32,

fn main() {
    let alice = Person {
        name: String::from("Alice"),
        age: 30,
    println!("Person: {}", alice);

We’ll get into more examples on defining your own structs and enums later, but you can cheat and read the Rust book if you’re curious.

If you try to compile that, you’ll get:

error[E0277]: `Person` doesn't implement `std::fmt::Display`
  --> src/
11 |     println!("Person: {}", alice);
   |                            ^^^^^ `Person` cannot be formatted with the default formatter
   = help: the trait `std::fmt::Display` is not implemented for `Person`
   = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
   = note: required by `std::fmt::Display::fmt`

That’s a bit verbose, but the important bit is the trait `std::fmt::Display` is not implemented for `Person`. In Rust, a trait is similar to an interface in Java, or even better like a typeclass in Haskell. (Noticing a pattern of things being similar to Haskell concepts? Yeah, I did too.)

We’ll get to all of the fun of defining our own traits, and learning about implementing them later. But we’re crashing forward right now. So let’s throw in an implementation of the trait right here:

impl Display for Person {

That didn’t work:

error[E0405]: cannot find trait `Display` in this scope
 --> src/
6 | impl Display for Person {
  |      ^^^^^^^ not found in this scope
help: possible candidates are found in other modules, you can import them into scope
1 | use core::fmt::Display;
1 | use std::fmt::Display;

error: aborting due to previous error

For more information about this error, try `rustc --explain E0405`.
error: Could not compile `foo`.

We haven’t imported Display into the local namespace. The compiler helpfully recommends two different traits that we may want, and tells us that we can use the use statement to import them into the local namespace. We saw in an earlier error message that we wanted std::fmt::Display, so adding use std::fmt::Display; to the top of src/ will fix this error message. But just to prove the point, no use statement is necessary! We can instead us:

impl std::fmt::Display for Person {

Awesome, our previous error message has been replaced with something else:

error[E0046]: not all trait items implemented, missing: `fmt`
 --> src/
6 | impl std::fmt::Display for Person {
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `fmt` in implementation
  = note: `fmt` from trait: `fn(&Self, &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error>`

We’re quickly approaching the limit of things we’re going to cover in a “kicking the tires” lesson. But hopefully this will help us plant some seeds for next time.

The error message is telling us that we need to include a fmt method in our implementation of the Display trait. It’s also telling us what the type signature of this is going to be. Let’s look at that signature, or at least what the error message says:

fn(&Self, &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error>

There’s a lot to unpack there. I’m going to apply terminology to each bit, but you shouldn’t expect to fully grok this yet.

  • Self is the type of the thing getting the implementation. In this case, that’s Person.
  • Adding the & at the beginning makes it a reference to the value, not the value itself. C++ developers are used to that concept already. Many other languages talk about pass by reference too. In Rust, this plays in quite a bit with ownership. Ownership is a massively important topic in Rust, and we’re not going to discuss it more now.
  • &mut is a mutable reference. By default, everything in Rust is immutable, and you have to explicitly say that things are mutable. We’ll later get into why mutability of references is important to ownership in Rust.
  • Anyway, the second argument is a mutable reference to a Formatter. What’s the <'_> thing after Formatter? That’s a lifetime parameter. That also has to do with ownership. We’ll get to lifetimes later as well.
  • The -> indicates that we’re providing the return type of the function.
  • Result is an enum, which is a sum type, or a tagged union. It’s generic on two type parameters: the value in case of success and the value in case of error.
  • In the case of success, our function returns a (), or unit value. This is another way of saying “I don’t return any useful value if things go well.” In the case of an error, we return std::fmt::Error.
  • Rust has no runtime exceptions. Instead, when something goes wrong, you return it explicitly. Almost all code uses the Result type to track things going wrong. This is more explicit than exception-based languages. But unlike languages like C, where it’s easy to forget to check the type of a return to see if it succeeded, or tedious to do error handling properly, Rust makes this much less painful. We’ll deal with it later.
    • NOTE Rust does have the concept of panics, which in practice behave similarly to runtime exceptions. However, there are two important differences. Firstly, by convention, code is not supposed to use the panic mechanism for signaling normal error conditions (like file not found), and instead reserve panics for completely unexpected failures (like logic errors). Secondly, panics are unrecoverable, meaning they take down the entire thread of execution.

Awesome, that type signature all on its own gave us enough material for about 5 more lessons! Don’t worry, you’ll be able to write some Rust code without understanding all of those details, as we’ll demonstrate in the rest of this lesson. But if you’re really adventurous, feel free to explore the Rust book for more information.


Let’s get back to our code, and actually implement our fmt method:

struct Person {
    name: String,
    age: u32,

impl std::fmt::Display for Person {
    fn fmt(&self, fmt: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
        write!(fmt, "{} ({} years old)",, self.age)

fn main() {
    let alice = Person {
        name: String::from("Alice"),
        age: 30,
    println!("Person: {}", alice);

We’re using the write! macro now, to write content into the Formatter provided to our method. This is beyond the scope of our discussion, but this allows for more efficient construction of values and production of I/O than producing a bunch of intermediate strings. Yay efficiency.

The &self parameter of the method is a special way of saying “this is a method that works on this object.” This is quite similar to how you’d write code in Python, though in Rust you have to deal with pass by value vs pass by reference.

The second parameter is named fmt, and &mut Formatter is its type.

The very observant among you may have noticed that, above, the error message mentioned &Self. In our implementation, however, we made a lower &self. The difference is that &Self refers to the type of the value, and the lower case &self is the value itself. In fact, the &self parameter syntax is basically sugar for self: &Self.

Does anyone notice something missing? You may think I made a typo. Where’s the semicolon at the end of the write! call? Well, first of all, copy that code in and run it to prove to yourself that it’s not a typo, and that code works. Now add the semicolon and try compiling again. You’ll get something like:

error[E0308]: mismatched types
 --> src/
7 |       fn fmt(&self, fmt: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
  |  _________________________________________________________________________________^
8 | |         write!(fmt, "{} ({} years old)",, self.age);
  | |                                                              - help: consider removing this semicolon
9 | |     }
  | |_____^ expected enum `std::result::Result`, found ()
  = note: expected type `std::result::Result<(), std::fmt::Error>`
             found type `()`

This is potentially a huge confusion in Rust. Let me point out something else that you may have noticed, especially if you come from a C/C++/Java background: we have a return value from our method, but we never used return!

The answer to that second concern is easy: the last value generated in a function in Rust is taken as its return value. This is similar to Ruby and—yet again—Haskell. return is only needed for early termination.

But we’re still left with our first question: why don’t we need a semicolon here, and why does adding the semicolon break our code? Semicolons in Rust are used for terminating statements. A statement is something like the use statement we saw before, or the let statement we briefly demonstrated here. The value of a statement is always unit, or (). That’s why, when we add the semicolon, the error message says found type `()`. Leaving off the semicolon, the expression itself is the return value, which is what we want.

You’ll see the phrase that Rust is an expression-oriented language, and this kind of thing is what it’s referring to. You can see mention of this in the FAQ. Personally, I find that the usage of semicolon like this can be subtle, and I still instinctively trip up on it occasionally when my C/C++/Java habits kick in. But fortunately the compiler helps identify these pretty quickly.

Numeric types

Last concept before we just start dropping in some code. We’re going to start off by playing with numeric values. There’s a really good reason for this in Rust: they are copy values, values which the compiler automatically clones for us. Keep in mind that a big part of Rust is ownership, and tracking who owns what is non-trivial. However, with the primitive numeric types, making copies of the values is so cheap, the compiler will do it for you automatically. This is some of that automatic magic I mentioned in my intro post.

To demonstrate, let’s check out some code that works fine with numeric types:

fn main() {
    let val: i32 = 42;

fn printer(val: i32) {
    println!("The value is: {}", val);

We’ve used a let statement to create a new variable, val. We’ve explicitly stated that its type is i32, or a 32-bit signed integer. Typically, these kinds of type annotations are not needed in Rust, as it will usually be able to infer types. Try leaving off the type annotation here. Anyway, we then call the function printer on val twice. All good.

Now, let’s use a String instead. A String is a heap-allocated value which can be created from a string literal with String::from. (Much more on the many string types later). It’s expensive to copy a String, so the compiler won’t do it for us automatically. Therefore, this code won’t compile:

fn main() {
    let val: String = String::from("Hello, World!");

fn printer(val: String) {
    println!("The value is: {}", val);

You’ll get this intimidating error message:

error[E0382]: use of moved value: `val`
 --> src/
3 |     printer(val);
  |             --- value moved here
4 |     printer(val);
  |             ^^^ value used here after move
  = note: move occurs because `val` has type `std::string::String`, which does not implement the `Copy` trait

error: aborting due to previous error

Exercise 1 there are two easy ways to fix this error message: one using the clone() method of String, and one that changes printer to take a reference to a String. Implement both solutions. (Solutions will be posted separately in a few days.)

Printing numbers

We’re going to tie off this lesson with a demonstration of three different ways of looping to print the numbers 1 to 10. I’ll let readers guess which is the most idiomatic approach.


loop creates an infinite loop.

fn main() {
    let i = 1;

    loop {
        println!("i == {}", i);
        if i >= 10 {
        } else {
            i += 1;

Exercise 2 This code doesn’t quite work. Try to figure out why without asking the compiler. If you can’t find the problem, try to compile it. Then fix the code.

If you’re wondering: you could equivalently use return or return () to exit the loop, since the end of the loop is also the end of the function.


This is similar to C-style while loops: it takes a condition to check.

fn main() {
    let i = 1;

    while i <= 10 {
        println!("i == {}", i);
        i += 1;

This has the same bug as the previous example.

for loops

For loops let you perform some action for each value in a collection. The collections are generated lazily using iterators, a great concept built right into the language in Rust. Iterators are somewhat similar to generators in Python.

fn main() {
    for i in 1..11 {
        println!("i == {}", i);

Exercise 3: Extra semicolons

Can you leave out any semicolons in the examples above? Instead of just slamming code into the compiler, try to think through when you can and cannot drop the semicolons.

Exercise 4: FizzBuzz

Implement fizzbuzz in Rust. The rules are:

  • Print the numbers 1 to 100
  • If the number is a multiple of 3, output fizz instead of the number
  • If the number is a multiple of 5, output buzz instead of the number
  • If the number is a multiple of 3 and 5, output fizzbuzz instead of the number

Next time

Next time, the plan is to get into more details on ownership, though plans are quite malleable in this series. Stay tuned!

Rust at FP Complete | Introduction

Quiet Earth: TAD 2018: THE INHABITANT Review

What evil lurks in the basement of a powerful and corrupt senator's creepily empty home? In The Inhabitant, three sisters intent on robbing the place are about to find out, and it will force them to fight their own inner demons and dark secrets as they try to figure out how to escape from the demonic presence's grasp and save the girl it has possessed.

Camila (Vanesa Restrepo), Maria (Maria Evoli), and Anita (Carla Adell) have received some insider information about some bribe money stashed away in the senator's safe in his mansion and proceed to break into the home and steal it to pay back a debt owed by Camila. When they don't find the money where it's supposed to be, they start searching the house, waking the sleeping senator (Flavio Medina) and his wife Angelica (Gabriela [Continued ...]

things magazine: ‘… classically, the protruding aerofoil should be set on fire’

iiii magazine is a new online publication about arts and culture. Recommended / Another World, a brand magazine from Another Country, a furniture company that has caught the new authenticity zeitgeist and translated it into an all-encompassing bokeh-friendly lifestyle presentation … Continue reading Comic for 2018.10.21

New Cyanide and Happiness Comic

A Neighborhood of Infinity: Running from the past


Functional programming encourages us to program without mutable state. Instead we compose functions that can be viewed as state transformers. It's a change of perspective that can have a big impact on how we reason about our code. But it's also a change of perspective that can be useful in mathematics and I'd like to give an example: a really beautiful technique that alows you to sample from the infinite limit of a probability distribution without needing an infinite number of operations. (Unless you're infinitely unlucky!)

Markov Chains

A Markov chain is a sequence of random states where each state is drawn from a random distribution that possibly depends on the previous state, but not on any earlier state. So it is a sequence such that for all . A basic example might be a model of the weather in which each day is either sunny or rainy but where it's more likely to be rainy (or sunny) if the previous day was rainy (or sunny). (And to be technically correct: having information about two days or earlier doesn't help us if we know yesterday's weather.)

Like imperative code, this description is stateful. The state at step depends on the state at step . Probability is often easier to reason about when we work with independent identically drawn random variables and our aren't of this type. But we can eliminate the state from our description using the same method used by functional programmers.

Let's choose a Markov chain to play with. I'll pick one with 3 states called , and and with transition probabilities given by where

Here's a diagram illustrating our states:


First some imports:

> {-# LANGUAGE LambdaCase #-}
> {-# LANGUAGE TypeApplications #-}

> import Data.Sequence(replicateA)
> import System.Random
> import Control.Monad.State
> import Control.Monad
> import Data.List
> import Data.Array

And now the type of our random variable:

> data ABC = A | B | C deriving (Eq, Show, Ord, Enum, Bounded)

We are now in a position to simulate our Markov chain. First we need some random numbers drawn uniformly from [0, 1]:

> uniform :: (RandomGen gen, MonadState gen m) => m Double
> uniform = state random

And now the code to take a single step in the Markov chain:

> step :: (RandomGen gen, MonadState gen m) => ABC -> m ABC
> step A = do
> a <- uniform
> if a < 0.5
> then return A
> else return B
> step B = do
> a <- uniform
> if a < 1/3.0
> then return A
> else if a < 2/3.0
> then return B
> else return C
> step C = do
> a <- uniform
> if a < 0.5
> then return B
> else return C

Notice how the step function generates a new state at random in a way that depends on the previous state. The m ABC in the type signature makes it clear that we are generating random states at each step.

We can simulate the effect of taking steps with a function like this:

> steps :: (RandomGen gen, MonadState gen m) => Int -> ABC -> m ABC
> steps 0 i = return i
> steps n i = do
> i <- steps (n-1) i
> step i

We can run for 100 steps, starting with , with a line like so:

*Main> evalState (steps 3 A) gen

The starting state of our random number generator is given by gen.

Consider the distribution of states after taking steps. For Markov chains of this type, we know that as goes to infinity the distribution of the th state approaches a limiting "stationary" distribution. There are frequently times when we want to sample from this final distribution. For a Markov chain as simple as this example, you can solve exactly to find the limiting distribution. But for real world problems this can be intractable. Instead, a popular solution is to pick a large and hope it's large enough. As gets larger the distribution gets closer to the limiting distribution. And that's the problem I want to solve here - sampling from the limit. It turns out that by thinking about random functions instead of random states we can actually sample from the limiting distribution exactly.

Some random functions

Here is a new version of our random step function:

> step' :: (RandomGen gen, MonadState gen m) => m (ABC -> ABC)
> step' = do
> a <- uniform
> return $ \case
> A -> if a < 0.5 then A else B
> B -> if a < 1/3.0
> then A
> else if a < 2/3.0 then B else C
> C -> if a < 0.5 then B else C

In many ways it's similar to the previous one. But there's one very big difference: the type signature m (ABC -> ABC) tells us that it's returning a random function, not a random state. We can simulate the result of taking 10 steps, say, by drawing 10 random functions, composing them, and applying the result to our initial state:

> steps' :: (RandomGen gen, MonadState gen m) => Int -> m (ABC -> ABC)
> steps' n = do
> fs <- replicateA n step'
> return $ foldr (flip (.)) id fs

Notice the use of flip. We want to compose functions , each time composing on the left by the new . This means that for a fixed seed gen, each time you increase by 1 you get the next step in a single simulation: (BTW I used replicateA instead of replicateM to indicate that these are independent random draws. It may be well known that you can use Applicative instead of Monad to indicate independence but I haven't seen it written down.)

*Main> [f A | n <- [0..10], let f = evalState (steps' n) gen]

When I first implemented this I accidentally forgot the flip. So maybe you're wondering what effect removing the flip has? The effect is about as close to a miracle as I've seen in mathematics. It allows us to sample from the limiting distribution in a finite number of steps!

Here's the code:

> steps_from_past :: (RandomGen gen, MonadState gen m) => Int -> m (ABC -> ABC)
> steps_from_past n = do
> fs <- replicateA n step'
> return $ foldr (.) id fs

We end up building . This is still a composition of independent identically distributed functions and so it's still drawing from exactly the same distribution as steps'. Nonetheless, there is a difference: for a particular choice of seed, steps_from_past n no longer gives us a sequence of states from a Markov chain. Running with argument draws a random composition of functions. But if you increase by 1 you don't add a new step at the end. Instead you effectively restart the Markov chain with a new first step generated by a new random seed.

Try it and see:

*Main> [f A | n <- [0..10], let f = evalState (steps_from_past n) gen]
[A, A, A, A, A, A, A, A, A, A]

Maybe that's surprising. It seems to get stuck in one state. In fact, we can try applying the resulting function to all three states.

*Main> [fmap f [A, B, C] | n <- [0..10], let f = evalState (steps_from_past n) gen]

In other words, for large enough we get the constant function.

Think of it this way: If f isn't injective then it's possible that two states get collapsed to the same state. If you keep picking random f's it's inevitable that you will eventually collapse down to the point where all arguments get mapped to the same state. Once this happens, we'll get the same result no matter how large we take . If we can detect this then we've found the limit of as goes to infinity. But because we know composing forwards and composing backwards lead to draws from the same distribution, the limiting backward composition must actually be a draw from the same distribution as the limiting forward composition. That flip can't change what probability distribution we're drawing from - just the dependence on the seed. So the value the constant function takes is actually a draw from the limiting stationary distribution.

We can code this up:

> all_equal :: (Eq a) => [a] -> Bool
> all_equal [] = True
> all_equal [_] = True
> all_equal (a : as) = all (== a) as

> test_constant :: (Bounded a, Enum a, Eq a) => (a -> a) -> Bool
> test_constant f =
> all_equal $ map f $ enumFromTo minBound maxBound

This technique is called coupling from the past. It's "coupling" because we've arranged that different starting points coalesce. And it's "from the past" because we're essentially asking answering the question of what the outcome of a simulation would be if we started infinitely far in the past.

> couple_from_past :: (RandomGen gen, MonadState gen m, Enum a, Bounded a, Eq a) =>
> m (a -> a) -> (a -> a) -> m (a -> a)
> couple_from_past step f = do
> if test_constant f
> then return f
> else do
> f' <- step
> couple_from_past step (f . f')

We can now sample from the limiting distribution a million times, say:

*Main> let samples = map ($ A) $ evalState (replicateA 1000000 (couple_from_past step' id)) gen

We can now count how often A appears:

*Main> fromIntegral (length $ filter (== A) samples)/1000000

That's a pretty good approximation to , the exact answer that can be found by finding the eigenvector of the transition matrix corresponding to an eigenvalue of 1.

> gen = mkStdGen 669


The technique of coupling from the past first appeared in a paper by Propp and Wilson. The paper Iterated Random Functions by Persi Diaconis gave me a lot of insight into it. Note that the code above is absolutely not how you'd implement this for real. I wrote the code that way so that I could switch algorithm with the simple removal of a flip. In fact, with some clever tricks you can make this method work with state spaces so large that you couldn't possibly hope to enumerate all starting states to detect if convergence has occurred. Or even with uncountably large state spaces. But I'll let you read the Propp-Wilson paper to find out how.

MattCha's Blog: A Guide/Advice on Purchasing the Best Teapot Online

Recently after the breakage of two of my only yixing teapots I set out to find some suitable replacements.  I quickly learned that buying a teapot in person is very different than purchasing one online.

Firstly, you cannot accurately see the quality of the teapot online.  Any imperfections that a trained eye can easily spot can be hid or cannot be determined with pictures online.  Also the size of the lid hole, tightness of the lid, any rough clay inside the pot that might cause potential problems, testing of the pour, general thickness of the teapots walls, the weight of the pot, etc, cannot be reliably determined with photos online. 

Obviously, the tactile feeling of the pot also cannot be determined online either.  More importantly, the overall feel of the teapot, its energy, its Qi, the way it feels in your hands and the way it makes you feel cannot be accurately assessed.  For someone who has an eye for, experience with, and a background in such things, buying a teapot online put me out of my comfort zone.

I think it’s always a good idea to first make sense of your tea drinking.  I did this and I think it will help give you a better idea of what exactly your teapot needs are before you go out a buy one.  It should be noted that really you don’t really need a teapot at all.  However, if you hope to practice gong fu cha “skillful tea brewing” and feel like using the brewing vessel as a way to refine your tea steeping skill or feel that the esthetic of a teapot elevates your tea experience, then you might want more than a cup and some loose leaves with a fork as a filter.  But really, it isn’t at all necessary to own a teapot and still enjoy tea.  In many ways adjusting water parameters, leaf to vessel ratios, water temperature, and steeping times will probably give you much more out of your tea leaves for less money.  But to me, I felt that the teapot was a needed esthetic and a convenient necessity.

For me I determined that I need a teapot that:

1-      Would be for drinking tea with my family in the morning

2-      Would be mainly used for and enhance the flavor of aged/ semi-aged sheng puerh which we almost exclusively consume in the morning

3-      Should be of relatively large volume 200-300mL due to the short time period and the higher output our family demands while gong fu steeping in the morning

4-      Should be of durable and study design and feel, preferably with thicker walls (will withstand potential toddler throws)

5-      Should be a functional design and easy to use because it will be used daily

7-      Should be of yixing clay

8-      Won’t break the bank

After I determined exactly what I was looking for then I went shopping at some reliable Western puerh vendors.  Browsing online, is the first step if you think you know which pots will improve the tea you hope to steep in the new pot.  I think if you contact the place where you are buying a majority of your tea this is a good logical place to start.  This makes sense because the vendor should ideally have the best teapots to bring out the best in the teas which they sell.  It seems reasonable that this would benefit both vendors and buyers alike.

Here are a few that I would recommend and trust and places that I actually went looking for a teapot.  They are all old bloggers that I have had personal connection to for over 10 years.  They are also dealers that focus on aged and semi aged puerh (on the tea that I will use the pot for).  They are also places where I commonly buy tea as reflected by frequent reviews of their teas on my blog:

Stephane has been writing about yixing teapots transmitting knowledge from his teamaster, Teaparker for over a decade now on his blog.  He often helps his patrons chose the best teapotfor the tea they are drinking.  He has anextensive catalogue of yixing pots, many which are quite beautiful and are priced accordingly.

The title of his blog Travelling Teapot pretty much tips you off that this might be a great spot to look for teapots.  His teapot inventory has dwindled down over the last few years but his knowledge of love of yixing teapots makes Wilson a good person to go to.  I feel his selection of drinker quality semi aged puerh matches closely the tea I would be drinking in my future teapot.

The new the Essence of Tea site has by far the best pictures.  It allows you to really zoom in and look at the details of the pot.  He bought up huge amounts of factory 1 yixing pots and quality private commissioned yixing while living in Malaysia.  Its super fun even to just browse at those beautiful shapes and forms.

I actually ended up checking the sites of Yunnan Sourcingand white2tea as well as pretty much all the western vendors I could think of but many of these sites didn’t have anything or very little that met the above criteria.  However, if you reach out by email or message, the vendor that you most frequently purchase from should be able to direct you to a teapot that they feel will work best for the teas they sell.  If they don’t have one that you are looking for they probably will be able to track one down.

Another great place to look is the used market.  Nothing I found met my above criteria but I would have much preferred to buy used and save the money than buy an unused teapot.  That’s just me.

I hope my personal experience in searching for the right yixing teapot online will help any readers to find the right pot for them.  If there are any readers who wish to share any other tips or their experience feel free to do so in the comments below.

So, did I end up buying?  Yes.  I ended up getting two old and beautiful yixing teapots that I feel are the right fit for my teas and tea drinking.  So far, I’m happy with them and feel no need to buy anymore.

Could have I just used an empty cup and a fork to hold in the leaves and gong fu-ed the tea in this make shift, minimalist, gaiwan type of brewing vessel? Yes, it probably would have done the trick just fine.

Could I blindly tell the difference of tea made in one of my yixing pots verses in a mug with a fork strainer?  Who knows, but I certainly hope I’m at that level.


Perlsphere: Maintaining Perl 5 (Tony Cook): September 2018 Grant Report

This is a monthly report by Tony Cook on his grant under Perl 5 Core Maintenance Fund. We thank the TPF sponsors to make this grant possible.

Approximately 34 tickets were reviewed, and 4 patches were

[Hours] [Activity] 2.47 fatalize sysread/recv/syswrite/send on utf8 handles: fix warnings, croak tests, documentation updates, post patch to #125760 0.20 #126084 try to apply, issue already fixed, close ticket 1.58 #126706 research, work on Makefile.SH 0.72 #130674 recheck, retest and apply to blead 0.18 #131649 (sec) try to chase up a patch 1.85 #132655 retest patch and apply to blead #132655 clean up duplicates, update perldelta 1.25 #132764 write a simple patch to help demonstrate the problem 0.43 #133192 (sec) review, testing to check if a security issue 0.45 #133250 retest and apply to maint-5.26 0.75 #133369 debugging 0.38 #133423 (sec) review patches (RT copies seem to be corrupted) 0.55 #133439 comment with patch 1.48 #133460 (sec) try to work out a mess of layered code 0.52 #133462 research and comment #133462 research and comment 0.70 #133463 research, comment 1.25 #133494 work up a patch and comment with patch 7.84 #133496 try to implement #133496 try to implement, debugging #133496 re-work to allow switches from PERL5OPTS, #! line #133496 testing #133496 diagnose test failures #133496 comment #133496 research, comment 0.33 #133499 research, comment 4.28 #133510 testing, diagnose, push a fix to blead #133510 debugging, work up a fix, testing, comment with patch 0.65 #133518 testing, debugging 2.05 check for patches for security issues, generate one for 133250 0.40 fail to reproduce failures – possibly dirty build, apply to blead 3.77 fatalize sysread/recv/syswrite/send on utf8 handles fatalize sysread/recv/syswrite/send on utf8 handles 1.13 more fatalize: update io/ and uni/ tests, fix some bugs 1.48 recheck fatalize work, fix some PERLUNICODE= failures 1.17 Research, reply email from sawyer on unicode filenames 1.80 respond Sawyer’s follow-up, open 133496 1.13 review other security issue for patches, backporting, testing 1.05 review other security issues 1.30 review security issues, khw-core discussion with khw 0.23 review tickets, close one 0.20 security ticket admin 0.87 win32 ldexpl issue, reproduce, try regenconfigh target, research 1.42 win32 ldexpl issue: build/test with both patches, tests fail, try debugging

====== 45.86 hours total

Daniel Lemire's blog: Science and Technology links (October 20th, 2018)

  1. Should we stop eating meat to combat climate change? Maybe not. White and Hall worked out what happened if the US stopped using farm animals:

    The modeled system without animals (…) only reduced total US greenhouse gas emissions by 2.6 percentage units. Compared with systems with animals, diets formulated for the US population in the plants-only systems (…) resulted in a greater number of deficiencies in essential nutrients. (source: PNAS)

    Of concern when considering farm animals are methane emissions. Methane is a potent greenhouse gas, with the caveat that it is short-lived in the atmosphere unlike CO2. Should we be worried about methane despite its short life? According to the American EPA (Environmental Protection Agency), total methane emissions have been falling consistently for the last 20 years. That should not surprise us: greenhouse gas emissions in most developed countries (including the US) have peaked some time ago. Not emissions per capita, but total emissions.

    So beef, at least in the US, is not a major contributor to climate change. But we could do even better. Several studies like Stanley et al. report that well managed grazing can lead to carbon sequestration in the grassland. Farming in general could be more environmentally effective.

    Of course, if people consume less they will have a smaller environmental footprint, but going vegan does not imply that one consumes less. If you save in meat but reinvest in exotic fruits and trips to foreign locations, you could keep your environmental footprint the same.

    There are certainly countries were animal grazing is an environmental disaster. Many industries throughout the world are a disaster and we should definitively put pressure on the guilty parties. But, in case you were wondering, if you live in a country like Canada, McDonald’s is not only serving only locally-produced beef, but they also require that it be produced in a sustainable manner.

    In any case, there are good reasons to stop eating meat, but in the developed countries like the US and Canada, climate change seems like a bogus one.

    There also good reasons to keep farm animals. For example, it is difficult to raise an infant without cow milk and in most countries, it is illegal to sell human milk. Several parents have effectively killed their children by trying to raise them vegan (1, 2). It is relatively easy to match protein and calories with a vegan diet, but meat and milk are nutrient-dense food: it requires some expertise to do away with them.

    Further reading: No, giving up burgers won’t actually save the planet (New York Post).

    (Special thanks to professor Leroy for providing many useful pointers.)

  2. News agencies reported this week that climate change could bring back the plague and the black death that wiped out Europe. The widely reported prediction was made by Professor Peter Frankopan while at the Cheltenham Literary Festival. Frankopan is a history professor at Oxford.
  3. There is a reverse correlation between funding and scientific output, meaning that beyond a certain point, you start getting less science for your dollars.

    (…) prestigious institutions had on average 65% higher grant application success rates and 50% larger award sizes, whereas less-prestigious institutions produced 65% more publications and had a 35% higher citation impact per dollar of funding. These findings suggest that implicit biases and social prestige mechanisms (…) have a powerful impact on where (…) grant dollars go and the net return on taxpayers investments.

    It is well documented that there is diminishing returns in research funding. Concentrating your research dollars into too few individuals is wasteful. My own explanation for this phenomenon is that, Elon Musk aside, we have all have cognitive bottlenecks. One researcher might carry fruitfully two, three major projects at the same time, but once they supervise too many students and assistants, they become a “negative manager”, meaning that make other researchers no more productive and often less productive. They spend less and less time optimizing the tools and instruments.

    If you talk with graduate students who work in lavishly funded laboratories, you will often hear (when the door is closed) about how poorly managed the projects are. People are forced into stupid directions, they do boring and useless work to satisfy project objectives that no longer make sense. Currently, “success” is often defined by how quickly you can acquire and spend money.

    But how do you optimally distribute research dollars? It is tricky because, almost by definition, almost all research is worthless. You are mining for rare events. So it is akin to venture capital investing. You want to invest into many start ups that have a high potential.

  4. A Nature columns tries to define what makes a good PhD student:

    the key attributes needed to produce a worthy PhD thesis are a readiness to accept failure; resilience; persistence; the ability to troubleshoot; dedication; independence; and a willingness to commit to very hard work — together with curiosity and a passion for research. The two most common causes of hardship in PhD students are an inability to accept failure and choosing this career path for the prestige, rather than out of any real interest in research.

bit-player: Another technological tragedy

One Thursday afternoon last month, dozens of fires and explosions rocked three towns along the Merrimack River in Massachusetts. By the end of the day 131 buildings were damaged or destroyed, one person was killed, and more than 20 were injured. Suspicion focused immediately on the natural gas system. It looked like a pressure surge in the pipelines had driven gas into homes where stoves, heaters, and other appliances were not equipped to handle the excess pressure. Earlier this week the National Transportation Safety Board released a brief preliminary report supporting that hypothesis.

Burned dwelling in Lawrence, MA.A house in Lawrence, Mass., burned on September 13, 2018, as a result of a natural gas pressure surge. (Image from the NTSB report.)

I had believed such a catastrophe was all but impossible. The natural gas industry has many troubles, including chronic leaks that release millions of tons of methane into the atmosphere, but I had thought that pressure regulation was a solved problem. Even if someone turned the wrong valve, failsafe mechanisms would protect the public. Evidently not. (I am not an expert on natural gas. While working on my book Infrastructure, I did some research on the industry and the technology, toured a pipeline terminal, and spent a day with a utility crew installing new gas mains in my own neighborhood. The pages of the book that discuss natural gas are online here.)

The hazards of gas service were already well known in the 19th century, when many cities built their first gas distribution systems. Gas in those days was not “natural” gas; it was a product manufactured by roasting coal, or sometimes the tarry residue of petroleum refining, in an atmosphere depleted of oxygen. The result was a mixture of gases, including methane and other hydrocarbons but also a significant amount of carbon monoxide. Because of the CO content, leaks could be deadly even if the gas didn’t catch fire.

Every city needed its own gasworks, because there were no long-distance pipelines. The output of the plant was accumulated in a gasholder, a gigantic tank that confined the gas at low pressure—less than one pound per square inch above atmospheric pressure (a unit of measure known as pounds per square inch gauge, or psig). The gas was gently wafted through pipes laid under the street to reach homes at a pressure of 1/4 or 1/2 psig. Overpressure accidents were unlikely because the entire system worked at the same modest pressure. As a matter of fact, the greater risk was underpressure. If the flow of gas was interrupted even briefly, thousands of pilot lights would go out; then, when the flow resumed, unburned toxic gas would seep into homes. Utility companies worked hard to ensure that would never happen.

Gasholders looming over a neighborhood in Genoa, Italy, once held manufactured gas for use at a steelmill. The photograph was made in 2001; Google Maps shows the tanks have since been demolished.

Gas technology has evolved a great deal since the gaslight era. Long-distance pipelines carry natural gas across continents at pressures of 1,000 psig or more. At the destination, the gas is stored in underground cavities or as a cryogenic liquid. It enters the distribution network at pressures in the neighborhood of 100 psig. The higher pressures allow smaller diameter pipes to serve larger territories. But the pressure must still be reduced to less than 1 psig before the gas is delivered to the customer. Having multiple pressure levels complicates the distribution system and requires new safeguards against the risk of high-pressure gas going where it doesn’t belong. Apparently those safeguards didn’t work last month in the Merrimack valley.

Liquified natural gas storage tanks in Everett, Mass.

Cryogenic storage tanks in Everett, Mass., near Boston, hold liquified natural gas that supplies utilities in surrounding communities.

The gas system in that part of Massachusetts is operated by Columbia Gas, a subsidiary of a company called NiSource, with headquarters in Indiana. At the time of the conflagration, contractors for Columbia were upgrading distribution lines in the city of Lawrence and in two neighboring towns, Andover and North Andover. The two-tier system had older low-pressure mains—including some cast-iron pipes dating back to the early 1900s—fed by a network of newer lines operating at 75 psig. Fourteen regulator stations handled the transfer of gas between systems, maintaining a pressure of 1/2 psig on the low side.

The NTSB preliminary report gives this account of what happened around 4 p.m. on September 13:

The contracted crew was working on a tie-in project of a new plastic distribution main and the abandonment of a cast-iron distribution main. The distribution main that was abandoned still had the regulator sensing lines that were used to detect pressure in the distribution system and provide input to the regulators to control the system pressure. Once the contractor crews disconnected the distribution main that was going to be abandoned, the section containing the sensing lines began losing pressure.

As the pressure in the abandoned distribution main dropped about 0.25 inches of water column (about 0.01 psig), the regulators responded by opening further, increasing pressure in the distribution system. Since the regulators no longer sensed system pressure they fully opened allowing the full flow of high-pressure gas to be released into the distribution system supplying the neighborhood, exceeding the maximum allowable pressure.

When I read those words, I groaned. The cause of the accident was not a leak or an equipment failure or a design flaw or a worker turning the wrong valve. The pressure didn’t just creep up beyond safe limits while no one was paying attention; the pressure was driven up by the automatic control system meant to keep it in bounds. The pressure regulators were “trying” to do the right thing. Sensor readings told them the pressure was falling, and so the controllers took corrective action to keep the gas flowing to customers. But the feedback loop the regulators relied on was not in fact a loop. They were measuring pressure in one pipe and pumping gas into another.

Schematic diagram of the gas distribution system, with a misconfigured control system measuring pressure in an abandoned pipeline.

The conjectured cause of the fires and explosions in Lawrence and nearby towns is a misconfigured pressure-control system, according to the NTSB preliminary report. Service was switched to a new low-pressure gas main, but the pressure regulator continued to monitor sensors attached to the old pipeline, now abandoned and empty.

The NTSB’s preliminary report offers no conclusions or recommendations, but it does note that the contractor in Lawrence was following a “work package” prepared by Columbia Gas, which did not mention moving or replacing the pressure sensors. Thus if you’re looking for someone to blame, there’s a hint about where to point your finger. The clue is less useful, however, if you’re hoping to understand the disaster and prevent a recurrence. “Make sure all the parts are connected” is doubtless a good idea, but better still is building a failsafe system that will not burn the city down when somebody goofs.

Suppose you’re taking a shower, and the water feels too warm. You nudge the mixing valve toward cold, but the water gets hotter still. When you twist the valve a little further in the same direction, the temperature rises again, and the room fills with steam. In this situation, you would surely not continue turning the knob until you were scalded. At some point you would get out of the shower, shut off the water, and investigate. Maybe the controls are mislabeled. Maybe the plumber transposed the pipes.

Since you do so well controlling the shower, let’s put you in charge of regulating the municipal gas service. You sit in a small, windowless room, with your eyes on a pressure gauge and your hand on a valve. The gauge has a pointer indicating the measured pressure in the system, and a red dot (called a bug) showing the desired pressure, or set point. If the pointer falls below the bug, you open the valve a little to let in more gas; if the pointer drifts up too high, you close the valve to reduce the flow. (Of course there’s more to it than just open and close. For a given deviation from the set point, how far should you twist the valve handle? Control theory answers this question.)

It’s worth noting that you could do this job without any knowledge of what’s going on outside the windowless room. You needn’t give a thought to the nature of the “plant,” the system under control. What you’re controlling is the position of the needle on the gauge; the whole gas distribution network is just an elaborate mechanism for linking the valve you turn with the gauge you watch. Many automatic control system operate in exactly this mindless mode. And they work fine—until they don’t.

As a sentient being, you do in fact have a mental model of what’s happening outside. Just as the control law tells you how to respond to changes in the state of the plant, your model of the world tells you how the plant should respond to your control actions. For example, when you open the valve to increase the inflow of gas, you expect the pressure to increase. (Or, in some circumstances, to decrease more slowly. In any event, the sign of the second derivative should be positive.) If that doesn’t happen, the control law would call for making an even stronger correction, opening the valve further and forcing still more gas into the pipeline. But you, in your wisdom, might pause to consider the possible causes of this anomaly. Perhaps pressure is falling because a backhoe just ruptured a gas main. Or, as in Lawrence last month, maybe the pressure isn’t actually falling at all; you’re looking at sensors plugged into the wrong pipes. Opening the valve further could make matters worse.

Could we build an automatic control system with this kind of situational awareness? Control theory offers many options beyond the simple feedback loop. We might add a supervisory loop that essentially controls the controller and sets the set point. And there is an extensive literature on predictive control, where the controller has a built-in mathematical model of the plant, and uses it to find the best trajectory from the current state to the desired state. But neither of these techniques is commonly used for the kind of last-ditch safety measures that might have saved those homes in the Merrimack Valley. More often, when events get too weird, the controller is designed to give up, bail out, and leave it to the humans. That’s what happened in Lawrence.

Minutes before the fires and explosions occurred, the Columbia Gas monitoring center in Columbus, Ohio [probably a windowless room], received two high-pressure alarms for the South Lawrence gas pressure system: one at 4:04 p.m. and the other at 4:05 p.m. The monitoring center had no control capability to close or open valves; its only capability was to monitor pressures on the distribution system and advise field technicians accordingly. Following company protocol, at 4:06 p.m., the Columbia Gas controller reported the high-pressure event to the Meters and Regulations group in Lawrence. A local resident made the first 9-1-1 call to Lawrence emergency services at 4:11 p.m.

Columbia Gas shut down the regulator at issue by about 4:30 p.m.

I admit to a morbid fascination with stories of technological disaster. I read NTSB accident reports the way some people consume murder mysteries. The narratives belong to the genre of tragedy. In using that word I don’t mean just that the loss of life and property is very sad. These are stories of people with the best intentions and with great skill and courage, who are nonetheless overcome by forces they cannot master. The special pathos of technological tragedies is that the engines of our destruction are machines that we ourselves design and build.

Looking on the sunnier side, I suspect that technological tragedies are more likely than Oedipus Rex or Hamlet to suggest a practical lesson that might guide our future plans. Let me add two more examples that seem to have plot elements in common with the Lawrence gas disaster.

First, the meltdown at the Three Mile Island nuclear power plant in 1979. In that event, a maintenance mishap was detected by the automatic control system, which promptly shut down the reactor, just as it was supposed to do, and started emergency pumps to keep the uranium fuel rods covered with cooling water. But in the following minutes and hours, confusion reigned in the control room. Because of misleading sensor readings, the crowd of operators and engineers believed the water level in the reactor was too high, and they struggled mightily to lower it. Later they realized the reactor had been running dry all along.

Second, the crash of Air France 447, an overnight flight from Rio de Janeiro to Paris, in 2009. In this case the trouble began when ice at high altitude clogged pitot tubes, the sensors that measure airspeed. With inconsistent and implausible speed inputs, the autopilot and flight-management systems disengaged and sounded an alarm, basically telling the pilots “You’re on your own here.” Unfortunately, the pilots also found the instrument data confusing, and formed the erroneous opinion that they needed to pull the nose up and climb steeply. The aircraft entered an aerodynamic stall and fell tail-first into the ocean with the loss of all on board.

In these events no mechanical or physical fault made an accident inevitable. In Lawrence the pipes and valves functioned normally, as far as I can tell from press reports and the NTSB report. Even the sensors were working; they were just in the wrong place. At Three Mile Island there were multiple violations of safety codes and operating protocols; nevertheless, if either the automatic or the human controllers had correctly diagnosed the problem, the reactor would have survived. And the Air France aircraft over the Atlantic was airworthy to the end. It could have flown on to Paris if only there had been the means to level the wings and point it in the right direction.

All of these events feel like unnecessary disasters—if we were just a little smarter, we could have avoided them—but the fires in Lawrence are particularly tormenting in this respect. With an aircraft 35,000 feet over the ocean, you can’t simply press Pause when things don’t go right. Likewise a nuclear reactor has no safe-harbor state; even after you shut down the fission chain reaction, the core of the reactor generates enough heat to destroy itself. But Columbia Gas faced no such constraints in Lawrence. Even if the pressure-regulating system is not quite as simple as I have imagined it, there is always an escape route available when parameters refuse to respond to control inputs. You can just shut it all down. Safeguards built into the automatic control system could do that a lot more quickly than phone calls from Ohio. The service interruption would be costly for the company and inconvenient for the customers, but no one would lose their home or their life.

Control theory and control engineering are now embarking on their greatest adventure ever: the design of self-driving cars and trucks. Next year we may see the first models without a steering wheel or a brake pedal—there goes the option of asking the driver (passenger?) to take over. I am rooting for this bold undertaking to succeed. I am also reminded of a term that turns up frequently in discussions of Athenian tragedy: hubris.

BOOOOOOOM! – CREATE * INSPIRE * COMMUNITY * ART * DESIGN * MUSIC * FILM * PHOTO * PROJECTS: Best of Kickstarter: “Haunted Bodies” by Artist Christina Mrozik

Christina Mrozik

Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik



Christina Mrozik’s Kickstarter

Christina Mrozik’s Website

Christina Mrozik on Instagram

Penny Arcade: News Post: PAX Aus 2018 Pinny Arcade Pin Quest!

Tycho: The task has fallen to me yet again, as Mork is in a plane or something.  But I know my way around these now - I’ve developed techniques.  There’s some really fun inside jokes being made in pin form here, and I love it. PARTNER PINS Margarita and Popper Pins [Giant Margarita] There will be daily giveaways with our “Beat the Devs Challenge” from 1pm - 2pm and the pins will also be available for purchase at the Giant Margarita booth PR31. Pixel Pin [Checkpoint] Available for sale at the CheckPoint table in the Diversity Lounge or alongside becoming a CheckPoint… Comic for 2018.10.20

New Cyanide and Happiness Comic

Penny Arcade: News Post: Paging Robert Frost

Tycho: Gabe oscillates at two to three times my rate when it comes to a hunger for technological novelty.  I’m not without the hunger entirely, it’s just that I don’t…  Hm.  I don’t see it?  I can read a comic book without ever looking at the pictures.  It drives him nuts.  I don’t need them, though, and they’re not why I was reading it.  It’s like this with tech also: I have a purpose, and the device enables the purpose, but the middle section is like the second step of a sequence that culminates in Profit.  There…

Penny Arcade: Comic: Paging Robert Frost

New Comic: Paging Robert Frost

Quiet Earth: VIFF 2018: Live Streaming Goes Nuclear in PEOPLE'S REPUBLIC OF DESIRE [Review]

If you think social media, YouTube culture and live streaming are strange, prepare yourself because Western culture has only scraped the surface when it comes to living on the internet. Hao Wu's People's Republic of Desire is a strange window into a world that YouTube corporate could only dream of.

Launched in 2005, has become the largest player in the business of live streaming in China and I really do mean business. With over 300 million users, YY generates money by sharing income with streamers who split a portion of their monthly earnings with the service and in the case of top acts, we're talking thousands of American dollars. Certainly more money than the average Chinese worker could make in a lifetime never mind one month.

Wu's documentary focuses on a pair [Continued ...]

Planet Lisp: Quicklisp news: October 2018 Quicklisp dist update now available

New projects:
  • arrows — Implements -> and ->> from Clojure, as well as several expansions on the idea. — CC0
  • authenticated-encryption — Authenticated-Encryption functions — MIT
  • base64 — Base64 encoding and decoding for Common Lisp. — Apache 2.0
  • black-tie — Noise library for Common Lisp. — BSD
  • cl-clblas — clBLAS binding — Apache License, Version 2.0
  • cl-dotenv — Utility library for loading .env files — MIT
  • cl-fuzz — A Fuzz Testing Framework — BSD-2
  • cl-las — Library to manipulate LAS files — ISC
  • cl-proj — CL-PROJ provides Proj.4 library bindings — BSD
  • cl-prolog2 — Common Interface to the ISO prolog implementations from Common Lisp — MIT
  • cover — Code coverage utility for Common Lisp — MIT
  • destructuring-bind-star — DESTRUCTURING-BIND with proper error signaling — MIT
  • everblocking-stream — A stream that always blocks and never has data available. — Public domain
  • heap — Binary Heap for Common Lisp. — Apache 2.0
  • huffman — Huffman encoding and decoding for Common Lisp. — Apache 2.0
  • lazy — Lazy forms for Common Lisp. — Apache 2.0
  • lorem-ipsum — Lorem ipsum generator in portable Common Lisp — MIT
  • parse — Parsing package for Common Lisp. — Apache 2.0
  • print-html — Simple html generator. — MIT License
  • protest — Common Lisp PROtocol and TESTcase Manager — LLGPL
  • re — Lua-style string pattern matching. — Apache 2.0
  • regular-type-expression — This project contains several Common Lisp packages — MIT
  • safe-read — A variant of READ secure against internbombing, excessive input and macro characters. — BSD 2-clause
  • safety-params — Filter parameters — BSD 2-Clause
  • sc-extensions — additional library collection for cl-collider — Public Domain / 0-clause MIT
  • sha1 — SHA1 Digest and HMAC for LispWorks. — Apache 2.0
  • sycamore — A fast, purely functional data structure library — BSD-3
  • targa — Targa Image Loading for Common Lisp. — Apache 2.0
  • trivial-cltl2 — Compatibility package exporting CLtL2 functionality — LLGPL
Updated projectsarray-utilsasdf-vizassoc-utilsbinary-iobit-smashercari3sceplcl+sslcl-anacl-cffi-gtkcl-collidercl-colors2cl-i18ncl-kanrencl-ledgercl-liballegrocl-mecabcl-mixedcl-neovimcl-notebookcl-patternscl-plumbingcl-portmanteaucl-postgres-plus-uuidcl-progress-barcl-pslibcl-pslib-barcodecl-pythoncl-rabbitcl-sdl2cl-sdl2-imagecl-sdl2-mixercl-sdl2-ttfclackcloser-mopclosure-commonclunit2clxcodexcolleencommonqtcroatoancxmlcxml-stpdataflydefinitionsdexadordjuladmldo-urlencodedufydynamic-mixinseasy-audioeclectorfemlispfunction-cachefxmlgamebox-mathgeowktgolden-utilsharmonyiclendarinquisitorintegralironcladlacklasslichat-tcp-serverlog4clmaidenmcclimmitomito-attachmentmywayninevehningleoverlordpango-markupparachuteparser.iniperlrepetalispplace-utilsplexippus-xpathplump-sexppostmodernpreplprint-licensesqlotqtoolsquriread-csvroves-dot2scalplselserapeumshadowshuffletronslysplit-sequencest-jsonstaplestmxstumpwmsxqltime-intervaltootertrace-dbtrack-besttriviatrivial-benchmarktrivial-garbagetrivial-gray-streamstrivial-indenttrivial-utilitiesubiquitousutmvarjovernacularwoowookie.

Removed projects: clot, clpmr, cobstor, html-sugar, ie3fp, manardb, metafs, mime4cl, net4cl, npg, ods4cl, plain-odbc, quid-pro-quo, sanitized-params, sclf, smtp4cl, tiff4cl.

The removed projects no longer work on SBCL.

To get this update, use (ql:update-dist "quicklisp"). Enjoy!

Quiet Earth: VIFF 2018: Pop Stardom Explored in VOX LUX [Review]

Actor turned writer/director Brady Corbet hugely impressed me a few years ago with his feature debut behind the camera The Childhood of a Leader which, though a challenging watch, is a brilliant debut from a filmmaker with vision.

While his debut is a period drama about the early years of a young boy who becomes a tyrannical leader, on the surface, Vox Lux appears to be at the other end of the spectrum, a drama about a pop star from her early years of stardom to decades into her career, both movies share similar themes.

Natalie Portman and Raffey Cassidy both star as Celeste. Cassidy takes on the role of the teenage star while Portman takes the reign in the third act as the worn-out-but-not-burned-out pop diva and both actresses give great performances and though Po [Continued ...]

Quiet Earth: VIFF 2018: RELAXER is Ugly, Pointless & Oddly Compelling [Review]

I first caught wind of writer/director Joel Potrykus with his feature debut Ape (trailer) which, at the time of its release in 2012, won him a number of accolades including Best New Director at Locarno. He's made a few other movies in the intervening years but his latest is the first that has caught my attention enough to warrant me making an effort to see it.

Relaxer unfolds over the last few months of 1999, just as the impending Y2K fever is hitting its peak. Potrykus regular Joshua Burge stars as Abbie, a guy obsessed with challenges; reading about them, watching them and doing his own. Problem is, he's never finished an issued challenge.

The movie opens mid-challeng [Continued ...]

Daniel Lemire's blog: Validating UTF-8 bytes using only 0.45 cycles per byte (AVX edition)

When receiving bytes from the network, we often assume that they are unicode strings, encoded using something called UTF-8. Sadly, not all streams of bytes are valid UTF-8. So we need to check the strings. It is probably a good idea to optimize this problem as much as possible.

In earlier work, we showed that you could validate a string using a little as 0.7 cycles per byte, using commonly available 128-bit SIMD registers (in C). SIMD stands for Single-Instruction-Multiple-Data, it is a way to parallelize the processing on a single core.

What if we use 256-bit registers instead?

Reference naive function 10 cycles per byte
fast SIMD version (128-bit) 0.7 cycles per byte
new SIMD version (256-bit) 0.45 cycles per byte

That’s good, almost twice as fast.

A common problem is that you receive as inputs ASCII characters. That’s a common scenario. It is much faster to check that a string in made of ASCII characters than to check that it is made of valid UTF-8 characters. Indeed, to check that it is made of ASCII characters, you only have to check that one bit per byte is zero (since ASCII uses only 7 bits per byte).

It turns out that only about 0.05 cycles are needed to check that a string is made of ASCII characters. Maybe up to 0.08 cycles. That makes us look bad.

You could start checking the file for ASCII characters and then switch to our function when non-ASCII characters are found, but this has a problem: what if the string starts with a non-ASCII character followed by a long stream of ASCII characters?

A quick solution is to add an ASCII path. Each time we read a block of 32 bytes, we check whether it is made of 32 ASCII characters, and if so, we take a different (fast) path. Thus if it happens frequently that we have long streams of ASCII characters, we will be quite fast.

The new numbers are quite appealing when running benchmarks on ASCII characters:

new SIMD version (256-bit) 0.45 cycles per byte
new SIMD version (256-bit), w. ASCII path 0.088 cycles per byte
ASCII check (SIMD + 256-bit) 0.051 cycles per byte

My code is available.

Tea Masters: A quiz and paradigm shifts in tea

Puerh A
Let's train our observation skills on 2 puerhs from my selection I've brewed recently. Can you recognize which one is the oldest? Are they sheng or shu? Can you maybe even recognize which ones they are?
Puerh B
This kind of exercise is interesting, because it teaches you to find answers about a puerh you might want to buy from the leaves themselves instead from the wrapper or the story told by the vendor. Learn to read the tea leaves! (The answer to this quiz is at the end of the article).
The second subject of my article is paradigm shifts in tea.

To explain what's a paradigm shift, I like the picture on the left: it shows a young lady or a very old one depending on how your brain processes the image. The shift occurs when you start to see the second person instead of seeing the first. It's kind of destabilizing, because it challenges your beliefs and perceptions of reality. 

Looking back on the last 15 years since my first tea class this fall, I realize I have gone through many paradigm shifts about tea. Here is an incomplete list:
1. Before: Straight and parallel lines of tea bushes, like in the picture on the left, look beautiful.
Now: Such plantations are shaped to be machine harvested. They mass produce tea that is mostly of lower quality. Tea trees that grow differently, with more space are naturally beautiful.

2. Before: Teas from Mainland China are cheap, low quality and suspicious, while teas from Taiwan are expensive, high quality and healthy.
Now: Teas from Mainland China vary a lot. The best Chinese teas (gushu puerh, Yan Cha...) are much more expensive than top Taiwanese teas. 
3. Before: Taiwanese tea farmers go to China to lower their production costs.
Now: Taiwanese farmers go to China to sell their teas to affluent customers.

4. Before: Big wooden tea tables are cool.
Now: Big wooden tea tables are ugly.
5. Before: I trust labels on tea packaging.
Now: I don't trust tea labels (except when I write them for tea-masters!)

6. Before: I'm taking a few classes with Teaparker and will soon learn everything there is to know about tea.
Now (15 years later): I'm still going to the weekly class. The learning never stops. The world of tea is boundless.
Here's the solution to the quiz:
- Puerh A is the 2003 wild raw puerh from Yiwu.
- Puerh B is older, because it's the early 1990s Luyin raw puerh cake from the Menghai Tea Factory.

Please also check my latest Fall 2018 specials.

things magazine: By Toutatis!

Farewell Anthea Bell, the extremely skilled translator of Goscinny and Uderzo’s Asterix books, as well as the English versions of late W.G. Sebald. See also this list of Asterix characters and their international name equivalents and Asterix in translation: the … Continue reading Comic for 2018.10.19

New Cyanide and Happiness Comic

OCaml Planet: ocaml-git 2.0

I'm very happy to announce a new major release of ocaml-git (2.0). This release is a 2-year effort to get a revamped streaming API offering a full control over memory allocation. This new version also adds production-ready implementations of the wire protocol: git push and git pull now work very reliably using the raw Git and smart HTTP protocol (SSH support will come soon). git gc is also implemented, and all of the basic bricks are now available to create Git servers. MirageOS support is available out-of-the-box.

Two years ago, we decided to rewrite ocaml-git and split it into standalone libraries. More details about these new libraries are also given below.

But first, let's focus on ocaml-git's new design. The primary goal was to fix memory consumption issues that our users noticed with the previous version, and to make git push work reliably. We also took care about not breaking the API too much, to ease the transition for current users.

Controlled allocations

There is a big difference in the way ocaml-git and git are designed: git is a short-lived command-line tool which does not care that much about allocation policies, whereas we wanted to build a library that can be linked with long-lived Git client and/or server applications. We had to make some (performance) compromises to support that use-case, at the benefit of tighter allocation policies — and hence more predictable memory consumption patterns. Other Git libraries such as libgit2 also have to deal with similar concerns.

In order to keep a tight control on the allocated memory, we decided to use decompress instead of camlzip. decompress allows the users to provide their own buffer instead of allocating dynamically. This allowed us to keep a better control on memory consumption. See below for more details on decompress.

We also used angstrom and encore to provide a streaming interface to encode and decode Git objects. The streaming API is currently hidden to the end-user, but it helped us a lot to build abstraction and, again, on managing the allocation policy of the library.

Complete PACK file support (including GC)

In order to find the right abstraction for manipulating pack files in a long-lived application, we experimented with various prototypes. We haven't found the right abstractions just yet, but we believe the PACK format could be useful to store any kind of data in the future (and not especially Git objects).

We implemented git gc by following the same heuristics as Git to compress pack files and we produce something similar in size — decompress has a good ratio about compression — and we are using duff, our own implementation of xdiff, the binary diff algorithm used by Git (more details on duff below). We also had to re-implement the streaming algorithm to reconstruct idx files on the fly, when receiving pack file on the network.

One notable feature of our compression algorithms is they work without the assumption that the underlying system implements POSIX: hence, they can work fully in-memory, in a browser using web storage or inside a MirageOS unikernel with wodan.

Production-ready push and pull

We re-implemented and abstracted the Git Smart protocol, and used that abstraction to make git push and git pull work over HTTP. By default we provide a cohttp implementation but users can use their own — for instance based on httpaf. As proof-of-concept, the initial pull-request of ocaml-git 2.0 was created using this new implementation; moreover, we wrote a prototype of a Git client compiled with js_of_ocaml, which was able to run git pull over HTTP inside a browser!

Finally, that implementation will allow MirageOS unikernels to synchronize their internal state with external Git stores (hosted for instance on GitHub) using push/pull mechanisms. We also expect to release a server-side implementation of the smart HTTP protocol, so that the state of any unikernel can be inspected via git pull. Stay tuned for more updates on that topic!

Standalone Dependencies

Below you can find the details of the new stable releases of libraries that are used by ocaml-git 2.0.

optint and checkseum

In some parts of ocaml-git, we need to compute a Circular Redundancy Check value. It is 32-bit integer value. optint provides an abstraction of it but structurally uses an unboxed integer or a boxed int32 value depending on target (32 bit or 64 bit architecture).

checkseum relies on optint and provides 3 implementations of CRC:

  • Adler32 (used by zlib format)
  • CRC32 (used by gzip format and git)
  • CRC32-C (used by wodan)

checkseum uses the linking trick: this means that users of the library program against an abstract API (only the cmi is provided); at link-time, users have to select which implementation to use: checkseum.c (the C implementation) or checkseum.ocaml (the OCaml implementation). The process is currently a bit cumbersome but upcoming dune release will make that process much more transparent to the users.

encore (/angkor/)

In git, we work with Git objects (tree, blob or commit). These objects are encoded in a specific format. Then, the hash of these objects are computed from the encoded result to get a unique identifier. For example, the hash of your last commit is: sha1(encode(commit)).

A common operation in git is to decode Git objects from an encoded representation of them (especially in .git/objects/* as a loose file) and restore them in another part of your Git repository (like in a PACK file or on the command-line).

Hence, we need to ensure that encoding is always deterministic, and that decoding an encoded Git object is always the identity, e.g. there is an isomorphism between the decoder and the encoder.

let decoder <.> encoder : value -> value = id
let encoder <.> decoder : string -> string = id

encore is a library in which you can describe a format (like Git format) and from it, we can derive a streaming decoder and encoder that are isomorphic by construction.


duff is a pure implementation in OCaml of the xdiff algorithm. Git has an optimized representation of your Git repository. It's a PACK file. This format uses a binary diff algorithm called xdiff to compress binary data. xdiff takes a source A and a target B and try to find common sub-strings between A and B.

This is done by a Rabin's fingerprint of the source A applied to the target B. The fingerprint can then be used to produce a lightweight representation of B in terms of sub-strings of A.

duff implements this algorithm (with additional Git's constraints, regarding the size of the sliding windows) in OCaml. It provides a small binary xduff that complies with the format of Git without the zlib layer.

$ xduff diff source target > target.xduff
$ xduff patch source < target.xduff >
$ diff target
$ echo $?


decompress is a pure implementation in OCaml of zlib and rfc1951. You can compress and decompress data flows and, obviously, Git does this compression in loose files and PACK files.

It provides a non-blocking interface and is easily usable in a server context. Indeed, the implementation never allocates and only relies on what the user provides (window, input and output buffer). Then, the distribution provides an easy example of how to use decompress:

val inflate: ?level:int -> string -> string
val deflate: string -> string


digestif is a toolbox providing many implementations of hash algorithms such as:

  • MD5
  • SHA1
  • SHA224
  • SHA256
  • SHA384
  • SHA512
  • RIPEMD160

Like checkseum, digestif uses the linking trick too: from a shared interface, it provides 2 implementations, in C (digestif.c) and OCaml (digestif.ocaml).

Regarding Git, we use the SHA1 implementation and we are ready to migrate ocaml-git to BLAKE2{B,S} as the Git core team expects - and, in the OCaml world, it is just a functor application with another implementation.


Some applications require that secret values are compared in constant time. Functions like String.equal do not have this property, so we have decided to provide a small package — eqaf — providing a constant-time equal function. digestif uses it to check equality of hashes — it also exposes unsafe_compare if you don't care about timing attacks in your application.

Of course, the biggest work on this package is not about the implementation of the equal function but a way to check the constant-time assumption on this function. Using this, we did a benchmark on Linux, Windows and Mac to check it.

An interesting fact is that after various experiments, we replaced the initial implementation in C (extracted from OpenBSD's timingsafe_memcmp) with an OCaml implementation behaving in a much more predictable way on all the tested platforms.


The upcoming version 2.0 of Irmin is using ocaml-git to create small applications that push and pull their state to GitHub. We think that Git offers a very nice model to persist data for distributed applications and we hope that more people will use ocaml-git to experiment and manipulate application data in Git. Please send us your feedback!

Disquiet: Disquiet Junto Project 0355: Sonic Vivisection

Each Thursday in the Disquiet Junto group, a new compositional challenge is set before the group’s members, who then have just over four days to upload a track in response to the assignment. Membership in the Junto is open: just join and participate. (A SoundCloud account is helpful but not required.) There’s no pressure to do every project. It’s weekly so that you know it’s there, every Thursday through Monday, when you have the time.

Deadline: This project’s deadline is Monday, October 22, 2018, at 11:59pm (that is, just before midnight) wherever you are on. It was posted in the morning, California time, on Thursday, October 18, 2018.

Tracks will be added to the playlist for the duration of the project.

These are the instructions that went out to the group’s email list (at

Disquiet Junto Project 0355: Sonic Vivisection
The Assignment: Operate with incisions on a live sound in real time.

Step 1: Consider the concept of vivisection, or “the cutting of or operation on a living animal usually for physiological or pathological investigation,” per the Merriam-Webster Dictionary.

Step 2: Consider how that term might be applied to sound — for example, enacting cuts into a live sound source in real time.

Step 3: Record a short piece of music/sound based on the thoughts that arose upon reflection on Steps 1 and 2 above.

Six More Important Steps When Your Track Is Done:

Step 1: Include “disquiet0355” (no spaces or quotation marks) in the name of your track.

Step 2: If your audio-hosting platform allows for tags, be sure to also include the project tag “disquiet0355” (no spaces or quotation marks). If you’re posting on SoundCloud in particular, this is essential to subsequent location of tracks for the creation a project playlist.

Step 3: Upload your track. It is helpful but not essential that you use SoundCloud to host your track.

Step 4: Post your track in the following discussion thread at

Step 5: Annotate your track with a brief explanation of your approach and process.

Step 6: Then listen to and comment on tracks uploaded by your fellow Disquiet Junto participants.

Other Details:

Deadline: This project’s deadline is Monday, October 22, 2018, at 11:59pm (that is, just before midnight) wherever you are on. It was posted in the morning, California time, on Thursday, October 18, 2018.

Length: The length of your track is up to you.

Title/Tag: When posting your track, please include “disquiet0355” in the title of the track, and where applicable (on SoundCloud, for example) as a tag.

Upload: When participating in this project, post one finished track with the project tag, and be sure to include a description of your process in planning, composing, and recording it. This description is an essential element of the communicative process inherent in the Disquiet Junto. Photos, video, and lists of equipment are always appreciated.

Download: Please consider setting your track as downloadable and allowing for attributed remixing (i.e., a Creative Commons license permitting non-commercial sharing with attribution, allowing for derivatives).

Context: When posting the track online, please be sure to include this following information:

More on this 355th weekly Disquiet Junto project (Sonic Vivisection / The Assignment: Operate with incisions on a live sound in real time) at:

More on the Disquiet Junto at:

Subscribe to project announcements here:

Project discussion takes place on

There’s also a Junto Slack. Send your email address to to join in.

Image adapted (cropped, text added) from a photo by Tudor Barker, used via Flickr thanks to a non-commercial Creative Commons license (CC BY-NC-SA 2.0):

Perlsphere: Comp. Phys. Comm. published: "Lab::Measurement - a portable and extensible framework for controlling lab equipment and conducting measurements"

We're happy to announce that our article "Lab::Measurement — a portable and extensible framework for controlling lab equipment and conducting measurements", describing our measurement software package Lab::Measurement, has been published in Computer Physics Communications.

Lab::Measurement is a collection of object-oriented Perl 5 modules for controlling lab instruments, performing measurements, and recording and plotting the resultant data. Its operating system independent driver stack makes it possible to use nearly identical measurement scripts both on Linux and Windows. Foreground operation with live plotting and background operation for, e.g., process control are supported. For more details, please read our article, visit the Lab::Measurement homepage, or visit Lab::Measurement on CPAN!

"Lab::Measurement - a portable and extensible framework for controlling lab equipment and conducting measurements"
S. Reinhardt, C. Butschkow, S. Geissler, A. Dirnaichner, F. Olbrich, C. Lane, D. Schröer, and A. K. Hüttel
Comp. Phys. Comm. 234, 216 (2019); arXiv:1804.03321 (PDF)

The Shape of Code: Students vs. professionals in software engineering experiments

Experiments are an essential component of any engineering discipline. When the experiments involve people, as subjects in the experiment, it is crucial that the subjects are representative of the population of interest.

Academic researchers have easy access to students, but find it difficult to recruit professional developers, as subjects.

If the intent is to generalize the results of an experiment to the population of students, then using student as subjects sounds reasonable.

If the intent is to generalize the results of an experiment to the population of professional software developers, then using student as subjects is questionable.

What it is about students that makes them likely to be very poor subjects, to use in experiments designed to learn about the behavior and performance of professional software developers?

The difference between students and professionals is practice and experience. Professionals have spent many thousands of hours writing code, attending meetings discussing the development of software; they have many more experiences of the activities that occur during software development.

The hours of practice reading and writing code gives professional developers a fluency that enables them to concentrate on the problem being solved, not on technical coding details. Yes, there are students who have this level of fluency, but most have not spent the many hours of practice needed to achieve it.

Experience gives professional developers insight into what is unlikely to work and what may work. Without experience students have no way of evaluating the first idea that pops into their head, or a situation presented to them in an experiment.

People working in industry are well aware of the difference between students and professional developers. Every year a fresh batch of graduates start work in industry. The difference between a new graduate and one with a few years experience is apparent for all to see. And no, Masters and PhD students are often not much better and in some cases worse (their prolonged sojourn in academia means that have had more opportunity to pick up impractical habits).

It’s no wonder that people in industry laugh when they hear about the results from experiments based on student subjects.

Just because somebody has “software development” in their job title does not automatically make they an appropriate subject for an experiment targeting professional developers. There are plenty of managers with people skills and minimal technical skills (sub-student level in some cases)

In the software related experiments I have run, subjects were asked how many lines of code they had read/written. The low values started at 25,000 lines. The intent was for the results of the experiments to be generalized to the population of people who regularly wrote code.

Psychology journals are filled with experimental papers that used students as subjects. The intent is to generalize the results to the general population. It has been argued that students are not representative of the general population in that they have spent more time reading, writing and reasoning than most people. These subjects have been labeled as WEIRD.

I spend a lot of time reading software engineering papers. If a paper involves human subjects, the first thing I do is find out whether the subjects were students (usual) or professional developers (not common). Authors sometimes put effort into dressing up their student subjects as having professional experience (perhaps some of them have spent a year or two in industry, but talking to the authors often reveals that the professional experience was tutoring other students), others say almost nothing about the identity of the subjects. Papers describing experiments using professional developers, trumpet this fact in the abstract and throughout the paper.

I usually delete any paper using student subjects, some of the better ones are kept in a subdirectory called students.

Software engineering researchers are currently going through another bout of hand wringing over the use of student subjects. One paper makes the point that a student based experiment is a good way of validating an experiment that will later involve professional developers. This is a good point, but ignored the problem that researchers rarely move on to using professional subjects; many researchers only ever intend to run student-based experiments. Also, they publish the results from the student based experiment, which are at best misleading (but academics get credit for publishing papers, not for the content of the papers).

Researchers are complaining that reviews are rejecting their papers on student based experiments. I’m pleased to hear that reviewers are rejecting these papers.

Michael Geist: Want to Keep Canadian AI Thriving?: Create a Copyright Exception for Informational Analysis

Prime Minister Justin Trudeau met earlier this week with Jean-Francois Gagné, the CEO of Element AI, the Montreal-based applied artificial intelligence lab. Trudeau tweeted that the two men “talked about what Canadians are doing in AI in Montreal & across the country, and how we can keep the industry thriving.”


Justin Trudeau tweet, October 15, 2018,

Well, since the Prime Minister asked, Element AI recently appeared before the Standing Committee on Industry, Science and Technology as part of the copyright review with a simple ask: create a new copyright exception for information analysis. Element AI was joined by several other technology groups, including ITAC and the Business Software Alliance, who all raised the same issue.

I highlighted the link between copyright and AI in a column last year, calling for a text and data mining exception. The column noted:

Making machines smart – whether engaging in automated translation, big data analytics, or new search capabilities – is dependent upon the data being fed into the system. Machines learn by scanning, reading, listening or viewing human created works. The better the inputs, the better the output and the reduced likelihood that results may be biased or inaccurate.

Copyright law crops up because restrictive rules may limit the data sets that can used for machine learning purposes, resulting in fewer pictures to scan, videos to watch or text to analyze. Given the absence of a clear rule to permit machine learning in Canadian copyright law (often called a text and data mining exception), our legal framework trails behind other countries that have reduced risks associated with using data sets in AI activities.

Element AI describes information analysis as “encompassing the use of processing techniques to obtain and process text, images, sound, video, and other forms of data in order to generate new facts, discover patterns, and analyse relationships.” It notes that current uncertainties in the Canadian Copyright Act limit the ability for Canadian companies to “access a basic, necessary resource to train their algorithms.” The solution? A fair dealing exception for informational analysis:

Recognizing a limited informational analysis fair dealing exception will echo and support research to grow Canada’s IP culture. This exemption can help all players of Canada’s AI ecosystem further test, train and research new innovative techniques, thereby connecting with the clear policy objectives of fostering a culture in Canada of innovation and intellectual property.

The Element AI position is echoed in similar submissions to the committee from the BSA (which includes members such as Apple, Adobe, and Oracle) and Microsoft, both strong advocates for copyright. The BSA warns:

As currently enacted, Canada’s Copyright Act creates uncertainty about the legal implications of key analytical techniques, such as text and data mining and machine learning, that are foundational to the development of AI. Accordingly, to help realize Canada’s strategy for becoming a global leader in AI and to facilitate the many societal benefits of AI, we urge the Committee to recommend the adoption of an express exception to ensure that copying a lawfully accessed work for the purpose of “information analysis” is not infringing.

Microsoft’s brief to the committee
calls for a machine learning exception, noting that many other countries have developed similar exceptions:

Outside of Canada, countries, including Japan, the United States and China, have extended and are expanding legal protections for broad machine learning techniques including text and data mining. Japan recently implemented changes to its copyright laws that significantly expanded and clarified an already forward-looking machine learning exception. The UK permits text and data mining for certain purposes, and is currently exploring broadening its exception as it increasingly recognizes the benefits of machine learning for all users. China, Singapore and Thailand are focused on similar digital copyright reform and have similarly proposed broad and unrestricted machine learning exceptions. Unsurprisingly, these countries are also at the forefront of research involving data analytics and artificial intelligence, including machine learning.

As I argued last year, there are two ways to overcome the AI barrier:

First, Canada could emulate the U.S. fair use model by making the current list of fair dealing purposes illustrative rather than exhaustive. The U.S. exception is open to any purpose, as striking a fair balance depends upon the use of the work, not the purpose of the copying. Since machine learning does not harm the primary purposes of the original work, most text and data mining will qualify as fair use.

Second, other countries have tried to address the issue by creating a specific exception for text and data mining or computer informational analysis. For example, Britain’s exception allows copies of works to be made without permission of the copyright owner for the purposes of automated analytical techniques to analyze text and data for patterns, trends, and other information. The law does not allow contracts to restrict data mining activities, but the exception is limited to non-commercial research.

Canada’s significant investment in AI needs a legal framework that ensure Canadian businesses and researchers are not placed at a global disadvantage. Whether by way of fair use provision or a more targeted informational analysis fair dealing exception, the government’s hopes for Canadian AI leadership is linked to AI-focused copyright reforms.

The post Want to Keep Canadian AI Thriving?: Create a Copyright Exception for Informational Analysis appeared first on Michael Geist.

new shelton wet/dry: ‘This is the curse of our age, even the strangest aberrations are no cure for boredom.’ –Stendhal

Because more and more young people are constantly presented with the opportunity to access information and connect to others via their smartphones, they report to be in a state of permanent alertness. In the current study, we define such a state as smartphone vigilance, an awareness that one can always get connected to others [...]

things magazine: Better living through technology?

Try getting music lessons to stick after this drops: Google Magenta / Let’s Learn about Waveforms / ‘Tariff engineering’: Ford has saved £190m over 16 years by exporting ‘cars’ to the US and then turning them into vans once they’ve … Continue reading

new shelton wet/dry: Mr. Ingberg described the vodka, made with melted snow from the French Alps, as “very tasty” and “smooth and round,” but added, “It’s difficult to attribute a taste to wheat-based vodka.”

Machine-vision systems can match humans at recognizing faces and can even create realistic synthetic faces. But researchers have discovered that the same systems cannot recognize optical illusions, which means they also can’t create new ones. { Technology Review | Continue reading }

Which Lights?: Bullshit Jobs


I just finished reading David Graeber’s Bullshit Jobs. The premise is that anywhere from 25-50% of modern work serves no purpose. It’s not an economic problem but a cultural and mental health problem. Some of my favorite excerpts:

The answer clearly isn’t economic: it’s moral and political. The ruling class has figured out that a happy and productive population with free time on their hands is a mortal danger. (Think of what started to happen when this even began to be approximated in the sixties.) And, on the other hand, the feeling that work is a moral value in itself, and that anyone not willing to submit themselves to some kind of intense work discipline for most of their waking hours deserves nothing, is extraordinarily convenient for them.

We have come to believe that men and women who do not work harder than they wish at jobs they do not particularly enjoy are bad people unworthy of love, care, or assistance from their communities. It is as if we have collectively acquiesced to our own enslavement.

It’s not entirely surprising, then, that the first historical evidence we have for the notion that certain categories of people really ought to be working at all times, even if there’s nothing to do, and that work needs to be made up to fill their time, even if there’s nothing that really needs doing, refers to people who are not free: prisoners and slaves, two categories that historically have largely overlapped.

Time is not a grid against which work can be measured, because the work is the measure itself.

Before long, however, workers were arguing with employers about hourly rates, demanding fixed-hour contracts, overtime, time and a half, the twelve-hour day, and then the eight-hour day. But the very act of demanding “free time,” however understandable under the circumstances, had the effect of subtly reinforcing the idea that when a worker was “on the clock,” his time truly did belong to the person who had bought it—a concept that would have seemed perverse and outrageous to their great-grandparents, as, indeed, to most people who have ever lived.

Mitch’s story highlights the religious element: the idea that dutiful submission even to meaningless work under another’s authority is a form of moral self-discipline that makes you a better person. This, of course, is a modern variant of Puritanism.

Productive labor yields some kind of surplus value that capitalists can extract in profits; other labor is at best “reproductive”—that is, like housework or education (these are always put forward as the primary examples), such tasks perform the necessary second-order work of keeping workers alive and raising new generations of workers so that in the future they can, in turn, do the “real” work of being exploited.

The flip side of the left-wing protest marchers waving signs demanding “More Jobs” is the right-wing onlooker muttering “Get a job!” as they pass by. There seems a broad consensus not so much even that work is good but that not working is very bad; that anyone who is not slaving away harder than he’d like at something he doesn’t especially enjoy is a bad person, a scrounger, a skiver, a contemptible parasite unworthy of sympathy or public relief.

Work, Aristotle insisted, in no sense makes you a better person; in fact, it makes you a worse one, since it takes up so much time, thus making it difficult to fulfill one’s social and political obligations.

Work about work has become a kind of minor industry in its own right. The conclusions reached by this body of research—and what follows appears to hold true, with only minor variations, for both blue- and white-collar workers virtually anywhere in the world—might be summarized as follows:

1. Most people’s sense of dignity and self-worth is caught up in working for a living.

2. Most people hate their jobs.

Those trapped in bullshit jobs resent workers who get to do real productive or beneficial labor, and those who do real productive or beneficial labor, underpaid, degraded, and unappreciated, increasingly resent those who they see as monopolizing those few jobs where one can live well while doing something useful, high-minded, or glamorous—who they refer to as “the liberal elite.” All are united in their loathing for the political class, who they see (correctly) as corrupt, but the political class, in turn, finds these other forms of vacuous hatred extremely convenient, since they distract attention from themselves.

This is a powerful argument for human freedom. Most of us like to talk about freedom in the abstract, even claim that it’s the most important thing for anyone to fight or die for, but we don’t think a lot about what being free or practicing freedom might actually mean. The main point of this book was not to propose concrete policy prescriptions, but to start us thinking and arguing about what a genuine free society might actually be like.

explodingdog: Photo

explodingdog: Photo

Tea Masters: The Celadon Tea Jar by Michel François

1999 Hung Shui Oolong
The tea jar is the most overlooked tea ware in our modern times. Teapots, cups and (most) kettles have not been replaced with plastic and we, rightly, pay attention to the quality of the material they are made of. For storage containers, plastic foils are dominating the field because they are very cheap, light to transport and can be easily vacuum closed. They provide a very cost efficient protection against air and outside scents. (Not all are fully opaque, though. But the foils I use for my samples do also provide a protection against light).

Their drawback is that plastic isn't as natural a material as porcelain. My tests in 2010 have shown that porcelain jars better preserve and refine roasted Oolong leaves than plastic foils.
But all porcelain jars are not created equal! This test in 2011 showed that industrial porcelain didn't preserve the leaves much better than plastic foils! That's why I have tried to find ancient porcelain jars or have cooperated with modern ceramists (Petr Novak, David Louveau) to create jars made from high quality and natural porcelain.

And now, for the second time, Michel François has created some celadon tea jars for us. (See the first time here).
The jars find all their 'raison d'être' on a Chaxi! Their round shape protects the leaves in a very feminine way. The jar contains the leaves, which are like seeds of our pleasures to come! It's not just a bright protection against air, moisture, light and heat (porcelain is cool), but it's also a place where the leaves can slowly evolve in a natural environment. It's clean from all those micro particles that plastic slowly releases as it decomposes. That's one reason why there's this 'decanter effect' with Oolong placed in a jar even for a little while: it breathes freely and becomes smoother.
For this effect, Michel François is using the best kaolin from New Zealand and volcanic feldspar from England. His glaze contains some animal bone ash that adds a special pearl like glow.
And finally, this tea jar adds beauty and elegance to the Chaxi. Since it's hand made, each jar has its own personality. But with this plain glaze, I like the restraint it shows. This makes it easier to fit the jar on a variety of Chaxi. (Wood fired ware often displays too much personality and can be more difficult to pair).   
Spring 2017 Qilai shan Oolong
I have tested this jar with various Oolongs and found that it works very well with Hung Shui Oolongs, jassid bitten Oolongs and even with high mountain Oolong! It reduces and smooths roasted aromas. It sweetens high oxidized Oolongs. It keeps the freshness of the high mountain even as the tea evolves faster than in a vacuum sealed foil.
What has amazed me most is that even very little amounts of tea are well preserved over several weeks/months in these jars. And since the inside is glazed, it's possible to reuse a jar with different teas (provided you've cleaned it and aired it well).
Michel François also makes wonderful tea bowls and cups, but jars are his real passion. That's why he named his blog Tea Jar! Michel François is in South Korea right now to continue to learn jar making with a local ceramist. With his talent, there's a risk (for us) and chance (for him) that he'll become so famous that his prices will soar in a few years. 
Without a tea jar, no Chaxi is complete!

OCaml Planet: OCamlPro’s TZScan grant proposal accepted by the Tezos Foundation – joint press release

Tezos Foundation and OCamlPro joint press release – October 17, 2018

We are pleased to announce  that the Tezos Foundation has issued a grant to OCamlPro to support its work on TzScan, a block explorer for the Tezos blockchain that will be made open-source.

OCamlPro is a French company and R&D lab, focused on OCaml and blockchain development. OCamlPro, which is an active community member and contributor to Tezos, has initiated several Tezos-related projects such as TzScan and Liquidity, a high-level programming language for creating smart contracts in Tezos with an online editor, compiler and debugger, and features a decompiler to audit Michelson contracts.

Open-source block explorers are a key component of a blockchain ecosystem by allowing users to more easily monitor transactions, network validators (“bakers”), and the health of a network. OCamlPro will also provide documentation on Tezos and continue to improve the TzScan API, which may be used by applications such as wallets.

The Tezos Foundation’s core mission is to support the long-term success of the Tezos protocol and ecosystem. By funding projects imagined by scientists, researchers, developers, entrepreneurs, and enthusiasts, the Foundation encourages decentralized development and robust participation.

More information here.

Curious about OCamlPro’s blockchain activities?

OCamlPro is a French software company and R&D lab, born in 2011 and located in Paris and Essonne. We are dedicated to improving the quality of software, through the use of formal methods, and we promote the use of OCaml, a fast and expressive, statically typed state-of-the-art programming language, matured for more than 30 years in the French public research lab Inria.

In 2014, OCamlPro has been involved in the Tezos project, helping with the Tezos protocol design and developing the prototype of Tezos, later to become the official Tezos software. In 2017, OCamlPro developed the ICO infrastructure for Tezos, including Bitcoin and Ethereum smart-contracts. OCamlPro self-funded two big projects around Tezos:

  • The TzScan block-explorer for Tezos: TzScan provides many features specific to Tezos delegated proof-of-stake protocol, to make life easier for bakers. TzScan API can be used by applications, such as wallets and delegation services to provide additional information to their users.
  • The Liquidity language for Tezos smart-contracts. Liquidity is a programming language, compiled to Michelson. Its online editor can be used to write, deploy, run and debug smart contracts. It also features a decompiler from Michelson, that can be used to audit contracts written in other languages.

In 2018, OCamlPro worked with the Tezos Foundation and Tezos Core Development team to prepare the launch of the betanet network, and later, the mainnet network.

With a team of 10 PhD-level developers working on Tezos, OCamlPro is one of the biggest spot of knowledge on Tezos. OCamlPro can provide many services to the Tezos community: improvement of Tezos software, development of specific software, features and new protocols, training and consulting and smart contract design, writing, and auditing. With tight connections with Inria and other French research labs and universities, OCamlPro is also involved in several research projects, related to blockchains or formal methods:

  • Formal methods: OCamlPro is involved in collaborative projects with academic and industrial partners to develop tools for software verification, such as the Alt-Ergo SMT Solver (from LRI).
  • OCaml tooling: we help optimize OCaml (flambda) and design development tools for OCaml (open-source most of the time). Such tools range from command-line tools (such as OPAM or ocp-build), or GUI tools (the OCaml Memory Profiler), to web-based tools (TryOCaml, the OCaml MOOC with the learn-OCaml platform of the OCaml Foundation of Inria).

MattCha's Blog: 2018 Spring Essence of Tea Gua Feng Zhai and Thoughts on Blending Huang Pian

This fine sample made it to me free in a recent yixing teapot order along with these others (here and here).  The description on the Essence of Tea website for this Guafengzhai states, We left some yellow leaves in this cake since the quantity was so small and priced it accordingly.  This gives a good range of flavours in the resulting tea.  This is something interesting and new.  I have not ever heard of this before but it makes sense to me as a possible way to both add depth of taste as well as to help keep the price down (because this region is pretty expensive these days).  It appears that this 2018 Spring Guafengzhai has just recently sold out but used to go for $224.00 for 200g cake or $1.12 /g .

The dry leaf smells amazing, like puerh candy with a layered high noted sweetness and subtle rainforest sensibility.  “This will be good tea” I think to myself…

The first infusion has a nutty roasted squash taste which transitions to bold pungent flavours then into a quick moving splash of returning sweetness.  The mouthfeel is gummy, and sticky and nice.  There is sticky rice base taste throughout and intense sweet tastes pop up here and there. First infusion shows nice signs of complexity.  The tea pours a golden yellow colour that is similar to the 2018 Spring Essence of Tea Yiwu.  This might have something to do with the long processing that David is a fan of or maybe it is a product of the weather this spring in Yiwu?  Or the addition of the huang pian (“yellow leaves” or the big yellow mature leaves they usually discard when sorting the picked leaf)?  I’m unsure but it is something I am not used to seeing in such young puerh.

The second infusion has an initial nutty sweet initial taste mixed with a fair bit of pungency there is a squash like and sticky rice base taste under the flavours, slight wood.  The returning sweetness has a cooling menthol finish with light, soft candy like sweetness.  The throat feel is medium depth and the mouthfeel is soft and slightly sticky.

The third infusion has a slightly woody, swash, nutty onset which transitions to a long pungent taste where sweetness returns.  At first the sweetness is a minty pungent mix then it trails off into a mild candy-like sweetness.  The mouthfeel has a mild tingling feeling.

The fourth infusion has the same woody, squash like, nutty onset but it is leaning towards less nutty now and more woody.  The pungency is a touch less now or maybe it just carries a squash like sweet taste.  The sweetness unravels into a mild candy sweetness. The mouthfeel is mild and the mild throat opens unpretentiously. The qi slowly and gently builds up in the body. 

The fifth infusion has a more cohesive taste to it now woody even savory onset that transitions to pungency then to sweetness.  The initial taste has shifted a bit here the throatfeeling is on the edges of constriction in the mid throat.  The mouthfeel has a mild sticky, almost dryness to it.

The sixth infusion starts with an almost juicy nutty treading toward bitter but not quite onset.  The taste transitions to more woody then to a soft quick pungency then to a woody, almost watermelon and squash sweetness and less an intense candy sweetness.

The seventh starts with a nutty squash like taste with undertones of wood and pungency.  The sweet returning taste is less now and mixed with a menthol pungency.

The eighth begins a slight almost milky woodiness with and ending nutty taste and returning pungency that is cooling and not as sweet.  The qi is a nice relaxing Qi but not overly present. The physical body feels like its floating a bit.  The mind relaxed.

The ninth has a woody and nutty onset with a mild pungency and faint on the breath returning sweetness. It weakens here and seems to need pushing early on.

The tenth is pushed 10 seconds beyond flash and gives us a pumpkin/ squash taste with an almost bready and woody like taste.  The sweetness is almost a bread like sweetness with a faint nuttiness lingering beneath.

The eleventh infusion is pushed 30 seconds and delivers a woody, squash and sweet potato like taste.  The mouthfeel is shored up here and is almost silty in the mouth with a nice woody pungency.

The twelfth is put under a 30 steeping is mainly dry wood.  Not too exciting, slightly drying in the throat almost bitter finish with subtle suggestions of menthol.  Qi is a mild relaxing kind of thing but nothing notable really.

The thirteenth is a good 30 seconds plus and comes out rather grainy and cereal tasting mainly with a slight pungency.

The fourteenth is long steeped and gives off a nutty almost juicy but drier wood taste.  The mouthfeel is dry here and constricting in these long steeps.

I put it to an overnight steeping and get better results with a very viscus full syrupy sweetness with fruits and gourd tastes and full coating in mouth.

Overall, I would have never guessed this to be from the Gua Feng Zhai producing area.  The huang pian leaves mixed in gives it an interesting and contrasting depth that you wouldn’t normally experience in a Gua Feng Zhai puerh which is usually quite light and pungent.  It almost tastes autumnal, unnami, deeper, and warmer.  I wonder if we are going to see more of this mixing of yellow leaves?  It’s almost worth trying for this experience.

The qi is of medium- mild intensity and makes the body feel as if it is floating at times and the mind feels a bit relaxed.  The mouthfeel can be a bit off putting and dry and almost constricting if this tea is pushed too hard.  This tea lacks stamina and had to be pushed hard early but then the dryness feeling in the throat and mouth are more apparent.

Reflecting on my day, I felt pretty good drinking this yesterday…

Peace Comic for 2018.10.17

New Cyanide and Happiness Comic

explodingdog: Photo

OCaml Planet: OCamlFormat 0.8

We are proud to announce the release of OCamlFormat 0.8 (available on opam). To ease the transition from the previous 0.7 release here are some highlights of the new features of this release. The full changelog is available on the project repository.

Precedence of options

In the previous version you could override command line options with .ocamlformat files configuration. 0.8 fixed this so that the OCamlFormat configuration is first established by reading .ocamlformat and .ocp-indent files:

margin = 77
wrap-comments = true

By default, these files in current and all ancestor directories for each input file are used, as well as the global configuration defined in $XDG_CONFIG_HOME/ocamlformat. The global $XDG_CONFIG_HOME/ocamlformat configuration has the lowest priority, then the closer the directory is to the processed file, the higher the priority. In each directory, both .ocamlformat and .ocp-indent files are read, with .ocamlformat files having the higher priority.

For now ocp-indent options support is very partial and is expected to be extended in the future.

Then the parameters can be overriden with the OCAMLFORMAT environment variable:


and finally the parameters can be overriden again with the command lines parameters.

Reading input from stdin

It is now possible to read the input from stdin instead of OCaml files. The following command invokes OCamlFormat that reads its input from the pipe:

echo "let f x = x + 1" | ocamlformat --name -

The - on the command line indicates that ocamlformat should read from stdin instead of expecting input files. It is then necessary to use the --name option to designate the input ( here).

Preset profiles

Preset profiles allow you to have a consistent configuration without needing to tune every option.

Preset profiles set all options, overriding lower priority configuration. A preset profile can be set using the --profile (or -p) option. You can pass the option --profile=<name> on the command line or add profile = <name> in an .ocamlformat configuration file.

The available profiles are:

  • default sets each option to its default value
  • compact sets options for a generally compact code style
  • sparse sets options for a generally sparse code style
  • janestreet is the profile used at JaneStreet

To get a better feel of it, here is the formatting of the mk_callback function from the OCaml compiler with the compact profile:

let mk_callback rest name desc = function
  | None -> nothing
  | Some f -> (
      fun () ->
        match rest with
        | [] -> f name None
        | (hidden, _) :: _ -> f name (Some (desc, hidden)) )

then the same function formatted with the sparse profile:

let mk_callback rest name desc = function
  | None ->
  | Some f ->
      fun () ->
        ( match rest with
        | [] ->
            f name None
        | (hidden, _) :: _ ->
            f name (Some (desc, hidden)) )

Project root

The project root of an input file is taken to be the nearest ancestor directory that contains a .git or .hg or dune-project file. If the new option --disable-outside-detected-project is set, .ocamlformat configuration files are not read outside of the current project. If no configuration file is found, formatting is disabled.

A new option, --root allows to specify the root directory for a project. If specified, OCamlFormat only takes into account .ocamlformat configuration files inside the root directory and its subdirectories.


This release also contains many other changes and bug fixes that we cannot detail here. Check out the full changelog.

Special thanks to our maintainers and contributors for this release: David Allsopp, Josh Berdine, Hugo Heuzard, Brandon Kase, Anil Madhavapeddy and Guillaume Petiot.

explodingdog: Photo

Daniel Lemire's blog: Validating UTF-8 bytes (Java edition)

Strings are just made of bytes. We send and receive bytes over the network all the time. If you know that the bytes you are receiving form a string, then chances are good that it is encoded as UTF-8. Sadly not all streams of bytes can be valid UTF-8 strings. Thus you should check that your bytes can be safely parsed as strings.

In earlier work, I showed that you needed as little as 0.7 cycles per byte to do just that validation. That was in C using fancy instructions.

What about Java?

Designing a good benchmark is difficult. I keep things simple. I generate 1002-byte UTF-8 string made of random (non-ASCII) characters. Then I try to check how quickly different functions validate it.

Here are the contenders:

  1. You can use the standard Java API to entirely decode the bytes, and report false when there is an error:

    CharsetDecoder decoder = 
    try {
    } catch (CharacterCodingException ex) {		        
          return false;
    return true;
  2. You can try a branchless finite-state-machine approach:

    boolean isUTF8(byte[] b) {
        int length = b.length;
        int s = 0;
        for (int i = 0; i < length; i++) {
          s = utf8d[256 + s 
               + (utf8d[b[i] & 0xFF] & 0xFF) ];
        return s == 0;

    … where utf8d is some array where the finite-state machine is coded.

  3. Finally, you can use the isWellFormed from the Guava library. It simply tries to find the first non-ASCII character and then it engages into what is a straight-forward series of if/then/else.
  4. Here are the timings in nanoseconds per 1002-byte strings. I estimate that my processor runs at about 3.4 GHz on average during the test (verified with perf).

    Java API 2000 ns 6.7 cycles per byte
    branchless 2200 ns 7.5 cycles per byte
    Guava’s if/then/else 750 ns 2.6 cycles per byte

    My code is available.

    The most obvious limitation in my benchmark is that Guava’s if/then/else approach is sensitive to branch mispredictions while my benchmark might not be rich enough to trigger difficult-to-predict branches.

Daniel Lemire's blog: Nobel-prize winner Romer on innovation and higher education

Romer was one of the the winners of the Nobel prize in economics this year (2018). He wrote about higher education and innovation. One of his proposals is the introduction of more generous scholarships for students in science and engineering.

His starting point is that to innovate and get richer, we need more and more people doing R&D. Investing more in R&D is not sufficient. You might think that, in the long run, it could be. If firms spend more on R&D, then the wages of scientists and engineers will go up, and this will attract more scientists. However, students lack this information.

One the one hand, giving money to undergraduate students who want to pursue science and engineering is a good way to signal to these students that society wants more scientists and engineers. At the graduate level, though the current funding might be considered adequate, it is very much in the end of (older) professors who can be quite directive. The general intuition, I believe, is that Romer wants to give back to young and bright students some freedom and power in deciding what they want to do. In particular, I think Romer believes that some of these students might be interested in doing work that is less “conventional” (i.e., maybe harder to publish in conventional venues) but more “useful”. In effect, he wants to fight against stagnation in higher education.

In his own words:

Unfortunately, in the last 20 years, innovation policy in the United States has almost entirely ignored the structure of our institutions of higher education. As a result, government programs that were intended to speed up the rate of technological progress may in fact have had little positive effect.

This pattern of outcomes, increased numbers of Ph.D. recipients and steadily worsening academic job prospects, can be explained by increased subsidies for Ph.D. training.

The picture that emerges from this evidence is one dominated by undergraduate institutions that are a critical bottleneck in the training of scientists and engineers, and by graduate schools that produce people trained only for employment in academic institutions (…)

I am not exactly sure why all student unions are not pushing his ideas to governments. It sure sounds attractive: give engineering students more money and get better growth.

I love universities. I have spent almost all my life in them. But, like Romer, I fear that there is a bit too much stagnation. There is insufficient pressure to innovate and too many incentives favouring excess conservatism. Giving back power, not to younger professors, but to actual students, is probably a wise move.

Yet I am somewhat skeptical of Romer’s overall view that increasing the supply of engineers is key. Great many students trained in engineering do nothing even vaguely resembling R&D, and when they do, they do not do it for long. Simply put, graduates go where jobs and money is. It is not the case that we live in a Spiderman world where smart engineering students graduate to go work in an industrial lab developing new robotics.

We need to make the spiderman world possible: make it so that young engineers can start a small company building prototypical exoskeletons for the weaker people to walk again. Do that, and you won’t have a shortage of young new engineers for long.

The Shape of Code: The best or most compiler writers born in February?

Some years ago, now, I ran a poll asking about readers’ month of birth and whether they had worked on a compiler. One hypothesis was that the best compiler writers are born in February, an alternative hypothesis is that most compiler writers are born in February.

I have finally gotten around to analyzing the data and below is the Rose diagram for the 82, out of 132 responses, compiler writers (the green arrow shows the direction and magnitude of the mean; code+data):

Rose diagram of birth month of compiler writers

At 15% of responses, February is the most common month for compiler writer birthdays. The percentage increases to 16%, if weighted by the number of births in each month.

So there you have it, the hypothesis that most compiler writers are born in February is rejected, leaving the hypothesis that the best compiler writers are born in February. How could this not be true :-)

What about the birth month of readers who are not compiler writers? While the mean direction and length are more-or-less the same, for the two populations, the Rose diagram shows that the shape of the distributions are different:

Rose diagram of birth month of non-compiler writers

Michael Geist: Does Canadian Privacy Law Apply to Google Search?

Last week, the Privacy Commissioner of Canada filed a reference with the federal court in a case that was billed as settling the “right to be forgotten” issue. Yet a careful read of the application reveals that the case isn’t about the right to be forgotten. Rather, it involves a far more basic issue: is Google’s search engine service subject to PIPEDA, Canada’s private sector privacy law? The case arises due to a right-to-be-forgotten complaint (a complainant wants search results referencing news articles they say are outdated, inaccurate, and disclose sensitive information removed from the Google search index), but the court is not being asked whether the current law includes a right-to-be-forgotten. Instead, the very application of Canadian privacy law to Google search is at stake.

The two questions in the reference are as follows:

1. Does Google LLC (“Google”), in the operation of its search engine service, collect, use or disclose personal information in the course of commercial activities within the meaning of paragraph 4(1)(a) of PIPEDA when it indexes web pages and presents search results in response to searches of an individual’s name?

2. Is the operation of Google’s search engine service excluded from Part 1 of PIPEDA by virtue of paragraph 4(2)(c) of PIPEDA because it involves the collection, use or disclosure of personal information for journalistic, artistic or literary purposes and for no other purpose?

Google maintains that the right to be forgotten would violate the Canadian Charter of Rights and Freedoms, but given the limited scope of the application the court does not need to address the issue. The Privacy Commissioner argues that it first needs certainty on the application of the law to Google search. If it applies, the Commissioner will proceed with a complaint investigation. The application is a bit surprising given that the record before the court is very thin. The Commissioner could presumably have conducted the investigation, reached a finding, and then had the issue raised before the courts with a stronger record and all the issues on the table.

While the issue in the reference may surprise some given that Google’s economic success, federal privacy law is limited to commercial activities and contains several notable exceptions. As I argued when the Privacy Commissioner first raised the right to be forgotten issue in a consultation earlier this year:

there is reason to doubt whether the Personal Information Protection and Electronic Documents Act (PIPEDA) applies to search results. Federal privacy law is limited to commercial activity, yet search results are typically provided at no cost to the user nor the sites being indexed. Indeed, all the activity behind search – indexing content, developing algorithms to identify relevant results, and the display of those results – fall outside a conventional commercial transaction. There may be paid results or other advertising displayed with some search results, but those are arguably secondary to the indexing, ranking, and display of the relevant links.

Moreover, David Fraser unpacked the arguments around the exception for journalistic or literary purposes in this 2016 post, noting:

Search engines are fundamentally journalistic or literary operations, particularly when providing a user with access to news media content. At the same time, they are also providing news media producers with access to readers.

The analysis suggests that the Privacy Commissioner’s reference is no slam dunk. Indeed, there are strong arguments that PIPEDA does not apply to the search indexing and display. The right to be forgotten is problematic for several reasons, but the issue – along with the limited scope of PIPEDA – would be better addressed as part of a long overdue review and update to Canada’s privacy laws.


The post Does Canadian Privacy Law Apply to Google Search? appeared first on Michael Geist.

CreativeApplications.Net: Weather Thingy – Real time climate sound controller

Weather Thingy – Real time climate sound controller
Created by Adrien Kaeser at ECAL (Media and Interaction Design Unit), Weather Thingy is a custom built sound controller that uses real time climate-related events to control and modify the settings of musical instruments.

OCaml Weekly News: OCaml Weekly News, 16 Oct 2018

  1. Next OUPS meetup October 23rd 2018
  2. Dune 1.4.0
  3. State of OCaml and web assembly

Perlsphere: Dave Rolsky Nomination for TPF Board

Dave Rolsky is our next nominee to join the Perl Foundation board. Dave is well known in the Perl community, for his extensive contributions to CPAN and for his frequent conference talks and classes. If you'd like to know a little more, he conveniently posts his resume on-line on his website.

Below is some additional information on how Dave feels he can contribute to the board:

  • Why do you want to become a member of the TPF Board?

I have a lot of nonprofit experience and I think I can help with TPF's mission because of that. I was a co-founder and board member of a local animal advocacy group for about 19 years, and during that time I helped with fundraising, event organization, administration, and pretty much everything else.

  • What existing TPF initiative(s) are most important to you and why?

For me, the most important programs are conferences and Perl 5 core maintenance fund programs. Conferences are vital for having any sort of Perl community. The maint fund is crucial in order to make sure that the Perl 5 core continues to advance. It's a tough code base to work on, so we need to support the people who can do that work.

  • What goals would you like to see TPF pursue in the future?

I wonder if there's room for additional fundraising. There are many more companies using Perl than are represented among the existing sponsors. That said, this sort of fundraising can be quite challenging and time consuming.

I'm also interested in the potential for other sorts of Perl promotion and outreach programs. For example, maybe some sort of targeted grants aimed at producing high quality videos, etc.

Following our recently established process, this post will allow for constrictive public input on Dave's nomination for two weeks, after which the board will vote.

Disquiet: Applied Loop Theory from Indonesia

It will not be surprising that sometimes the most enticing ambient music is made with the most minimal elements. No phalanx of gear and patch cables, no state-of-the-art computer running multiple programs in unison, no battery of controllers offering gestural interfaces to the musician. Just a combination of tape loop and a small number of effects — that is all it takes for Fahmi Mursyid, of Bandung, Indonesia, to usher the listener into a lush, artfully circumspect zone of sonic density.

“I discovered that the most interesting music of all was made by simply lining the loops in unison, and letting them slowly shift out of phase with other” — that quote from the minimalist composer Steve Reich introduces the video on YouTube, where Mursyid has posted a live recording of the track’s performance, simply titled “Ambient / Drone : Tape Loops Experiment.” In it, a looper allows Mursyid to layer segments of the tape, though never so much that the desolate quietude of its opening instance is ever fully lost.

This is the latest video I’ve added to my YouTube playlist of recommended live performances of ambient music. Video originally posted at Mursyid’s YouTube channel back in October 2017. More from Fahmi Mursyid at

Professor Fish: Lambdas Query with Reason

I will be visiting Simon Thompson and the PLAS seminar organized by Olaf Chitil at University of Kent on 15 Oct 2018.


Ralf Lämmel, Facebook London and University of Koblenz-Landau (on leave)


Lambdas Query with Reason


Much of the Big Data hype focuses on the size of data and on the use of ML/AI to get something out of the data and on the programming technologies and infrastructure to deal with size, ML, and AI. Our research focuses on a complementary problem: the ontological semantics of data and how to use it for querying data programmatically and to help programmers in the tradition of static typing.

In this talk, I present two strongly connected pieces of work: i) $\lambda_{\mathit{DL}}$ -- a lambda calculus with description logic-aware type system and means of querying semantic data ('triples'); ii) a completed language integration such that description logic and a subset of the standardized Sparql language are embedded into Scala. The integration reuses existing components -- triple store, ontological reasoner,  and Sparql query engine -- and it extends the Scala type system appropriately.

Joint Work


The research discussed here is carried out outside my mandate at Facebook, as part of my continued research affiliation with the SoftLang Team and collaboration with the WeST Institute at University of Koblenz-Landau. 

Slides of the talk


Further Reading


CreativeApplications.Net: House Party – Scavenged, mechanical and synthesised orchestra

House Party – Scavenged, mechanical and synthesised orchestra
Created by Neil Mendoza during an artist in residence at Recology SF,  House Party is a musical installation that explores prized possessions in their native habitat. All the materials used to create this artwork, from the furniture to the computers, were scavenged from the discarded trash. The music is a mix of mechanical and synthesised sounds.

Disquiet: Stasis Report: Davachi ✚ Eno/Shields ✚ Classic Oliveros ✚

The latest update to my Stasis Report ambient-music playlist on Spotify and Google Play Music. The following five tracks were added on Sunday, October 14. Three of the tracks are from the past month, one is from the summer, and one dates back to 1991.

✚ “Full Moon Serenade” off Arrive without Leaving from Laraaji, with Arji OceAnanda and Dallas Acid, released by Flying Moonlight on October 12, 2018:

✚ “Gloaming” by Sarah Davachi off Gave in Rest, released by Ba Da Bing Records on September 14, 2018:

✚ “The Weight of History” by Brian Eno with Kevin Shields. Initially an exclusive for Record Store Day, it was released this past week to streaming services:

✚ “Triangle Waves” by Hainbach off Ambient Piano Works, released by the Seil Records label back on July 26, 2018:

✚ “Phantom” by Deep Listening Band from the album The Ready Made Boomerang, recorded in the Fort Warden Cistern in 1988, and released on the New Albion label in 1991. The core bands is Pauline Oliveros, Stuart Dempster, and Panaiotis, with guests Thomasa Eckert and William O. Smith:

Some previous Stasis Report tracks were removed to make room for these, keeping the playlist length to roughly two hours. Those retired tracks (from North Atlantic Drift, Mark Rushton, Les Momies de Palerme, and Grouper, plus Christina Vantzou remixing Balmorhea, and a duet of Julia Kent and Jean D.L) are now in the Stasis Archives playlist (currently only on Spotify).

Gongfu Girl: Floating Leaves Tea’s Documentary on Dong Ding Oolong

Shiuwen Tai and Jake Knapp are partway through the process of creating a wonderful full-length documentary on the producers of Dong Ding Oolong in Taiwan. They will be going back to Taiwan next month to shoot more footage and do more research, but here is a short film of some of the content they have already created. The film grants us the rare opportunity to hear about this exceptional tea in the producers’ own voices.

We encourage you to keep an eye on this project, and add your financial support if you have the resources. Learn more, and donate to the project on the Floating Leaves website.

Possibly Related Posts:

Better Embedded System SW: Potentially deadly automotive software defects

Here's a list of potentially deadly automotive software defects, mostly from NHTSA Recall notices.

There is still a lot of resistance to the idea that car software can have fatal defects that result in deaths not due to driver error. In fact such defects do exist, and for many of them we've just gotten lucky that few or no people have died as a result. Recently we've been seeing more deadly software defects being reported. This posting is intended to give a taste of what's been going on in automotive software quality. This is a very partial list of bad software that was deployed on production vehicles in the US.

This list includes a variety of subsystems including unintended acceleration, steering failures, brake assist failures, headlights going out while driving, and quite a lot of air bag failures. There are software defects, configuration management errors, leaving the module in "factory mode" when shipped, and even EEPROM wearout. Overall this paints a picture of an industry that is shipping a lot of safety critical software defects.  In fairness, yes, these are all ones that are being fixed, and there are certainly other causes of fatal accidents. (Presumably there are others not yet being fixed, if for no other reason than that the cars are still new on the road. But at least some of these recalls sure look like mistakes that simply should not be happening in life critical software.)

The list is almost certainly much, much longer, and I simply ran out of time trying to go through the full NHTSA database.  And even that doesn't include everything that happens. The list is heavy in 2013-2015 mostly because that was the most convenient source material I found. There is no reason whatsoever to believe things have gotten dramatically better since then.

The purpose of this list is not to call out any particular company or software defect. Rather, the point is that safety critical software defects are both pervasive and persistent across the automotive industry.  Yes, we can have discussions about how many vehicles vs. how many defects. But it still does not instill confidence about life critical software in a self-certifying industry that in the US is not required to follow international software safety standards.
  • "Toyota recalls trucks, SUVs and cars to fix air bag problem" / Oct 2018
    • "Toyota says the air bag control computer can erroneously detect a fault when the vehicles are started. With a fault, the air bags may not deploy in a crash. The company wouldn't say if the problem has caused any injuries."
  • "Toyota isssues second prius recall in a month on crash risk" / Oct 2018
  • "Safety systems may be disabled when in use" (Mitsubishi) / Sept. 2018
    • "Inappropriate" software in the hydraulic ECU causes the pump to generate electrical noise that resets the ECU. That reset can cause: automatic braking to be cancelled, wheels lock momentarily, stability control to be momentarily cancelled, release break of brake auto-hold is active.
    • NHTSA recall 18V-621
  • "GM recalls more than 1M pickups, SUVs for power steering problem" / Sept. 2018
    • 30 crashes; two injuries, no deaths attributed
    • Voltage drop and return causes momentary power steering failure; fixed via software update
  • "Expert investigation says BMW software to blame" / Aug 2018
  • "Fiat Chrysler recalls 5.3 million vehicles for cruise control defect" / May 2018
  • Incorrect Speed Limitation Software (Mercedes-Benz) / 2018
    •  These vehicles may be equipped with the incorrect reverse speed limitation software. While in reverse, any abrupt changes in steering while exceeding 16 MPH may cause the vehicle to become unstable.
    • NHTSA recall 18V-457
  • Cruise control may not disengage (Mercedes-Benz) / 2017
    • ESP software malfunction may cause engine not to reduce power regardless of speed, driving situation, or brake application.
    • NHTSA recall 17V-713
  • "Fiat Chrysler recalls 1.25 million trucks over software error" / 2017
  • Unintended vehicle movement (Ford) / 2017
    • Quick movement of gear shift can cause up to 1 second selection of reverse gear when shifting into intended drive (forward) gear.
    • NHTSA recall 17V-669
  • Air bags may not deploy in a crash (Mitsubishi) / 2017
    • SRS ECU misinterprets vibrations, disabling air bags from deploying in a crash
    • NHTSA recall 17V-686
  • Inadvertent Side Air Bag Deployment (Chrysler) / 2015
    • Unexpected side airbags may unexpectedly deploy due to incorrect software calibration; may result in crash or injury
    • NHTSA Recall 15V-460 and 15V-467
  • Radio Software Security Vulnerabilities (Chrysler) / 2015
    • Exploitation of the software vulnerability may result in unauthorized remote modification and control of certain vehicle systems, increasing the risk of a crash.
    • NHTSA Recall 15V-461, 15V-508
  • "Toyota recalls 625,000 hybrids: Software bug kills engines dead with thermal overload" / July 2015
    • Software settings for motor/generator ECU cause thermal damage, then propulsion shutdown
    • Note previous recall 14V-053 for similar sounding problem
  • Tire pressure monitoring system message (Ferrari) / 2015
    • TPMS displays 50 mph speed limit warning instead of "do not proceed" warning due to software defect. Driving on punctured tire would cause loss of vehicle control and crash.
    • NHTSA Recall 15V-306
  • Airbag Incorrect Deployment Timing (BMW) / 2015
    • Driver front air bag timing incorrect / fails to meet FMVSS 208 due to programming error
    • NHTSA Recall 15V-148 
  • Passenger Air Bag may be disabled (Jaguar) / 2015
    • Light weight adult may be misclassified, disabling air bag
    • NHTSA Recall 15V-093
  • Unintended side air bag deployment (Chrysler) / 2015
    • Unintended side curtain and seat air bag deployment during operation / software reflash
    • NHTSA Recall 15V-041
  • Brake controller might not activate trailer brakes (Ford) / 2015
    • Trailer brakes not activated when towing, lengthening stopping distance, increasing risk of crash. Fixed via powertrain control module reflash.
    • NHTSA Recall 15V-710
  • On but unattended vehicle may cause CO poisoning (GM) / 2015
    • Vehicle may turn on gasoline engine to recharge hybrid battery, causing carbon monoxide poisoning (e.g., if car is in garage)
    • NHTSA Recall 15V-145
  • Incorrect electric power steering software setting (Jaguar) / 2015
    • Power steering set in factory operating mode. Vehicle can experience additional steering inputs from EPS causing driver to lose ability to control the vehicle.
    • NHTSA Recall 15V-569
  • Air bag may not detect passenger in seat (Nissan) / 2015
    • Configuration management error: incorrect occupant classification software version installed, resulting in no air bag deployment
    • NHTSA Recall 15V-681
  • "Honda admits software problem, recalls 175,000 hybrids" / July 2014
  • Transmission calibration error (Ford) / 2014
    • Due to software calibration error vehicle may be in and display "drive" but engage "reverse" for 1.5 seconds.
    • NHTSA Recall 14V-204
  • Headlights may unintentionally turn off (Motor Coach Industries) / 2014
    • A mux controller may unintentionally turn off headlights while vehicle is in gear
    • NHTSA Recall 14V-370
  • Brake vacuum pump may stop functioning (Mitsubishi) / 2014
    • Software defect causes false detection of stuck relay, disabling brake power assist
    • NHTSA Recall 14V-522
  • Loss of brake vacuum assist (GM) / 2014
    • Loss of power brake assist; fixed with software reflash
    • NHTSA Recall 14V-247
  • Reprogram sensing and diagnostics module (GM) / 2014
    • Module left in "manufacturing mode" when shipped, disabling airbags
    • NHTSA Recall 14V-247
  • Passenger airbag may be disabled (Jaguar) / 2014
    • EEPROM wearout (which is due to a software defect) causes airbag to be partially or totally disabled
    • NHTSA Recall 14V-395
  • Hybrid transmission software (Champion Bus) / 2014
    • Software may improperly raise vehicle's engine speed during downshifts without the driver's input. The increase in speed may result in unintended acceleration.
    • NHTSA Recall 14V-303  (See also 14V-043; 14V-043 Navistar; 14V-026 Kenworth)
  • Cruise control unintended continued acceleration (Chrysler) / 2014
    • Unintended continued acceleration after releasing accelerator due to adaptive cruise control software; may increase risk of crash
    • NHTSA Recall 14V-293
  • Side-curtain rollover airbag deployment delay (Ford) / 2014
    • Errors in the programming software which may result in delayed deployment of side-curtain rollover airbag
    • NHTSA Recall 14V-237
  • Improper seat belt restraint software (Toyota) / 2014
    • Improper software can use insufficient force in crash (e.g., 110 pound passenger force for larger passenter)
    • NHTSA Recall 14V-272
  • Air bag may not detect passenger in seat (Nissan) / 2014
    • Software may incorrectly classify passenger seat as empty; airbag will not deploy
    • NHTSA Recall 14V-138
  • Vehicle may gradually accelerate unexpectedly (Nissan) / 2014
    • If lost signal from throttle position sensor is regained (intermittent fault) fail-safe mode is deactiveted, opening throttle resulting in "gradual" acceleration due to software error.
    • NHTSA Recall 14V-583
  • Inadvertent Air Bag deployment (Ram) / 2014
    • Side air bags deploy when hitting potholes; fixed via software update
    • NHTSA Recall 14V-528
  • Side airbags may deploy on the incorrect side (Chrysler) / 2013
    • Airbag on the wrong side of the vehicle could deploy, leaving occupants with no airbag protection at point of impact due to a software defect
    • NHTSA Recall 13V-283
  • Delayed deployment or non-deployment of airbags (Chrysler/Jeep) / 2013
    • Airbag deployment delayed or no airbag deployment in rollover due to software defect
    • NHTSA Recall 13V-233
  • Airbag deployment software (Chrysler) / 2013
    • Incorrect software installed; air bags may not deploy or might deploy improperly
    • NHTSA Recall 13V-291
  • Improper occupant classification / 2012
    • Incorrect software installed that misclassifies passengers; airbag might not deploy when it should, deploys incorrectly, or deploys when it should not
    • NHTSA Recall 12V-198
  • Occupant classification system (Hyundai) / 2012
    • Software might miss small stature adults and not deploy airbag.
    • NHTSA Recall 12V-354 
  • Cruise Control System/Brake Switch Failure (Mercedes-Benz) / 2011
    • Brake pedal may not automatically disengage cruise control as expected. (Other methods still work.)  If driver pumps brakes it will take unusually high force to stop vehicle.
    • NHTSA Recall 11V-208
  • Engine stall prevention assist software (Honda) / 2011
    • Unexpected vehicle movement from ECU software providing hybrid electric power and unexpectedly moving vehicle in reverse direction if the engine stalls.
    • NHTSA Recall 11V-458
  • Loss of steering power assist (Toyota) / 2010
  • "Toyota: software to blame for Prius brake problems" / 2010
  • ABS ECU Programming (Toyota) / 2010
    • Inconsistent brake feel; increased stopping distances for a given pedal force due to ABS programming, raising the possibility of a crash.
    • NHTSA Recall 10V-039
  • Restraint control module (Land Rover) / 2009
    • Passenger airbag disabled as a result of temporary loss of CAN network messages and a software defect
    • NHTSA Recall 09V-467
  • Double Clutch Gearbox (BMW) / 2008
    • Engine stall increasing risk of a crash due to software multistage downshift defect
    • NHTSA Recall 08V-595
  • Passenger sensing system (GM) / 2008
    • Software condition within passenger sensing system may disable passenger air bag (or enable when it should be disabled).
    • NHTSA Recall 08V-582
  • Passenger air bag fail to deploy (Nissan) / 2008
    • Passenger air bag might not deploy due to low battery voltage combined with software defect
    • NHTSA Recall 08V-066
  • Engine Control Module Software Update (VW) / 2008
    • Software defect can cause unexpected engine surge that can "result in a crash without warning."
    • NHTSA Recall 08V-235
  • SRS Electronic control unit software (Maserati) / 2007
    • Passenger air bag might not deploy if car battery is not fully charged due to software defect
    • NHTSA Recall 07V-550
  • SRS control unit software (Volvo) / 2007
    • Two software errors result in late deployment of side airbags
    • NHTSA Recall 07V-500
  • Passenger side airbag does not deploy (Volkswagen) / 2006
    • A weak battery could cause air bag control unit to deactivate due to a software defect; airbag will not deploy in a crash
    • NHTSA Recall 06V-454
  • Electronic Throttle Control (GM) / 2006
    • ETC torque monitoring failsafe disabled, permitting throttle opening greater than commanded (i.e., UA) due to a software defect
    • NHTSA Recall 06V-007
  • Powertrain control module (DaimlerChrysler) / 2006
    • Software can cause momentary lock up of drive wheels at speeds over 40 mph if operator shifts from drive to neutral and back.
    • NHTSA Recall 06V-341
  • BMW/Driver's seat occupant detection system / 2004
    • Software can't reliably determine if driver seat is occupied; airbag may not deploy.
    • NHTSA Recall 04V-379
  • Jaguar/Forward drive gear / 2004
    • Selecting forward drive gear could select reverse while in forward motion, without indication. (Apparent limp home mode logic defect.)
    • NHTSA Recall 04-024
  • BMW/ENgine Idle Speed/DME Idle Control / 2003
    • Increase of idle speed up to 1,300 RPM. If a gear is selected, the driver may feel as if the vehicle is being pushed.
    • NHTSA Recall 03V124
  • KIA/ABS Electronic Control Module / 2003
    • A programming error in ABS cases reduced braking force at speeds below 25 mph, extending stopping distances
    • NHTSA Recall 03V-158
  • "GM Admits Brake Flaws After Inquiry" / July 1999
  • Chrysler/Interior systems: air bag / 1996
    • Air bag software error which can delay air bag deployment
    • NHTSA Recall 96V-060

    Noteworthy: These are software-related problems with cars that are worth knowing about, but less black and white because, for example, there has been no general recall issued.
    • To access NHTSA recalls you need to visit then select Vehicle then select "search by NHTSA ID" which can take a few mouse clicks to find on the indicated NHTSA web site.  (It might be the interface has changed since I posted this; you might need to poke around to find the lookup function.)
    • This is a work in progress and a VERY incomplete list.  I thought this would be a one-day exercise, but, well, no. If you know of something really important I've missed, please let me know!  More importantly, if you know of someone who is interested in maintaining a list like this, especially as a more rigorous academic study, I'd be happy to collaborate.  I simply don't have the time to keep up with this.
    • Reasonable people can perhaps disagree about the inclusion or exclusion of some items. But the point is really more about the volume rather than any individual item. By definition each recall is a defect that should not have been shipped, because it resulted in a recall.  I've paraphrased the recall reports. If you want to know more be sure to look at the supporting documents on the NHTSA web site, which often have more details than the summaries.
    • To be "deadly" these defects have to be software faults that either have caused, could reasonably cause, or should have reasonably prevented significant injury or death. (This includes defects in failsafes, for example) A partial list includes: un-commanded acceleration (UA), stalling at speed (dangerous when merging onto a highway), failure to deactivate cruise control, extended braking distances, airbag disablement, and incorrect airbag deployment.  What happens in practice depends upon the circumstances.
    • This should not be construed to be an expert opinion of root cause of any particular mishap. I am summarizing publicly available information and have not independently verified the technical facts in each case. Those public sources might be incorrect, or I might not have fully understood the implications of the statements in those sources. Again, this is more about the overall trend and not any particular incident report.
    • There are plenty of commenters who say things for unintended acceleration like "just apply the brakes, because brakes always overcome the engine." First, this is simply not true in many situations due to loss of vacuum assist, drivers with weak leg strength etc. A single point fault or sufficiently likely multi-point fault should not be trying to kill the occupants in the first place, so it's still a defect.
    • The air bag software problems were found in:  I independently verified them on the NHTSA database.
    • I independently verified on the NHTSA database some drivetrain recalls found here:
      and here:
    • If you want to go exploring, you can download a copy of the raw database here that I used for some of the other defects:

    OUR VALUED CUSTOMERS: Parents just don't understand...

    (32 page collection of ALL NEW OVC comics available in the OVC STORE.)

    Jesse Moynihan: Forming 265

    Tea Masters: Washington and tea (part 2)

    This article continues to look at Washington's biography from a tea point of view. (See the first article here). This time, I'm illustrating it with a special Chaxi on an old American flag. I call it, 'Crossing the Delaware', which is how General Washington turned the tide against the British army at the end of 1776. The wooden trays are symbols for the barges that were used to cross the river. I'm using 13 cups, one for each State in the Union at that time. Washington is symbolized with an old Dehua white teapot, his preferred color for his horse. The tea is Lapsang Souchong, the first red tea in history and one that has gone through smoke, for Washington was the first president and went through fire in battle! The dark bowl is a symbol for the black slavery in the US, the major stain in Washington's legacy. (He freed his own slaves in his will and hoped to set an example.)
    - Page 257: "I told my messmates that I could not carry our kettle any further. (...) Of what use was it? They had nothing to cook."
    Hunger was another problem that plagued the American forces in their fight against the British.

    - Page 331: "Tea and coffee replaced more potent beverages."
    During periods of mourning the death of family members, alcohol wasn't consumed. 
    - Page 451: "Suddenly an avid consumer again, he went shopping for teapots, coffee urns, and other silverware for entertaining guests at Mount Vernon."
    Having won the war, Washington turned to teapots! He's my hero!

    - Page 466: "Washington showed up in the room of a sick guest, proffering a hot cup of tea."
    The retired general remained a kind and decent host.
    - Page 467: "Drank tea there in a very large circle of ladies. (...) met Powel alone for teas, and corresponded with her."
    Washington was married, but liked the company of ladies. Did he have more than tea with them?

    - Page 534: "While the convention dragged on, Washington drank enormous quantities of tea at the City Tavern and the Indian Queen"
    In those days one would drink tea and socialize!
    - Page 578: "He and Martha (the first lady) decided that she would entertain female visitors every Friday evening from seven to ten, serving tea, coffee, ice cream and lemonade."
    This is how guests were entertained by the first president of the United States.

    - Page 579: "Another observer noted that Washington seemed less austere at his wife's teas."
    Tea made him feel more relaxed.

    - Page 583: "Far from shunting off decorating on his wife or subordinates, he trusted his detailed knowledge of the decorative arts. To create a tea service, he melted down some old silver and had the finished products engraved with his griffin crest. (...) Washington oversaw the purchase of many objets d'art, including porcelain figures, silver spoons, and a china set embellished with the eagle of the Society of the Cincinnati."
    An interest in art and elegance is what makes Washington complete. He knew that what you have shows to others who you are.

    - Page 617: "Eager to augment presidential dignity, he bought more than tree hundred pieces of gilt-edged porcelain for dinner parties."
    In those days, porcelain was also known as "white gold" and a sign of affluence.
    - Page 645: "She kept up her Friday-evening receptions, which came to be ridiculed as the Republican Court, even though Martha, the most unaffected of first ladies, frequently prepared tea and coffee for visitors herself."
    Even the modest wife of the hero of the USA was criticized by some! This is the lot of the powerful in a democracy. No matter what you do, you'll always have critics. 
    - Page 653: "In Georgetown, South Carolina, fifty ladies hosted him at a tea party."
    Washington didn't like to attend official ceremonies in all the towns he visited, but he did enjoy such tea parties with many ladies! He would sometimes skip town early to avoid the ceremonial goodbyes. On the other hand, he would enter towns on his white horse, even though he traveled in a coach between towns, because he knew this is the image the people wanted to see.
    - Page 684: "On December 13, 1792, Washington conversed with Jefferson about buying porcelain in Germany to dress the presidential table. He had inquired whether Samuel Shaw, the US consul at Canton, could acquire china there, but Shaw told him that it would take at least 2 years to arrive."
    Thanks to modern progress, 2 weeks would be sufficient to order porcelain from China nowadays!
    - Page 790: "While in Philadelphia, Washington delighted in joining Elizabeth Willing Powel for a number of teas and breakfasts that he conspicuously failed to enter into his diaries."
    He was human after all...
    - Page 807: "He (Dr. Craik) also had Washington inhale steam from a teapot filled with vinegar and hot water. When Washington tilted back his head to gargle sage tea mixed with vinegar, he nearly suffocated."
    Neither sage tea nor teapot could save Washington who died on December 14, 1799 at age 67.
    For this second Chaxi, I used a high mountain Oolong from a more recent tea mountain, Qilai. I chose it for its vigor and energy, characteristics that have become those of the United States.
    My thanks Ron Chernow for this well documented biography. Looking at the past helps to understand the present. It's fascinating to see that human intrigues about power haven't changed that much since Washington!

    Jesse Moynihan: Manly Update

    Justin and I just got back from a meeting with Frederator Studios. Looks like we’re 90% locked in to a 24 x 11 minute episode deal with the VRV streaming service. I think the initial budget will be solidified tomorrow. There are some logistical hurdles: most of our crew will need to be located in […]

    The Shape of Code: Facebook’s Big Code Summit

    I was at Facebook’s first Big Code Summit on Monday and Tuesday (I say the first, because I hope there is another one next year).

    The talks all involved machine learning (to be expected, given the Big Code in the event’s title). Normally I ignore papers on machine learning in software engineering, but understanding code is hard and we don’t know much about it. As I keep telling anyone who will listen, machine learning is the tool to use when you don’t know what you are doing (provided you have enough data).

    People have been learning code patterns for some time now, suggesting applications in code completion in the IDE and finding suspicious API sequences (e.g., a missing call). This is one area where machine learning is a natural solution: nobody has the time to write down all the common patterns, for all the common languages, and APIs are constantly changing. It makes no sense to solve this problem manually.

    So what was new and/or interesting?

    We got new and very interesting in the first talk, when Eran Yahav presented his group’s work on cod2vec, the paper was interesting, but the demo had the wow factor.

    I have not made up my mind about Michael Pradel‘s proposal for learning new coding rule checks. These rules are often created by people, but people with the necessary skill are thin on the ground. Machine learning requires something to learn from, how could coding rules be created this way. Michael’s group is working on a system where developers create the positive and negative cases and a machine learner figures out rules from these examples. Would the creation of these positive/negative examples prove to be just as hard as writing rules? I was not convinced that such an approach was practical, but if somebody wants to try it out, why not.

    I found Xinyun Chen‘s talk interesting, but then I’ve written lots of parsers, and automatically figuring out how to parse a language from examples will always get my attention. A few people in the audience thought that a better solution was typing in a grammar and parsing the ‘usual’ way. This approach assumes a grammar exists, can be strong-armed into a form that is practical to embed in a parser (requiring somebody skilled in the necessary black arts), to produce a system that will only process complete translation units (or whatever the language calls a unit of translation).

    Disquiet: Disquiet Junto Project 0354: Rituals & Canticles

    Each Thursday in the Disquiet Junto group, a new compositional challenge is set before the group’s members, who then have just over four days to upload a track in response to the assignment. Membership in the Junto is open: just join and participate. (A SoundCloud account is helpful but not required.) There’s no pressure to do every project. It’s weekly so that you know it’s there, every Thursday through Monday, when you have the time.

    Deadline: This project’s deadline is Monday, October 15, 2018, at 11:59pm (that is, just before midnight) wherever you are on. It was posted shortly before noon, California time, on Thursday, October 11, 2018.

    Tracks will be added to the playlist for the duration of the project.

    These are the instructions that went out to the group’s email list (at

    Disquiet Junto Project 0354: Rituals & Canticles
    The Assignment: Make music using instruments from a future that doesn’t fully remember our present.

    Background: Nathan Moody didn’t create a concept album when he recorded his recent album, The Right Side of Mystery, but he had a framework for deciding how to make his instruments, and even how he composed. He imagined a future American tribe living in the ruins of our current civilization, scrounging for materials to make instruments for their rituals, from everyday events to significant milestones of years and lives. The music itself would be incorrectly remembered combinations of past musical traditions and styles, melded together.

    Step 1: Consider that scenario of the future.

    Step 2: Check out instruments that Moody made to act out his imagined future:

    Step 3: Download the sonic source material that Moody recorded with those instruments, and that he has made available to participants in this Disquiet Junto project:

    Step 4: Roll one six-sided die, which will determine which of these tribe events/rituals you’ll compose music for:

    1 = Marriage
    2 = Death
    3 = Lullaby
    4 = Solstice or Harvest
    5 = Coming of Age
    6 = Coronation

    Step 5: Re-read the background description up above, and compose a piece of music for the event assigned to you in Step 4 using the sounds from Step 3. Bonus interim round: create your own instrument modeled after Moody’s.

    Six More Important Steps When Your Track Is Done:

    Step 1: Include “disquiet0354” (no spaces or quotation marks) in the name of your track.

    Step 2: If your audio-hosting platform allows for tags, be sure to also include the project tag “disquiet0354” (no spaces or quotation marks). If you’re posting on SoundCloud in particular, this is essential to subsequent location of tracks for the creation a project playlist.

    Step 3: Upload your track. It is helpful but not essential that you use SoundCloud to host your track.

    Step 4: Post your track in the following discussion thread at

    Step 5: Annotate your track with a brief explanation of your approach and process.

    Step 6: Then listen to and comment on tracks uploaded by your fellow Disquiet Junto participants.

    Other Details:

    Deadline: This project’s deadline is Monday, October 15, 2018, at 11:59pm (that is, just before midnight) wherever you are on. It was posted shortly before noon, California time, on Thursday, October 11, 2018.

    Length: The length of your track is up to you. (Think of the amount of time associated with the event/ritual assigned to you.)

    Title/Tag: When posting your track, please include “disquiet0354” in the title of the track, and where applicable (on SoundCloud, for example) as a tag.

    Upload: When participating in this project, post one finished track with the project tag, and be sure to include a description of your process in planning, composing, and recording it. This description is an essential element of the communicative process inherent in the Disquiet Junto. Photos, video, and lists of equipment are always appreciated.

    Download: Please consider setting your track as downloadable and allowing for attributed remixing (i.e., a Creative Commons license permitting non-commercial sharing with attribution, allowing for derivatives).

    Context: When posting the track online, please be sure to include this following information:

    More on this 354th weekly Disquiet Junto project (Rituals & Canticles / The Assignment: Make music using instruments from a future that doesn’t fully remember our present) at:

    Thanks to Nathan Moody ( for proposing and providing the sounds and images and ideas for this project.

    More on the Disquiet Junto at:

    Subscribe to project announcements here:

    Project discussion takes place on

    There’s also a Junto Slack. Send your email address to to join in.

    The Geomblog: Google's analysis of the dilemma of free speech vs hate speech

    Breitbart just acquired a leaked copy of an internal google doc taking a cold hard look at the problems of free speech, fake news and censorship in the current era. I wrote a tweet storm about it, but also wanted to preserve it here because tweets, once off the TL, cease to exist.

    Breitbart acquired an internal google doc discussing the misinformation landscape that the world finds itself in now: … 
    I almost wish that Google had put out this document to read in public. It's a well thought out exploration of the challenges faced by all of us in dealing with information dissemination, fake news, censorship and the like. And to my surprise, it (mostly) is willing to point figures backwards at Google and other tech companies for their role in it. (although there are some glaring omissions like the building of the new censored search tool in China). It's not surprising that people inside Google are thinking carefully about these issues, even as they flail around in public. And the analysis is comprehensive without attempting to provide glib solutions

    Obviously, since this is a doc generated within Google, the space of solutions is circumscribed to those that have tech as a major player. For e.g the idea of publicly run social media isn't really on the table, or even better ways to decentralize value assignment for news, or alternate models for search that don't require a business model. But with those caveats in mind, the analysis of the problems is reasonable.

    Tea Masters: Die Oolong Vorbereitung Klasse

    Heute war meine Studentin Deutsche. Deshalb werde ich versuchen auf Deutsch zu schreiben (obwohl wir die ganze Zeit nur auf Englisch gesprochen haben). Habt also ein bischen Verständnis wenn hier und da ein Paar Fehler vorkommen.
    Wir haben alle Tees mit diesem Gaiwan vorbereitet. Es ist neutral im Geschmack und kann für alle Tees verwendet werden. Deshalb ist es ein gutes Werkzeug um Tee zu lernen. Das einzige was uns unterscheidet sind die Tassen (meine sind Celadon-grün, Ihre sind Elfenbein-weiß) und wie wir das Wasser im Gaiwan reinkippen (wie stark, wie lange...) Ansonsten sind unsere Parameter die selben. Auch die Temperatur des Wassers ist die selbe: kurz gekocht.
     Wir fangen mit diesem Wenshan Baozhong an. Man stellt fest, daß die Farbe in den Tassen ganz unterschiedlich aussieht. Rechts sie der Baozhong viel frischer aus!
     Nach 2 Aufgüsse sieht man, daß meine Blätter (rechts) sich voll entwickelt haben. Die Blätter links sind noch klein. Deshalb schmeckten meine Aufgüsse viel intensiver und hatten mehr Nachgeschmack. Außerdem, sieht man, daß meine Blätter den Volumen des Gaiwans gut füllen. Sie haben sich harmonisch entfalten.

     Unser nächster Tee ist dieser Qilai Hochberg Oolong aus dem Frühling 2017. Weil seine Blätter kuglformig sind braucht sein erster Aufguß mehr Kraft und Zeit damit sie sich entfalten und deren Aromas wiedergeben. Das heißt auch, daß das Aufwärmen des Gaiwans ganz wichtig ist. Sogar der Deckel muß sehr warm sein!
     Und wenn man direkt in den Tassen eingießt geht weniger Wärme weg, als wenn man ein Krug benuzt.
     Es sieht so leicht und transparent aus, hat aber viel Kraft und Länge im Genuß!
     Bei diesem Tee hat meine Studentin sich sehr verbessert! Ihre Blätter (links) sind fast so offen wie meine. (Beim Baozhong hatte sie angefangen. Diesmal hat sie meine Technik kopiert.)
     Unser letzter Oolong ist dieser Hung Shui Oolong aus Alishan. "Solche Tees schmecken mir nicht. Ich finde sie immer zu stark und intensiv.", sagte sie mir.
    Solche Gedanken sollte man loslassen, ganz sanft, wie die Oolongblätter im Gaiwan... Unser erstes Kontakt mit dem Tee geschieht mit der Hand!
     Bei diesem Oolong, rate ich ganz sanft das kochendes Wasser einzugiessen.
     Dieser Duft bringt Freude!
    Die Farbe des gerösteten Oolongs ist viel gelber und dunkler.
    In Elfenbein Porzelan Tassen sieht es am schönsten aus! Es sieht fast wie Gold aus! Und es leuchtet fast auch so klar! "Humm. Das schmeckt doch sehr geschmeidig und süß! Das ist das erste Mal, daß dieser Tee mir so gefällt!" Das ist ein großartiger Kompliment, und ich habe mich sehr gefreut eine begeisterte und lernende Studentin aus Deutschland unterrichten zu können!
    Es weihnachtet fast schon ein bischen hier!

    Michael Geist: The Full “Culture Exception” That Isn’t: Why Canada Caved on Independent Cultural Policy in the USMCA

    In the final weeks of the USMCA negotiations, Canada signalled that a full cultural exception was a non-negotiable issue with Prime Minister Justin Trudeau wading in to emphasize the importance of the issue. While the resulting deal has garnered applause from many culture lobby groups (music, magazines, publishers, ACTRA), the reality is that the government did not obtain a full cultural exception. In fact, after criticizing the Conservatives for accepting exceptions to the cultural exception in the TPP (and making it a key issue in the CPTPP once the U.S. exited the agreement), the Liberal government similarly included two exceptions and agreed to an extension in the term of copyright that will have a far more damaging impact on access to Canadian culture than any proposed USMCA provision.

    The TPP featured two exceptions to a general cultural exception that excluded the sector from the ambit of provisions on cross-border trade in services:

    Canada reserves the right to adopt or maintain any measure that affects cultural industries and that has the objective of supporting, directly or indirectly, the creation, development or accessibility of Canadian artistic expression or content, except:
a) discriminatory requirements on services suppliers or investors to make financial contributions for Canadian content development; and 

    b) measures restricting the access to on-line foreign audiovisual content. 

    The first – discriminatory requirements to support Cancon development – raised a legitimate concern about the possibility of mandated Cancon payments by foreign providers. While Canadian groups have actively lobbied to require foreign providers such as Netflix to make payments similar to those paid by Canadian broadcasters and broadcast distributors, they have been less supportive of Netflix benefiting from those Cancon funding mechanisms. Payment mandates without the same benefits would likely (and rightly) be viewed as discriminatory and the TPP would have blocked such an approach. The second exception – restricting access to online video services – would have had no practical policy cost to Canada given its support for net neutrality and the unlikely prospect of supporting blocking foreign services. However, then-Canadian Heritage Minister Melanie Joly insisted that the exceptions had to go, telling an industry audience that “it was a tough battle, but I’m really grateful that it’s a battle we were able to win.”

    Despite having set the bar at a full cultural exception, the reality is that the USMCA also includes two exceptions to the exception, both of which use the treaty overrule regulatory decisions of the supposedly independent Canadian Radio-television and Telecommunications Commission. Annex 15-D requires Canada to (1) rescind the CRTC broadcast regulatory policy that stopped the simultaneous substitution policy for Super Bowl broadcasts (ie. the policy that recently allowed Canadians to watch the U.S. feed and U.S. commercials) and (2) enable U.S. home shopping broadcast services – namely QVC – to be authorized for distribution in Canada.

    Both exceptions are the direct result of U.S. lobbying. President Donald Trump told a rally last week that the simultaneous substitution issue simply took a two minute phone call with NFL Commissioner Roger Goodell and the QVC decision stems from a 2016 CRTC ruling that denied it distribution authorization in Canada. The Liberal government has typically adopted a hands-off approach on administrative issues such as these ones – particularly when the issue is still before the courts as is the simultaneous substitution policy – but it effectively intervened by caving to U.S. pressure in agreeing to overrule its regulator.

    Despite the industry applause, these exceptions are arguably a bigger surrender on the independence of Canadian cultural policy than the TPP envisioned. The TPP included two provisions that had little likelihood of being implemented and merely involved future policy flexibility (industry lawyer Peter Grant argued that they did not change anything at all). Yet the USMCA exceptions strike at the heart of Canada’s ability to make its own cultural policy decisions with the government caving on two issues of concern to U.S. lobby groups.

    Why the change in attitude toward the USMCA’s cultural exceptions?

    Simply put, Canadian cultural groups were concerned with possible restrictions on mandated Cancon contributions or Netflix blocking, but have few qualms about simultaneous substitution or permitting another shopping network to be distributed in Canada. The claims that a full exception is critical was always hyperbole as groups typically applaud exceptions they like and criticize those they don’t.

    In fact, the treaty’s biggest impact on Canadian culture will be the copyright term extension, which will reduce access to Canadian heritage for decades. That means the works of hundreds of Canadian authors, composers, and creators will be locked down until at least 2040. Moreover, with studies indicating that the term extension could add hundreds of millions to education costs, 20 extra years of copyright protection will not come cheaply. The Canadian government treats copyright as both industrial and cultural policy, hence the shared responsibility between ISED and Canadian Heritage. However, culture can’t be said to be off the table when the government agrees to changes to Canadian copyright that will limit severely access to our culture.

    Since many cultural groups support the extension, there is no criticism. But make no mistake: the USMCA represents a surrender of the independence of Canadian broadcasting and copyright policy with exceptions to cultural regulation that may be more significant than any found in previous Canadian free trade agreements.

    The post The Full “Culture Exception” That Isn’t: Why Canada Caved on Independent Cultural Policy in the USMCA appeared first on Michael Geist.

    Michael Geist: How Canada Surrendered Policy Flexibility for Data Localization Rules in the USMCA

    The digital policy implications of the USMCA have attracted increasing attention as Canadians consider the risks that the agreement could limit future policy flexibility. In particular, the agreement restricts the use of data localization, an increasingly popular legal method for addressing public interest concerns associated with the collection of online information by mandating that data be stored within the local jurisdiction. Restrictions on data localization are not entirely new to Canada, since similar provisions are found in the CPTPP (the successor to the Trans Pacific Partnership). That means that Canada has already agreed to limits on data localization with or without the USMCA. However, the USMCA’s data localization provision differs in a significant way, suggesting that the Canadian government has agreed to an even more restrictive approach than that found in the CPTPP.

    The USMCA provision contained at Article 19.12 states:

    No Party shall require a covered person to use or locate computing facilities in that Party’s territory as a condition for conducting business in that territory.

    There are no further exceptions or limits to the data localization provision in the chapter, though Article 32.1(2) of the USMCA notes that paragraphs a, b, and c of Article XIV of the General Agreement on Trade in Services (GATS) is incorporated into the digital trade chapter. Those paragraphs create exceptions for measures (1) designed to protect public morals or maintain public order; (2) protect human, animal, or plant life or health; and (3) comply with laws and regulations including prevention of deceptive practices, protection of privacy, and safety. Canadian negotiators presumably interpret the GATS provision as providing an opening for privacy protection, thereby allowing BC and Nova Scotia to retain their provincial data localization laws.

    By comparison, Article 14.13 of the CPTPP features the same general prohibition and the applicability of the GATS exception, but adds the following additional exception:

    Nothing in this Article shall prevent a Party from adopting or maintaining measures inconsistent with paragraph 2 to achieve a legitimate public policy objective, provided that the measure:

    (a) is not applied in a manner which would constitute a means of arbitrary or unjustifiable discrimination or a disguised restriction on trade; and
    (b) does not impose restrictions on the use or location of computing facilities greater than are required to achieve the objective.

    In other words, Canada previously agreed to restrictions on data localization rules in the CPTPP but carved out an exception for any legitimate public policy objective (subject to not being applied in a discriminatory manner or beyond that necessary to achieve the objective). The USMCA removes that flexibility, creating a significant limitation on the ability for Canadian governments to safeguard the public interest. Indeed, once implemented, policy measures on data localization will be restricted beyond the limits imposed by the CPTPP and leave Canada vulnerable to a challenge should future governments seek to introduce data localization mandates.

    The post How Canada Surrendered Policy Flexibility for Data Localization Rules in the USMCA appeared first on Michael Geist.

    CreativeApplications.Net: Prélude in ACGT – Sonification of personal (DNA) data

    Prélude in ACGT – Sonification of personal (DNA) data
    Created by Pierry Jaquillard at ECAL (Media and Interaction Design Unit), Prélude in ACGT is collection of tools that explore the relationship between music and biology. The project uses Pierry's own DNA (chromosome 1 to 22) and converts it into music.

    MattCha's Blog: 2018 Spring Essence of Tea “Piercing the Illusion”

    Some people pierce their ears, others their nose, belly button, and even other unmentionables but, for the puerh drinker, there is no better piercing than their illusion.  And so it brings us here to this very first experimental blend by Essence of Tea…

    I must admit, I was quite excited about this free sample (usually goes for $128.00 for a 400g cake or $0.32) that made its way to me in a recent Yixing teapot order.  First, on a very superficial level, the art on the wrapper by Maggie Taylor is probably one of my favorite all time.  Appreciation of the wrapper art is part of the ecstatic of puerh tea.  Brilliant brilliant year of the dog art in a style that I have not yet seen on a puerh wrapper.  There is a very clever play on words because the dog is sporting very eccentric Elizabethan fashion around its neck called a “Tudor ruff”… get it… hahhaha
    Secondly, I am excited that this is Essence of Tea’s first experimental blend.  Essence of Tea has brought us a lot over the years but an eccentric blend is new territory for this very traditional producer. 
    Thirdly, I love the concept of blending wild tea with puerh tea.  One of my favorite puerh I purchased this year was a Lao Man E with 10% wild tea blended in- it really gives the tea a different engaging angle.  Also, I am a fan of wild tea and have blended it in my pot at home to some decent results. This 2018 “Piercing the Illusion” is an unspecified “blend of wild tree leaves along with a leaves from cultivated ancient trees”.

    Dry leaves smell of intense vibrant deep forests and layered berry jam-like intense wild sweet odours.

    First infusion starts with watery empty sweet notes of distant strawberry and has a straw/ hay type of base taste underneath.  There is a subtle cooling aftertaste and a woody finish as well.  The mouthfeel is nice and slightly chalky, slightly opening in the throat.  It leaves a painting of stickiness on the lips, tongue, and opens the mid throat up.

    The second infusion starts watery and slightly fruity with a substantially more woody base taste.  There is hay in there as well.  The aftertaste is cooling and slightly fruity but has a vacuous rubbery taste.  I am starting to feel lightheaded as the Qi builds in this tea.

    The third infusion starts with a light buttery, barely fruity taste with subtle strawberries lingering in the watery broth with a base of straw and hay.  There is a soft faint cooling aftertaste.  The qi starts to build up in the head like a balloon with slight pressure.

    The fourth infusion has a watery buttery faintly fruity initial taste. It has a wild flower almost rubbery, kind of faint vacuous, not really fruity taste.  There are hints of hay, honey, and even mushrooms but all tastes seem a bit distant.  The Qi is not distant but upfront and imparts a slowness to the vision.  The body feels relaxed, the mind slows.

    The fifth infusion is a bit creamier with subtle edges of strawberry and juicier fresh fruits initially.  The mouthfeeling is skirting dryness but not quite.  It has a sandiness to it.  The aftertaste has a mildly cooling and slight cherry fruit mild edge to it, slight rubbery.  The minutes later returning aftertaste is of cherries, slight rubber.  The tongue feels sandy.

    The sixth is a smoother, velvety building grape, elderberry, cherry taste.  It reminds me of a grape flavored medicine I took for sore throat as a child but it’s tasty.  The woody/ hay profile has pretty much disappeared now.

    The seventh is much the same but with more of a peaking sweetness followed by very mild menthol.  Each infusion is immediately felt in the head.  The minutes later aftertaste is of berry syrup.  The mouthfeel is slightly vacuous and sandy, the lips barely sticky.

    The eighth infusion starts with a more woody but shares room with a sweet burst of taste.  There is a rubbery fruity retuning sweetness.  The minutes long sweetness is almost candy like now like berry syrup but not overly powerful.  A rubbery feeling is left in the mouth.

    The ninth infusion has a cinnamon pungent sweet onset that has berry tastes layer underneath.  The initial taste also has a melon taste in there as well.  The wood base taste comes slowly and fills part of the aftertaste.  The mouthfeel skirts dryness in the mouth.  The mid throat opens mildly to the aftertaste of fruits berries and wood.

    The tenth and eleventh infusions starts lighter slight butter and fruit in the distance.  There are slight woody tastes things are a bit muted here.  Sluggish feeling in the thoughts and minds, I begin to feel sleepy.

    The twelfth and thirteenth I add 30 or so seconds.  It kicks out more leathery woodys and faint syrupy sweet notes.  There are round fruit tastes in there and a significant cooling aftertaste.  There is a long lingering sticky rubbery almost fruit taste.  The qi feels real sleepy in the body- I feel like a nap but resist such suggestions.  The body qi is still a touch raw on the stomach as new puerh often is.

    The fourteen I put to a long infusion a woody fruity rubbery taste emerges with a cool and woody rubbery fruit ending.  The rawness on the stomach is such that I don’t wish to push it any further.

    I put this tea into a round of longer and overnight infusions and collect them all into one thermos.  The next day I drink some and am left with a very intense wild leaf fruity profile with edges of a sheng puerh woody taste and mild menthol cooling aftertaste.  I feel immediately tired and my mind slows.

    OK, a confession of sorts… I really was expecting some crazy qi sensations something intense and otherworldly… I basically was expecting to turn into a dog dressed in Elizabethan era clothes and have musical clouds full of random sirloin tip steaks, empty cans, lotus flowers, and other random things play out of my head on the moon while I hallucinate about floating dog bones.  Nothing close to this ever happened with this tea experience… Maybe my hopes were just too high?… or maybe, just maybe, this tea really did pierce my illusion or at least expectation of what this tea is all about?

    Overall, this tea has layers of sleepy qi in the mind and a medium to strong-ish head sensation.   I am not a big fan of sleepy qi in my puerh but for some people it is their favorite Qi effect- “the downer effect”.  This tea has a strong predisposition for this type of feeling and maybe it was specifically blended for this effect.

    Some aspects of this tea’s taste and feeling reminds me of 2017 Spring Essence of Tea Nancai.   It would not surprise me if the puerh that was used in the blend was from Nancai.  Overall, this tea shares some characteristics of puerh and some of wild tea.  I would guess maybe it is close to 65% wild 35% puerh but it is hard for me to tell.


    s mazuk: justqueenthoughts:Bohemian Rhapsody. We Will Rock You. Somebody To Love. All hit singles, and all...


    Bohemian Rhapsody. We Will Rock You. Somebody To Love. All hit singles, and all the direct product of a band that was formed when an astrophysicist and a dentistry major found a new friend in an art college, who then went on to recruit a fourth member from the electronics school. Based on this alliance I propose the rift in society between Arts and STEM students was fabricated to keep us separated so as to dilute our true power - and fabricated by who, you may ask? The business major, the only member of society who reaps no reward from art and science and thus must weaken us so as to stay ahead. In this essay I will

    OCaml Weekly News: OCaml Weekly News, 09 Oct 2018

    1. OCaml 4.07.1 released
    2. ppx_yojson: a ppx extension for Yojson literals and patterns
    3. Releases: ppx_deriving_cmdliner, Genspio, Febusy
    4. BER MetaOCaml N107, for OCaml 4.07.1
    5. How to write a simple socket-based web client (for Docker)
    6. Ocaml Github Pull Requests

    The Geomblog: A new sexual harassment policy for TCS conferences.

    One of my most visited posts is the anonymous post by a theoryCS colleague describing her own #metoo moments inside the TCS conference circuit. It was a brutal and horrific story to read.

    Concurrently (I don't know if the blog post had an effect, but one can but hope it helped push things along), a committee was set up under the auspices of TCMF (FOCS), ACM, SIAM, and EATCS to
    Draft a proposal for joint ToC measures to combat discrimination, harassment, bullying, and retaliation, and all matters of ethics that might relate to that.
    That committee has now completed its work, and a final report is available. The report was also endorsed at the FOCS business meeting this week. The report is short, and you should read it. The main takeaways/recommendations are that every conference should
    • adopt a code of conduct and post it clearly. 
    • recruit and train a group of advocates to provide confidential support to those facing problems at a conference
    • have mechanisms for authors to declare a conflict of interest without needing to be openly specific about the reasons. 
    There are many useful references in the report, as well as more concrete suggestions about how to implement the above recommendations. This committee was put together fast, and generated a very useful report quickly. Well done!

    Which Lights?: 2018.


    MattCha's Blog: 10 Years to Sharpen A Sword: 2018 Spring EoT 10 Year Anniversary Yiwu

    Jia Dao (779-843)

    It has been quite a ride David and Yingxi … 10 years.  Over these last 10 years, much has changed in the puerh world and we have learned many things.  As I shared previously on this blog, David and I go way back to when it first started.  I had a feeling, and it is so fitting, that this 2018 Spring EoT 10 Year Anniversary Yiwu ($560.00 for 400g cake or $1.40/g) comprised of GuoYuLin or protected state forest material would magically make it to my tea table.  On the wrapper is commissioned calligraphy of the above Tang Dynasty poem by Jiadao.

    The first line in the poem above suggests that David and Yingxi have spent 10 years learning.  There is humility in these lines, patience, meticulousness, carefulness, responsibility.  They, like us, are students of tea- this great mystery of puerh.  They are also our teachers and have taken us on this beautiful 10 year journey with them.  It has taken us to the most pristine puerh trees, to the tea markets of Malaysia, to the Warehouses of Kunming, and beyond. This first line not only refers to them as students but also as business people, and probably, about each other as a couple.

    The totality of David and Yingxi’s acquired experience, hard work, patience, learning from past successes and failures and knowledge of what makes puerh so wonderful is presented to us right now.  In this very cake “Today, I hold it unsheathed before you”!

    That is a LOT of hype to live up to…

    Dry leaves smell of fresh foresty, deep wood odours as well as lingering but not overly sweet distant cherries and plumbs.

    First infusion has a sweet onset followed by a deep forest taste then sweet fruity then a sweet icing surgar pungent finish.  Wood tastes appear under the sweet and a slight almost rubbery feeling in the mouth and throat.  It is immediately apparent that this puerh has interesting depth to it.  The mouthfeel is mild and sticky in the tongue but nice and opening in the deeper throat.  The liquour is a golden brown hue to it, unique among puerh this young.

    The second infusion starts off with a burst of sweetness that is part fruity and part icing sugar- there is a deeper sweet taste in here as well- like edges of dried apricot mix with mainly freshness.  The wood base appears throughout giving another dimension of depth in this puerh.  The mouthfeel is somewhere between astringent and sticky.

    The third infusion is surprisingly strong it has edges of slight bitterness and astringency but is nuanced by layers of sweetness and forest/woodiness.  The aftertastes is pungent and the throatfeeling is deep.  There is strength and power in this Yiwu.  The falvours are both vibrant and deep.  The taste of the skin of a prune plum is interesting.

    The fourth infusion is a powerful astringent and sweet wood affair.  The mouthfeel becomes almost puckery with an astringent plum and, in some ways, slightly candy-like with a sweet edge.  Wood tastes are still there but the astringency even hits the corners of the mouth.  It is not at all that choking astringency at all but a full, healthy, bringing out the flovours type of ordeal.  I consider removing leaf but the intense mouthfeeling and throatfeeling bode very well for this tea.

    The fifth infusion has much more of a round taste in a powerful full mouthfeeling.  The fruity taste stands out and is long and round throughout the profile.  I love this mouthfeel- this will be an amazing tea for aging.  The sweetness almost has 3 layers to it.  The aftertaste feels almost spicy and warming with a pungency mixed with astringency.  The Qi is really starting to kick in an pushes me into a mild sweat, my head and thoughs feel stalled.  My mind is crisp but my thoughs are slow.  Its effect is strong.

    The sixth infusion starts into a very nice round malty sweet or deep sweetness ininitally.  The wood tastes round out the profile.  Highnotes and fruit tastes glances the midprofile and sticks around.  The taste has mellowed but is equally complex with many deep and high nuances.  The moufeel now seems almost as sticky than astringent.

    The seventh infusion taste of deeper, darker fruity tastes initially like grape and plumb the wood/ forest taste is underneath and almost seems to blend with the darker fruity tastes.  The profile of this puerh is very long and ends in a pungent cooling taste.  There are some grainy and even nutty notes in the mix as well here.  The lips are tingling here as fruit tastes pop.

    The eighth starts off with fruity grape like sweetness which tapers off into a slighty grainy slightly woody taste.  The aftertaste is long and pungent.  This infusion starts to loose its boldness but not much complexity.

    The ninth infusion starts with that blast of fruit before deeper forest tastes and astringency and mild bitterness appears.  There is a deeper warmer spicier note developing in there as well.  The aftertaste is almost bready, almost candy, and quite pungent.  The throatfeel of this tea is quite deep- very nice.

    The tenth infusion has a deeper fruitier taste with nuances of wood and forest.  The fruit taste is almost like a blackberry preserves type of taste mixed with grape and plum.  Qi makes for a relaxing session with a noticeable thought slowing Qi.

    The eleventh infusion I add 15 seconds to the flash to push it a bit. It gives off a malty fruit taste of nuanced dried and fresh fruits.  A grainy taste develops over a returning pungent sweetness.

    The tweveth infusion has 20 seconds added to the flash infusion and has a fruity taste, slightly astringent, slightly bitter.  Long fruitiness in some pungency.  The mouthfeeling holds but the fruitiness is less here.

    The thirteenth has 25 seconds added and has an apple pie like taste initially with bitter and astringency tucked in there.  Woody tastes emerge and start to dominate now.  The aftertaste has a grape fruit edge which is long lasting.

    The fourteenth is at 35 seconds and gives off a very fruity grapy taste the fruit taste is deep here but there is a certain vibrancy to it still.  This infusion is much more fruity again.  A rubbery taste is in the aftertaste with a mild lingering fruit sweetness and menthol.

    The fifteenth is steeped for maybe 50 seconds and is a touch bitter and astringent and woody and not as fruity.  There is a rubbery barely fruity lingering aftertaste along with wood tastes there.

    The sixteenth has a minute or so on there and gives us a more woody taste mixed with lingering fruits and lingering menthol.  The mind is nice and relaxed curled up by the fire somewhere and yet there is a robust feeling in the chest, a subtle fluttering feeling that give me a soft nudge of energy throughout this session.

    The seventeeth is put into a long infusion and is a bitter, very astringent, fruity taste.  Interesting but truly overpowering.

    Overall, this is one of my favorite new fresh tastings of Yiwu puerh in recent times.  Last year, Essence of Tea released a 2017 Essence of Tea Spring YiWu GuoYuLin that I had the pleasure of sampling.  The description of the tea on Essence of Tea’s website stated that this was their favorite tea pressed to date- it sold out pretty quickly.  I think this one is considerably better in that it offers a much more engaging astringency and mouth feeling as well as a deeper throatfeeling.  Apparently, many GuoYuLin puerh in 2018 have shown much more astringency due to this year’s weather patterns. Some see this as a negative but in my experience this can be a big positive.  The astringency ensures that the tea will have might even with age.  Another thing is the Qi, the qi is much more deep and penetrating and overt in this 2018 than the 2017 as well.

    “Ten Years to Sharpen a Sword” to me means that the last ten years was just the beginning.  The true treasure from Essence of Tea has been presented to us in this extraordinary example of puerh tea.  If this is any indication of things to come, I welcome it.

    Congratulations David and Yingxi.

    Peace / 2018-10-23T22:39:40