ScreenAnarchy: SEQUENCE BREAK: Trailer Graham Skipper's Techno Body Horror Shudder

Graham Skipper's directorial debut Sequence Break begins its exclusive run on Shudder on May 27th. The trailer for his techno body horror film debuted yesterday and we have it now to share with you below.      A reclusive video arcade repairman (Chase Williamson) experiences bizarre biomechanical mutations and Cronenbergian hallucinations when a mysterious new arcade machine appears in his shop. Reality itself threatens to fracture as the young man works to solve its mystery - and overcome the new chaos that has entered his life.     Known up to now for his roles in horror indies like The Mind's Eye, Almost Human, and Beyond the Gates- as well as starring in Stuart Gordon's acclaimed stage show, Re-Animator: The Musical- Skipper's first film had...

[Read the whole post on]

Bifurcated Rivets: From FB

good grief

Bifurcated Rivets: From FB


Bifurcated Rivets: From FB

Great stuff

Bifurcated Rivets: From FB


Bifurcated Rivets: From FB


Instructables: exploring - featured: BarTop RetroPie Arcade Machine From mostly Junk

I had a bunch of junk lying around the house... an old monitor, and an old Raspberry Pi computer...It struck me one day when at a pub... "I should make an arcade machine!"... a certain company kindly donated some buttons and joysticks, and I set about building an arcade machine and detailing how I...
By: HowardLJTaylor

Continue Reading »

Instructables: exploring - featured: DIY Cactus Art

This DIY cactus art is perfect for anyone who has a love for fun and colorful art in their home. What you need:Foam Easter eggsToothpicksRed sequins (or something for the red cactus flower)Wire or threadPicture frameHot glue gunCardstock Cut Easter Eggs Cut your Easter eggs in half. Make sure to...
By: HollyL59

Continue Reading »

Quiet Earth: First Look at THE PREDATOR! [Trailer]

As someone who likes the Predator movies but isn't completely obsessed with them, I've been excited at the prospect of a reboot since it was announced that The Predator was coming from director Shane Black (less Iron Man Three, more Kiss Kiss Bang Bang and The Nice Guys) with a cast that includes Thomas Jane, Edward James Olmos, Keegan-Michael Key, Sterling K. Brown, Olivia Munn and Boyd Holbrook.

Apparently set some years after the original movies, a kid (Jacob Tremblay) finds a box with some predator armour, accidentally triggers it causing the predators to return to Earth and only a crack team of mercenaries can protect humanity! I'm sure it's not quite so cheesy but the premise is pretty laughable.

The teaser trailer is mostly [Continued ...]

Recent additions: dmcc

Added by DmitryDzhus, Thu May 10 16:15:52 UTC 2018.

AVAYA DMCC API bindings and WebSockets server for AVAYA

ScreenAnarchy: THE PREDATOR Trailer: Shades of AVP Haunt Shane Black's "Reinvention"

Gun to my head, I would admit to being a fan of both AVP films. Paul WS Anderson's first is a harmless romp through a haunted pyramid, a call back to the kind of tale that might have been told in an old Dark Horse comic. AVP: Requiem is a lot less "fun", but the Brothers Strause at least showed clear revereance for the Predator creation, something that Shane Black has promised to bring to his new "reinvention" The Predator. Perhaps this reverence is in the finished film, but I don't see much of it in this first trailer. Instead I see the suburbs (an aspect that didn't work for Requiem) where a child has access to alien technology (groan) and accidently calls the Predators to...

[Read the whole post on]

ScreenAnarchy: Win An ISLAND ZERO Poster Signed By Director Josh Gerritson & Writer Tess Gerritsen

Are you ready to win some cool swag?! Screen Anarchy has teamed up with the folks at upcoming indie horror Island Zero to offer a trio of signed posters for the film, which lands on VOD next Tuesday, May 15th. Island Zero is a brand new horror film written by Tess Gerritsen of Rizzoli & Isles fame, and directed by her son, Josh Gerritsen, making his feature debut. Here's a taste of the film from the press release: Inhabitants of a fishing island off the coast of Maine find themselves mysteriously cut off from the outside world after the ferry suddenly stops coming. All the phones have gone dead and every boat sent to the mainland fails to return. When dead bodies turn up along the...

[Read the whole post on]

Slashdot: Young Chinese Are Sick of Working Long Hours

Young professionals in China are pushing back against employers who expect them to work around the clock, saying no to the decades old "rule of 996" -- working from 9am to 9pm six days a week. From a report: At the forefront are millennials who are often better educated, more aware of their rights and more interested in finding something fulfilling than the previous generation. And as only children (China's one-child policy wasn't eased until 2015), they are also outspoken and pampered. "In my experience young people, especially the post-90s generation, are reluctant to work overtime -- they are more self-centered," says labour rights expert Li Jupeng, one of many who have observed some millennials challenging the 996 concept. The relative affluence of their parents and grandparents is part of the reason. China's rapid economic transformation has given rise to a sizeable middle class, with almost 70% of the country's urban population making between $9,000 and $34,000 annually in 2012. In 2000, that figure was just 4%. As only children, millennials are receiving a lot of support from their families -- including a financial safety net should their careers not go as planned. Although their options for pushing back are limited, some are no longer willing to put in long hours for a meagre paycheck.

Read more of this story at Slashdot.

Recent additions: herms

Added by JackKiefer, Thu May 10 15:46:15 UTC 2018.

A command-line manager for delicious kitchen recipes

ScreenAnarchy: Rick Moranis Joins Netflix's AN AFTERNOON WITH SCTV

When it was first announced that the surviving cast members of beloved Canadian sketch comedy show SCTV would be reuniting to film a Netflix special, An Afternoon With SCTV (tentative title), one name was still missing from the list. Rick Moranis. Having taken a hiatus from acting to focus on his family in the late 90s, after a while the actor simply found that there was no real desire to rush back into film and would be very selective about any roles he took in the future.  His fans will be pleased to know that Moranis will be part of An Afternoon With SCTV. The special films here in Toronto this Sunday in the Elgin Theatre. Jimmy Kimmel is hosting and director Martin Scorcese Also...

[Read the whole post on]

Recent additions: dmcc

Added by DmitryDzhus, Thu May 10 15:24:48 UTC 2018.

AVAYA DMCC API bindings and WebSockets server for AVAYA

Slashdot: Researchers Say a Breathalyzer Has Flaws, Casting Doubt On Countless Convictions

An anonymous reader writes: The source code behind a police breathalyzer widely used in multiple states -- and millions of drunk driving arrests -- is under fire. It's the latest case of technology and the real world colliding -- one that revolves around source code, calibration of equipment, two researchers and legal maneuvering, state law enforcement agencies, and Draeger, the breathalyzer's manufacturer. This most recent skirmish began a decade ago when Washington state police sought to replace its aging fleet of breathalyzers. When the Washington police opened solicitations, the only bidder, Draeger, a German medical technology maker, won the contract to sell its flagship device, the Alcotest 9510, across the state. But defense attorneys have long believed the breathalyzer is faulty. Jason Lantz, a Washington-based defense lawyer, enlisted a software engineer and a security researcher to examine its source code. The two experts wrote in a preliminary report that they found flaws capable of producing incorrect breath test results. The defense hailed the results as a breakthrough, believing the findings could cast doubt on countless drunk-driving prosecutions.

Read more of this story at Slashdot.

MetaFilter: a series of tubes

Cells use tunneling nanotubes to communicate and aid one another: long form science journalism by Vivian Callier. "These fragile structures are appearing not only in the context of conditions such as cancer, AIDS and neurodegenerative diseases, but also in normal embryonic development."

MetaFilter: Pretium iustum mathematicum, licet soli, Deo notum

The West Chicago Tower Mystery
Most of the radio towers you see each day are cell towers. There are 215,000 of them in the US. They differ from other radio towers in that they will almost always have one ore more triangular structures with three or more directional antennas on each side of the triangle. A grid of cell towers covers an area with roughly hexagonal cells so that you get a good signal everywhere. The West Chicago tower had no triangular structure, so I was pretty sure it wasn't a cell tower. And these antennas were huge compared to regular cell tower antennas. I could literally see them 1/2 mile away. Some cell towers do have microwave dish antennas when it's hard to bring fiber to a site, but shortwave antennas didn't seem to go together with microwave in my mind. Mystery #1: If this wasn't a cell tower, what was it?

concurrent discussion on Hacker News

The title is from Cardinal Juan de Lugo

Slashdot: FCC Says Net Neutrality Rules Will End On June 11

The Federal Communications Commission said in a notice Thursday that landmark 2015 U.S. open-internet rules will cease on June 11. From a report: The FCC in December repealed the Obama-era "net neutrality" rules, allowing internet providers to block or slow websites as long as they disclose the practice. The FCC said the new rules will take effect 30 days from Friday. An FCC spokeswoman confirmed the new rules will take effect on June 11. A group of states and others have sued to try to block the new rules from taking effect. The revised rules were a win for internet service providers like AT&T and Comcast but are opposed by internet firms like Facebook and Alphabet.

Read more of this story at Slashdot. Stor-0.10.2

Save/retrieve a file to/from primary storage

Open Culture: The First 100 Years of the Bicycle: A 1915 Documentary Shows How the Bike Went from Its Clunky Birth in 1818, to Its Enduring Design in 1890

Back in 1915, French filmmakers decided to revisit the evolution of the bicycle during the 19th century, moving from the invention of the bicycle in 1818, to the bikes that emerged during the 1890s. As the resulting film above shows, the bike went from being clunky, cumbersome and seemingly perilous to ride, to taking on the tried and true shape that we still recognize today.

This film was preserved by the Netherlands' EYE Film Institute. Hence the subtitles are in Dutch. But thanks to Aeon Magazine, you can read English translations below:

1. The draisine was invented only a century ago, in 1818 by Baron Drais de Sauerbrun.
2. [This subtitle never appears in the film.
3. The vehicle that lies between the draisine and the 1850 bicycle has an improved steering wheel and a fitted brake.
4. In 1863, Pierre Lallement invented pedals that worked on the front wheel.
5. Around 1868, a third wheel was added. Although these tricycles were heavier than the two-wheelers, they were safer.
6. Between 1867 and 1870, various improvements were made, including the increased use of rubber tyres.
7. In 1875, following an invention by the engineer Trieffault, the frame was made of hollow pipes.
8. Following the fashion of the day, the front wheel was made as large as possible.
9. In 1878, Renard created a bicycle with a wheel circumference of more than 7 feet. Just sitting down on one of these was an athletic feat!
11. At the beginning of 1879, Rousseau replaced the large front wheel with a smaller one, and the chain was introduced on the front wheel for driving power.
12. The bicycle of today.

For another look at the Birth of the Bike, you can watch a 1937 newsreel that gives its own narrative account. It comes the from British Pathé film archives.

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 Aeon

Related Content:

Young Frank Zappa Plays the Bicycle on The Steven Allen Show (1963)

Watch Boy and Bicycle: Ridley Scott’s Very First Film (1965)

Watch The Bicycle Trip: An Animation of The World’s First LSD Trip Which Took Place on April 19, 1943

The First 100 Years of the Bicycle: A 1915 Documentary Shows How the Bike Went from Its Clunky Birth in 1818, to Its Enduring Design in 1890 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.

Slashdot: Apple Scraps $1 Billion Irish Data Center Over Planning Delays

Apple ditched plans to build an 850 million euro ($1 billion) data center in Ireland because of delays in the approval process that have stalled the project for more than three years, the iPhone maker said on Thursday. From a report: Apple announced plans in February 2015 to build the facility in the rural western town of Athenry to take advantage of green energy sources nearby, but a series of planning appeals, chiefly from two individuals, delayed its approval. Ireland's High Court ruled in October that the data center could proceed, dismissing the appellants who then took their case to the country's Supreme Court.

Read more of this story at Slashdot. Class-Slot-0.02

Simple, efficient, comple-time class declaration

Recent additions: llvm-hs-pretty

Added by sdiehl, Thu May 10 13:33:54 UTC 2018.

A pretty printer for LLVM IR.

Colossal: Abstract Shapes and Graffiti-Inspired Swirls Leap off the Wall in New Three-Dimensional Murals by Peeta

Italian artist Manuel de Rita a.k.a. Peeta (previously) transforms static structures by painting colorful cubes and abstracted cylindrical shapes to appear as if they are floating above the surface of the wall. This technique was derived from the traditional 3D lettering he grew up painting, and continues to evolve as he experiments with realistic objects, like the window that protrudes from the turquoise and purple work below.

“Initially, my works only realized the sculptural quality of individual letters, namely the ones that spelled out my own moniker Peeta,” he says in an artist statement. “Progressively, the fusion between traditional lettering and three dimensional style has given life to a unique kind of visual rhythm. Today, through my anamorphic works I redesign the volumes of any kind of surface involved, thus causing with my paintings a temporary interruption of normality by altering the perception of familiar contexts, and so raising a different understanding of spaces and, consequently, of reality as a whole.”

These large-scale explorations of multiple dimensions and eye-boggling optics have been painted globally, including Guangzhou, China; Barcelona, Spain; Mirano, Italy, and more. Recently the artist wrapped up an artist residency at Jardin Orange in Shenzhen, China. You can see more of Peeta’s work, including his paintings on canvas and sculptural objects, on his website and Instagram. (via Cross Connect Magazine) FindBin-libs-2.019001

locate and a 'use lib' or export directories based on $FindBin::Bin.

Michael Geist: House of Commons Ethics Committee Recommends Rejecting Bell Coalition Website Blocking Plan

The Standing Committee on Access to Information, Privacy and Ethics has released its net neutrality report, strongly endorsing net neutrality safeguards and calling on the government to reject the Bell coalition’s website blocking plan should the CRTC approve it. I was the first witness to appear before the committee on the study, where I emphasized the need for stronger net neutrality enforcement, the risks associated with changing U.S. policy, and the concerns associated the Bell website blocking proposal (which at the time had only been leaked). The committee picked up on all those issues, recommending enshrining net neutrality in the Telecommunications Act, calling on the government to seek assurances from the U.S. that its policies will not undermine Canadian traffic, and encouraging the CRTC to more proactively ensure that ISPs are compliant with Canadian law.

The committee report also waded into the site blocking issue, calling on the government to reject it should it be approved by the CRTC. Recommendation #2:

That, in the event that the Canadian Radio-television and Telecommunications Commission supports FairPlay Canada’s application, the federal government consider using the authority provided under section 12 of the Telecommunications Act to ask the CRTC to reconsider its decision.

The committee asked Bell and Rogers about the site blocking proposal during their appearance. The companies argued that it did not implicate net neutrality, but the committee was unconvinced. The report states:

The Committee recognizes that it has received limited evidence on the Fair Play proposal and that the CRTC will decide on the application, after having considered all of the submissions it has received. However, the Committee is of the view that the proposal could impede the application of net neutrality in Canada, and that in their testimony, the ISPs did not present sufficient explanation as to why the existing process is inadequate or sufficient justification to support to application. The Committee also remains skeptical about the absence of judicial oversight in the Fair Play proposal and is of the view that maintaining such oversight is critical.

Therefore, the Committee is concerned that, in the event that the CRTC accepts FairPlay Canada’s application, net neutrality may be eroded in Canada by allowing Internet content blocking and censorship. These concepts are at odds with net neutrality, which ensures an open Internet.

The report, which received support from all political parties, then notes that the government has the power to ask the CRTC to vary, rescind, or refer back a decision. That power led to the recommendation that the government exercise that power should the CRTC approve the proposal. With all parties joining in a recommendation against the site blocking plan, the report represents a strong signal that the FairPlay coalition plan led by Bell does not have political support given that it raises freedom of expression, due process, and net neutrality concerns.

The post House of Commons Ethics Committee Recommends Rejecting Bell Coalition Website Blocking Plan appeared first on Michael Geist. CryptoExchange-Catalog-20180510

Catalog of cryptoexchanges App-cryp-exchange-0.003

Interact with cryptoexchanges

Recent additions: ecstasy

Added by isovector, Thu May 10 13:00:02 UTC 2018.

A GHC.Generics based entity component system.

Slashdot: ZTE Shuts Down Main Business Operations After US Ban

An anonymous reader quotes a report from TechCrunch: ZTE wasn't kidding around when it suggested that a U.S. Department of Commerce order would "severely impact" its survival. It's hard to image a successful path around the seven-year ban on the sale of U.S. products to the company imposed after it reportedly failed to sufficiently reprimand staff for flouting Iranian sanctions. Earlier today, in fact, the Chinese smartphone/telecom manufacturer announced that it had ceased its main business operations as it attempts to figure out the best way forward. "As a result of the Denial Order, the major operating activities of the company have ceased," the company wrote in an exchange filing spotted by Reuters. "As of now, the company maintains sufficient cash and strictly adheres to its commercial obligations subject in compliance with laws and regulations."

Read more of this story at Slashdot.

Instructables: exploring - featured: Hot Smoked Ham Wrap Pizza Rolls With Goat Cheese, Olives , Jalapenos & Sundried Tomatoes Recipe

Ingredients:1 portion pizza dough200g goat cheese150g smoked ham150g olives100g sundried tomatoe50g jalapeno sliceshalf teaspoon salthalf teaspoon papperone teaspoon thyme1,5 teaspoons oregano The Filling Cut the olives in half and put them in a bowl. Cut the sundried tomatoes & jalapeno slices i...
By: FoodforDude

Continue Reading »

Open Culture: How the Mysteries of the Vatican Secret Archives Are Being Revealed by Artificial Intelligence

Somewhere within the Vatican exists the Vatican Secret Archives, whose 53 miles of shelving contains more than 600 collections of account books, official acts, papal correspondence, and other historical documents. Though its holdings date back to the eighth century, it has in the past few weeks come to worldwide attention. This has brought about all manner of jokes about the plot of Dan Brown's next novel, but also important news about the technology of manuscript digitization. It seems a project to get the contents of the Vatican Secret Archives digitized and online has made great progress cracking a problem that once seemed impossibly difficult: turning handwriting into computer-searchable text.

In Codice Ratio is "developing a full-fledged system to automatically transcribe the contents of the manuscripts" that uses not the standard method of optical character recognition (OCR), which looks for the spaces between words, but a new way that can handle connected cursive and calligraphic letters. Their method, in the lingo of the field, "is to govern imprecise character segmentation by considering that correct segments are those that give rise to a sequence of characters that more likely compose a Latin word. We have designed a principled solution that relies on convolutional neural networks and statistical language models."

This is a job, in other words, for artificial intelligence, but in partnership with human intelligence, a seldom-tapped source of which the scientists behind In Codice Ratio have harnessed: that of high-school students. Their special OCR software, writes the Atlantic's Sam Kean, works by "dividing each word into a series of vertical and horizontal bands and looking for local minimums—the thinner portions, where there’s less ink (or really, fewer pixels). The software then carves the letters at these joints." But the software "needs to know which groups of chunks represent real letters and which are bogus," and so "the team recruited students at 24 schools in Italy to build the projects’ memory banks," manually separating the letters the system had properly recognized from those over which it had stumbled.

And so the students became the system's "teachers," improving its ability to extract the content of handwriting, and not just handwriting but vast quantities of archaic handwriting, with every click they made. The encouraging results thus far mean that it probably won't be long before large portions of the Vatican Secret Archives (which, contrary to its awkwardly translated name, is such a non-secret it even has its own official web site) will finally become easy to browse, search, copy, paste, and analyze. So they may, in the fullness of time, prove a fruitful resource indeed to writers of Catholicism-centric thrillers like Brown — who, after all, has already gone public with his enthusiasm for manuscript digitization.

Related Content:

Explore 5,300 Rare Manuscripts Digitized by the Vatican: From The Iliad & Aeneid, to Japanese & Aztec Illustrations

Behold 3,000 Digitized Manuscripts from the Bibliotheca Palatina: The Mother of All Medieval Libraries Is Getting Reconstructed Online

3,500 Occult Manuscripts Will Be Digitized & Made Freely Available Online, Thanks to Da Vinci Code Author Dan Brown

Based in Seoul, Colin Marshall writes and broadcasts on cities 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 the Mysteries of the Vatican Secret Archives Are Being Revealed by Artificial Intelligence 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.


Paintings by New Jersey-based artist Angela Gram. See more images below.


Angela Gram

BOOOOOOOM! – CREATE * INSPIRE * COMMUNITY * ART * DESIGN * MUSIC * FILM * PHOTO * PROJECTS: “Dirty Diesel & Dusty Deeds” by Artist Paul White

Snapshot style drawings of the Australian outback by artist Paul White (previously featured here). While rendered picturesque, the series confronts viewers with the devastating effects of human intervention on the land. See more images below or on display at Mayspace Gallery in Sydney May 16 – June 2.


Paul White


Meagan Connolly is an artist and archivist based in New York City, NY. ‘Afterthought’ is a collection of photographs taken between the years 2015-2018 primarily in the Northeast United States.


Open Culture: The Muggletonians, an Obscure Religious Sect, Made Beautiful Maps That Put the Earth at the Center of the Solar System (1846)

In 1975, the philosopher of science Paul Feyerabend published his highly contrarian Against Method, a book in which he argued that “science is essentially an anarchic enterprise,” and as such, ought to be accorded no more privilege than any other way of knowing in a democratic society. Motivated by concerns about science as a domineering ideology, he argued the historical messiness of scientific practice, in which theories come about not through elegant logical thinking but often by complete accident, through copious trial and error, intuition, imagination, etc. Only in hindsight do we impose restrictions and tidy rules and narratives on revolutionary discoveries.

Several years later, in the third, 1993 edition of the book, Feyerebend observed with alarm the same widespread anti-science bias that Carl Sagan wrote of two years later in Demon-Haunted World. “Times have changed,” he wrote, “Considering some tendencies in U.S. education… and in the world at large I think that reason should now be given greater weight.”

Feyerabend died the following year, but I wonder how he might revise or qualify a 2018 edition of the book, or whether he would republish it at all. Politically-motivated science denialism reigns. Indeed, a blithe denial of any observable reality, aided by digital technology, has become a dystopian new norm. But as the philosopher also commented, such circumstances may “occur frequently today... but may disappear tomorrow.”

In the recorded history of human inquiry across cultures and civilizations, we see ideas we call scientific co-existing with what we recognize as pseudo- and anti-scientific notions. The differences aren’t always very clear at the time. And then, sometimes, they are. During the so-called Age of Reason, when the development of the modern sciences in Europe slowly eclipsed other modes of explanation, one obscure group of contrarians persisted in almost comically stubborn unreason. Calling themselves the Muggletonians, the Protestant sect—like those today who deny climate change and evolution—resisted an overwhelming consensus of empirical science, the Copernican view of the solar system, despite all available evidence the contrary. In so doing, they left behind a series of “beautiful celestial maps,” notes Greg Miller at National Geographic, some of which resemble William Blake’s visual poetry.

The sect began in 1651, when a London tailor named John Reeve “claimed to have received a message from God” naming his cousin Lodowicke Muggleton as the “’last messenger for a great work unto this bloody unbelieving world.’... One of the main principles of their faith, a later observer wrote, was that ‘There is no Devil but the unclean Reason of men.’” Their view of the universe, based, of course, on scripture, resembles the Medieval Catholic view that Galileo attempted to correct, but their principle antagonist was not the Italian polymath or the earlier Renaissance astronomer Copernicus, but the great scientific mind of the time, Isaac Newton, whom Muggletonians railed against into the 19th and even 20th century. Muggletonians, Miller writes,” had remarkable longevity—the last known member died in 1979 after donating the sect’s archive of books and papers… to the British Library.”

These plates come from an 1846 book called Two Systems of Astronomy. Written by Muggletonian Isaac Frost, it “pitted the scientific system of Isaac Newton—which held that the gravitational pull of the sun holds the Earth and other planets in orbit around it—against an Earth-centered universe based on a literal interpretation of the Bible.” The plate above, for example, “attempts to show the absurdity of the Newtonian system by depicting our solar system as one of many in an infinite and godless universe.” Ironically, in attempting to ridicule Newton (who was himself a pseudo-scientist and Biblical literalist in other ways), the Muggletonians stumbled upon the view of modern astronomers, who extrapolate a mind-boggling number of possible solar systems in an observable universe of over 100 billion galaxies (though these systems are not enclosed cells crammed together side-by-side). Another plate, below, shows Frost’s depiction of the hated Newtonian system, with the Earth, Mars, and Jupiter orbiting the Sun.

The other maps, further up, all represent the Muggletonian view. Historian of science Francis Reid describes it thus:

According to Frost, Scripture clearly states that the Sun, the Moon and the Stars are embedded in a firmament made of congealed water and revolve around the Earth, that Heaven has a physical reality above and beyond the stars, and that the planets and the Moon do not reflect the Sun's rays but are themselves independent sources of light.

Frost gave lectures at “establishments set up for the education of artisans and other workmen.” It seems he didn’t attract much attention and was frequently heckled by audience members. Like flat earthers, Muggletonians were treated as cranks, and unlike today’s religious anti-science crusaders, they never had the power to influence public policy or education. For this reason, perhaps, it is easy to see them as quaintly humorous. Frost’s maps, as Miller writes, “remain strangely alluring” for both their artistic quality and their astonishingly determined credulity. The plates are now part of the massive David Rumsey collection, which houses thousands of rare historical maps. For another fascinating look at religious cartography, see Miller’s National Geographic post “mapping the Apocalypse.”

via National Geographic

Related Content:

How a Book Thief Forged a Rare Edition of Galileo’s Scientific Work, and Almost Pulled it Off

Download 67,000 Historic Maps (in High Resolution) from the Wonderful David Rumsey Map Collection

Carl Sagan Predicts the Decline of America: Unable to Know “What’s True,” We Will Slide, “Without Noticing, Back into Superstition & Darkness” (1995)

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

The Muggletonians, an Obscure Religious Sect, Made Beautiful Maps That Put the Earth at the Center of the Solar System (1846) 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.

MetaFilter: 70 discreetly numbered teaspoons

A search of the medical and other scientific literature through Google, Google Scholar, and Medline using the keywords "teaspoon", "spoon", "workplace", "loss" and "attrition" revealed nothing about the phenomenon of teaspoon loss. Lacking any guidance from previous researchers, we set out to answer the age old question "Where have all the bloody teaspoons gone?"

TheSirensSound: New album Dance Ordinaire by FILAGO

Filago is almost as magical and ethereal as their indie post-punk sound: The three musicians find common ground in their mutual affinities for Nick Cave, The Talking Heads, and Connan Mockasin as they explore a more elegant, delicate and spectral style of indie rock. Mark Hollis is a definite influence both lyrically and musically, as are the 60’s dreamy atmospheres à la Velvet Underground when instrumentals break down to bare bones bass and drums. Filago, however, favours more intense layering of organic matter and futuristic trance beats.

TheSirensSound: New single Vertigo by Seven Saturdays

"Composer Jonathan Haskell released his first batch of ambient instrumental music under the Seven Saturdays name eight years ago, and in various incarnations he’s been coaxing cinematic marvels of his Rhodes ever since. His last official Seven Saturdays release was five years ago, but in collaboration with two singer-songwriters, he has released music under the names POLLA (with Zoe-Ruth Erwin of Little Red Lung) and Glasz (with Jim Evens of Helen Stellar). Both of them have guested on Seven Saturdays releases, too, so it gets confusing. But suffice to say that if Haskell has a chewy center as a composer, it would be in the instrumental music like on his first EP.

Seven Saturdays lives again, today releasing the new single “Vertigo” — but even in doing so he enjoys an almost-incidental contribution from one of his collaborators. There are two versions of the new single, one instrumental and one with vocals from ZÖE (Erwin’s new nom de tune). Both are equally stunning.

“I initially set out to make a record that sounded like ‘A Beautiful Day’ [a song from the first EP] because musically, that’s the space where I’ve always felt the most free and inspired,” Haskell explains. “Since the last official Seven Saturdays release, I’d been focusing on other projects. … It had become a fun experiment to collaborate full time, but after a while, I started to want to return to form and explore the depths of instrumental music again.”

Working with producer Steve Kaye (Sunking Studios) and utilizing the talents of drummer Chris Allis and bassist Keith Joyner, Haskell finished the 6-minute instrumental. But funny things happen when you share work with friends, right? Especially when they happen to be living in Iceland with a studio handy.

“Upon hearing the final version, Zoe offered to sing on it as a trial. Just to see,” Haskell says. “And of course when she sent the tracks back from her studio in Iceland, the song was transformed into something entirely new. Something that I never could have imagined and only she could have done. Zoe is one of the most creative people I’ve ever met, and her vocals have this otherworldly quality to them that’s hard to describe.”

So, Haskell says, “I decided to put both out as the single “Vertigo’ — one featuring Zoe, and [the other] as the original instrumental as it was first dreamt. Everybody wins.”"

From Buzzbands, by Kevin Bronson

TheSirensSound: New single The Rules of Attraction by I Know You Know

'The Rules of Attraction' is the guitar-driven and melodically supercharged debut single from Sydney-based rock band 'I Know You Know'. The head bobbing rhythm combined with the instantly approachable melodies propels the song from start to finish like a roller coaster complete with just the right number of jolts and turns.

The lyrics capture the mundaneness of the modern age and yearning for a more extraordinary life. The wry lines are delivered with raw honesty, while the chorus provides the sense of hope in realizing our dreams, topped off with a cathartic outro.

"When I wrote 'The Rules of Attraction' I wanted to synthesize some of my strongest and most influential memories of the good times when I was a kid. I wanted to capture that feeling of playing an old video game or watching your favorite music video on a Saturday morning. Of meeting up with your friends in the late afternoon and driving around all night.

I wanted to channel the zeitgeist of possibility, imagination and of the carefree times of the youthful days. When something so simple as a game, or the opening bars of a song could immediately grab your attention and make you start imagining things. When your imagination could transport you to another world, or take you on a wild adventure, and then make your heart melt when you finished it, only to realize you were still sitting in the living room with your friends all along. I felt 'The Rules of Attraction' summed all of this up for me and I'm pleased to have it out as the band's debut single."

TheSirensSound: New single Superficial Feeling by Written Years

The SirensSound presents Written Years and their brand new single "Superficial Feeling". 

"During the lengthy recording process behind our forthcoming release, I experienced a sudden and inexplicable speech loss – rendering me unable to talk for months. Throughout the steep climb in getting my voice back, I began working in near-isolation on a batch of new material.

The band enlisted producer Ryan Worsley (Dear Rouge, Said The Whale) to help us reach new ground. Our debut single, “Lost In You Now,” was released in early 2018 and we filmed an accompanying DIY video/pseudo-documentary in support of the single. The music video centered around an eccentric character named Kevin and his personal struggle to find acceptance in doing what he loves. His resistance to the norm and to criticism embodied the challenges we faced in creating our new material.

Our sophomore single, “Superficial Feeling,” was mixed by Jason “JVP” VanPoederooyen (Mother Mother, illScarlett) and really feels like something special to me. It feels like the next step for us – for Written Years. It’s a corrupt, little 2AM love song about finding yourself in this strange world. "

MetaFilter: Japanese War Brides

US Air Force Col. Bruce Hollywood searched for his Japanese birth mother. He found her — and the restaurant she had named after him. Hollywood's story is told by Kathryn Tolbert, a Japanese-American reporter and filmmaker, who is telling the stories of Japanese women who married American servicemen after World War II on Instagram @kathryn.tolbert and in an oral history archive,

MetaFilter: Model that dirty water

The Boston Planning and Development Agency has built a 3D online city model that includes every building (and many trees) in the city.

Penny Arcade: Comic: The Diplomat

New Comic: The Diplomat

Penny Arcade: News Post: The Diplomat

Tycho: Right as I’m about to jump ship, Gabriel is going back to Apple.  Once he started drawing on the new iPad Pro, it wound a clock somewhere in the heart of the universe that would bring him back to the platform in other ways.  He has sent me some animojis or whatever and it seems like he’s having a good time…? The first time I lost the Lightning to Headphone adapter for this iPhone 8, another clock was wound, except this one ran opposite to the first.  I am weird about headphones and I have a lot of them.  There are people with much deeper wells of jargon to…

Instructables: exploring - featured: Whirlpool Teak Tray

I like to read and relax in m whirlpool, especially after a long day but there was a problem... I was worried about dropping my phone in the water, or tipping my drink over into the tub. The store bought trays all seemed weak and flimsy, but most of all they were waaaaayyyy too high. They straddle...
By: badjer1

Continue Reading »


Recent paintings by Danish artist Jacob Brostrup. See more images below.


Jacob Brostrup

Planet Haskell: Philip Wadler: Journal of Financial Technology

I've just been appointed to the editorial board of the newly formed Journal of Financial Technology. Please submit! Our second issue will be a special issue devoted to formal methods.

ScreenAnarchy: Review: EVIL GENIUS Shines Darkly on Netflix

It’s a toss-up as to whether one identifies more with the murder suspects or the murder victims, and that’s part of what makes Netflix's Evil Genius such irresistible viewing in its first two episodes.  Part of me wants to say: “That’s what makes this true crime series so insidiously good,” but even I have limits to my glibness. One actually learns very little about the three victims, though, their lives as mysterious as their deaths, and frankly they just seem tragically unlucky -- befriending or dating those who appear to be regular folks, if just a bit quirky and secretive around the edges. And the two suspects, Majorie Diehl-Armstromg and her frenemy (and erstwhile boyfriend) Bill Rothstein, seem to disappear the more the spotlight is turned...

[Read the whole post on]

BOOOOOOOM! – CREATE * INSPIRE * COMMUNITY * ART * DESIGN * MUSIC * FILM * PHOTO * PROJECTS: Photographer Spotlight: Amanda Leigh Smith

Amanda Leigh Smith is a photographer from Cypress, Texas working in Portland, Oregon. Smith’s inspirations and work are diverse, ranging from editorial and travel documentary projects, to portraiture, lifestyle and fashion commissions. Her work has taken her across the USA, South America, Canada and the Middle East.


Planet Haskell: FP Complete: Pinpointing deadlocks in Haskell

Concurrent programming is hard! I still remember the moment of my introduction to multi-threaded programming at the University of New Mexico, our professor grabbed his head and said: “Here be demons!”. There are all sorts of issues that arise in a concurrent setup, such as race conditions, starvation, deadlocks, data corruption, you name it. All of these are also applicable to Haskell, and in this post, I would like to introduce a simple yet very effective way to track down deadlocks.

Greater Fool – Authored by Garth Turner – The Troubled Future of Real Estate: Shocking

When Donald Trump unwisely blew up the Iran deal this week, it sure didn’t help your mortgage. Oil jumped a few bucks on the news, topped seventy dollars and convinced some people it’s on the way to eighty or even ninety by year’s end. So if you think gas prices are crazy now, just wait.

Oil means inflation. It pops the cost of most everything. Turning off Iran’s big pipe was the last thing needed, now that bond yields have been swelling, central banks hiking and Canadians dealing with an epic debt overhang. It’s another thing the Trumpster has been doing to increase the cost of living, along with trade tariffs, big deficit spending and protectionism. His corporate tax cuts are also stoking the fires, since they’ve led to rising corporate profits, higher stock markets and an unemployment rate of just 3.9%. That means wage pressures. More inflation. Higher bond yields. Rate increases.

Well, look at the Bank of Canada’s bond chart. Tells you all you need to know.

Government of Canada Marketable Bonds – Average Yield – 3 to 5 year

Source: Bank of Canada, May 8, 2017 to May 8, 2018

The yield on government bonds here in cold Canada has been tracking those in the excited states – of course. That’s what the bond market does, because wealth has no allegiance to any nation. Higher inflation and tighter monetary policy to the south of us bring exactly the same outcome here sooner or later. Our central bank follows the lead of the Fed nine times out of ten. This is no exception. Not different this time. The next few years will see the cost of money rise – perhaps more vigorously now that the American president has squished Iran and jacked crude.

Current odds of rate hikes here, by the way are as follows: 95% for two additional increases by the end of the year. The prime rate by Christmas will then be a hair under 4%, and most HELOCs will rise to almost 5%. The five-year fixed (posted) mortgage rate will also be 5%, and the Bank of Canada benchmark rate (for the stress test) will be about 5.8%. What a shocking increase since mortgages were being dished out everywhere at 2% last spring.

So what?

So, payments on a $500,000 mortgage would jump from $2,100 a month to $3,139. Ouch. But, you cry, nobody actually pays the stress test rate. Borrowers just have to qualify as if rates were actually that high. So stop scaring us, dude!

True enough. The stress test requires any new borrower (or renewers changing banks) to prove they can handle a loan at that level, which means they still get the bank’s retail rate – but the amount of credit they’re offered is reduced. Thus a family with a $100,000 income and $50,000 to put down on a property that could have borrowed $545,000 last spring may soon qualify for a mortgage of only $367,500. They’ll be shopping for a $400,000 house, not one listed for $600,000.

That’s why rates matter. Just as low rates inflated real estate, so higher ones will deflate it. Ironically, the more inflation an economy generates, the more upward pressure there is on the cost of money. Those pressures are now building. Look at the bonds. They’re pumped.

Meanwhile politicians make things worse, as this blog has tediously pointed out. Taxes are inflationary, too – like governments that raise unrealistic expectations. Too many Canadians are over-reaching for real estate, adding to over $2 trillion in borrowing, completely ignoring the train in the debt tunnel. Incredibly 12% of us are now sub-prime borrowers with credit so poor even TNL@TB has given them the heave-ho. As the central banker said days ago, 8% owe 20% of all that money – and mostly they live in Toronto and Vancouver.

Even before the Iranian mistake it looked like the Fed would raise rates 7 more times before this cycle has peaked – if history’s any guide. That probably means four or five here, so you can do that math. It’s the perfect storm – an indebted nation, incompetent leaders, regulatory overkill, rising rates, and the kind of envy-based generational warfare on display here yesterday. Why the children would want to own inflated, costly, indebted, imperiled assets like houses is beyond me.

Open Culture: Dozens of M.C. Escher Prints Now Digitized & Put Online by the Boston Public Library

In addition to the iconic scene in Jim Henson’s Labyrinth, or appearances in animated TV shows and video games, M.C. Escher’s work has adorned the covers of albums like Mott the Hoople’s 1969 debut and the speculative fiction of Italo Calvino and Jorge Luis Borges. A big hit with hippies and 1960s college students, writes Heavy Music Artwork, his mind-bending prints became associated with “questioning accepted views of normal experience and testing the limits of perception with hallucinogenic drugs.” While he appreciated his cult following, Escher “did not encourage their mystical interpretations of his images.” Replying to one enthusiastic fan of his print Reptiles, who claimed to see in it an image of reincarnation, Escher replied, “Madame, if that’s the way you see it, so be it.”

Rather than illustrate higher states of consciousness or metaphysical entities, Bruno Ernst writes in The Magic Mirror of M.C. Escher, the artist intended to create practical, “pictorial representation of intellectual understanding.” Illustrations, that is, of philosophical and scientific thought experiments. The son of a civil engineer, Escher began his studies in architecture before moving to drawing and printmaking.

The challenge of creating built environments—even seemingly impossible ones—always seemed to occupy his mind. Along with themes from the natural world, a high percentage of his works center on buildings—inspired by formative early years in Rome and his admiration for Islamic art and Spanish architecture.

In the 50s and 60s Escher’s art piqued the interest of academics and mathematicians, an audience he found more congenial to his vision. He corresponded with scientists and incorporated their ideas into his work, meanwhile claiming to be “absolutely innocent of training or knowledge in the exact sciences.” In the 50s, Escher “dazzled” the likes of mathematicians like Roger Penrose and HSM Coxeter. In turn, notes Maev Kennedy, he “was inspired by Penroses’s perspectival triangle and Coxeter’s work on crystal symmetry.”

For all the excitement he created among mathematicians, it took a bit longer for Escher to get noticed in the art world. When Penrose’s uncle showed Escher’s version of the perspectival triangle to Picasso, “Picasso had heard of the British mathematician but not of the Dutch artist.” Escher’s fame spread outside of the sciences in part through the interests of the counterculture. He may have shrugged off mystical and psychedelic readings of his prints, but he had an innate penchant for the marvelously weird (see his copy of a scene, for example, from Hieronymus Bosch, above, or his surreal print Gravity, below).

See the prints pictured here and a few dozen more digitized in high resolution at Digital Commonwealth, courtesy of Boston Public Library, who scanned their Escher collection and made it available to the public. Zoom into the fine details of prints like Inside Saint Peter’s, further up—a finely rendered but otherwise not-especially-Escher-like work—and the labyrinthine Ascending and Descending at the top. Whether—as Harvard Library curator John Overholt confesses—you’re a “nerd who loves M.C. Escher” for his mathematical mind, an artist with a mystical bent who loves him for his hallucinatory qualities, or some measure of both, you’ll find exactly the Escher you’re looking for in this digital gallery.

via Kottke/John Overholt

Related Content:

Enter an Online Interactive Documentary on M.C. Escher’s Art & Life, Narrated By Peter Greenaway

M.C. Escher Cover Art for Great Books by Italo Calvino, George Orwell & Jorge Luis Borges

Watch M.C. Escher Make His Final Artistic Creation in the 1971 Documentary Adventures in Perception

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

Dozens of M.C. Escher Prints Now Digitized & Put Online by the Boston Public Library 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: Murder, Family and Romance Come to Heads in BEAST [Review]

Beast opens with a beautiful aerial of an English island set to choral music but the serenity of the scene is ended by the conductor telling a young woman that she needs to project more. The abrupt shift of the scene is an excellent metaphor for what is to come in Beast.

Moll is at the centre of this story which unfolds in an isolated island town where she plays guide to tourists making a day trip to the area. She's living at home, looking after her ill father and doing her best to fit into her outwardly perfect family but it's clear from the look on Moll's face in the choir rebuke which opens the movie, that not all is well in her carefully manicured life.

When her special day is upended, Moll takes off into town and spends the night partying with a stranger which [Continued ...]

Colossal: New Contemplative Female Busts Cast from Porcelain, Polymer Gypsum, and Resin by Gosia

Toronto-based sculptor Gosia (previously) constructs minimally-hued porcelain busts of contemplative female forms from a variety of materials, including ceramic, polymer gypsum, resin, and most recently, porcelain. Her very first experiment with the new medium is included in her current solo exhibition, Beneath the Surface, at Paradigm Gallery in Philadelphia. The work is an imperfect cast, a mistake which Gosia details in the text below.

Imperfect is one of those ‘happy accident’ pieces,” she explains. “My intention for it was completely different, but when it came out of the mold it had an indentation on the left side of the face… It made me think a lot about the world’s obsession (and my own) with perfection and what we might be missing because of it. It felt good to let go of control and for once let my art do its own thing.”

Other new works include Overflow, which features a female figure inside of an elongated cube. The subject’s long hair flows into the pedestal’s depths—a structure that seems to at once support and swallow the imbedded figure. Two other pieces are each titled Beneath the Surface, and were created with the combination of opaque and lucid materials. Translucent resin composes the bottom the sculptures’ faces to their nose, making it appear as if each have dipped partially underwater.

“Beneath the Surface” runs through June 16 at Paradigm Gallery. Gosia’s first European show, “The Windows of the Soul,” opened this past weekend at Dorothy Circus in London. You can see more of Gosia’s work on her website and Instagram.



“Beneath the Surface”

"Beneath the Surface"

“Beneath the Surface”




Open Culture: 3,000-Year-Old Olive Tree on the Island of Crete Still Produces Olives Today

Image by David Hodgson, via Flickr Commons

On the island of Crete, in the village of Vouves, stands an olive tree estimated to be 3,000 years old. Hearty and resilient, "the Olive Tree of Vouves" still bears fruit today. Because, yes, olives are apparently considered a fruit.

Archaeologist Ticia Verveer posted a picture of the tree on Twitter earlier this week and noted: It "stood here when Rome burned in AD64, and Pompeii was buried under a thick carpet of volcanic ash in AD79." That all happened during the tree's infancy alone.

An estimated 20,000 people now visit the tree each year. If you can't swing a trip to Crete, you can take a virtual tour of the Olive Tree Museum of Vouves (it requires Flash) and see this 3D model of the tree.

Across the Mediterranean, you'll find six other olive trees believed to be 2,000-3,000 years old--some of our last living ties to an ancient world. And beautiful ones at that.

via @ticiaverveer

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.

Related Content:

This 392-Year-Old Bonsai Tree Survived the Hiroshima Atomic Blast & Still Flourishes Today: The Power of Resilience

The Social Lives of Trees: Science Reveals How Trees Mysteriously Talk to Each Other, Work Together & Form Nurturing Families

Graphic Shows the House Plants That Naturally Clean the Air in Your Home, According to a NASA Study

Shel Silverstein’s The Giving Tree: The Animated Film Narrated by Shel Himself (1973)


3,000-Year-Old Olive Tree on the Island of Crete Still Produces Olives Today 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: 2036 ORIGIN UNKNOWN Unearths a Mysterious Object on Mars [Trailer]

A trailer has debuted for 2036 Origin Unknown starring BSG's Katee Sackhoff. The interstellar sci-fi mystery is directed by Hasraf Dulull with a screenplay by Gary Hall.

Gravitas ventures will be released the flick in select theaters and on VOD, June 8th.

After the first manned mission to Mars ends in a deadly crash, mission controller Mackenzie 'Mack' Wilson (Sackhoff) assists an artificial intelligence system, A.R.T.I.

Their investigation uncovers a mysterious object under the surface of Mars, that could change the future of our planet as we know it.

Check out the trailer for 2036 Origin Unknown below!

[Continued ...]

Colossal: A Modern Solar-Powered Home Built Within the Ruins of an 18th-Century Farmhouse

Architects Nathanael Dorent and Lily Jencks recently collaborated to build a sleek, modern home within the existing ruins of an 18th-century farmhouse. The home is built on a hill that overlooks more than 50 miles of Scotland’s pastoral fields and combines elements of both the old and new world. The structure features white, futuristic walls that wind throughout the length of its interior, which is completely powered by exterior solar panels. Although there are some updated elements, the structure still sits within the original stones of the farmhouse, and is topped by a pitched roof similar to the one that would have sheltered the old Scottish house.

While building the structure, Dorent and Jencks used their admiration of specific views seen from the farmhouse as inspiration for custom windows. One particular oval opening in the wall looks directly onto a nearby field of cows perfectly set against a backdrop of rolling hills. You can learn more about the new home and the philosophy behind its construction on Dorent’s website. (via Fubiz)

Michael Geist: Bell Backroom Pressure: Internal Documents Reveal How a Brock University Executive Came to Provide Support for Website Blocking

Among the thousands of interventions at the CRTC to the Bell coalition website blocking plan, one of the submissions that stands out comes from Brian Hutchings, Brock University’s Vice-President, Administration. The submission claims that “Brock ardently supports the FairPlay Canada coalition” adding that “we are committed to assist the members of the coalition and the CRTC in eliminating the theft of digital content.” The submission sparked an immediate campus backlash. The Brock University Faculty Association filed a submission with the CRTC noting:

we stand in opposition to the intervention by Vice President, Administration on behalf of Brock University. Vice-President Hutching’s intervention was undertaken without consultation with the wider Brock University community, including faculty, librarians, and Senate; therefore, his submission should not be seen as indicative of the views of Brock University as a whole.

Further, Brock University’s Interim Provost and Vice-President, Academic wrote to the CRTC to remove any doubt that the submission did not represent the views of the university:

The submission of the Vice-President, Administration to the CRTC does not represent an official position or the totality of opinions at Brock University.

So how did the Vice-President, Academic come to submit to the CRTC and who did he consult? Given the role Bell played in the FairPlay coalition, it will not surprise to find that Bell Media was behind lobbying for the letter. According to documents obtained under provincial access to information laws, Mark Milliere, TSN’s Senior Vice President and General Manager (part of Bell Media) connected with Hutchings in early March with the assistance of Ryerson University professor Cheri Bradish, a former Brock professor.


Bradish email, obtained from Brock University under FIPPA


Milliere followed up a phone call with a letter to Hutchings, reminding him of TSN’s history of hiring Brock University grads and supporting its curriculum in asking for a letter of support to the CRTC:

Bell request email, obtained under FIPPA from Brock University


Milliere attached a letter of support filed from Ryerson University and asked that a copy of the Brock letter on Brock letterhead be provided to Bell. The request points to a clear Bell strategy of obtaining support letters to shop around to other potential targets as the Ryerson letter was not public at the time and only filed nearly a week after the Hutchings letter.

On March 22nd, Milliere followed up with another email, asking whether Brock was able to write a support letter and inaccurately stating that the deadline for submissions was the next day.


Bell follow-up email, obtained under FIPPA from Brock University


Hours later, Hutchings filed the submission with the CRTC. The access package suggests that there was no consultation within Brock or review by other parties. Milliere responded the following day with thanks, noting that “if you need anything from TSN, just ask.”


Bell thanks email, obtained under FIPPA from Brock University


Given its other astroturfing efforts with its own employees, the Bell backroom pressure on universities is not particularly surprising. However, the documents confirm that the source of the largely discredited submission was Bell outreach (notably, Bell’s contacts at Brock were so limited that introductions from another university were needed). Further, had Bell not given a false deadline date to spur action (the original Bell letter included the correct submission deadline), it is entirely possible that the submission would have come on the final day, thereby eliminating the opportunity for other Brock executives and faculty to correct the public record.

The pressure at Brock was presumably mirrored at other organizations, confirming yet again the the FairPlay “coalition” was a Bell-led initiative and raising the question of which supportive interventions were the direct result of Bell outreach to business partners, grant recipients, or others beholden to Canada’s largest communications company.

The post Bell Backroom Pressure: Internal Documents Reveal How a Brock University Executive Came to Provide Support for Website Blocking appeared first on Michael Geist.

CreativeApplications.Net: Sunny Side Up – Sunrise to sunset, the measures time and robotics

Sunny Side Up – Sunrise to sunset, the measures time and robotics
Developed by studio AATB, Sunny Side Up is an installation comprised of a robotic arm and a metal rod, proposing a contemporary version of the archaic typology of the sundial.

things magazine: Taking a line for a walk

The Longest Route You Can Sail in a Straight Line Without Hitting Land / a wealth of imagery by M.C.Escher (via Kottke / notes on the Satanic panic / Dead end thrills and Berduu, the art of the video game … Continue reading Comic for 2018.05.09

New Cyanide and Happiness Comic

Daniel Lemire's blog: How quickly can you check that a string is valid unicode (UTF-8)?

Though character strings are represented as bytes (values in [0,255]), not all sequences of bytes are valid strings. By far the most popular character encoding today is UTF-8, part of the unicode standard. How quickly can we check whether a sequence of bytes is valid UTF-8?

Any ASCII string is a valid UTF-8 string. An ASCII character is simply a byte value in [0,127] or [0x00, 0x7F] in hexadecimal. That is, the most significant bit is always zero.

You can check that a string is made of ASCII characters easily in C:

bool is_ascii(const signed char *c, size_t len) {
  for (size_t i = 0; i < len; i++) {
    if(c[i] < 0) return false;
  return true;

However, there are many more unicode characters than can be represented using a single byte. For other characters, outside the ASCII set, we need to use two or more bytes. All of these “fancier” characters are made of sequences of bytes all having the most significant bit set to 1. However, there are somewhat esoteric restrictions:

  • All of the two-byte characters are made of a byte in [0xC2,0xDF] followed by a byte in [0x80,0xBF].
  • There are four types of characters made of three bytes. For example, if the first by is 0xE0, then the next byte must be in [0xA0,0xBF] followed by a byte in [0x80,0xBF].
    • It is all quite boring but can be summarized by the following table:

      First Byte Second Byte Third Byte Fourth Byte
      [0xC2,0xDF] [0x80,0xBF]
      0xE0 [0xA0,0xBF] [0x80,0xBF]
      [0xE1,0xEC] [0x80,0xBF] [0x80,0xBF]
      0xED [0x80,0x9F] [0x80,0xBF]
      [0xEE,0xEF] [0x80,0xBF] [0x80,0xBF]
      0xF0 [0x90,0xBF] [0x80,0xBF] [0x80,0xBF]
      [F1,0xF3] [80,0xBF] [80,0xBF] [80,0xBF]
      0xF4 [80,0x8F] [80,0xBF] [80,0xBF]

      So, how quickly can we check whether a string satisfies these conditions?

      I went looking for handy C/C++ code. I did not want to use a framework or a command-line tool.

      The first thing I found is Björn Höhrmann’s finite-state machine. It looks quite fast. Without getting in the details, given a small table that includes character classes and state transitions, the gist of Höhrmann’s code consists in repeatedly calling this small function:

      bool is_ok(uint32_t* state, uint32_t byte) {
        uint32_t type = utf8d[byte];
        *state = utf8d[256 + *state * 16 + type];
        return (*state != 1); // true on error 

      Then I went looking for a fancier, vectorized, solution. That is, I want a version that uses advanced vector registers.

      I found something sensible by Olivier Goffart. Goffart’s original code translates UTF-8 into UTF-16 which is more than I want done. So I modified his code slightly, mostly by removing the unneeded part. His code will only run on x64 processors.

      To test these functions, I wanted to generate quickly some random strings, but to measure accurately the string, I need it to be valid UTF-8. So I simply generated ASCII strings. This makes the problem easier, so I probably underestimate the difficulty of the problem. This problem is obviously dependent on the data type and lots of interesting inputs are mostly just ASCII anyhow.

      Olivier Goffart’s code “cheats” and short-circuit the processing when detecting ASCII code. That’s fine, but I created two versions of his function, one with and one without the “cheat”.

      So, how quickly can these functions check that strings are valid UTF-8?

      string size is ASCII? Höhrmann’s finite-state machine Goffart’s (with ASCII cheat) Goffart’s (no ASCII cheat)
      32 ~2.5 cycles per byte ~8 cycles per byte ~5 cycles per byte ~6 cycles per byte
      80 ~2 cycles per byte ~8 cycles per byte ~1.7 cycles per byte ~4 cycles per byte
      512 ~1.5 cycles per byte ~8 cycles per byte ~0.7 cycles per byte ~3 cycles per byte

      My source code is available.

      The vectorized code gives us a nice boost… Sadly, in many applications, a lot of the strings can be quite small. In such cases, it seems that we need to spend something close to 8 cycles per byte just to check that the string is valid?

      In many cases, you could short-circuit the check and just verify that the string is an ASCII string, but it is still not cheap, at about 2 cycles per input byte.

      I would not consider any of the code that I have used to be “highly optimized” so it is likely that we can do much better. How much better remains an open question to me.

      Update: Daniel Dunbar wrote on Twitter

      I would expect that in practice best version would be highly optimized ascii only check for short segments, with fallback to full check if any in the segment fail

      That is close to Goffart’s approach.

TheSirensSound: New album pulling teeth by The Giant Peach

The Giant Peach is an indie-art rock band from Middlebury VT. Their music captures a bitter-sweetness wrestled into songs late at night. United from disparate backgrounds in folk, blues, and jazz, the members of The Giant Peach came together to render these tales of stubborn love, mistakes, and repeated carelessness with a cutting honesty and an unexpected joy.

Pulling Teeth came about as easily as the title might imply. These songs were written over the course of a tumultuous and ultimately terminal romance, captured moments of the un-tempered excitement of first love – and its eventual loss. In a soft-spoken earnestness that cuts through swelling horn lines and crackling guitars, Pulling Teeth tells of the inevitable loss of innocence that accompanies lost love.

"It's a collection of songs that I wrote over the course of my first relationship and at its end," explains songwriter and frontman Harrison Wood Hsiang. "There's a lot of doubt in these songs -- questioning your past wants and actions, questioning your beliefs as your overturn them one by one by letting people down and being let down, and ultimately questioning the kind of person that you are."

"My best friend Max Shashoua and I came together to give these songs a final form. You know the gist of this already -- we recorded the whole thing in my dorm room with an SM57, a fact we're proud of, especially given how often people praise the quality of the recording these days. Maybe a fun story; we actually recorded the whole thing twice. The first time it just wasn't working. Max and I were still figuring out the details of the arrangements and the shape of the record as a whole, and as that became clearer we realized that we needed to do it properly and do it over again. So over the course of a weekend, we re-recorded the entire record (save "Coats," which we tracked live at Meadowlark Studios)."

"My longtime songwriting hero, Jasper Sloan Yip, lends his vocals to the first track, "Want." He and I connected after I covered one of his songs and he's acted as a real friend and mentor to me ever since. The first show Max and I played together, pre-Peach, was acting as Jasper's backup band."

Planet Haskell: Brent Yorgey: Apply to attend the Oregon Programming Languages Summer School!

Although the official deadline has passed, I hear there are still a few spots left for the Oregon Programming Languages Summer School (OPLSS), hosted at the University of Oregon in Eugene. This is a really fantastic opportunity to take a deep dive in programming languages and type theory. I attended as a graduate student and although it was overwhelming at times—like drinking from a fire hose!—it was a wonderful experience. I made some great friends and learned a ton (I still occasionally refer back to my notes!). Eugene is also beautiful in the summer (I have fond memories of going geocaching in a nearby park).

The main summer school (July 9–21) has a focus on parallelism and concurrency, but for those with less background, there is also a one-week introduction on the foundations of programming languages (July 3–8). If you want, you can actually choose to attend only the July 3–8 session (or both, or just July 9–21 of course). Attending just the introductory session could be a great option for someone who knows some functional programming but wants a more solid grounding in the underlying theory.

If you’re a member of the Haskell/FP community who is thinking of applying, and I’m familiar with you or your work, I would be happy to write you a recommendation if you need one.

Quiet Earth: Director Zack Wilcox on His Impressive Debut HUNTING LANDS [Interview]

I was recently blown away by writer/director Zack Wilcox's impressive directorial debut Hunting Lands (review) which tells the story of a man who is trying to disconnect from society only to find himself drawn back into it, and dealing with one of society's scummiest individuals.

Wilcox's movie is bold and risky and he tells his story with minimal dialogue to maximum effectiveness with the help of actor Marshall Cook and cinematographer Edwin Stevens.

I recently had a chance to pose some questions to Wilcox about the project, and we started with some insight into the origins of the movie and if it was always intended as such a visual film.

Look for Hunting Lands pl [Continued ...]

Quiet Earth: Neo-Noir Spaghetti Western, PICKINGS Arrives August [Trailer]

Neo-noir meets Spaghetti Western in Pickings, a film about a single mother and local bar owner who spent years trying to escape her past until mobsters came after her family.

Written and directed by Usher Morgan, Pickings will be released nationwide via VOD iTunes on August 3rd from Dark Passage Films.

Pickings is filled with the classic film noir elements—grim voiceovers, evocative flashbacks, a moody score and an unforgettable femme fatale—combined with the dazzling neon-dipped photography, startling violence and graphic novel-styled visuals of modern cinema. It immediately evokes the films of Quentin Tarantino and Robert Rodriguez, even as it stands on its own as an exciting new exercise stylized cinematic sound and vision.

PICKINGS, Morgan’ [Continued ...]

Greater Fool – Authored by Garth Turner – The Troubled Future of Real Estate: The war on stuff

– Stephanie McCombie, @ifitwags

When a bunch of people who live in pricey digs on the tony side of Vancouver protested the other day, the moisters were aghast. The homeowners were outraged at a new uber-property tax on houses that have soared to more than $4 million in value. After all, they didn’t force the real estate market into orbit. That just happened. So why should they have to hand over a bunch of cash?

The kids saw it differently. Old, greedy rich people being whiny. When they have so much, why shouldn’t they pay extra? How is that not fair?

The wealth divide is a big topic these days. Wealthy people are getting moreso. Wage gains for the rest of society have sucked. So household debt in Canada has soared to over $2 trillion – people have been borrowing what they don’t have to get what they want. Now rates are rising and folks are pissed. Not going well.

A CBC poll just found 86% of BCers think society is divided along economic lines and 90% of those link their concern to housing. In that society, real estate = wealth. You can have $4 million in a liquid portfolio turning out $300,000 in low-taxed income and nobody cares. But move into a $4 million house producing no income, and you’re a social pariah who deserves a tax spanking. Paleo thinking. But it’s spreading among the political class.

Governments moving to the left, supported by a Millennial tidal wave, are thinking more about taxing wealth. After all, what’s left? The Trudeauites brought in a new, higher tax bracket so those making over $230,000 are now in the 53% zone. HST is punishing everywhere. The assault on income and spending is relentless, from gas taxes to health taxes to payroll taxes.

The political answer to demands from the deplorables for ‘equality’ is to nibble away at the savings, investments and assets of those who earned or built them. It’s what motivated Trudeau to slash the TFSA contribution limit from $10,000 back to $5,500 a year, despite it being the most democratic tax avoidance vehicle in the land. It was at the heart of Bill Morneau’s quixotic assault on small businesses, trying to siphon off retained earnings which doctors (for example) had amassed over the years to make up for no pensions. It’s also the motivation for the principal residence registry and the requirement we now face to justify an exemption from capital gains taxation. Governments want to tax stuff – real estate, financial assets making dividends or capital gains, and savings. Hoovering income is not enough. The mob wants more.

At least that’s how they see it in the hoods where dirt is a prized commodity. Nowhere has a government gone further down this road than in BC. Second properties are now heavily taxed in addition to property tax. Ditto for ‘empty’ residences which are often used for business or family purposes. There’s a speculation tax which has nothing to do with speculation, but is levied just for owning a piece of real estate, not for selling it at a profit. And the public approval rate for this is hovering around 90%.

Most worrisome to the people being gouged is that these taxes are retroactive. They apply to real estate that might have been owned for decades, slapped on at current valuations when prices are at an historic high. Most taxes attempt to modify behaviour, but these are just a hit on wealth. They don’t make houses more affordable to the crowd below. They merely confiscate.

That’s perfectly okay with the majority who feel entitled to things they cannot actually afford. The Dipper finance minister in BC has suggested the extra property tax on high-end properties might some day morph into a general wealth tax – which is exactly what folks owning nice houses fear. Tax based on possessions, not income nor the ability to pay, do not have a legacy in Canada. It’s Robin Hood stuff. The law of the forest with jolly green guys in codpieces firing arrows at the baron. Take from the rich, give to the poor.

Wealth taxes are the rage in academia among professors who have tenure, cannot be fired and have life-long defined-benefit pension plans (publicly-funded, so they need not save anything). The eggheads behind the NDP speculation tax have argued that property taxes should be jacked and income taxes reduced. That way the average guy who has saved nothing pockets more disposable income and the person who’s accumulated assets gets to fund it. The incentive to work and spend is increased. The reason to save and invest is destroyed.

So far, it’s a disaster. The empty house tax in Vancouver is costing a fortune to run and has resulted in no new rental units. The speculation tax on second properties has helped start a war with Alberta, and is now riddled with exemptions. Cheap houses cost more and dear ones are still out of reach. But the mob loves it, wants it, craves more of it.

If you like this stuff, you know how to vote. If you don’t, learn a lot more about tax avoidance, get a fat liquid portfolio and go live quietly among the masses.

Planet Lisp: Christophe Rhodes: algorithms and data structures term2

I presented some of the work on teaching algorithms and data structures at the 2018 European Lisp Symposium

Given that I wanted to go to the symposium (and I'm glad I did!), the most economical method for going was if I presented research work - because then there was a reasonable chance that my employer would fund the expenses (spoiler: they did; thank you!). It might perhaps be surprising to hear that they don't usually directly fund attending events where one is not presenting; on the other hand, it's perhaps reasonable on the basis that part of an academic's job as a scholar and researcher is to be creating and disseminating new knowledge, and of course universities, like any organizations, need to prioritise spending money on things which bring value or further the organization's mission.

In any case, I found that I wanted to write about the teaching work that I have been doing, and in particular I chose to write about a small, Lisp-related aspect. Specifically, it is now fairly normal in technical subjects to perform a lot of automated testing of students; it relieves the burden on staff to assess things which can be mechanically assessed, and deliver feedback to individual students which can be delivered automatically; this frees up staff time to perform targeted interventions, give better feedback on more qualitative aspects of the curriculum, or work fewer weekends of the year. A large part of my teaching work for the last 18 months has been developing material for these automated tests, and working on the infrastructure underlying them, for my and colleagues' teaching.

So, the more that we can test automatically and meaningfully, the more time we have to spend on other things. The main novelty here, and the lisp-related hook for the paper I submitted to ELS, was being able to give meaningful feedback on numerical answer questions which probed whether students were developing a good mental model of the meaning of pseudocode. That's a bit vague; let's be specific and consider the break and continue keywords:

x ← 0
for 0 ≤ i < 9
  x ← x + i
  if x > 17
  end if
  x ← x + 1
end for
return x

The above pseudocode is typical of what a student might see; the question would be "what does the above block of pseudocode return?", which is mildly arithmetically challenging, particularly under time pressure, but the conceptual aspect that was being tested here was whether the student understood the effect of continue. Therefore, it is important to give the student specific feedback; the more specific, the better. So if a student answered 20 to this question (as if the continue acted as a break), they would receive a specific feedback message reminding them about the difference between the two operators; if they answered 45, they received a message reminding them that continue has a particular meaning in loops; and any other answers received generic feedback.

Having just one of these questions does no good, though. Students will go to almost any lengths to avoid learning things, and it is easy to communicate answers to multiple-choice and short-answer questions among a cohort. So, I needed hundreds of these questions: at least one per student, but in fact by design the students could take these multiple-chocie quizzes multiple times, as they are primarily an aid for the students themselves, to help them discover what they know.

Now of course I could treat the above pseudocode fragment as a template, parameterise it (initial value, loop bounds, increment) and compute the values needing the specific feedback in terms of the values of the parameters. But this generalizes badly: what happens when I decide that I want to vary the operators (say to introduce multiplication) or modify the structure somewhat (e.g. by swapping the two increments before and after the continue)? The parametrization gets more and more complicated, the chances of (my) error increase, and perhaps most importantly it's not any fun.

Instead, what did I do? With some sense of grim inevitability, I evolved (or maybe accreted) an interpreter (in emacs lisp) for a sexp-based representation of this pseudocode. At the start of the year, it's pretty simple; towards the end it has developed into an almost reasonable mini-language. Writing the interpreter is straightforward, though the way it evolved into one gigantic case statement for supported operators rather than having reasonable semantics is a bit of a shame; as a bonus, implementing a pretty-printer for the sexp-based pseudocode, with correct indentation and keyword highlighting, is straightforward. Then armed with the pseudocode I will ask the students to interpret, I can mutate it in ways that I anticipate students might think like (replacing continue with break or progn) and interpret that form to see which wrong answer should generate what feedback.

Anyway, that was the hook. There's some evidence in the paper that the general approach of repeated micro-assessment, and also the the consideration of likely student mistakes and giving specific feedback, actually works. And now that the (provisional) results are in, how does this term compare with last term? We can look at the relationship between this term's marks and last term's. What should we be looking for? Generally, I would expect marks in the second term's coursework to be broadly similar to the marks in the first term - all else being equal, students who put in a lot of effort and are confident with the material in term 1 are likely to have an easier time integrating the slightly more advanced material in term 2. That's not a deterministic rule, though; some students will have been given a wake-up call by the term 1 marks, and equally some students might decide to coast.

plot of term 2 marks against term 1: a = 0.82, R² = 0.67

I've asked R to draw the regression line in the above picture; a straight line fit seems reasonable based on the plot. What are the statistics of that line?

R> summary(lm(Term2~Term1, data=d))

lm(formula = Term2 ~ Term1, data = d)

        Min      1Q  Median      3Q     Max 
    -41.752  -6.032   1.138   6.107  31.155 

Estimate Std. Error t value Pr(>|t|)
(Intercept)  3.18414    4.09773   0.777    0.439
Term1        0.82056    0.05485  14.961   <2e-16 ***
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 10.46 on 107 degrees of freedom
  (32 observations deleted due to missingness)
Multiple R-squared:  0.6766,    Adjusted R-squared:  0.6736 
F-statistic: 223.8 on 1 and 107 DF,  p-value: < 2.2e-16

Looking at the summary above, we have a strong positive relationship between term 1 and term 2 marks. The intercept is approximately zero (if you got no marks in term 1, you should expect no marks in term 2), and the slope is less than one: on average, each mark a student got in term 1 tended to convert to 0.8 marks in term 2 - this is plausibly explained by the material being slightly harder in term 2, and by the fact that some of the assessments were more explicitly designed to allow finer discrimination at the top end - marks in the 90s. (A note for international readers: in the UK system, the pass mark is 40%, excellent work is typically awarded a mark in the 70% range - marks of 90% should be reserved for exceptional work). The average case is, however, only that: there was significant variation from that average line, and indeed (looking at the quartiles) over 50% of the cohort was more than half a degree class (5 percentage points) away from their term 2 mark as "predicted" from their mark for term 1.

All of this seems reasonable, and it was a privilege to work with this cohort of students, and to present the sum of their interactions on this course to the audience I had. I got the largest round of applause, I think, for revealing that as part of the peer-assessment I had required that students run each others' code. I also had to present some of the context for the work; not only because this was an international gathering, with people in various university systems and from industry, but also because of the large-scale disruption caused by industrial action over the Universities Superannuation Scheme (the collective, defined benefit pension fund for academics at about 68 Universities and ~300 other bodies associated with Higher Education). Perhaps most gratifyingly, students were able to continue learning despite being deprived of their tuition for three consecutive weeks; judging by their performance on the various assessments so far,

And now? The students will sit an exam, after which I and colleagues will look in detail at those results and the relationship with the students' coursework marks (as I did last year). I will continue developing this material (my board for this module currently lists 33 todo items), and adapt it for next year and for new cohorts. And maybe you will join me? The Computing department at Goldsmiths is hiring lecturers and senior lecturers to come and participate in research, scholarship and teaching in computing: a lecturer in creative computing, a lecturer in computer games, a lecturer in data science, a lecturer in physical and creative computing, a lecturer in computer science and a senior lecturer in computer science. Anyone reading this is welcome to contact me to find out more!

Colossal: Swirling Star Trails Captured Over the Namib Desert by Daniel Kordan

Russian photographer Daniel Kordan is a master of photographing the cosmos. In 2016 we covered his journey to the Salar de Uyuni, where he captured millions of brilliantly hued stars reflected in the world’s largest salt flat. Recently, Kordan returned from a trip to Namibia where he mapped swirling trails of stars above the Deadvlei, a white clay pan speckled with the 900-year-old tree skeletons, and other sites across the Namib desert.

The images feature vortexes of multi-colored stars streaked across the sky like post-impressionist paintings. The Milky Way’s warm and cool tones intermix to create a kaleidoscopic vision of the sky above, and illuminate the barren desert landscape below. To capture such images yourself, Kordan suggests creating a time lapse with a wide angle lens, and utilizing an app like PhotoPills which allows you to easily predict the position of the stars.

You can see more of Kordan’s exploration through Namibia in the images below, and view his photographs from other locations across the globe on his website and Instagram.

Ideas from CBC Radio (Highlights): Starving out resistance: Anne Applebaum on Stalin’s deliberate famine in Ukraine

Paul Kennedy in conversation with historian Anne Applebaum, winner of the 2018 Lionel Gelber Prize. The journalist and academic won the prestigious nonfiction award for her book, "Red Famine". It tells the story of how Stalin's collective farming policies in the early 1930s induced starvation among 3 million Ukrainian peasants. The book argues that this act was no byproduct of bad policy decisions, but instead a deliberate effort to crush Ukrainian nationalism and resistance —with repercussions that extend into our own era of Russian-Ukrainian tensions.

Instructables: exploring - featured: How to Make Dyson Fan at Home

The smooth breeze of air flowing through a good looking small table fan placed on your work desk feels wonderful while working. The problem with most table fans is that they provide random flows of air rather than continuous breeze. Dyson overcame this problem and created a wonderful product, common...
By: Techgenie

Continue Reading »

Michael Geist: Springer Nature Opens Up on Educational Publishing: “E-Piracy” Sites Do Not Replace Traditional Subscription Services, Business Risks Primarily Stem from Marketplace Changes

Springer Nature, one of the world’s largest publishers of journals and electronic books has filed a prospectus for the purposes of an initial public offering. The prospectus is a fascinating read as it eschews the usual lobbying talking points in favour of legally required frank disclosure. For example, the document provides considerable insights into the continuing emergence of open access, noting that 27% of all research articles published by Springer Nature in 2017 was published on an open access basis.

The prospectus contains several discussions that are directly relevant to the Canadian copyright review. For example, there is no reference to Canada’s fair dealing, but it does point to a German law that features obvious similarities since it permits libraries to distribute journal articles and up to 10 percent of a work to users for non-commercial purposes. The prospectus also places the spotlight on changes in the education market that impact its business. Consistent with Canadian studies that do not emphasize copyright (B.C. Book Publishers, Association of Canadian Publishers), Springer Nature does not reference it within the educational publishing market either. Instead, it points to used textbook sales, rentals, parallel imports, government created materials, procurement processes, and local review processes as business risks. The company cites many markets (Spain, Poland, India, and South Africa among them), but nothing on Canada.

In addition to its educational publishing analysis, its discussion of “e-piracy” sites that post unauthorized copies of journal articles is particularly noteworthy. Sites such as SciHub have faced a steady stream of lawsuits and efforts to shut down a site that has posted millions of academic journal articles. The site is typically referred to as a “pirate site” and the Springer Nature prospectus identifies such as sites as a business risk. However, its disclosure on SciHub also reveals that the company does not believe that it has had a negative effect on subscription revenues, noting that the site operates in parallel with subscriptions, not as a substitute for them:

E-piracy websites typically allow users to access content through proxies and thereby bypass publishers’ paywalls. We believe that our subscription customers access SciHub in parallel, but not as a replacement to, our traditional subscription services. To our knowledge the availability of our content through these aggregators has not resulted in subscription terminations.

The company is careful to emphasize that this may change in the future and that it remains active in trying to shut the sites down (or to remove content with approximately two million takedown notices sent last year alone). Yet the express acknowledgement that it does not believe that e-piracy sites have resulted in lost subscriptions and that they operate in parallel to existing subscriptions confirms what many have long maintained, namely that claims about the impact of unauthorized or piracy sites are frequently exaggerated. Springer Nature leaves little doubt that it wants to stop these sites, but its admission on the current impact has obvious parallels with similar efforts such as the Bell coalition website blocking proposal, which has also faced criticism for attempts to link cord cutting with unauthorized streaming services.

The post Springer Nature Opens Up on Educational Publishing: “E-Piracy” Sites Do Not Replace Traditional Subscription Services, Business Risks Primarily Stem from Marketplace Changes appeared first on Michael Geist.

Colossal: Subversion of the Everyday: Artist MyeongBeom Kim Reinterprets Common Objects in Delightful Ways

All images via Myeongbeom Kim

MyeongBeom Kim (previously) builds unique works by combining everyday objects whose purposes are often in stark contrast. The sculptures are created from recognizable pieces such as birthday cake candles, canes, and standard #2 pencils. These objects are reworked to drastically limit their inherent purpose, like the untitled sculpture below in which the Korean artist floats a helium-filled balloon inside of a bird cage. The latex bubble is unable to rise higher than the surrounding metal enclosure, and thus balances within the structure until its eventual deflation.

Kim received his BFA in Environmental Sculpture from the University of Seoul, and his MFA in Sculpture from the Art Institute of Chicago. You can see more of the artists work on his website and Instagram. (via Booooooom)

Paper Bits: Pulsar loop test

Turns out, the Arduino was not crashing at all. I just had a bug in the line of code that sends the current animation frame buffer to the function that writes to the LEDs.

Fixed that. And now I can see the many ways that this animation doesn’t work.

Paper Bits: Animation Loop Test: l_pulsar_a from Josh DiMauro on Vimeo.Found...

Animation Loop Test: l_pulsar_a from Josh DiMauro on Vimeo.

Found the bug, now I can see the many ways that this loop does not work.

OCaml Weekly News: OCaml Weekly News, 08 May 2018

  1. Threat research engineer job, Endgame, US
  2. Zmq 5.0.0
  3. PPX and reflection
  4. SandDB: A simple immutable database for the masses
  5. Release 2.8.5 of Caph, a functional/dataflow language for programming FPGAs
  6. [URGENT] To all macOS/BSD opam users: critical problem with camlp5 7.03
  7. first release of phashtbl Comic for 2018.05.08

New Cyanide and Happiness Comic

Planet Haskell: Ken T Takusagawa: [mmpffczs] Generating Keccak round constants

We investigate the round constants for the Keccak hash function (of which SHA-3 is a subset).  We work mostly from the officially published SHA-3 standard which was a little bit easier to understand than the reference specification.

These round constants are used in Keccak's iota step-mapping function.  The internal function rc(t) is a linear-feedback shift register (LFSR) with 8 bits of state and a period of 255.  Its period is 255 if its state is seeded with a nonzero value, which it is, namely the value 1.  Here is its full period, grouped in chunks of 7 for reasons which will be made clear shortly.  We write the 0 bit as period "." and the 1 bit as "1" to be able to easily distinguish them: 1...... .1.11.. .1111.1 ....111 11111.. 1....1. 1..1111 .111... ..11... 1.1.11. .11..1. 111111. 1111..1 1.111.1 11..1.1 .1..1.1 ...1..1 .11.1.. .11..11 1..1111 ...11.1 1....1. ..1.111 .1.1111 .11.111 11....1 1.1..11 .1.11.1 1.1.1.. ...1..1 11.11.. 1..1..1 1...... 111.1.. 1...111 ...

The Keccak round constants are easiest to understand in binary.  We write binary constants below with the least significant bit on the left (little-endian), opposite the standard convention of writing numbers.


Of the 64 bit positions for each 64-bit constant, only 7 can ever be set, seen in the rough columns of 1s at bit positions 2^j-1 above.  Whether a position is set or not is taken from the output of the LFSR defined above (which is why we grouped the output in chunks of 7).  It is curious that Keccak uses such sparse binary round constants; the best explanation I can imagine is that it reduces the gate count in unrolled hardware implementations.  It's nice that Keccak is secure despite such weak round constants which barely modify values each round and differ so little between rounds.

The last round (of 64-bit Keccak, i.e., w=64) always uses the round constant with index 23 above.  If you wish to do Keccak with fewer than 24 rounds, then start somewhere in the middle, ending at round 23.  If you wish to do Keccak with more than 24 rounds, then start at a negative round index.  This is kind of bizarre, but I think the reason is something along the lines of being able to reuse cryptanalytic results from reduced-round variants.  Incidentally, negative round indices means that the rc(t) function must be able to handle negative t, so your (mod 255) operation must give a proper positive result for negative input.  Because 255 (the period of the LFSR) and 7 (the number of bits consumed per round constant) are relatively prime, the round constants cycle with a period of 255.  The period could have been less if the number of LFSR bits consumed per round constant shared factors with 255=3*5*17.  Here is the full list of round constants (in big-endian hexadecimal) for as many rounds of Keccak you care to do:

RC[-231] = 0x8000000080008082
RC[-230] = 0x800000008000800a
RC[-229] = 0x8000000000000003
RC[-228] = 0x8000000080000009
RC[-227] = 0x8000000000008082
RC[-226] = 0x0000000000008009
RC[-225] = 0x8000000000000080
RC[-224] = 0x0000000000008083
RC[-223] = 0x8000000000000081
RC[-222] = 0x0000000000000001
RC[-221] = 0x000000000000800b
RC[-220] = 0x8000000080008001
RC[-219] = 0x0000000000000080
RC[-218] = 0x8000000000008000
RC[-217] = 0x8000000080008001
RC[-216] = 0x0000000000000009
RC[-215] = 0x800000008000808b
RC[-214] = 0x0000000000000081
RC[-213] = 0x8000000000000082
RC[-212] = 0x000000008000008b
RC[-211] = 0x8000000080008009
RC[-210] = 0x8000000080000000
RC[-209] = 0x0000000080000080
RC[-208] = 0x0000000080008003
RC[-207] = 0x8000000080008082
RC[-206] = 0x8000000080008083
RC[-205] = 0x8000000080000088
RC[-204] = 0x0000000000008089
RC[-203] = 0x0000000000008009
RC[-202] = 0x8000000000000009
RC[-201] = 0x0000000080008008
RC[-200] = 0x0000000080008001
RC[-199] = 0x800000000000008a
RC[-198] = 0x800000000000000b
RC[-197] = 0x0000000000000089
RC[-196] = 0x0000000080000002
RC[-195] = 0x800000000000800b
RC[-194] = 0x000000008000800b
RC[-193] = 0x000000000000808b
RC[-192] = 0x0000000080000088
RC[-191] = 0x800000000000800a
RC[-190] = 0x0000000080000089
RC[-189] = 0x8000000000000001
RC[-188] = 0x8000000000008088
RC[-187] = 0x8000000000000081
RC[-186] = 0x0000000000000088
RC[-185] = 0x0000000080008080
RC[-184] = 0x0000000000000081
RC[-183] = 0x800000000000000b
RC[-182] = 0x0000000000000000
RC[-181] = 0x0000000000000089
RC[-180] = 0x000000008000008b
RC[-179] = 0x8000000080008080
RC[-178] = 0x800000000000008b
RC[-177] = 0x8000000000008000
RC[-176] = 0x8000000080008088
RC[-175] = 0x0000000080000082
RC[-174] = 0x000000000000000b
RC[-173] = 0x800000000000000a
RC[-172] = 0x0000000000008082
RC[-171] = 0x8000000000008003
RC[-170] = 0x800000000000808b
RC[-169] = 0x800000008000000b
RC[-168] = 0x800000008000008a
RC[-167] = 0x0000000080000081
RC[-166] = 0x0000000080000081
RC[-165] = 0x0000000080000008
RC[-164] = 0x0000000000000083
RC[-163] = 0x8000000080008003
RC[-162] = 0x0000000080008088
RC[-161] = 0x8000000080000088
RC[-160] = 0x0000000000008000
RC[-159] = 0x0000000080008082
RC[-158] = 0x0000000080008089
RC[-157] = 0x8000000080008083
RC[-156] = 0x8000000080000001
RC[-155] = 0x0000000080008002
RC[-154] = 0x8000000080000089
RC[-153] = 0x0000000000000082
RC[-152] = 0x8000000080000008
RC[-151] = 0x8000000000000089
RC[-150] = 0x8000000080000008
RC[-149] = 0x8000000000000000
RC[-148] = 0x8000000000000083
RC[-147] = 0x0000000080008080
RC[-146] = 0x0000000000000008
RC[-145] = 0x8000000080000080
RC[-144] = 0x8000000080008080
RC[-143] = 0x8000000000000002
RC[-142] = 0x800000008000808b
RC[-141] = 0x0000000000000008
RC[-140] = 0x8000000080000009
RC[-139] = 0x800000000000800b
RC[-138] = 0x0000000080008082
RC[-137] = 0x0000000080008000
RC[-136] = 0x8000000000008008
RC[-135] = 0x0000000000008081
RC[-134] = 0x8000000080008089
RC[-133] = 0x0000000080008089
RC[-132] = 0x800000008000800a
RC[-131] = 0x800000000000008a
RC[-130] = 0x8000000000000082
RC[-129] = 0x0000000080000002
RC[-128] = 0x8000000000008082
RC[-127] = 0x0000000000008080
RC[-126] = 0x800000008000000b
RC[-125] = 0x8000000080000003
RC[-124] = 0x000000000000000a
RC[-123] = 0x8000000000008001
RC[-122] = 0x8000000080000083
RC[-121] = 0x8000000000008083
RC[-120] = 0x000000000000008b
RC[-119] = 0x000000000000800a
RC[-118] = 0x8000000080000083
RC[-117] = 0x800000000000800a
RC[-116] = 0x0000000080000000
RC[-115] = 0x800000008000008a
RC[-114] = 0x0000000080000008
RC[-113] = 0x000000000000000a
RC[-112] = 0x8000000000008088
RC[-111] = 0x8000000000000008
RC[-110] = 0x0000000080000003
RC[-109] = 0x8000000000000000
RC[-108] = 0x800000000000000a
RC[-107] = 0x000000000000800b
RC[-106] = 0x8000000080008088
RC[-105] = 0x000000008000000b
RC[-104] = 0x0000000080000080
RC[-103] = 0x000000008000808a
RC[-102] = 0x8000000000008009
RC[-101] = 0x0000000000000003
RC[-100] = 0x0000000080000003
RC[-99] = 0x8000000000000089
RC[-98] = 0x8000000080000081
RC[-97] = 0x800000008000008b
RC[-96] = 0x0000000080008003
RC[-95] = 0x800000008000800b
RC[-94] = 0x8000000000008008
RC[-93] = 0x0000000000008008
RC[-92] = 0x8000000000008002
RC[-91] = 0x8000000000000009
RC[-90] = 0x0000000080008081
RC[-89] = 0x000000000000808a
RC[-88] = 0x000000008000800a
RC[-87] = 0x0000000000000080
RC[-86] = 0x8000000000008089
RC[-85] = 0x800000000000808a
RC[-84] = 0x8000000080008089
RC[-83] = 0x0000000080008000
RC[-82] = 0x8000000000008081
RC[-81] = 0x000000008000800a
RC[-80] = 0x0000000000000009
RC[-79] = 0x8000000080008002
RC[-78] = 0x000000008000000a
RC[-77] = 0x0000000080008002
RC[-76] = 0x8000000080000000
RC[-75] = 0x0000000080000009
RC[-74] = 0x0000000000008088
RC[-73] = 0x0000000000000002
RC[-72] = 0x0000000080008008
RC[-71] = 0x0000000080008088
RC[-70] = 0x8000000080000001
RC[-69] = 0x000000008000808b
RC[-68] = 0x8000000000000002
RC[-67] = 0x8000000080008002
RC[-66] = 0x0000000080000083
RC[-65] = 0x0000000000008089
RC[-64] = 0x0000000000008080
RC[-63] = 0x8000000080000082
RC[-62] = 0x8000000000000088
RC[-61] = 0x800000008000808a
RC[-60] = 0x000000000000808a
RC[-59] = 0x0000000080008083
RC[-58] = 0x000000008000000b
RC[-57] = 0x0000000080000009
RC[-56] = 0x0000000000008001
RC[-55] = 0x0000000080000089
RC[-54] = 0x8000000000000088
RC[-53] = 0x8000000080008003
RC[-52] = 0x0000000080008001
RC[-51] = 0x8000000000000003
RC[-50] = 0x8000000080000080
RC[-49] = 0x8000000080008009
RC[-48] = 0x8000000080000089
RC[-47] = 0x000000000000000b
RC[-46] = 0x8000000000000083
RC[-45] = 0x0000000080008009
RC[-44] = 0x0000000080000083
RC[-43] = 0x0000000000008000
RC[-42] = 0x000000008000800b
RC[-41] = 0x0000000000008002
RC[-40] = 0x0000000000000003
RC[-39] = 0x000000008000008a
RC[-38] = 0x8000000080000002
RC[-37] = 0x0000000000008001
RC[-36] = 0x0000000080000000
RC[-35] = 0x8000000080000003
RC[-34] = 0x0000000000000083
RC[-33] = 0x800000008000808a
RC[-32] = 0x0000000000008003
RC[-31] = 0x0000000000008008
RC[-30] = 0x800000000000808b
RC[-29] = 0x8000000080000082
RC[-28] = 0x8000000000000001
RC[-27] = 0x8000000000008001
RC[-26] = 0x800000008000000a
RC[-25] = 0x8000000080008008
RC[-24] = 0x800000008000800b
RC[-23] = 0x8000000000008081
RC[-22] = 0x0000000080008083
RC[-21] = 0x0000000080000082
RC[-20] = 0x0000000000000082
RC[-19] = 0x8000000080000081
RC[-18] = 0x8000000080000002
RC[-17] = 0x0000000000008088
RC[-16] = 0x000000000000008b
RC[-15] = 0x0000000000008083
RC[-14] = 0x8000000000000008
RC[-13] = 0x000000008000008a
RC[-12] = 0x800000008000008b
RC[-11] = 0x000000008000808a
RC[-10] = 0x8000000000008080
RC[-9] = 0x0000000080000088
RC[-8] = 0x8000000000008083
RC[-7] = 0x0000000000000002
RC[-6] = 0x0000000080008081
RC[-5] = 0x0000000000008003
RC[-4] = 0x0000000000008081
RC[-3] = 0x8000000080008000
RC[-2] = 0x0000000000008002
RC[-1] = 0x000000000000008a
RC[0] = 0x0000000000000001
RC[1] = 0x0000000000008082
RC[2] = 0x800000000000808a
RC[3] = 0x8000000080008000
RC[4] = 0x000000000000808b
RC[5] = 0x0000000080000001
RC[6] = 0x8000000080008081
RC[7] = 0x8000000000008009
RC[8] = 0x000000000000008a
RC[9] = 0x0000000000000088
RC[10] = 0x0000000080008009
RC[11] = 0x000000008000000a
RC[12] = 0x000000008000808b
RC[13] = 0x800000000000008b
RC[14] = 0x8000000000008089
RC[15] = 0x8000000000008003
RC[16] = 0x8000000000008002
RC[17] = 0x8000000000000080
RC[18] = 0x000000000000800a
RC[19] = 0x800000008000000a
RC[20] = 0x8000000080008081
RC[21] = 0x8000000000008080
RC[22] = 0x0000000080000001
RC[23] = 0x8000000080008008

The final 24 constants agree with those published at Team Keccak.  If you need more than 255 rounds, RC[-232] loops back to RC[23] and so forth.

Observations: In 24-round normal Keccak, rounds 5 and 22 use the same round constant, as do rounds 6 and 20.  Keccak with 25 rounds or more additionally sees the same round constant on rounds -1 and 8.  27 rounds or more sees duplication at rounds -3 and 3.  At 255 rounds (full period), there are 128 unique round constants, with every constant repeated twice except the zero constant which only occurs at round -182.

32-bit Keccak (w=32) uses the lower 32 bits of the round constants above.  7 bits of the LFSR are still consumed for each constant; 1/7 of the bits are thrown away.  There are by default 22 rounds total with last round having round index 21.  Duplicated pairs are rounds (6,20) and (11,19).  Doing more rounds causes more repeated round constants: doing 6 additional rounds (22 + 6 = 28 total) sees triplication of constants in rounds -6, 6, and 20.  16-bit Keccak has 20 rounds, duplication at (0,5), (4,12), (7,10), and (11,19) and first triplication with 6 extra rounds (-6,-4,6).  8-bit Keccak (18 rounds) sees repeated constants in rounds (0,5), (2,8), (4,12,13), and (7,10).

If we wish to extend Keccak to 128-bit lane width (w) or more, we would want to consume more than 7 LFSR bits per round, maybe also use a longer-period LFSR.  This should be safe, as these round constants are Nothing-Up-My-Sleeve numbers, so other numbers should also be safe to use.  A deeper Keccak will probably want other modifications also, for example the rho step-mapping function.  Its 25 triangular numbers, representing rotation amounts, grow only up to 300, but we would like larger rotations for better diffusion if the lane width is significantly longer than 300.

Here is an implementation in Haskell of the generation of these Keccak round constants.  We represented bit strings as lists of Bool.

Disquiet: The Shoegazer Western

“Lo-fi guitar from a basement” is how the artist who goes by Not Close Nor Far describes the four-song collection that is Hiss, released this past week on Bandcamp.

The set, a bit over 11 minutes in length, opens with a second or so of actual hiss, the background noise of a guitar amplifier, before kicking into an exploration of sonic landscapes. The guitar will draw positive comparisons to an Ennio Morricone spaghetti western backing score. Those big, broad strums are further backed here by chilly synthesizer chords, lending some Angelo Badalamenti dreaminess to the goings-on. That track, which is splendid, is titled “Wandering,” and it introduces a combination of sedate pace and voluminous space that remains consistent throughout the EP. It’s evident on “Sit with Me,” which has the aura of a juke joint that specializes in shoegazer music, and on “Wait,” which doubles down on the Badalamenti-esque orchestrations with which the record opens.

There is a lot packed into this short collection, and while each piece is distinct from the others, it all works together as variations on a sensibility marked by big-sky expansiveness.

Album originally posted at Not Close Nor Far is based in Calgary, Alberta. Not other name is given.

The Shape of Code: Type compatibility: name vs structural equivalence

What are the rules for deciding when two types are the same, or compatibility?

This question needs to be answered to decide whether an object of type T1 can be assigned to an object of type T2, whether they can be compared, added together, etc.

A wide collection of rules have been combined together, by various languages, for type compatibility of scalar types (e.g., integer, character, etc), but for aggregate types two rules dominate: name equivalence, and structural equivalence, or some combination.

With name equivalence, two types are the same if they are declared using the same name (e.g., the name of the tag for a union type, in C)

With structural equivalence, two types are compatible if they have a compatible structure, i.e., their internal contents are type compatible (this requires walking over each field/member checking that it is compatible). For instance, an object declared to have an aggregate type containing three integers is compatible with another aggregate type containing three integers (assuming any type modifiers, such as const’ness or mutability, are the same).

Structural compatibility becomes interesting when pointer types are involved; the pointed to types need to be checked and loops can occur, e.g., type S1 contains a field that has a type pointer to S2, which contains a field that has type pointer to S1.

While most types are easily checked for structural compatibility, every now and again aggregate types connect together in a way that makes it non-trivial to figure out which types are structurally compatible (dot file; needs graphviz):

C struct types in complicated cyclic relationship

Handling the edge cases requires maintaining a stack of information about which pairs of types are currently being compared.

In C, type compatibility is a combination of name equivalence (for aggregate types in the same translation unit) and structural equivalence (for function types and aggregate types across translation units).

Function types have to use structural equivalence because the type in a function definition is anonymous (the function name that appears in the definition has this anonymous type), there is no name to compare.

Cycles cannot appear in function types (in C), because the identifier being defined in a typedef is not in scope until just after the completion of its declarator. It is not possible to refer to the identifier being defined insider its own definition (e.g., it is not possible to define a function that takes its own type as a parameter; in typedef int (*f)(f); the second f is a redundant parameter name, the scope of the type denoted by the first f begins just before the semicolon).

Structural equivalence across translation units is a hangover from the early days of C, when developers were sloppy when using (or not) tag names (with different people having different rules for using upper/lower case tag names); developers’ knew what the layout in memory was and created the necessary types for their use of this data.

Type compatibility via name equivalence is easy to explain and makes it explicit when developers are bending the rules (i.e., pointer to struct casts appear in the code).

Type compatibility via structural equivalence is the wild west, which still exists in some development environments.

Penny Arcade: News Post: Order

Tycho: We weren’t trying to write a strip about it, but Gabriel has thoughts and feelings about the way I manage my personal space and thus did a strip materialize. I have a couple Kickstarters coming in actually - my copy of EXCEED Season 2, complete with Carl Swangee from Automata, is just a couple hours south of me.  It’s not scheduled to get to my house for another ten days, though, close as it may be, and I can never figure out if this state of affairs is tantalizing slash delicious or if it is maddening.  I suspect these concepts are entangled at a very deep level. …

Greater Fool – Authored by Garth Turner – The Troubled Future of Real Estate: The exodus

The housing numbers last month sucked just about everywhere in BC and ON. Van and the LM, plus 416 and the GTA are unhealthy places for realtors. Sales have dropped with a thud, especially for detached houses, prices are wobbling and this is shaping up to the worst spring market in memory. Condo prices have held while the value of single-family homes has eroded significantly. The sentiment is negative as rates rise and confidence wanes.

In contrast, money is moving. A two-bedroom condo sold for 25% over asking, topping a million bucks last week in Ottawa. Yes, Ottawa. Boring, snowy, grey flannel Bytown, populated by insufferable people with sensible cars, flat hair and DB pensions. And now Montreal’s hot. The country’s second-biggest real estate market has always been one of the cheapest – and for sound reasons, if you don’t speak French, lack thermal undies or like being married.

Even down into Nova Scotia, houses sell in days instead of months. In the little town I’m visiting, the people on one side are from BC, on the other side from Ontario, and across the street from Connecticut. What cost $300,000 two years ago (a really nice place) now fetches five large.

Why the migration?

Simple. The two big bubble markets have become unhospitable to buyers, populated by sellers who can only be described as greedy, and governed by politicians who have meddled as never before in housing. As the Boomers age, move into retirement mode, become unhitched from employment and finally come to their senses, it’s easy to see a torrent of money leaving regions where real estate Hoovers everyone. It’s a migration I wrote about in a book published in 1995. It’ll come around 2015, I said then. And here we are.

It’s hard to have a good quality of life when you’re carrying a million-dollar mortgage. But to afford the average detached house in the LM or most of the GTA that’s what you need – plus another half-million in cash to put down. The land transfer tax alone in Toronto is enough to buy a Mercedes with – money which is flushed away, adding no value to the property. Property taxes and condo fees are steadily increasing, and now the cost of financing is continuously edging up.

It’s this financial vice which has made a lot of people angry, led to the search for scapegoats, and elected governments pledging to ‘fix’ the market. But that’s not happening. As detailed here lately, measures like BC’s suite of anti-real estate taxes and the federal mortgage stress test are simply making cheap houses cost more and unaffordable ones cost less. Nobody wins. So the anger grows.

The best example, bar none, is in Vancouver – a city obsessed with housing and cleaved by property-related emotion. Once our most beautiful place, it seethes. People have been reduced to taking out dangerous mortgages with friends and roommates, living in glorified laneway garages and spending 75% of their take-home income on basic shelter. The house horniness has led to the election of people who garner huge support by punishing existing homeowners and blaming everyone but themselves for the price of real estate they feel entitled to own.

The savings rate in BC, as a result, is negative. The greatest level of household debt is in Vancouver. The risk embraced by people there is off the chart. So un-Canadian. So ugly. No wonder people are leaving.

The pollsters at Angus Reid track this stuff. Earlier this year after federal stats showed less than 5% of Van properties and about 3.5% of those in the GTA were owned by people not living in Canada they found almost all BCers supported measures aimed at taxing the poop out of foreigners. In fact, even though over 90% of transactions are between locals, the company’s earlier survey findings were upheld. When asked why Van houses cost too much, 65% said it was the other guys doing it. It was classic FOMO at work. Blame the Chinese. Blame rich people. Blame investors. But don’t blame me!

Angus Reid found that three-quarters of people wanted government to get involved, and 43% were actually hoping the entire housing market would crash. So, now they have their wish. Speculators are taxed. Foreigners are taxed. Underutilized houses are taxed. Albertans and Ontarians are taxed. Wealthy people are taxed. And there’s more to come. The market cannot withstand this while the cost of money is rising and credit’s being restricted. As Vancity and others in BC (plus Meridian in Ontario) adopt the B20 stress test, the result can be dramatic.

The meltdown in equity is likely to be long and sustained. But it could also come in a downward gush. The numbers of underwater borrowers will swell, with 8% of households responsible for 20% of $2.1 trillion in mortgage debt. And guess where they live?

No wonder the boonies are sexed.

Ideas from CBC Radio (Highlights): The Enright Files: Philosophy outside the Ivory Tower

As universities come under increasing pressure to prove their economic value — to both students and the business world — the humanities seem to be the first things put on the chopping block. And more than most disciplines, a philosophy degree is considered to be of dubious value. On this month's edition of The Enright Files, we revisit interviews with thinkers who make the case for philosophy’s enduring relevance, particularly as our lives and our society becomes more enmeshed in technology.

Planet Haskell: Mark Jason Dominus: Katara constructs finite projective planes

This weekend I got a very exciting text message from Katara:

I have a math question for you

Oh boy! I hope it's one I can answer.


there's this game called spot it where you have cards with 8 symbols on them like so

<figure>The back of the 'Spot It' box shows four white circular cards, each with 8 little pictures on it. A red double-headed arrow between the first two cards shows that both cards have a picture of a ladybug.  Another arrow between the second and third cards shows that both cards have a picture of a red heart.  The next arrow connects the trees on cards 2 and 3, and a fourth arrow shows that cards 1 and 4 both have apurple cat.  Even though part of card 3 is cut off, we can see that they share a pair of lips. Cards 2 and 4 both have a gray padlock picture, even though there's no arrow pointing it out. </figure>

and the goal is to find the one matching symbol on your card and the one in the middle

how is it possible that given any pair of cards, there is exactly one matching symbol

Well, whatever my failings as a dad, this is one problem I can solve. I went a little of overboard in my reply:

You need a particular kind of structure called a projective plane.

They only exist for certain numbers of symbols

A simpler example has 7 cards with 3 symbols each.

One thing that's cool about it is that the symbols and the cards are "dual": say you give each round card a name. Then make up a new deck of square cards. There's one square card for each symbol. So there's a square"Ladybug" card. The Ladybug card has on it the names of the round cards that have the Ladybug. Now you can play Spot with the square cards instead of the round ones: each two square cards have exactly one name in common.

In a geometric plane any two points lie on exactly one common line and any two lines intersect in exactly one common point. This is a sort of finite model of that, with cards playing the role of lines and symbols playing the role of points. Or vice versa, it doesn't matter.

More than you wanted to know 😂

ah thank you, I'm pretty sure I understand, sorry for not responding, my phone was charging

I still couldn't shut up about the finite projective planes:

No problem! No response necessary.

It is known that all finite projective planes have n²+n+1 points for some n. So I guess the Spot deck has either 31, 57, or 73 cards and the same number of symbols. Is 57 correct?

Must be 57 because I see from your picture that each card has 8 symbols.

Katara was very patient:

I guess, I would like to talk about this some more when i get home if that's okay

Any time.

(The game costs $13.)

Anyway this evening I cut up some index cards, and found a bunch of stickers in a drawer, and made Katara a projective plane of order 3. This has 13 cards, each with 4 different stickers, and again, every two cards share exactly one sticker. She was very pleased and wanted to know how to make them herself.

Each set of cards has an order, which is a non-negative integer. Then there must be cards, each with stickers or symbols. When is a prime power, you can use field theory to construct a set of cards from the structure of the (unique) field of order .

Fields to projective planes

Order 2

I'll describe the procedure using the plane of order , which is unusually simple. There will be cards, each with of the symbols.

Here is the finite field of order 2, called :

+ 0 1
0 0 1
1 1 0
× 0 1
0 0 0
1 0 1
  • The stickers correspond to ordered triples of elements of , except that is always omitted. So they are:

    $$\require{cancel}\begin{array}{cc} \cancel{\langle 0,0,0\rangle} & \langle 1,0,0\rangle \\ \langle 0,0,1\rangle & \langle 1,0,1\rangle \\ \langle 0,1,0\rangle & \langle 1,1,0\rangle \\ \langle 0,1,1\rangle & \langle 1,1,1\rangle \\ \end{array} $$

    Of course, you probably do not want to use these symbols exactly. You might decide that is a sticker with a picture of a fish, and is a sticker with a ladybug.

  • Each card will have stickers. To generate a card, pick any two stickers that haven't appeared together before and put them on the card. Say these stickers correspond to the triples and . To find the triple for the third sticker on the card, just add the first two triples componentwise, obtaining . Remember that the addition must be done according to the addition table above! So for example if a card has and , its third triple will be

    $$\begin{align} \langle 1,0,1 \rangle + \langle 0,1,1 \rangle & = \\ \langle 1+0,0+1,1+1 \rangle & = \\ \langle 1,1,0 \rangle \end{align} $$

    Observe that it doesn't matter which two triples you add; you always get the third one!

Okay, well, that was simple.

Larger order

After Katara did the order 2 case, which has 7 cards, each with 3 of the 7 kinds of stickers, she was ready to move on to something bigger. I had already done the order 3 deck so she decided to do order 4. This has cards each with 5 of the 21 kinds of stickers. The arithmetic is more complicated too; it's instead of :

+ 0 1 2 3
0 0 1 2 3
1 1 0 3 2
2 2 3 0 1
3 3 2 1 0
× 0 1 2 3
0 0 0 0 0
1 0 1 2 3
2 0 2 3 1
3 0 3 1 2

When the order is larger than 2, there is another wrinkle. There are possible triples, and we are throwing away as usual, so we have 63. But we need , not .

Each sticker is represented not by one triple, but by three. The triples and must be understood to represent the same sticker, all the multiplications being done according to the table above. Then each group of three triples corresponds to a sticker, and we have 21 as we wanted.

Each triple must have a leftmost non-zero entry, and in each group of three similar triples, there will be one where this leftmost non-zero entry is a ; we will take this as the canonical representative of its class, and it can wear a costume or a disguise that makes it appear to begin with a or a .

We might assign stickers to triples like this:

$$ \begin{array}{rl} \cancel{\langle 0,0,0\rangle} & \\ \langle 0,0,1 \rangle & \text{apple} \\ \hline \langle 0,1,0 \rangle & \text{bicycle} \\ \langle 0,1,1 \rangle & \text{carrot} \\ \langle 0,1,2 \rangle & \text{dice} \\ \langle 0,1,3 \rangle & \text{elephant} \\ \hline \langle 1,0,0 \rangle & \text{frog} \\ \langle 1,0,1 \rangle & \text{goat} \\ \langle 1,0,2 \rangle & \text{hat} \\ \langle 1,0,3 \rangle & \text{igloo} \\ \langle 1,1,0 \rangle & \text{jellyfish} \\ \langle 1,1,1 \rangle & \text{kite} \\ \langle 1,1,2 \rangle & \text{ladybug} \\ \langle 1,1,3 \rangle & \text{mermaid} \\ \langle 1,2,0 \rangle & \text{nose} \\ \langle 1,2,1 \rangle & \text{octopus} \\ \langle 1,2,2 \rangle & \text{piano} \\ \langle 1,2,3 \rangle & \text{queen} \\ \langle 1,3,0 \rangle & \text{rainbow} \\ \langle 1,3,1 \rangle & \text{shoe} \\ \langle 1,3,2 \rangle & \text{trombone} \\ \langle 1,3,3 \rangle & \text{umbrella} \\ \end{array} $$

We can stop there, because everything after begins with a or a , and so is some other triple in disguise. For example what sticker goes with ? That's actually in disguise, it's , which is “dice”. Okay, how about ? That's the same as , which is “ladybug”. There are , as we wanted. Note that the naturally breaks down as , depending on how many zeroes are at the beginning; that's where that comes from.

Now, just like before, to make a card, we pick two triples that have not yet gone together, say and . We start adding these together as before, obtaining . But we must also add together the disguised versions of these triples, and for the first, and and for the second. This gets us two additional sums, , which is in disguise, and , which is in disguise.

It might seem like it also gets us and , but these are just again, in disguise. Since there are three disguises for and three for , we have nine possible sums, but it turns out the the nine sums are only three different triples, each in three different disguises. So our nine sums get us three additional triples, and, including the two we started with, that makes five, which is exactly how many we need for the first card. The first card gets the stickers for triples and which are apple, bicycle, carrot, dice, and elephant.

That was anticlimactic. Let's do one more. We don't have a card yet with ladybug and trombone. These are and , and we must add them together, and also the disguised versions:

$$\begin{array}{c|ccc} & \langle 1,1,2 \rangle & \langle 2,2,3 \rangle & \langle 3,3,1 \rangle \\ \hline \langle 1,3,2 \rangle & \langle 0,2,0 \rangle & \langle 3,1,1 \rangle & \langle 2,0,3 \rangle \\ \langle 2,1,3 \rangle & \langle 3,0,1 \rangle & \langle 0,3,0 \rangle & \langle 1,2,2 \rangle \\ \langle 3,2,1 \rangle & \langle 2,3,3 \rangle & \langle 1,0,2 \rangle & \langle 0,1,0 \rangle \\ \end{array}$$

These nine results do indeed pick out three triples in three disguises each, and it's easy to select the three of these that are canonical: they have a 1 in the leftmost nonzero position, so the three sums are and , which are bicycle, hat, and piano. So the one card that has a ladybug and a trombone also has a bicycle, a hat, and a piano, which should not seem obvious. Note that this card does have the required single overlap with the other card we constructed: both have bicycles.

Well, that was fun. Katara did hers with colored dots instead of stickers:

<figure>Katara's set of 21 cards.  Each has five colored dots of 21 total different colors, and each colored dot is labeled with a letter of the alphabet in the same color.  There are some mistakes that are crossed out and corrected, and a couple of mistakes that are not yet crossed out or corrected. </figure>

The ABCDE card is in the upper left; the bicycle-hat-ladybug-piano-trombone one is the second row from the bottom, second column from the left. The colors look bad in this picture; the light is too yellow and so all the blues and purples look black.x

After I took this picture, we checked these cards and found a couple of calculation errors, which we corrected. A correct set of cards is:

$$ \begin{array}{ccc} \text{abcde} & \text{bhlpt} & \text{dgmpr} \\ \text{afghi} & \text{bimqu} & \text{dhjou} \\ \text{ajklm} & \text{cfkpu} & \text{diknt} \\ \text{anopq} & \text{cgjqt} & \text{efmot} \\ \text{arstu} & \text{chmns} & \text{eglnu} \\ \text{bfjnr} & \text{cilor} & \text{ehkqr} \\ \text{bgkos} & \text{dflqs} & \text{eijps} \\ \end{array} $$

Fun facts about finite projective planes:

  • This construction always turns a finite field of order into a finite projective plane of order .

  • A finite field of order exists exactly when is a prime power and then there is exactly one finite field. So this construction gives us finite projective planes of orders , but not of orders . Do finite projective planes of those latter orders exist?

  • Is this method the only way to construct a finite projective plane? Yes, when . But there are four non-isomorphic projective planes of order , and this only constructs one of them.

    What about for ? Nobody knows.

Perlsphere: Clumping

This post is a "thinking out loud" post, about an unimplemented feature I'm planning.

The problem

The most often complaint I get when I release a Perinci::CmdLine -based Perl application is the huge dependencies of Perinci::CmdLine (currently Perinci::CmdLine::Lite only has 24 direct non-core dependencies, but recursively it has 98 non-core dependencies in 92 unique distributions). By the way, you can produce these numbers "very easily" using lcpan and td:

% lcpan mods -lx Perinci::CmdLine::Lite
| module                 | version | abstract                                              | dist                 | author    | rel_mtime            | is_core |
| Perinci::CmdLine::Lite | 1.812   | A Rinci/Riap-based command-line application framework | Perinci-CmdLine-Lite | PERLANCAR | 2018-05-01T08:42:19Z | 0       |
% lcpan deps Perinci::CmdLine::Lite --noinclude-core | wc -l
% lcpan deps Perinci::CmdLine::Lite --noinclude-core -R | wc -l
% lcpan deps Perinci::CmdLine::Lite --noinclude-core -R --flatten | \
    td select module | lcpan mod2dist | td select value | sort | uniq | wc -l

Sort of ironic because years ago I used to mock Moose 's high number of dependencies and avoid it like the plague, and then ending up creating the same situation with my own distribution. Correction: a much worse situation than the current Moose:

% lcpan mods -lx Moose
| module | version | abstract                              | dist  | author | rel_mtime            | is_core |
| Moose  | 2.2010  | A postmodern object system for Perl 5 | Moose | ETHER  | 2018-02-16T22:01:37Z | 0       |
% lcpan deps Moose --noinclude-core | wc -l
% lcpan deps Moose --noinclude-core -R | wc -l
% lcpan deps Moose --noinclude-core -R --flatten | \
    td select module | lcpan mod2dist | td select value | sort | uniq | wc -l

I arrange the modules into many distributions because I am trying to keep things modular. So when I only need a specific subset of functionality, I don't have to pull the whole thing (and along with it its large list of dependencies). Maybe I went overboard? Maybe. Nevertheless.

The high number of dependencies presents an inconvenience and annoyance when users want to install my application, especially since CPAN clients like cpan and cpanm default to testing distributions before installing them.

One solution: Perinci::CmdLine::Inline

One solution I created for this problem is Perinci::CmdLine::Inline (PC:Inline) which basically "pre-assembles" the application with sort of a "mini", "embedded" Perinci::CmdLine during distribution build time, so that when a user installs the application she doesn't need to get Perinci::CmdLine anymore. This also has another benefit of faster application startup time due to the "pre-assembling" thingy. But this pre-assembling has some downsides too. Whenever I create a new version of PC:Inline, I will have to rebuild all the applications again. PC:Inline also does not (read: will not, because of the lack of Riap layer) have all the features of a proper Perinci::CmdLine. I use PC:Inline only for simpler applications that need to be very light (has no non-core dependencies, or starts fast) like hr, wordlist, zodiac-of.

Another solution: fatpacking, datapacking

Another solution is fatpacking or datapacking. I've tried this in the past with the pause script, and it works rather well. Except that when it comes to packaging the CPAN distribution as a Debian package, the Debian policy forbids "convenience copies" of code.

Past solution: lumping

Yet another solution which I've tried in the past is what I call "lumping": in a lump distribution I include modules from other distributions (the dependencies) but leave them unindexed. For example, I created a distribution called Perinci-CmdLine-Any-Lumped that contains modules from Perinci-CmdLine-Any (Perinci::CmdLine::Any) as well as all its recursive pure-perl non-core dependencies, like Data::Sah, Data::Sah::Coerce, and so on. After installing just one lump distribution, a user will have perhaps 100+ extra (but "hidden") modules from various distributions on her system. The perl interpreter will see those extra modules fine. The modules are "hidden" only in the sense that the original distributions of those modules are not listed as installed (because they aren't).

I abandoned this solution because it feels really dirty. The extra modules lumped into the lump distribution are actually "orphan" modules because the lump distribution does not publicly confess that it includes the modules. And I'm pretty sure lump distributions are not good candidates for Debian perl packages, but it's okay.

Another proposed solution: clumping

This post will describe another solution which I'm thinking of (with an equally stupid name so if the idea ended up being really stupid, the name would have already fitted): clumping.

A clump distribution is named "Clump-SOMETHING" and will contain modules from several other distributions (called "source distributions"). The purpose of a clump distribution is to package several other distributions as a single distribution for the purpose of reducing the number of dependencies for the end-user.

For example, a clump distribution called "Clump-Data-Sah" will contain modules from Data-Sah as well as Data-Sah-Coerce, Data-Sah-Format, and so on.


To help build this distribution, a Dist::Zilla plugin will be created and used: DZP:Clump. To use this plugin, we list the source distributions that we want to include:


The plugin will gather module files from the source distributions as well as merge the dependencies from the source distributions into the dependencies for the clump distribution.

Dependencies that end up being in the clump distribution can be "netted out". For example, Data-Sah depends on Data::Sah::Coerce which is in the Data-Sah-Coerce distribution which is also another source distribution in the clump, so this dependency now does not need to be specified in Clump-Data-Sah.

Clumping and module versions

The version number of a module inside the clump distribution will be the original version joined by ".0". So for example, if the original version number of module M1 is "0.001" then M1's version number in the clump distribution is "0.001.0". If M2's original version is "0.1.2" then M2's version in the clump is "" and so on. As far as perl concerns the two version numbers in each case are the same:

version->parse("0.001") == version->parse("0.001.0")
version->parse("0.1.2") == version->parse("")

The module version will have to be checked to satisfy the above relationship and if it does not, a new release will need to be made in the source distribution first to remedy this. For example, M3's original version is 0.02. If we append ".0" to it to become "0.02.0" then the new version will be less than the original version:

version->parse("0.02") > version->parse("0.02.0")
# because 0.02   is 0.020
# and     0.02.0 is 0.002.0

To include M3 in the clump, we will need to make a new release of M3 in the original source distribution first, say of version 0.030. Then M3 version 0.030 can now be included in the clump, as version 0.030.0.

Yes, this means the clump distribution will contain different version numbers. Which is usually not recommended for a "normal" Perl distribution but is appropriate here.

Clumping and the PAUSE indexer

When the clump distribution is released, PAUSE will index the clump distribution and now modules included in the clump will be indexed as belonging to the clump distribution instead of their original distribution.

When user installs one of these modules, she will be getting it (and automatically a lot of other modules too) from the clump distribution, thus reducing the number of distributions she needs to install to satisfy all the dependencies of an application.

Developing modules that are included in clumps

Ideally, modules are still developed in its original source distribution, e.g. Data::Sah::Coerce in Data-Sah-Coerce. When I want to release a new version of Data::Sah::Coerce, I can just release a new version of Data-Sah-Coerce. Now the module will be indexed by PAUSE as belonging to the new Data-Sah-Coerce.

As more and more modules are being "unclumped" as new releases of the source distributions come along, the level of inconvenience to end-users will once again increase. To remedy this, from time to time I can release a new clump distribution again that contains newer "snapshots" of modules.

This is the reason why version of modules in the clump is being kept the same (albeit with extra ".0"): so version bump in the original source distribution will be able to "eclipse" the clumped version on CPAN later. Even when the original distribution bumps using an extra subversion, e.g. 0.001 to 0.001.1 it will still eclipse the clumped version. The next clumped version will be

Clumping vs lumping

This clump solution is cleaner than the lumping solution because in the former case, no modules are "hidden". Basically clumping is lumping, but the included modules are "acknowledged" and properly indexed. The $orig_version . ".0" thing is really the only novel element here. Because the modules are now not hidden, their dependencies must now also be handled.

As to Debian packaging, the source distributions and not the clump distribution are the ones that will be packaged so there should not be an issue with "convenience copies" or "bundling".

Penny Arcade: Comic: Order

New Comic: Order

Michael Geist: Canadian Publisher on the Term of Copyright: Life Plus 50 Years is “Already Too Long”

Broadview Press, an independent Canadian publisher with hundreds of books in print, has called on the government to ensure that there is no extension from the current term of life of the author plus 50 years. I previously noted the Broadview Press submission in a post on the tiny impact of reduced royalties from Access Copyright. The submission also focuses on copyright term:

Another vitally important copyright issue that has been on the table in recent TTP and NAFTA trade negotiations is the international pressure Canada is faced with to increase the length of the copyright term from 50 years after the death of the author (already too long, in our opinion) to a full 70 years after the death of the author, thereby preventing for an additional generation the publication of competing editions of literary classics—editions that can often be of immense cultural and pedagogical value.

Broadview Press recommends “Canada protect or reduce the length of copyright term to be no more than “life of the author plus 50 years.” It points with approval to the Australian Productivity Commission’s report on reforming Australian intellectual property laws, noting:

An international reference you may wish to consult regarding this matter is the December 2016 report from the Australian Productivity Commission on Reforming Australia’s intellectual property arrangements. This report argues that the life+70 years term is too long and urges the Australian government to reduce it to 50 years or less in the IP review that is currently underway.

The Australian report provides a helpful review of the implications of copyright terms, reaching the following finding:

The scope and term of copyright protection in Australia has expanded over time, often with no transparent evidence-based analysis, and is now skewed too far in favour of copyright holders. While a single optimal copyright term is arguably elusive, it is likely to be considerably less than 70 years after death.

Canada has thus far resisted extending the term of copyright beyond the Berne Convention standard of life of the author plus 50 years. In fact, Canada successfully argued for the suspension of an extension in the TPP last year, recognizing the enormous cost that a term extension would impose on access to Canadian culture and to education, which relies heavily on public domain works.

The post Canadian Publisher on the Term of Copyright: Life Plus 50 Years is “Already Too Long” appeared first on Michael Geist.

Planet Lisp: Victor Anyakin: &#8220;A new way of blogging about Common Lisp&#8221; by Yehonathan Sharvit

Seen this post mentioned several times on Twitter, but not on Planet Lisp yet. So, here it is:

A new way of blogging about Common Lisp by Yehonathan Sharvit (@viebel). Comic for 2018.05.07

New Cyanide and Happiness Comic

Greater Fool – Authored by Garth Turner – The Troubled Future of Real Estate: Financial intimacy

Jenn and Allan are close about everything. Except money. It’s a no-go zone.

“I have no idea what he makes,” she said when I interviewed her. “Don’t know what his pension is, either. Anyway he’s terrible with money, so we keep everything separate.” No joint account, I asked? “For the house expenses, yes. We both contribute equally.” And how about the RESP for six-year-old Alana? “I look after that,” Jenn said. “Because he’s terrible with money.” I get it.

Not only are young adults spending an historic amount of time in the parental basement and getting hitched later, seems a lot of them don’t actually trust each other. Even when they marry, or have kids. Is it because so many have seen their own parents split up? Beats me. But the majority of young couples sitting across from me lately have zero clue about how this poisonous mistrust costs them a pile of money.

So let’s fix that.

Marriage (or living common law) is an economic union. Accept that, or don’t hook up. If you plan on raising a family and getting old together, finances have to be integrated. The costs of not doing so are big. Unwise spending. Secrecy. Suspicion. Lousy financial planning. Late-stage surprises. And a lot more tax.

If you truly love another person, what better way could there possibly be of expressing it than with effective tax avoidance strategies? (This is why Dorothy adores me.) Here are five of my favs.

Sleep together, invest together.
The world of finance does not start and stop with an RRSP or a TFSA, which must be registered in your individual name. Having a non-reg investment account as well means enjoying a 50% reduction in capital gains tax and using the dividend tax credit, then withdrawing income in retirement which is not subject to any withholding tax (like your RRSP or pension).

When two partners have a joint account the returns can be attributed to them equally, so if one’s in a lower tax bracket money can be saved. This also makes sense since (apparently) we don’t live forever. So when a partner passes, all of the assets immediately become the property of the other – no delay, no probate, no tax.


Use your RRSP to split income.
This is probably the single-best tax-busting tool available to couples when one person earns more or a partner stays home to care for the spawn. The higher-earner should plow the contributions into a spousal plan instead of their own. They enjoy the deduction (and tax relief) from their own income, but after three years the money belongs to the spouse – who can remove it at a lower (or non-existent) level of tax. Big win-win, especially when you use this to finance a mat leave.

No, you are not equal.
Married partners seldom make the exact same amount. And in most marriages a woman will take time to bear and care for children. So why would you ever set up a joint bank account for house expenses and contribute to it equally?

Bad idea. Instead the person with the highest income should pay for everything – the mortgage, child care, dog food, insurance, Netflix, data, tats – the works. The lower-income and less-taxed partner can then use all of his or her income to invest. Since they’re in a lower tax bracket the returns net of tax will be greater, and family wealth augmented.

Borrow from the Bank of Love
Why get a loan from the voracious Venus fly-trapper TNL@TB when you can borrow from your husband or wife? The rules allow spouses to give each other loans at the CRA proscribed rate of 2% (it used to be 1% until April), which can be a huge advantage. A husband (or wife) could loan $500,000 to be invested in assets yielding 7%, and none of that growth would be attributed back to the lender – a great strategy if the other person earns less (or nothing).

The interest actually has to be paid once a year, taxable as income in the hands of the lending partner. But it’s 100% deductible from investment gains for the borrower. The same sweet deal does not apply to gifting assets (like ETFs or other financial securities), since they’re deemed to be sold when transferred, and may be taxable. But cash is good.

The wrinklie advantage
Getting old sucks less when you can use your squeeze to chop pension tax. The law allows you to split 50% of eligible pension income with a lower-taxed spouse, including money coming from a registered pension plan as well as RRSPs and RRIFs for people over 65. You can also share CPP payments – a nice boost if one spouse stayed out of the workforce for years raising a family. In that case the pension payments would be made equal, potentially cutting overall tax.

See? It’s not all about free sex or finding someone who can cook. It’s also financial. What a turn-on.

Trivium: 06may2018

MattCha's Blog: A Minimalist’s Teapot Tally

Readers of this blog will know that I have been having a bit of a teapot shortage lately (here and here).  I stated in a recent post that I actually own very few teapots despite a deep appreciation of them and significant immersion in learning about them in Korea.

Below is my grand tally of all the teapots I own…

Currently, I only have two working teapots:

I have this grey one from David Louveau that is aging gorgeously with use.  It is quite a small pot maybe around 100ML and I use it mainly for puerh or any sample or tea that requires such a size.  At first, I was a bit critical of this pot but only in use has its true nature been revealed.  This pot was gifted to me by the potter himself and so is naturally very special to me.  Currently, this pot sits at work for the very rare instance I have time for a gong fu session throughout the day.  I love this pot.

The other is this teapot from Korean master potter Kim Kyoung Soo, it is also grey.  This pot is a Korean masterpiece and I usually only use it for Korean tea.  It is quite wondrous and out of all the pots I came across in Korea, I am happy to have this one.  That speaks volumes considering that I was immersed in 1000s of them at that time.  I have it at home but steeping puerh in it, which I have reluctantly done lately doesn’t feel right.

I used to have a cheap Shui Ping red clay Yixing teapot that I purchased in China.  It is a modern pot of simple craftsmanship that could hold about little over 150-200ML I think.  I used this pot at home for puerh.  I had dropped it on my Korean ceramic Kim Kyoung Soo tea table and cracked the lid in half a few years ago but it was a simple break and I would easily still use it. A few months back I was trying to unclog the golf ball filter with a tooth pick and it broke off a sizable chunk of the filter.  After that the uneven jagged filter became a serious problem because it would easily catch tealeaves and clog after every use and would be very hard to unclog.  The back pressure would cause the lid to pop off.  One day I just tossed it- it was a lost cause.  Its undoing was my fault and I had the David Louveau pot above of similar size so I didn’t bother to replace it.

My family and I steeped puerh daily in my big “Gum Sa Do Yae” Zen 250ML pot, a gift from my teamaster, until its recent demise.  I have posted an appreciation of this beautiful zen tea pot before.

That’s it!  Just these two… that is definitely teapot minimalism!

 I have used the gray Kim Kyoung Soo teapot over the last little while (here and here) to brew old aged puerh but I really feel like it is not doing the aged puerh justice so I have decided to look for a replacement for this beloved pot.

These days, in our house, we are using an old metal tea strainer and immersing the puerh tea completely into large cups before pulling out the strainer with a fork… I never thought it would come to that, but that is exactly how we drank some of the 2006 Mengku Arbour King Brick this morning and some 1990s aged Bulang a few days ago!

In a way, I feel like this is more authentic in a minimal sort of way.  If there are any readers out there who steep puerh with a teacup strainer basket- you are my hero.

Peace Comic for 2018.05.06

New Cyanide and Happiness Comic

Daniel Lemire's blog: Science and Technology links (May 5th, 2018)

  1. Oculus, a subsidiary of Facebook, has released its $200 VR headset (the Oculus Go). You can order it on Amazon. The reviews are good. It is standalone and wireless which is excellent. The higher-quality Oculus Rift and its nifty controllers are down to only $400, with the caveat that it needs a cable back to a powerful PC.

    Some analysts are predicting massive growth for virtual reality headsets this year: IDC anticipates sales to reach 12.4 million units.
    To me, the killer application has to be conferencing in virtual reality. Who wouldn’t like to go chat with a friend in some virtual world? But it is unclear whether we have the hardware to do it: you’d need good eye tracking as it is needed if you are going to be able to look at people in the eyes.

  2. Consuming glucose (sugar) impairs memory (in rats). The theory is that glucose reduces neurogenesis: you are making fewer new neurons when eating sugar.
  3. At age 20, the life expectancy was another 47 years (age 67/68) in 1930. This means that when the retirement age of 65 was enacted in the US and other countries, we expected people to have reached the very end of their life by then.
  4. Some coffee drinkers, me included, report side-effects when abstaining from coffee. Yet the belief that one has ingested caffeine is sufficient to reduce caffeine withdrawal symptoms and cravings.
  5. A private charity, the Charity Open Access Fund, pays publishers to ensure that research papers are available freely (under open access). Oxford University Press was apparently happy to take the money, but failed to deliver: a total of 34 per cent of articles paid for by the Charity Open Access Fund in 2016-17 were not made available as promised. The Oxford University Press is treated as a tax-exempt non-profit.
  6. It is believed that part of the biological aging process can be attributed to a reduction in nicotinamide adenine dinucleotide (NAD+) in our cells. A new paper in Cell Metabolism shows that this reduction can be reversed with some drug called 78c. It improves muscle function, exercise capacity, and cardiac function in mice.
  7. In Singapore, the number of people aged 65 and above is projected to double to 900,000 or 25% of the population by 2030. In Japan, 27% of the population was 65 years or older in 2016, it will be over 33% by 2030.

Paper Bits: Loopy Debug is my new Frank Zappa cover band

Currently working on looping animations for when the sprites pause.

Here’s one in Excel

And animated

I would show you what it looks like on the NeoPixels, but the Arduino crashes when it tries to spawn the sprite object, so I’ve gear shifted from animation design mode into debug mode.

How I understand what the code does

So what’s happening is, the Arduino bootloads, runs through all the globals at the top, stuff like:

#define afc_l_pulsar_a_ANIMATION_FRAME_WIDTH    24
#define afc_l_pulsar_a_ANIMATION_FRAMES         22

Which is where I set the parameters for each animation. In this case, you’ve got 22 frames of animation, each one 24 pixels wide. It also sets all the other parameters to tune the global travel acceleration rate, sprite pixel velocity, and how far each sprite travels before playing the idle animation.

We then go on to use the FastLED library to create a CRGB struct to contain the color values we will write to the NeoPixel strip:


CRGB structs are a range of memory that contain 3 bytes for each LED: the red, green, and blue color values. So the amount of SRAM that the struct takes up is basically [NUM_LEDS] * 3 bytes.

To animate the pixels that I’ve been designing in Excel, what happens is, we define a char and a CRGB struct for each animation, and each is FRAME_WIDTH * FRAMES long. In the case of the pulsar loop above, that’s 24 by 22, which is 528.

A char is one byte per entry, and we already know a CRGB is three, so that means we’re taking up 528 times 4 bytes, or 2.06K. And we have a total of 96K of SRAM to execute the entire system, including all pre-rendered animations.

Actually, we have 32K. See, the Arduino Due has a 32K bank of SRAM, and a 64K bank of SRAM, and I’m not sure how they interact, but I can say for certain that if you define too many CRGB structs and chars, the Arduino Due crashes on boot, and our best guess for memory usage is that we’re around the 30-33K mark. I’ll get back to that in a bit.

So we define all the animations that we’re going to run in this build, and then we define our function prototypes and our object classes. I won’t get into the structure of the classes, except to say that there’s a SpriteVector and SpriteManager class, which combine to handle the creation, lifecycle, and deconstruction of each animation sprite.

There is also the LoopTestSprite or FragmentTestSprite classes, which are subclasses of the Sprite class. Each different sprite class currently has code to move from point to point, and to play a pre-rendered animation for a certain number of repetitions when it reaches its destination pixel. It then moves to the next destination pixel, loops, and repeat until the whole thing goes off the pixel grid, at which point the object is marked is_done. At which point, SpriteManager deletes the object from memory on its next run-through.

So that’s where the classes are defined. If the Arduino passes safely through those, we reach the point where we create our permanent objects:

InfraredSensor *sensor1;
InfraredSensor *sensor2;

SpriteManager *spriteManager;

bool isBooted;
bool testSpritesCreated;

int starttime = millis();

So we’ve got 2 infrared sensors per strip of the Witch Lights, and they get created and assigned the names sensor1 and sensor2.

We boot up SpriteManager, prime some bools, and set the starttime value, and then it’s time to run setup().

void setup() {

    isBooted = false;
    testSpritesCreated = false;

    spriteManager = new SpriteManager();

    sensor1 = new InfraredSensor(PIR_SENSOR_1_PIN);
    sensor2 = new InfraredSensor(PIR_SENSOR_2_PIN);


setup() reads our arrays of predefined color sets into RAM, and then runs the createAnimationFrames() function. Which reads all of the animations defined within the function into the chars we created earlier. So now, in memory, we have a full set of pixel animations, in the form of char structs with the animation’s name.

Setup also sets isBooted and testSpritesCreated to false, which are bits that trigger a test pattern at the beginning of loop() later. And it links the infrared sensors to their appropriate input pins, resets the NeoPixel strip, and we’re ready for the main loop().

loop() is the main engine of an Arduino project. It cycles forever, and each time, you have a chance to do some logic. In this case, we run a rainbow flag test pattern down the length of the NeoPixel strips, which gives us a nice way to test the strips as the installation is assembled.

After that (which only runs once), we check sensor1, check sensor2, create the appropriate sprite object if either is triggered. So when someone walks by the Witch Lights, an animation sprite is called into memory. But the sprite object only knows how to respond to Update() calls from SpriteManager: it won’t do anything on its own.

So loop() calls spriteManager->Update(); last of all, and then the loop repeats.

Lots of stuff happens behind the scenes when you call Update() of course. But we’ll get into that as we need it. Right now, I’m finishing the talk-through of the whole boot cycle of the witchlights-fastled.ino sketch, because right now, the Arduino is crashing before it draws the new animation sprite I just defined.

When your shit crashes

A few days ago, when I was just learning to create custom animation sprites, I tried to define all the animations I had converted at once. I knew animations took up SRAM, but thinking that I had 96K to play with, I wasn’t concerned about SRAM usage yet.

The Arduino crashed so hard I had to manually erase its flash RAM before I could reprogram it again. For reference: that’s pretty bad.

In that case, it crashed while creating the char and CRGB structs, before it reached setup(). So the Arduino would turn on, but nothing else would happen.

Today’s problem is different.

Today, when I turn on the Arduino, it plays the test pattern, which means it’s made it all the way through everything we just defined, to the loop(), and at least started the main loop.

But when I activate sensor1 with a pushbutton, nothing happens.

So something ain’t right.

For comparison, here is what I have defined in memory for animation:


char afc_f_slow_stop[afc_f_slow_stop_ANIMATION_FRAME_WIDTH * afc_f_slow_stop_ANIMATION_FRAMES];
CRGB af_f_slow_stop[afc_f_slow_stop_ANIMATION_FRAME_WIDTH * afc_f_slow_stop_ANIMATION_FRAMES];

char afc_f_slow_stop_c[afc_f_slow_stop_c_ANIMATION_FRAME_WIDTH * afc_f_slow_stop_c_ANIMATION_FRAMES];
CRGB af_f_slow_stop_c[afc_f_slow_stop_c_ANIMATION_FRAME_WIDTH * afc_f_slow_stop_c_ANIMATION_FRAMES];

char afc_l_pulsar_a[afc_l_pulsar_a_ANIMATION_FRAME_WIDTH * afc_l_pulsar_a_ANIMATION_FRAMES];
CRGB af_l_pulsar_a[afc_l_pulsar_a_ANIMATION_FRAME_WIDTH * afc_l_pulsar_a_ANIMATION_FRAMES];

Looking at this, we have:

  • afc_w8v1r is the original animation sprite from last year, defined backwards for sprites heading in the “reverse” direction from sensor2.

  • afc_f_slow_stop is the Better slow stop go animation that I was testing a couple days ago.

  • afc_f_slow_stop_c is an experimental variation of that animation, using manual anti-aliasing for slow pixel-to-pixel movements.

  • afc_l_pulsar_a is the first loop test, featured at the top of this post.

When I first uploaded this sketch, in the sensor1 check in loop(), we had:

if (sensor1->IsActuated()) {
    Sprite *s1 = new FragmentTestSprite();
    // Sprite *s1 = new LoopTestSprite();

    if (! spriteManager->Add(s1)) {
        delete s1;

And pressing the sensor button would spawn a “slow stop go” sprite. Great.

So I changed it to:

if (sensor1->IsActuated()) {
    // Sprite *s1 = new FragmentTestSprite();
    Sprite *s1 = new LoopTestSprite();

    if (! spriteManager->Add(s1)) {
        delete s1;

And now, when you hit the sensor button, nothing happens.


OK, so.

Change it back? Sprite spawns. Change it again? Nothing happens.

So it’s consistent, whatever it is. That’s a bonus. Consistent means repeatable.

My first thought was, what did I do wrong in the LoopTestSprite() class definition that I didn’t do in FragmentTestSprite()? So I did a diff between the two.

And for the life of me, I can’t find anything in the LoopTestSprite() that’s different and is Arduino-crashingly bad. That’s the differences above. On the left, the sprite that runs, and on the right, the one that don’t.

Is it SRAM usage?

afc_f_slow_stop, which does run, is 4.32K in SRAM.

afc_l_pulsar_a, which does not run, is 2.06K in SRAM.

We can’t rule that out, but it seems unlikely.

So what now, smart guy?


Fortunately, there’s a debug() function, which lights up a specific LED when you call it.

In the past, this was used to show the size of the SRAM heap while the Arduino ran. That helped greatly to identify memory leaks.

What I can do with it now is, I can place debug(20) at the start of loop(), debug(21) at the next step, 22 at the next, and so on, and put debug statements into the sprite construction logic of the sprite that works, and do a control experiment to make sure I can identify all the working pieces of that sprite doing their thing. As the sprite is constructed and runs through the logic to process the animation char into CRGB frames, the most easily-seen LEDs under my desk will turn on, one by one.

(And I’ll be checking that into git for sanity’s sake.)

Once that’s done, I will change the animation logic values in that sprite to point at the animation for LoopTestSprite().

Why? Because I just tested the debug logic, and if I used copy and paste or hand-typed all the debug into LoopTestSprite(), I’m running the risk of a typo or mistake causing it to light up the wrong LEDs or malfunction in some other unknown way.

So I will modify the sprite to run the new animation, compile, and run it on the Arduino. At which point… I will probably learn something unexpected. That’s how it usually happens.

But for now, rain clouds are moving in, and I’m going to sit on my screened-in back porch and watch the rain. Animation can wait.

Paper Bits: Animation Loop Design: l_pulsar_a from Josh DiMauro on Vimeo.A...

Animation Loop Design: l_pulsar_a from Josh DiMauro on Vimeo.

A looping “idle” animation for the Witch Lights sprites

Greater Fool – Authored by Garth Turner – The Troubled Future of Real Estate: Wishful thinking

DOUG By Guest Blogger Doug Rowat

Steve Martin once said “A day without sunshine is like, you know, night”, so here’s my own helpful bit of obvious insight regarding the near-term direction of interest rates: They’re either going up or going higher.

The US Federal Reserve has already raised rates five times in a little over a year and consensus estimates as many as three more hikes before 2018 is over. And market odds of a rate increase at the Fed’s next meeting in June currently sit at a near-certain 97%.

But don’t let the short-term pattern fool you: the long-term interest-rate downtrend is intact. Each of the past four tightening cycles from the Fed, for example, took its benchmark overnight rate above 5%. But for that to happen this time we would have to see the Fed hike 14 more times (assuming 25 bps each time). Given that the average number of increases over the past four tightening cycles has been only 10 and we’ve already had six increases so far this cycle, another 14 would be an unlikely scenario indeed.

So, while interest rates and bond yields are still going higher, the overnight rate will probably stall out at about 3% or 3.5% and then we’ll, in all likelihood, witness a resumption of the long, inexorable, downward move in interest rates and bond yields. A whole variety of factors support this long-term trend not the least of which is an ageing population seeking safety and consistent income.

Demographics aren’t changing, but regardless, there’s little point in fighting a downtrend that’s lasted almost 40 years. And, of course, as bond yields fall, the expected return from bonds diminishes as well. The decade-by-decade slide in US bond returns, for example, is shown below:

A steady decline in US bond returns…

…partly a result of an ageing population

Source: Bloomberg

So, bond yields are going up for now and eventually the time will come to lock-in some longer duration bonds with more attractive yields, but longer term, bond yields, and ultimately their returns, are probably going to suck.

Generally speaking, the only way that bond yields improve is through price movement. This is true of equity yields as well, but equities have the added benefit of dividend increases. Over time, equity dividends grow at a rate that far eclipses inflation. Below I show the increase in S&P 500 dividends over 30 years. Historically, S&P 500 companies have grown their dividends at 5.9% per year.

All rise! S&P 500 dividend growth

Source: Bloomberg

Let’s make a simple comparison. Let’s assume two individuals retire tomorrow with a million bucks. One decides to live for the next 20 years off of only the dividends (and the expected 5.9% annual dividend increases) from their investment in the S&P 500, which currently yields about 2%. The other decides to live off of only the return from an investment in bonds (the Barclays Aggregate US Bond Index). I’ll grant the bond investor a historical annual return of 2.7%, which has been the average for this decade, even though, as the chart above suggests, there is a high likelihood that this return will diminish over the coming decades.

At the end of 20 years, the S&P 500 investor would have generated an aggregate income of more than $725,000. The bond investor receives just $542,000. I’ve also assumed that each gets their $1,000,000 principal after 20 years. But what are the odds of the S&P 500 having ZERO appreciation over 20 years? Exactly.

So, long term, bonds will provide a bit of income, and may, if you’re lucky, provide a return that beats the inflation rate. But their primary purpose is to stabilize your portfolio, which, to be clear, is a critically important role. But bond returns have been declining for decades and this will, in all likelihood, continue. Equites, meanwhile, not only provide better historical returns, but also consistently boost portfolio cash flow through dividend increases. The point here is that relying on a bond-only portfolio to get you to retirement and serve you well once you’re there is a hopeless strategy.

Believe that bonds are all you need? Wishful thinking.

Doug Rowat, FCSI® is Portfolio Manager with Turner Investments and Senior Vice President, Private Client Group, Raymond James Ltd.


Tea Masters: Trouver du bon Oolong au printemps

J'ai passé plusieurs jours à chercher du bon thé dans les montagnes du centre de Taiwan cette semaine. Plus de photos et d'article suivront et les nouveaux Oolongs apparaitront bientôt sur mon site (note: c'est fait!). Mais avant de parler des challenges rencontrés cette semaine, je veux vous parler de ma préparation en vue de mes sélections.

Oolong de Da Yu Ling du printemps 2017
Trouver du thé chez les fermiers, c'est comme passer un examen à l'école! Il faut réviser ses classiques, les arômes des différents cultivars, les particularités de chaque terroir... C'est l'expérience du bon qui permet de trouver meilleur, car si on est habitué au médiocre, on se satisfaira trop rapidement par des feuilles de qualité moyenne.

C'est pour cela que j'ai souvent bu de mes meilleurs Oolongs de haute montagne (comme ce Da Yu Ling) récemment. Il s'agit d'habituer mes papilles à ce qui se fait de mieux, afin qu'elles deviennent très sensibles et exigeantes.
Première infusion de DYL
Il est aussi important d'avoir de bons contacts parmi les producteurs et c'est vrai que leur rendre visite permet d'approfondir ces liens. Il est facile d'éprouver de la sympathie pour eux quand on voit toute l'abnégation qu'ils mettent dans la production du thé. Ce sont des journées de 14 heures de travail (minimum) pendant plusieurs semaines d'affilé! Mais il faut quand même savoir garder une certaine distance pour rester objectif.
C'est la qualité du thé qui doit primer! Ainsi, cette semaine, je n'ai pas acheté mon Oolong chez le fermier avec lequel j'ai passé le plus de temps. Pourtant, c'est un gars extraordinaire, souriant, très consciencieux et traditionaliste dans ses méthodes de production. J'apprends beaucoup avec lui et j'essaie aussi de lui rendre la pareille autant que possible. Il a des plantations très bien situées et elles ont un super potentiel comme j'ai déjà pu le contaster. Mais cette année, pour des raisons que je montrerai une autre fois, son Oolong ne fut pas à la hauteur de mes attentes. Et c'est chez un de ses voisins, en 20 minutes, que je trouvai un Oolong avec un super rapport qualité/prix! J'étais désolé de cette injustice, mais je me dis que j'ai fait de mon mieux en lui donnant la priorité de mes dégustations.
Seconde infusion de DYL
En conclusion, pour trouver du bon Oolong, il faut avoir une bonne idée de ce qu'on cherche! Il ne faut pas se laisser guider par ses sympathies, mais par ses papilles bien éduquées!

Paper Bits: Witch Lights Animation Test: ease in, wind up, ease out (with...

Witch Lights Animation Test: ease in, wind up, ease out (with cat) from Josh DiMauro on Vimeo.

Found a lighting setup that lets me get better pictures of the animation in the dark. Also, Samhain continues to stare at the lights and purr. Comic for 2018.05.05

New Cyanide and Happiness Comic

Penny Arcade: News Post: Namenclature

Tycho: Paladins Strike on phones and tablets is fun as hell. I played a few rounds yesterday with Grickle, and while some of the visual effects aren’t where I like and it forgets to stop playing the machine gun sound sometimes, we can cross these bridges when we come to them.  How does it feel?  Am I hitting when I think I should be?  Does the roster have enough characters with enough interesting toys?  This all works.  Beyond that I will simply offer my services for a naming pass. They call it a Real-Time Hero Shooter, which calls to mind a Table of Elements designed…

Lambda the Ultimate - Programming Languages Weblog: Comprehending Ringads

Comprehending Ringads

2016 by Jeremy Gibbons

Ringad comprehensions represent a convenient notation for expressing database queries. The ringad structure alone does not provide a good explanation or an efficient implementation of relational joins; but by allowing heterogeneous comprehensions, involving both bag and indexed table ringads, we show how to accommodate these too.
Indexed/parametric/graded monads are the key (read the paper to understand the pun).

CreativeApplications.Net: Inventing the Future at MUTEK_IMG

Inventing the Future at MUTEK_IMG
It was just three weeks ago we were in Montréal for the 4th edition of MUTEK_IMG, MUTEK’s forum on digital creation. Invited to contribute to its symposium, we curated five panels. In this post-festival report, we share some highlights.

Ideas from CBC Radio (Highlights): How Internet Monopolies Threaten Democracy (Encore Dec 15, 2017)

The unfulfilled promise of the internet has been a long-term concern of Digital Media and Global Affairs expert Dr. Taylor Owen, who delivers the 2017 Dalton Camp Lecture in Journalism. He argues the reality of the internet is now largely one of control, by four platform companies — Google, Facebook, Amazon and Apple — worth a combined $2.7 trillion — and their impact on democracy is deeply troubling.

Michael Geist: World’s Worst Wireless Pricing?: Report Finds Canadian Wireless Broadband Pricing Offers Least Bang for the Buck in Developed World

The sad state of Canadian wireless pricing is old news for consumers and the government, but a new report graphically demonstrates how Canadians face some of the least competitive pricing in the developed world. The Rewheel study measured pricing in EU and OECD markets by examining how many gigabytes of 4G wireless data consumers get for the equivalent of 30 euros. This chart from Rewheel says it all:


Rewheel Research – The state of 4G pricing ̶ 1H2018


Canada is at the far left of the chart with consumers getting less for their money than anyone else. While many countries offer unlimited mobile data at that price, the report says Canadian carriers offer a measly 2 GB. The smartphone data plans aren’t much better, with nearly all countries offering better deals and many shifting to unlimited data at that price.


Rewheel research – The state of 4G pricing ̶ 1H2018


While it falls outside of the Rewheel study, a quick review of the major carriers reveals that some offers can’t be purchased in Canada at any price as no one offers unlimited mobile data. Rogers smartphone plans in Ontario max out at 80 GB of data at a cost of $405 per month or 263 euros (consumers in the UK can get 100 GB for 30 euros).


Meanwhile, Bell’s mobile broadband service tops out at 50 GB of data for $150. At $3 for each additional GB, it would cost $300 for 100 GB (France and New Zealand have plans for 30 euros for 100 GB) and $1500 for 500 GB (Israel has 500 GB for 30 euros).


In addition to outrageously expensive wireless data plans, Canadians also face huge overage charges (more than a billion dollars per year generated in the wireless overage cash grab) and steadily increasing roaming charges. Yet when it came to introducing greater resale competition, the CRTC rejected new measures that it admitted could result in some improvement to affordability.

The post World’s Worst Wireless Pricing?: Report Finds Canadian Wireless Broadband Pricing Offers Least Bang for the Buck in Developed World appeared first on Michael Geist.

Planet Lisp: Christophe Rhodes: els2018 reflections

A few weeks ago, I attended the 2018 European Lisp Symposium.

If you were at the 2017 iteration, you might (as I do) have been left with an abiding image of greyness. That was not at all to fault the location (Brussels) or the organization (co-located with ) of the symposium; however, the weather was unkind, and that didn't help with my own personal low-energy mood at the time.

This year, the event was organized by Ravenpack in Marbella. And the first thing that I noticed on landing was the warmth. (Perhaps the only "perk" of low-cost airlines is that it is most likely that one will disembark on to terra firma rather than a passenger boarding bridge. And after quite a miserable winter in the UK, the warmth and the sunshine at the bus stop, while waiting for the bus from Malagá airport to Marbella, was very welcome indeed. The sense of community was strong too; while waiting for the bus, I hopped on to #lisp IRC and Nic Hafner volunteered to meet me at the Marbella bus station and walk with me to my hotel; we ended up going for drinks at a beachside bar that evening with Dimitri Fontaine, Christian Schafmeister, Mikhail Raskin and others - and while we were sitting there, enjoying the setting, I saw other faces I recognised walking past along the beach promenade.

The setting for the conference itself, the Centro Cultural Cortijo de Miraflores, was charming. We had the use of a room, just about big enough for the 90ish delegates; the centre is the seat of the Marbella Historical Archives, and our room was next to the olive oil exhibition.

2018 European Lisp Symposium opening

We also had an inside courtyard for the breaks; sun, shade, water and coffee were available in equal measure, and there was space for good conversations - I spoke with many people, and it was great to catch up and reminisce with old friends, and to discuss the finer points of language implementation and release management with new ones. (I continue to maintain that the SBCL time-boxed monthly release cadence of master, initiated by Bill Newman way back in the SBCL 0.7 days in 2002 [!], has two distinct advantages, for our situation, compared with other possible choices, and I said so more than once over coffee.)

The formal programme, curated by Dave Cooper, was great too. Zach's written about his highlights; I enjoyed hearing Jim Newton's latest on being smarter about typecase, and Robert Smith's presentation about quantum computing, including a walkthrough of a quantum computing simulator. As well as quantum computing, application areas mentioned in talks this year included computational chemistry, data parallel processing, pedagogy, fluid dynamics, architecture, sentiment analysis and enterprise resource planning - and there were some implementation talks in there too, not least from R. "it's part of the brand" Matthew Emerson, who gave a paean to Clozure Common Lisp. Highly non-scientific SBCL user feedback from ELS presenters: most of the speakers with CL-related talks or applications at least mentioned SBCL; most of those mentions by speaker were complimentary, but it's possible that most by raw count referred to bugs - solely due to Didier Verna's presentation about method combinations (more on this in a future blog post).

Overall, I found this year's event energising. I couldn't be there any earlier than the Sunday evening, nor could I stay beyond Wednesday morning, so I missed at least the organized social event, but the two days I had were full and stress-free (even when chairing sessions and for my own talk). The local organization was excellent; Andrew Lawson, Nick Levine and our hosts at the foundation did us proud; we had a great conference dinner, and the general location was marvellous.

Next year's event will once again be co-located with , this time in Genova (sunny!) on 1st-2nd April 2019. Put it in your calendar now!

things magazine: Listicle

A few small things. The Floppotron, music with technology / Travel on Paper specialise in selling vintage poster design / paintings by Marie Lenclos / your local legends / list of lists of lists / Dangerous Roads / 30 modern … Continue reading

MattCha's Blog: Teapot Collector Vs. Teapot User

After my recent teapot breakage I have been meditating on the whole concept of teapots.  Although I have written a ton on such things (see here and here), I feel that I have much more to say about teawares.  Please reader, join me in a series of posts that look at the beloved teapot…

To me the teapot is both an object of art in and of itself and an indispensable element in the greater art of tea.  The later could either be as the performance art of tea ceremony or in the skillful art of preparing tea or “gong fu cha”.

If you see the teapot as only an object of art then it serves no actual practical purpose other than that of art itself.  If you like to collect this type of art and display it- that’s fine by me because I also enjoy looking.  However, to me, the real art of the teapot is in its use.

The teapot is 3-D, three dimensional, because it is sculpture.  To view a teapot in a photo or on a screen is to not do it any justice.  When appreciating sculpture you have to see it at different vantage points to truly appreciate it.

The teapot is also functional art in that it serves a purpose- to make tea.  Historically, it was made for this purpose and because tea holds an important part in many societies- its make was both practical and for appreciation.  This appreciation developed into an art.  In actually using the teapot to make tea, we can we also appreciate its art on a deeper level by picking it up and appreciating its texture, its weight, the sound its lid makes when closing it, the sound hot water makes when filling it, the sight of its pour.

However, only by making tea in ceremony or, alternatively, by brewing gong fu cha (with great skill) can we reach the deepest level of appreciation.  At this level the teapot is only a smaller part of the art of preparing tea.  Its selection, to improve the tea steeping esthetic as well as to improve that particular tea which you intend to steep.  Basically, you are selecting that teapot because you think it will improve the taste or bring out a certain desirable quality in a certain type of tea.  The selection of a certain teapot also should be in harmony with, the guests, season, other teawear, the environment, the person preparing the tea, and in the esthetic of the guests you are serving.  It is at this level where art emulates life.  And life is tea.

I suppose, issues of art aside, there is also the financial part of this as well.  An old unused teapot can command very high prices these days.  I’m currently finding the price of quality yixing has gone through the roof lately, mirroring the price of puerh.  Part of this is art collecting, part of this is increasing interest in puerh, part of this is in speculation, part is that old items are just being valued at the same price of a new pot of similar quality.

On the other hand, to actually use the teapot is essentially devaluing it.  Risk of breakage increases.  For me, using it with a bunch of small children around, breakage is an almost certainty.  I think some teapot collectors out there might have groaned when they saw that last pot of mine busted up.  However, I think it was definitely the teapot users out there who could identify with this inevitable situation most.

It goes without saying that I am in the puerh drinker and teapot user categories.


Ideas from CBC Radio (Highlights): May '68: A Tale of Four Cities

The student-led protests of May 1968 on the streets of Paris dominated the news of the day and have since entered the realm of popular mythology. Contributor David Zane Mairowitz was there. He was, as he puts it, an observer-participant, documenting the myth as it was being made -- not only in Paris, but in other epicentres of protest: San Francisco, New York, London. The exhilaration and the revolutionary fervour also had a darker, violent side, he shows. In the end, May 1968 was as much about social change as it was a publicity stunt for itself.

Disquiet: Disquiet Junto Project 0331: Born Under a Bad Sine

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 11:59pm (that is, just before midnight) wherever you are on Monday, May 7, 2018. This project was posted shortly after noon, California time, on Thursday, May 3, 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 0331: Born Under a Bad Sine
What does it sound like when a robot has the blues?

Step 1: What does it sound like when a robot has the blues?

Step 2: Record a piece of music that attempts to answer the question from Step 1.

Six More Important Steps When Your Track Is Done:

Step 1: Include “disquiet0331” (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 “disquiet0331” (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: Please consider posting 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 11:59pm (that is, just before midnight) wherever you are on Monday, May 7, 2018. This project was posted shortly after noon, California time, on Thursday, May 3, 2018.

Length: The length of your track is up to you, but between two and three minutes seems about right, unless your robot gets stuck in a loop and goes on longer, of course.

Title/Tag: When posting your track, please include “disquiet0331” 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: It is preferable that your track is set as downloadable, and that it allows for attributed remixing (i.e., a Creative Commons license permitting non-commercial sharing with attribution).

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

More on this 331st weekly Disquiet Junto project (Disquiet Junto Project 0331: Born Under a Bad Sine / What does it sound like when a robot has the blues?) at:

More on the Disquiet Junto at:

Subscribe to project announcements here:

Project discussion takes place on

There’s also on a Junto Slack. Send your email address to for Slack inclusion.

The photo associated with this project is by BrotherMagneto, used via Flickr and a Creative Commons license:

Daniel Lemire's blog: How fast can you parse JSON?

JSON has become the de facto standard exchange format on the web today. A JSON document is quite simple and is akin to a simplified form of JavaScript:

     "Image": {
        "Width":  800,
        "Height": 600,
        "Animated" : false,
        "IDs": [116, 943, 234, 38793]

These documents need to be generated and parsed on a large scale. Thankfully, we have many fast libraries to parse and manipulate JSON documents.

In a recent paper by Microsoft (Mison: A Fast JSON Parser for Data Analytics), the researchers report parsing JSON document at 0.1 or 0.2 GB/s with common libraries such as RapidJSON. It is hard to tell the exact number as you need to read a tiny plot, but I have the right ballpark. They use a 3.5 GHz processor, so that’s 8 to 16 cycles per input byte of data.

Does it make sense?

I don’t have much experience processing lots of JSON, but I can use a library. RapidJSON is handy enough. If you have a JSON document in a memory buffer, all you need are a few lines:

rapidjson::Document d;
if(! d.ParseInsitu(buffer).HasParseError()) {
 // you are done parsing

This “ParseInsitu” approach modifies the input buffer (for faster handling of the strings), but is fastest. If you have a buffer that you do not want to modify, you can call “Parse” instead.

To run an example, I am parsing one sizeable “twitter.json” test document. I am using a Linux server with a Skylake processor. I parse the document 10 times and check that the minimum and the average timings are close.

ParseInsitu Parse
4.7 cycles / byte 7.1 cycles / byte

This is the time needed to parse the whole document into a model. You can get even better performance if you use the streaming API that RapidJSON provides.

Though I admit that my numbers are preliminary and partial, they suggest to me that Microsoft researchers might not have given RapidJSON all its chances, since their numbers are closer to the “Parse” function which is slower. It is possible that they do not consider it acceptable that the input buffer is modified but I cannot find any documentation to this effect, nor any related rationale. Given that they did not provide their code, it is hard to tell what they did exactly with RapidJSON.

The Microsoft researchers report results roughly 10x better than RapidJSON, equivalent to a fraction of a cycle per input byte. The caveat is that they only selectively parse the document, extracting only subcomponents of the document. As far as I can tell, their software is not freely available.

How would they fare against an optimized application of the RapidJSON library? I am not sure. At a glance, it does not seem implausible that they might have underestimated the speed of RapidJSON by a factor of two.

In their paper, the Java-based JSON libraries (GSON and Jackson) are fast, often faster than RapidJSON even if RapidJSON is written in C++. Is that fair? I am not, in principle, surprised that Java can be faster than C++. And I am not very familiar with RapidJSON… but it looks like performance-oriented C++. C++ is not always faster than Java but in the hands of the right people, I expect it to do well.

So I went looking for a credible performance benchmark that includes both C++ and Java JSON libraries and found nothing. Google is failing me.

In any case, to answer my own question, it seems that parsing JSON should take about 8 cycles per input byte on a recent Intel processor. Maybe less if you are clever. So you should expect to spend 2 or 3 seconds parsing one gigabyte of JSON data.

I make my code available.

Ideas from CBC Radio (Highlights): Taming the Beast: Are violent urges part of men's nature?

How does a just society reconcile the desire for peace, with the desire, most often by men, for violence? How much does nature stir boys, men, to fight? And to what extent can they control that stirring? Author Daemon Fairless takes IDEAS producer Mary Lynk on a road trip to try and unlock why some men are drawn to violence. They meet up with a science teacher, a MMA fighter, and a serial killer, who are profiled in his new book: Mad Blood Stirring: The Inner Lives of Violent Men.

50 Watts: Harue Koga

[Show your support for 50 Watts here.]

Illustrations and paintings by Harue Koga (1895–1933)

Harue Koga for Kodomo no Kuni

Bio from the Hiroshima Museum of Art: Born in Kurume City in Fukuoka Prefecture, Koga left junior high school to be a painter, and he moved to Tokyo in 1912. He attended the institute of the Taiheiyoga-kai, and also the institute of the Japan Watercolor Painting Society the following year. In 1915, Koga entered the priesthood and studied Buddhism at Taisho University, but at the same time he continued painting and became a member of the Japan Watercolor Painting Society in1916. In 1917, he won the prize at the fourth exhibition of Nika-kai, and the next year he decided to concentrate on painting, and withdrew from the university. Koga was also interested in oil painting, and exhibited his oil work at the ninth exhibition of Nika-kai in 1922. In the same year, he created “Action”, the avant-garde group, with Kigen Nakagawa and other young contemporaries. In 1930, Koga was talked into joining the 1930-kyokai and entered it, but withdrew at once. He died in Tokyo.
For a really depressing read (with cameos by Kawabata and syphilis) check out his wikipedia entry.


—There is a long out-of-print a book about the artist (I only have a library discard): Harue Koga: The Creative Process, A Show Built Around the Museum Collection.

—"Koga Harue: A Retrospective" by Edan Corkill

—PDF article from the Japanese Society for Aesthetics

—Harue Koga: The art of assimilating Western styles by C.B. Liddell

—2010 exhibit page (in Japanese)

Harue Koga for Kodomo no Kuni

Harue Koga for Kodomo no Kuni

Harue Koga for Kodomo no Kuni

Harue Koga for Kodomo no Kuni

Harue Koga for Kodomo no Kuni

Harue Koga for Kodomo no Kuni

The Moon and Flowers, 1926
oil on canvas, The National Museum of Modern Art, Tokyo
via Nakonxipan

Summer Mountains, 1927
oil on canvas
via Nakonxipan

Innocent Moonlit Night (1929) via (I think) wikipedia

"The Sea," 1929, via omolo

(this is possibly my scan from the book mentioned above...memory lapse)

"Intellectual Expression Traversing a Real Line" (1931)

This post first appeared on May 2, 2018 on 50 Watts

MattCha's Blog: “Mid 60s Raw Wild Loose Puerh” from Teamasters and Advice on Brewing Very Aged Puerh

Shortly after my beloved Yixing pot broke I looked for something to console myself.  Surely some old aged puerh will bring up my spirits.  I pulled out this sample of wild puerh from the 1960s gifted to me from Stephane of Teamasters or included in an order, I can’t remember which but I am very very grateful.

I actually think it was included in an order just to put me in my place about my alternate view of “wild puerh”.  I heard it from a few vendors when I posted that it really doesn’t feel like puerh to me.  There were groans heard around the tea world I’m sure… hahahah.  I have never had aged wild tea before so this was going to be a real treat.  There is no greater joy for a puerh drinker (or wild tea drinker) than to drink tea that was produced before they were born...
Dry leaves smell of old dust and dirt.  I close my eyes and smell deeply and if I didn’t know I was smelling puerh I would probably think it was just dust and dirt.  But I know its very old puerh so my mind seems to think I smell some old woody leathery notes under the almost exclusive old dust and dirt smells.  It smells like you are in an attic that hasn’t been open in decades or opening a hundred year old book in the old part of the old library in town.

I have a predicament.  I don’t have a pot that is small enough for this sample to ensure the proper grams/volume.  The solution- brew it in your smallest pot that you have and add just enough water to hardly cover the leaves (I really need to get me some more yixing fast!).  For this pot it means only half full of boiling water, just enough to barely cover the leaves then pouring it out of the pot immediately with flash brews.  If I tried to just steep these leaves in the whole pot, I would have pretty much wrecked these priceless puerh leaves.  With old tea, my limited experience and observation of teamasters is that you need to push it pretty hard.  That means boiling water, lots of dry leaves, maybe even longer infusions if it starts to show weakness.  Otherwise what’s the point?  Watered down aged puerh- to me that’s crazy.  Don’t do it.

I quickly flash rinse the leaves.

The first infusion is a very light woody aged slightly dusty with edges of a leathery taste.  There is a taste in here that only very old puerh has but I fail to explain it better than earthy-woody-almost raisin. Yes, there is still that returning coolness in the aftertaste and throat.  The mouthfeel is watery and viscus with a thin sandiness in the mouth.

The second infusion starts with almost flat dusty woody earth aged taste.  Then it switches back to a cooling returning sweetness. There is fruit taste almost like a plum that turns quickly to dried apricot and lingers for a long time in the aftertaste.    There is a note of leather underneath it all.  The dried apricot aftertaste is quite distinct, not a just one of those faint hard to recognize things, it’s quite obvious.

The third infusion actually tastes much the same.  I don’t know what I’d add here.  The mouthfeeling and throat feeling has just a slight comfortable astringency.  The feeling in the mouth and throat is full and is coated in a thin veil of sandiness like that from a very soft beach.  The qi is profoundly grounding, euphoric, optimistic, soft.

I stick my nose and waft deep odours from the wet leaves in the pot between each infusion.  Prizing every moment with this gift.  The wet leaves just smell very similar to the dry leaves- primarily dusty, earthy, old aged taste but more wet smelling like when the first rain hits after the snow melts and all the dust and dirt from sanding the icy winter streets seem to take on the spring air.

The fourth infusion has more of resinous wood feel to it.  The woody dusky earthy initial taste begins with it and it tails itself into the aftertaste.  There is still long dried apricot but it is a touch less apparent as before.  The qi is very big in the head.  It has a mild cozy lightness and barely warmth in the body.  It makes the body feel limber and expansive.  There is a cool menthol like taste on the breath 5 minutes later.  Breathe in.  I feel really high from this.  The head feels clear but the world moves slowly around me.

The wet leaves start to develop a menthol like odour and smell more of wood and menthol and less of dust and dirt.

The fifth infusion the initial taste of wood is more dry and crisp although still carrying a bit of dust like aged taste.  The resin taste of wood seems to be gone and the dryer crisp taste of wood seems to have replaced it.  The apricot taste seems stronger than the fourth infusion.

The sixth infusion has more of an earth-dirt-dust dominating taste throughout.  There is wood underneath, of course, cool menthol returning sweetness with that same sweet dried apricot taste.  The cool menthol returning aftertaste is stronger here.  I’m still just flash brewing this.

I had to leave this tea for a hour or so then when coming back I resumed the session and in the seventh infusion it tasted more of creamy subdued woody- dusty –earth.  The cooling aftertaste was less and so was the long apricot aftertaste.  The mouth and throat feel is more of a chalkiness now rather than a fine sand.

The eighth infusion has another flavor profile emerging… there is an almost spiciness just before the apricot comes in.  The apricot aftertaste is back strong.  Yummy!

The ninth infusion the mouthfeel and throatfeel are amazing and continue to improve.  Its this dense but light chalkiness which I love.  In it are aged tastes, slightly cooling aftertaste, and apricot aftertaste.  Nice.

The tenth infusion is much the same.  The mouthfeel continues to really fill out.  The energy is very nice.  I burn it off with a 5 KM run then back to the tea table.

The eleventh has a thick, whisky like woodiness now. There are also salty notes probably just generated from my run and the resulting change in mouth chemistry.  The aftertaste is significantly less apricot and more smooth wood.

The twelfth is more of this richer woody aged taste.  The mouthfeel is nice and chalky very mildly astringent. Beautiful Qi.

The thirteenth and fourteenth offer that aged woody camphor taste.  A new note, a floral one seems to emerge faintly recognizable but welcome in this mainly woody aged taste profile.

The leaves sit dry overnight and I resume steeping the next morning with a few more pots of tea.  I add 10 seconds or so to the flash steeping and it pushes out mainly just aged leather and camphor tastes with a slight returning coolness in the aftertaste.  The high note nuances are gone.

I push this into longer infusions now 20 minute and longer to push something more interesting out of the predominating aged flavor.  Otherwise you are just pretty much just dragging out the inevitable.  Doing this guarantees some nice autumnal leaves taste, aged camphor, woody, dirt tastes in a soft chalky mouthfeel.  There are just glimpses of fruit on the breath.

I put it to overnight infusions and a rich obvious nutty taste is dominant in aged tastes.  Yummmy.  There is still significant mouth feeling so I put it under water for another night.

I am still steeping this, think it’s been underwater for about 4 days now and have to get back to it tomorrow.  I will probably be boiling these leaves down over the stove when they seem to be giving up.


I get back to this one after 4 day long steeping and it gives off a watery aged leathery wood base taste with soft fruity notes in a little bit of a funk fermented taste.  The mouthfeel is pretty light here and the taste is a bit watery.

I throw the leaves into a small stove top pot and decoct them at a boil for a few hours.  The resulting brew is exquisite!  It is reduced into an very thick, viscous and oily liquor of thick sweet maple-syrupy-molasses like sweetness in a leathery aged taste.  The dense and heavy sweetness is long and very thick in the mouth.

I have a cup of this at the very end of a very busy work day.  The qi sensation is like nothing I've felt before.  It completely revitalizes me and expands my head through the clouds- big Qi.  It feels as if I consumed a few shots of espresso without the jitteriness but with profound mental release.

I think its safe to say that I've had a great week.


Disquiet: Revising Patchwork

A week ago, Darren Harper posted the results of one of his synthesizer patches online. The audio track, bearing a timestamp for a title, “~4/23/18,” is soft matter infused with abrasions and occasionally launching peaks of sound from its core. At nearly eight minutes in length, it is like the scientific surveillance of some newly discovered utopian microsonic world, Whoville via R. Murray Schafer. A brief technical explanation is provided by Harper, those occasional peaks characterized thusly: “new bits and pieces pop up throughout.” The depiction is for participants of synthesis more than for observers, and it belies the environmental simulacrum of the achievement.

A week later, Harper revisited his patch, and found another environment entirely. This follow-up track, “~4/30/18 (4/23 redeux),” is even softer than the original, and it seems to look up and outward where the other looked down and in. Those “bits and pieces” are largely gone, replaced with lens flare grace notes amid a huge floating zone. It is, as Harper writes briefly, a “more spacious version.” That is an understatement.

Tracks originally posted to the SoundCloud account of Darren Harper, More from Harper, who is based in Nederland, Colorado, at

Planet Lisp: Didier Verna: Lisp, Jazz, Aikido, 10 years later

10 years ago, I published a short blog entitled "Lisp, Jazz, Aikido", barely scratching the surface of what I found to be commonalities between the 3 disciplines. At the time, I had the intuition that those ideas were the tip of a potentially big iceberg, and I ended the blog with the following sentence: "I'd like to write a proper essay about these things when I find the time... someday."

Well, 10 years later, I did. The essay, which is 50 pages long, has been published in the Art, Science, and Engineering of Programming Journal, and actually received the Reviewers'Choice Award 2018. I'm not the bragging type, far from it, but I had to mention this because this essay is so personal, and I invested so much in its preparation (more than 300 hours) that I am as deeply touched by the award as I would have been hurt, had it been negatively received...

The live presentation has unfortunately not been recorded, but I took the time to make a screencast afterwards, which is now available on YouTube. Just like the essay, this presentation is not in the typical setting that you'd expect at a scientific conference...

If you've got an artistic fiber, if you're sensitive to the aesthetic dimension in what you do, you may enjoy this work...

Jesse Moynihan: Alone Pilot Next 11 Pages

Some of these character designs and names are just placeholders until the next pass.

CreativeApplications.Net: Artificial Imagination – Opening ‘the Black Box’ of Inscrutable AI Through Dialogue

Artificial Imagination – Opening ‘the Black Box’ of Inscrutable AI Through Dialogue
Artificial Imagination was a symposium organized by Ottawa’s Artengine this past winter that invited a group of artists to discuss the state of AI in the arts and culture. CAN was on hand to take in the proceedings, and given the emergence of documentation, we share videos and a brief report.

new shelton wet/dry: You gotta get up, you gotta get off, you gotta get down, girl

In Study 2, we moved chairs together in Starbucks across the country so that they were partially blocking the aisle (n = 678). People in northern China were more likely to move the chair out of the way, which is consistent with findings that people in individualistic cultures are more likely to try to control the [...]

new shelton wet/dry: ‘Man with a Cocked Head’ was a painting of a penis in a suit

{ Chris Burden, Being Photographed Looking Out Looking In, 1971 }

OCaml Weekly News: OCaml Weekly News, 01 May 2018

  1. Emacs package for automatic type display
  2. OCaml for Data Science
  3. What is a good and maintained SQL toolkit for ocaml?
  4. Patoline: an advanced typesetting written in OCaml
  5. ELPI 1.0 released
  6. Rfsm 1.0
  7. Other OCaml News

Perlsphere: Generating random passwords according to patterns with genpw

There are several modules on CPAN for generating random passwords, but last time I checked, none of them are flexible enough. Different websites or applications have different requirements (sometimes ridiculous ones) for passwords. True, most modules allow setting minimum/maximum length, and some of them allow customizing the number of special characters, or number of digits, but what I want is some sort of template/pattern that the generator would follow. So I created genpw.

Basic functionality

genpw is your usual random password generator CLI. When run without any arguments, it returns a single random password (8-20 characters long, comprising letters/digits):

% genpw

To return several passwords:

% genpw 5

To set exact length or minimum/maximum of length:

% genpw -l 4
% genpw --min-len 12 --max-len 14


In addition to the above basic customization, genpw allows you to specify a pattern (or several patterns to pick randomly, for that matter). A pattern is a string that is similar to a printf pattern where conversion sequences like %d will be replaced with actual random characters. Here are the available conversions:

%l   Random Latin letter (A-Z, a-z)
%d   Random digit (0-9)
%h   Random hexdigit (0-9a-f)
%a   Random letter/digit (Alphanum) (A-Z, a-z, 0-9; combination of %l and %d)
%s   Random ASCII symbol, e.g. "-" (dash), "_" (underscore), etc.
%x   Random letter/digit/ASCII symbol (combination of %a and %s)
%m   Base64 character (A-Z, a-z, 0-9, +, /)
%b   Base58 character (A-Z, a-z, 0-9 minus IOl0)
%B   Base56 character (A-Z, a-z, 0-9 minus IOol01)
%%   A literal percent sign
%w   Random word

You can specify %NC (where N is a positive integer, and C is the conversion) to mean a sequence of random characters (or a random word) with the exact length of N. Or %N$MC (where N and M are positive integers) to mean random characters (or word) with length between N and M.

Unsupported conversion will be unchanged, like in printf.

Some examples:

Generate random digits between 10 and 12 characters long:

% genpw -p '%10$12d'

Generate a random UUID:

% genpw -p '%8h-%4h-%4h-%4h-%12h'

Like the above, but in uppercase:

% genpw -p '%8h-%4h-%4h-%4h-%12h' -U


The %w conversion in pattern mean to replace with a random word. Words are fetched from STDIN (and will be shuffled before use). For example, the command below will generate password in the form of a random word + 4 random digits:

% genpw -p '%w%4d' < /usr/share/dict/words

Instead of from STDIN, you can also fetch words from the various WordList::* modules available on CPAN (and installed locally). A separate CLI provides this functionality: genpw-wordlist, which is basically just a wrapper to extract the words from the wordlist module(s) then feed it to App::genpw. By default, if you don't specify -w option(s) to select wordlist modules, the CLI will use WordList::EN::Enable:

% genpw-wordlist -p '%w%4d'

Generate 5 passwords comprising 8-character word followed by between four to six random digits:

% genpw-wordlist 5 -p '%8w-%4$6d'

Configuration file

To avoid you from having to type patterns again and again, you can use a configuration file. For example, put this in $HOME/genpw.conf:

patterns = %8h-%4h-%4h-%4h-%12h
case = upper

then you can just say:

% genpw -P uuid


The speed is not great, around 2000 passwords/sec on my laptop, though I believe this should not matter for most use-cases.


genpw is a flexible random password generator where you can specify patterns or templates for the password. I'm still working on a few things, like how to enable secure random source in the most painless way. There are also various CLI variants to generate specific kinds of passwords as straightforward as possible: genpw-base56, genpw-base64, genpw-id, and the aforementioned genpw-wordlist.

Perlsphere: Maintaining Perl 5 (Tony Cook): March 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.

[Hours]         [Activity]
  3.25          #127743 fix MSVC debugging builds
                #127743 work on reducing Win32/gcc Storable warnings
                #127743 testing warning fixes
  7.31          #130683 review the change and try to figure out what’s
                going wrong
                #130683 debugging
                #130683 debugging
                #130683 work up a possible fix, testing
                #130683 review code, try some alternatives
                #130683 look for related issues outside of %ENV
  4.10          #131844 (sec) comment
                #131844 (sec) debugging, consider approaches, make changes
                to fix and testing, comment with updated patches
  4.08          #131984 work on scope code to support fix
                #131984 finish up code, testing
                #131984 fix some issues, try to work up a test
  0.37          #132055 (sec) comment
  0.87          #132227 (sec) backport discussion with khw
                #132227 (sec) review khw’s fix, discussion
  0.58          #132764 review ticket and code
  2.54          #132800 profile mktables, look for optimization
                #132800 work on a mktables optimization
                #132800 validate results, fixes, profile again, comment
                with patch
  0.88          #132866 research, comment
  0.63          #132870 test that existing tests cover the issue, apply to
  0.65          #132878 review, testing, apply to blead
  0.98          #132893 more testing, apply to blead
  0.77          #132924 testing, research, apply to blead
  3.19          #132925 review patches, review mktables,,
                work on alternate fixes, comment with patches
                #132925 testing, minor fix, more testing
                #132925 investigate unrelated test failure, rebase with
                conflicts, test_porting, apply to blead
  1.23          #132926 review, ask khw about it, abstract security
                discussion in #p5p
  0.69          #132929 review patch, research
                #132929 more review, testing, apply to blead
  1.30          #132943 review, testing, #p5p discussion of glibc
                duplocale issue probing, apply to blead
  0.28          #132949 testing, comment
  1.00          #132954 review, research and comment
  0.47          #132992 review patch and GNUmakefile
  1.35          #132999 testing, work up a fix and briefly comment with
  8.15          #133009 work on a fix, testing
                #133009 fix dmake makefile, testing, comment with patch
                #133009 try to break my patch, make stacksize more
                paranoid (while working on perlsecpolicy)
                #133009 more testing, comment with updated patch
                #133009 re-work probing some more, testing
                #133009 cross platform tests
  1.27          #133033 testing, comment
                #133033 research and comment
  0.90          clean up some security tickets
  1.13          khw’s perl.dll discussion on #p5p
  2.60          more perlsecpolicy
  1.57          more security backporting, ASAN discussion in #p5p
  0.17          more security support
  1.42          more try to backport, ask khw for help
  0.78          rebase maint votes (with lots of conflicts)
  0.50          rebase security branches
  0.48          research on security issues, comment
  1.30          review maint-votes and vote
  1.60          security issues: respond to downstream query, reproduce
                reported issue
  1.43          security list catch up, start perlsecpolicy
  2.73          security support for downstream vendor (backporting)
  0.62          testing, package up security patches for upstream
  0.87          update security update branches
 64.04 hours total

Perlsphere: List of new CPAN distributions – Apr 2018

dist author version abstract
Acme-CPANModules-PortedFrom-NPM PERLANCAR 0.001 Modules/applications that are ported (or inspired from) NPM libraries
Acme-Pointer CODEHEX 0.01 We can access to data using address as the string
Acme-ZeroWidth VTI 0.01 Zero-width fingerprinting
Aliyun NSNAKE 0.9 阿里云SDK
Apache2-AuthCASpbh PHENSON 0.10 CAS SSO integration for Apache/mod_perl
App-DHCPClientUtils HQJATU 0.01 ISC dhclient lease information
App-ModuleVersionDiffUtils PERLANCAR 0.001 Utilities to diff stuffs from two different versions of a module
App-QRCodeUtils PERLANCAR 0.001 Utilities related to QR Code
App-cryp-exchange PERLANCAR 0.001 Interact with cryptoexchanges
App-cryp-mn PERLANCAR 0.001 Manage your masternodes
App-indodax PERLANCAR 0.023 CLI for
App-rank PERLANCAR 0.001 Rank lines of text files
App-rs RSLOVERS 1.01 package manager of RSLinux
Astro-Units SPAJAI 1.10 Astronomical unit conversion with high precision and large number support
Astro-units SPAJAI 1.00
Business-BR-CNJ-Classes DLIMA 0 Convert brazilian CNJ (Conselho Nacional de Justiça) class numbers and abreviations to full text names/description.
Business-BR-CNJ-Format DLIMA 0 Format brazilian CNJ (Conselho Nacional de Justiça) numbers, from all numbers to correctly ponctuated strings.
Business-ID-NKK PERLANCAR 0.001 Parse Indonesian family card number (nomor kartu keluarga, NKK)
CPAN-Test-Dummy-Perl5-UseUnsafeINC-Fail MIYAGAWA 0.01 Fails when PERL_USE_UNSAFE_INC is set
CPAN-Test-Dummy-Perl5-UseUnsafeINC-One MIYAGAWA 0.01 x_use_unsafe_inc 1
Catalyst-Plugin-ServeFile JJNAPIORK 0.001 A less opinionated, minimal featured way to serve static files.
Class-Slot JEFFOBER 0.01 Simple, efficient, comple-time class declaration
Command-Runner SKAJI 0.001 run external commands and Perl code refs
Crypt-OpenSSL-Guess AKIYM 0.01 Guess OpenSSL include path
DBIx-Result-Convert-JSONSchema MALISHEW 0.01 Convert DBIx result schema to JSON schema
Dancer2-Plugin-Map-Tube MANWAR 0.01 Dancer2 add-on for Map::Tube.
Data-Cuid ZAKAME 0.01 collision-resistant IDs
Data-SExpression-Util MGV 0.000_001 routines for processing linked lists
Data-Sah-CoerceRule-array-str_int_range PERLANCAR 0.001 Coerce array of ints from string in the form of "INT1-INT2"
Data-Sah-CoerceRule-array-str_int_range_and_comma_sep PERLANCAR 0.001 Coerce array of ints from comma-separated ints/int ranges
DateTime-Format-Genealogy NHORNE 0.01 Create a DateTime object from a Genealogy Date
Device-Gyro-IXBLUE TROXEL 1.0 Perl module to interface with a IXBLUE Gyro
Dist-Zilla-MintingProfile-FB11 ALTREUS 0.016 Mints a new FB11 site
Dist-Zilla-Plugin-ReadmeAddDevInfo RENEEB 0.01 Dist::Zilla::Plugin::ReadmeAddDevInfo – add info how to contribute to the project
Dita-Validate PRBRENAN 20180421 In situ validation of XML parse trees representing OASIS DITA documents.
EPFL-Service-Open WILLBELL 1.00 Open the EPFL website (service) associated with the
File-ContentStore BOOK 1.000 A store for file content built with hard links
File-Copy-Recursive-Reduced JKEENAN 0.001 Recursive copying of files and directories within Perl 5 toolchain
Finance-Indodax PERLANCAR 0.008 Trade with using Perl
Game-TextPatterns JMATES 0.01 generate patterns of text
Geo-GDAL-FFI AJOLMA 0.01 A foreign function interface to GDAL
Geo-Privacy DWRIGHT 0.01 Information about privacy/GDPR regulations by state
Graphics-Grid SLOYD 0.0000_01 An incomplete port of the R "grid" library to Perl
Image-Find-Paths PRBRENAN 20180429 Locate the longest line in an image.
JIP-DataPath VLADIMIRZ 0.01 provides a way to access data elements in a deep, complex and nested data structure.
Linux-Perl FELIPE 0.01 Linux system calls with pure Perl
Locale-Country-EU MATTSIZLE 0.001 Module to check if a country is in the European Union ( EU ) using various ISO data formats
Log-Log4perl-Appender-LogGer PERLANCAR 0.001 Log to Log::ger
Map-Tube-Frankfurt RENEEB 0.01 Map::Tube::Frankfurt – interface to the Frankfurt S- and U-Bahn map
Map-Tube-Madrid MANWAR 0.01 Interface to the Madrid Metro Map.
Map-Tube-Nuremberg STELIM 0.01 Map::Tube::Nuremberg – interface to the Nuremberg U-Bahn map
Map-Tube-Server MANWAR 0.01 Dancer2 based server for Map::Tube.
MarkMoreDown KIAVASH 0.000030 markdown parser
Markmoredown KIAVASH 0.000031 markdown parser
Math-Utils-XS GONZUS 0.000002 Some math utility functions implemented in XS
Menlo-Legacy MIYAGAWA 1.9019 Legacy internal and client support for Menlo
Mojo-Feed DOTAN 0.13 Mojo::DOM-based parsing of RSS & Atom feeds
Mojolicious-Command-generate-localplugin RENEEB 0.01 Plugin generator command
Mojolicious-Plugin-CSPHeader LDIDRY 0.01 Mojolicious Plugin to add Content-Security-Policy header to every HTTP response.
Mojolicious-Plugin-ExportExcel WFSO 0.01 The great new Mojolicious::Plugin::ExportExcel!
Mojolicious-Plugin-GzipStatic LDIDRY 0.01 Mojolicious Plugin to to compress the static files before serving them.
Mojolicious-Plugin-NamedHelpers TYLDUM 0.01 Mojolicious Plugin
MooX-Async-Console CHOHAG 0.103 Attach a console to an async module
Music-ScaleNote GENE 0.01 Position of notes in a scale
Net-ISC-DHCPClient JATU 0.01 ISC dhclient lease reader
Oracle-ZFSSA-Client WHINDS 0.01 Oracle ZFS Storage Appliance RESTful API Connector
Outlook-Mail-Count LINUS 0.01 The great new Outlook::Mail::Count!
PDL-Cluster MOOCOW v1.54.001 Perl interface to the C Clustering Library with PDL support
PERLCORE-Predicates-IsEven ECARROLL 0.01 An implementation of JS is-even
PGObject-Util-AsyncPool EINHVERFR 0.01 An Async Connection Pooler for PGObject
PMLTQ-Suggest MATY 0.0.1 Tool for generating simple PMLTQ query based on given nodes
Panda-next SYBER v0.1.0 Replacement for next::method, performing very fast, and super::method (next-by-mro), with Perl and C++ interface.
RT-Extension-InlineAudioVideoAttachments GIBUS 0.01 RT-Extension-InlineAudioVideoAttachments Extension
Report_HTML_DB HIMEWEN 0.01 DBI Model Class
Role-NotSoTiny FERREIRA 0.1.0 Experiment with Role::Tiny / Role::NotSoTiny->make_role()
SMS-Send-Iletimerkezi DUMLU 0.01 SMS::Send driver for
Serge-Smartcat PDORONIN 0.01 Maintain tag
Serge AFAN v1.3.1 Solution for continuous localization
Shorthand-Entropy-UseLocal PERLANCAR 0.001 Use local entropy source
Table-PreAnalysis TULAMILI 0.001 The great new Table::PreAnalysis!
Table-PreCheck TULAMILI 0.001 The great new Table::PreCheck!
Task-Bootstrap-Perl-CPAN SCHWIGON 0.003 Dependencies for App::Bootstrap::Perl – CPAN bundle
Task-Kensho-All DBOOK 0.39 Install all of Task::Kensho
Taskwarrior-Kusarigama-Plugin-Command-Shelf SSORICHE 0.001 Move tasks to and from the shelf.
Test-Pod-Links SKIRMESS 0.001 Test Pod for invalid HTTP/S links
Text-Gitignore VTI 0.01 Match .gitignore patterns
Text-Markmoredown KIAVASH 0.000032 MarkMoreDown parser
Tree-Interval-Fast AVULLO v0.0.1 Perl extension for efficient creation and manipulation of interval trees.
UUID-URandom DAGOLDEN 0.001 UUIDs based on /dev/urandom or the Windows Crypto API
Web-Mention JMAC 0.1 Implementation of the IndieWeb Webmention protocol
Web-Microformats2 JMAC 0.02 Read Microformats2 metadata from HTML or JSON
WebService-GetSongBPM GENE 0.01 Access to the API
WebService-S3-Tiny CVLIBRARY 0.001 Perl module for using S3 or compatible APIs
Webservice-Swapi KIANMENG 0.1.0 A Perl module to interface with the Star Wars API webservice.
WordList-Mod PERLANCAR 0.001 Modified wordlist
WordList-Mod-BinarySearch PERLANCAR 0.001 Provide word_exists() that uses binary search
WordList-Mod-Bloom PERLANCAR 0.001 Provide word_exists() that uses bloom filter
WordList-Number-Prime-First10000 PERLANCAR 0.001 First 10,000 prime numbers
WordList-Test-Dynamic-Number-10000 PERLANCAR 0.001 10 million numbers from "00001" to "10000"
WordList-Test-Dynamic-Number-10Million PERLANCAR 0.001 10 million numbers from "00000001" to "10000000"
WordList-Test-Number-1Million PERLANCAR 0.001 1 million numbers from "0000001" to "1000000"
Yahoo-Weather-Api SPAJAI 1.00 The great new 2018 Yahoo::Weather::Api
astro-unit SPAJAI 1.00 Astronomical unit conversion with high precision and large number support
common-header ZDM v0.1.0 re-exporting the set of standard perl pragmas
continuous-delivery-template JOENIO 0.01 continuous delivery workflow dockerhub, gitlab, and cpan
locale-country-eu MATTSIZLE 0.001 Perl extension for determining if a country is within the EU using various ISO values
slot JEFFOBER 0.01 Simple, efficient, comple-time class declaration

Planet Lisp: Zach Beane: Thoughts on ELS 2018

Matt Emerson opened the conference keynote talk on Clozure CL. He also touched on using and celebrating CL. It provided a jolt of enthusiasm and positivity to kick off a fun conference. And it made me want to use Clozure CL more often and learn how to effectively hack on and with it.

Nicolas Hafner's talk on shaders was interesting, but partway through the talk he revealed that the slideshow system itself was an interactive Common Lisp program. Along with standard slideshow behavior, it displayed and animated the classic teapot, with interactive recompilation and redisplay of the shaders.

Ethan Schwartz's talk on Google's tweaks to SBCL's GC was a reminder that you don't have to settle for the system-provided customization knobs. When source is available and you're willing to customize very specifically for your application's workload, you can get nice improvements.

(Also his passing mention of Docker inspired me to work on a Docker image with all the Quicklisp-required foreign libraries baked into it. I think it will be helpful to me for easier testing, and maybe distributed builds. It should be helpful to others for testing everything in Quicklisp without the pain of gathering all the build requirements for its many projects.)

You should check out Douglas Katzman's lightning talk, "Self-modifying code (for fun and profit)". He's added a neat thing in SBCL where the system can be disassembled completely and reassembled into a new binary with various bits of optimization or instrumentation. 

There were many other great talks and discussions!

It's rejuvenating to hear about all the cool things people are working on. There's stuff people are making that you might make use of in your own projects, or inspiration to hack your own things to share with others.

Also: great weather, great city, fun excursion to Ronda, seeing old friends from past conferences, meeting new friends, putting online names to real-life faces, hearing directly from people who use Quicklisp. And Dmitri Fontaine told me about tic80, which my kid and I used to make a retro game in just a few days.

Next ELS conference is in Genova, Italy on April 1, 2019. Start planning today, and I'll see you there! / 2018-05-10T16:42:29