Bifurcated Rivets: From FB


Bifurcated Rivets: From FB

Hectic circle of relatives kitchen

Bifurcated Rivets: From FB

Not for Scots

Bifurcated Rivets: From FB

And this one

Bifurcated Rivets: From FB

Read this one

Electronics-Lab: SoundDuino 3

c51db665a6d43406669fe6369ca97877_originalThe electronics engineer and microcontroller programmer expert, Masih Vahida has launched his latest SoundDuino Arduino shield product: SoundDuino 3!

SoundDuino is a WAV Sound Player & Recorder Shield for Arduino. This sound shield let you record and play sound files to or from a Micro-SD memory card with all libraries and samples for the Arduino IDE.

“SoundDuino is a sound recorder and player that is able to play the sound files from the Micro-SD memory card or even record sounds to the memory with your desired file name. It supports FAT16 and FAT32 and you can easily copy your files into the memory and to play them, you only need to use the library that we give you with this shield and just send the file name that you want to play! Yes, very very easy!” Vahida explains.

This video shows the very first version of SoundDuino and some of its applications

The newest shield, SoundDuino3,  is based on NXP LPC2103 ARM7 32bit microcontroller and it can play 16 bit 48khz sound files with a very high quality. It also has audio input and output jacks, an onboard microphone as well and can work from 3.3v to 5v. SoundDuino fits nicely on an Arduino Uno and is compatible with any Arduino boards using pins GND, VCC, RX and TX. Moreover, the device is delivered with libraries and examples for Arduino IDE.

This project is now live on Kickstarter, check the campaign video

You can use this shield to announce numbers and add you own files into the memory. You can also extend the example code and have it read the text also.


SoundDuino 3 specifications:

  • Updated firmware, high quality audio
  • Automatic baudrate detection
  • Sound quality is Stereo 16 bit 48hkz (SoundDuino 1 was Mono 8 bit 48khz)
  • Super easy to use, new functions in library to announce the numbers .
  • More useful functions in the library
  • the sound quality is much much better than the last version
  • Small size
  • System voltage is 3.3v compatible with Arduino boards

With SoundDuino shield it seems easier to start building some great audio projects. You can follow the project updates and order your own SoundDuino 3 for $59 now from the crowdfunding campaign.

The post SoundDuino 3 appeared first on Electronics-Lab.

Electronics-Lab: Dual set point programmable thermostat

Programmable thermostats are cool things. They let you set the room temperature according to your schedule and will automatically make those adjustments for you. If you use them the way they’re intended to, they could be a great way to save on home energy costs. They work perfectly for people with fixed daily schedules. You can set one temperature during the time you are at home and to another when you are away. But what if your everyday routine is not the same? Then you have to manually adjust the temperature every time you are in and out. Ed Van Every was facing the same issue and he came up with a nice DIY solution for this. He wanted his place to be heated to 70ºF when it is occupied, and to 55ºF when it is not. So he made his own dual set point thermostat which allows him to implement his “working temp” with a single hit of a push button and his “away temp” with another push button.

DIY dual setpoint thermostat
DIY dual setpoint thermostat

Like most other DIY thermostats, Ed also used an Arduino board as the main brain of the thermostat and DHT22 for sensing ambient temperature and humidity. For controlling the heater, an electromechanical relay breakout board was used. A 16×2 character LCD displays the temperature setting that is currently active, its set-point value, the actual room temperature and humidity. In the event when the heater is turned on, an asterisk symbol * is displayed in the lower middle of the display indicating that the relay circuit is closed. The room temperature and humidity are refreshed every 2½ seconds and the LCD backlight automatically turns on for 60 seconds when a button is pressed on the thermostat. Ed also 3D printed a nice enclosure for his thermostat to give it a more professional look.

The post Dual set point programmable thermostat appeared first on Electronics-Lab.

Slashdot: WhatsApp Is Rolling Out Video Calls On Its Android App

WhatsApp appears to be rolling out its video calling feature for beta users of the Android app. The arrival of the feature was first spotted by Android Police, which found that an updated app interface caused some users of the beta builds of the application to be able to access video calling. TechCrunch reports: For those on a version of WhatsApp which includes video calling support, you're able to tap the call button or tap on a contact card to kick off a video call. In this case, a new dialog box will appear, offering the choice between a standard voice call and a video call. In addition, the call log will show which calls were made via video by annotating them with the camera icon, instead of the telephone icon. However, there isn't yet a way to call other WhatsApp users who don't also have video calling support. If you try to, WhatsApp defaults to a voice call. Android isn't the only platform where video calling has been switched on. Last week, some users on the WhatsApp beta for Windows Phone were also surprised to find that the feature was now functional. And in this case, it didn't require an app update -- indicating a server-side change could enable it. Some users have also reported seeing the feature on iOS.

Read more of this story at Slashdot.

BOOOOOOOM!: Dad Brings His Six-Year-Old Son’s Drawings To Life


The Instagram account “Things I have drawn” features the drawings of a six-year-old boy named Dom and the real-life counterparts, digitally crafted by his Photoshop wizard dad. See more hilarious images below! Map-Tube-CLI-0.20

Command Line Interface for Map::Tube::* map.

Recent additions: intero 0.1.19

Added by ChrisDone, Thu Oct 27 09:18:17 UTC 2016.

Complete interactive development program for Haskell

Recent additions: protolude 0.1.10

Added by sdiehl, Thu Oct 27 09:09:05 UTC 2016.

A sensible set of defaults for writing custom Preludes.

Recent additions: protolude 0.1.9

Added by sdiehl, Thu Oct 27 09:06:10 UTC 2016.

A sensible set of defaults for writing custom Preludes. DBIx-Fixture-Admin-0.14

facilitate data management by the fixtures

BOOOOOOOM!: Artist Spotlight: Andy Dixon


Paintings by one of our favourites, Vancouver-born, New York city-based artist Andy Dixon. Click here for previous posts. More images from “Expensive Things II” below.

BOOOOOOOM!: Illustrator Spotlight: Laura Liedo


A selection of work by illustrator Laura Liedo. More images below.

Recent additions: yesod-form 1.4.8

Added by MichaelSnoyman, Thu Oct 27 08:18:28 UTC 2016.

Form handling support for Yesod Web Framework CallBackery-0.8.1

CallBackery is a Mojolicious+Qoodoo Framework for building Web Applications

Hackaday: One Home Made NES To Rule Them All

The Nintendo Entertainment System, or Famicom depending on where in the world you live, is a console that occupies a special place in the hearts of people of a certain age. If you lived in a country that Nintendo didn’t ship its consoles to in the late ’80s and early ’90s though, you might think that it would be an experience that would have passed you by. Eastern Europeans for instance didn’t officially meet Mario for years.

A Pegasus NES clone. Ktoso the Ryba [Public domain], via Wikimedia Commons.
A Pegasus NES clone. Ktoso the Ryba [Public domain], via Wikimedia Commons.
Fortunately for them there was an industry of Chinese and Taiwanese clone makers whose products were readily available in those markets. For the countries without official Nintendo products it is these consoles and their brand names that have achieved cult gaming status rather than the real thing.

In Poland, [phanick] wanted to recreate his youth by building his own clone console (Polish Language, English translation via Google Translate). His chosen target was the Pegasus, the Taiwanese NES clone that was the must-have console for early ’90s Poles.

But he wasn’t just satisfied with building a Pegasus clone. Along the way the project expanded to include support for 72-pin NES cartridges as well as the 60-pin Pegasus ones, and the ability to play both PAL and NTSC games. For this dual-system support he had to include both sets of processor and graphics chip variants, along with logic to switch between them. He goes into some detail on the tribulations of achieving this switch.

The result is a very impressive and well-executed piece of work. The PAL games have a letterbox effect with black bars at top and bottom of the screen, while the NTSC games have slightly washed-out colours. But if you were a gamer of the day you’ll see these as simply part of the genuine experience.

He’s posted a descriptive video which we’ve embedded below the break, but with non-English commentary. It is however still worth watching even without understanding the audio, for its view of the completed board and gameplay.

We’ve featured a lot of console projects over the years, but many of them have been emulators like this Nintendo-inspired example based on a Raspberry Pi. This project stands apart from the emulators, as far as we can find in our archives nobody else has cloned the original, and certainly not with support for so many variants.

[Thanks pmilian]

Filed under: nintendo hacks

Open Culture: What Happens When Blade Runner & A Scanner Darkly Get Remade with an Artificial Neural Network

Philip K. Dick, titling the 1968 novel that would provide the basis for Blade Runner, asked whether androids dream of electric sheep. But what goes on in the “mind” of an artificial intelligence designed specifically to watch movies? Terence Broad, a computing researcher at Goldsmiths, University of London, took on a form of that question for his master’s dissertation, using “artificial neural networks to reconstruct films — by training them to reconstruct individual frames from films, and then getting them to reconstruct every frame in a given film and resequencing it.”

Neural networks” sounds like a term straight out of one of Dick’s influential science-fiction novels, but you’ve almost certainly heard quite a bit about them in recent years of real life. A neural network, in the words of neurocomputer pioneer Dr. Robert Hecht-Nielsen, “is a computing system made up of a number of simple, highly interconnected processing elements, which process information by their dynamic state response to external inputs.” These systems, in other words, imitate the problem-solving methods of the human brain as we currently understand them, and can, when provided with suitable data, “learn” from it.

One thinks less of the Replicants, Blade Runner‘s lethally engineered superhumans, than of Number 5, the artificially intelligent robot star of Short Circuit (co-designed, incidentally, by Blade Runner‘s “visual futurist” Syd Mead), with his constant demands for “input.” When it came out in the mid-1980s, that goofy comedy once looked like by far the more successful film, but over the intervening three decades Ridley Scott’s one-time bomb has become perhaps the most respected work of its kind. “The first ever film remade by a neural network had to be Blade Runner,” Terence Broad told Vox, pointing in his explanation of his project to the movie’s prescient treatment of the theme “that the task of determining what is and isn’t human is becoming increasingly difficult, with the ever-increasing technological developments.”

Dick, as his generations of readers know, had deep concerns about the difference between the real and the unreal, and how human beings can ever tell one from the other. He tackled that issue again, from a very different angle, in his 1977 novel A Scanner Darkly. Richard Linklater turned that book into a movie almost thirty years later, one which Broad also fed as input into his neural network, which then attempted to reconstruct it. Though still thematically appropriate, its colorful rotoscoped animation posed more of a challenge, and “the results are less temporally coherent than the Blade Runner model.” But “on the other hand, the images are incredibly unusual and complex, once again producing video with a rich unpredictability.”

At the top of the post, you can watch Broad’s Blade Runner-trained neural network reconstruct Blade Runner‘s trailer, and below that his A Scanner Darkly-trained neural network reconstruct A Scanner Darkly‘s trailer. Curiosity demanded, of course, that Broad let a neural network trained to watch one film have a go at reconstructing the other, and just above we have the A Scanner Darkly-trained neural network’s reconstruction of Blade Runner. He’s also given Scott’s famous 1984-themed Super Bowl Apple ad and Godfrey Reggio’s Koyaanisqatsi the neural-network treatment. We read so often, these days, about artificial intelligence’s growing ability to out-think, out-work, and one day even out-create us. What on Earth, the Philip K. Dicks of our day must wonder, will the neural networks come up with when they can finally out-watch us?

Related Content:

Watch an Animated Version of Ridley Scott’s Blade Runner Made of 12,597 Watercolor Paintings

Philip K. Dick Previews Blade Runner: “The Impact of the Film is Going to be Overwhelming” (1981)

Ridley Scott Talks About Making Apple’s Landmark “1984” Commercial, Aired 30 Years Ago on Super Bowl Sunday

Watch Sunspring, the Sci-Fi Film Written with Artificial Intelligence, Starring Thomas Middleditch (Silicon Valley)

Artificial Intelligence Program Tries to Write a Beatles Song: Listen to “Daddy’s Car”

Two Artificial Intelligence Chatbots Talk to Each Other & Get Into a Deep Philosophical Conversation

Based in Seoul, Colin Marshall writes and broadcasts on cities and culture. He’s at work on a book about Los Angeles, A Los Angeles Primer, the video series The City in Cinema, the crowdfunded journalism project Where Is the City of the Future?, and the Los Angeles Review of Books’ Korea Blog. Follow him on Twitter at @colinmarshall or on Facebook.

What Happens When Blade Runner & A Scanner Darkly Get Remade with an Artificial Neural Network is a post from: Open Culture. Follow us on Facebook, Twitter, and Google Plus, or get our Daily Email. And don't miss our big collections of Free Online Courses, Free Online Movies, Free eBooksFree Audio Books, Free Foreign Language Lessons, and MOOCs.

ScreenAnarchy: Eureka Unveils FROM CALIGARI TO HITLER, CREEPY, VARIETÉ and More for January

One of our favourite distributors, Eureka! Entertainment, has announced its January slate of home releases, and as usual it boasts an eclectic and enticing range of diverse titles from around the world. Five new titles were announced, three of which will be part of their prestigious Masters of Cinema series.   On 16 January, Robert Wiene's The Cabinet of Dr. Caligari (spine no.92) will be re-issued in a limited edition 2-disc steelbook edition, now including Rüdiger Suchsland’s excellent 2014 documentary, From Caligari to Hitler: German Cinema in the Age of the Masses - well worth a double dip for those who already have the regular release.    23 January sees Kiyoshi Kurosawa’s fantastically unsettling Creepy arrive on dual-format Blu-ray and DVD. The director of Cure...

[Read the whole post on]

MetaFilter: The Weaponisation of the Working Class

The moment we get too uppity and start demanding anything other than commitments to the further brutalisation of foreign people at the hands of the state, they will turn on us just as quickly as they do on our non-native neighbours. We will be shifted from the frame where we are honest hard working salt of the earth noble peasants, to the frame where we are obese thick scroungers suitable only to be mocked on a Channel 5 docusoap.
McDuff on how the fetishisation of the very real concerns of the (white) working class in British politics doesn't extend outside of providing cover for racists. CallBackery-0.8.0

CallBackery is a Mojolicious+Qoodoo Framework for building Web Applications Test-WWW-WebKit-0.04

Perl extension for using an embedding WebKit engine for tests

Recent additions: hylide

Added by sleexyz, Thu Oct 27 07:50:44 UTC 2016.

WebGL renderer for livecoding shaders with Hylogen

BOOOOOOOM!: Photographer Spotlight: Kevin Faingnaert


Belgium-based photographer Kevin Faingnaert returns to the Faroe Islands (the same place he shot Føroyar) to document Ólavsøka, a national holiday where people gather at Tórshavn (the smallest capital in the world). See more images from “Saint Olaf’s Wake” below.

Slashdot: Rich People Pay Less Attention To Other People, Says Study

An anonymous reader quotes a report from Business Insider: In a small recent study, researchers from New York University found that those who considered themselves in higher classes looked at people who walked past them less than those who said they were in a lower class did. The results were published in the journal of the Association for Psychological Science. According to Pia Dietze, a social psychology doctoral student at NYU and a lead author of the study, previous research has shown that people from different social classes vary in how they tend to behave towards other people. So, she wanted to shed some light on where such behaviors could have originated. The research was divided into three separate studies. For the first, Dietze and NYU psychology lab director Professor Eric Knowles asked 61 volunteers to walk along the street for one block while wearing Google Glass to record everything they looked at. These people were also asked to identify themselves as from a particular social class: either poor, working class, middle class, upper middle class, or upper class. An independent group watched the recordings and made note of the various people and things each Glass wearer looked at and for how long. The results showed that class identification, or what class each person said they belonged to, had an impact on how long they looked at the people who walked past them. During Study 2, participants viewed street scenes while the team tracked their eye movements. Again, higher class was associated with reduced attention to people in the images. For the third and final study, the results suggested that this difference could stem from the way the brain works, rather than being a deliberate decision. Close to 400 participants took part in an online test where they had to look at alternating pairs of images, each containing a different face and five objects. Whereas higher class participants took longer to notice when the face was different in the alternate image compared to lower classes, the amount of time it took to detect the change of objects did not differ between them. The team reached the conclusion that faces seem to be more effective in grabbing the attention of individuals who come from relatively lower class backgrounds.

Read more of this story at Slashdot.

MetaFilter: The Failure of Adolesence

"Progressive societies cared for their children by emphasising play and schooling; parents were expected to shelter and protect their children's innocence by keeping them from paid work and the wrong kinds of knowledge ... adolescence soon became a vision of normal development that was applicable to all youth – its bridging character (connecting childhood and adulthood) giving young Americans a structured way to prepare for mating and work. In the 21st century, the bridge is sagging at both ends as the innocence of childhood has become more difficult to protect, and adulthood is long delayed."

All quotes from Aeon piece linked above:

"Hall's book would provide intellectual cover for the two most significant institutions that Americans were creating for adolescents: the juvenile court and the democratic high school. Hall made the transformational period of adolescence as important as childhood, but adolescents were also viewed as more problematic than younger children, and their potential for misbehaviour more dangerous."

"On a much grander scale than the juvenile court, the publicly financed comprehensive high school became possibly the most distinctly American invention of the 20th century. ... By the early 1930s, half of all US youth between 14 and 17 was in school; by 1940, it was 79 per cent: astonishing figures when compared with the single-digit attendance at more elite and academically focused institutions in the rest of the Western world."

"If high schools helped parents to handle their teenage children, the peer society of school helped adolescents handle their parents, since it provided them with an excuse for staying out after school and on weekends. "

"High schools, long a glory of US education and a product of democratic culture, had lost their central social role. Graduation, once the final step for most Americans on the road to work and steady relationships leading to marriage, no longer marked a significant end point on the way to maturity."

MetaFilter: Kesha, Interrupted

A profile of the artist by Taffy Brodesser-Akner [content warning: sexual assault]

Hackaday: Hackaday Prize Entry: Smart Bed Lighting

[Scott] is building motion-activated lights for under the bed for his Hackaday Prize entry. Admittedly, there are fancier projects for the ‘Assistive Technology’ portion of the prize, but this project helps anyone who would otherwise stumble around in the dark. And as [Scott] jokes, that includes a number of underserved demographics including accident prone people, children afraid of the dark, drunks, and, “drunk accident prone children who are afraid of the dark”.

Although the idea of mounting LEDs under a bed is simple, the devil is in the details. [Scott] is using a PIR sensor to turn these hidden lights on and off when getting into or out of bed. An RTC ensures the LED strip will only be on during the desired hours. In [Scott]’s case, this means from 9PM to 7AM. When movement is detected at the foot of the bed, the lights remain on for about two minutes.

This is a fairly simple project compared to some of the entries we’ve seen in the Hackaday Prize, but it does have a purpose. It’s a great way to scare a child into believing there are monsters under a bed, and it every so slightly reduces the chances of a drunk stubbing their toe. [Scott] produced a video for this project, you can check that out below.

Filed under: The Hackaday Prize

MetaFilter: GifCities!

To celebrate "20 years of preserving the web", the Internet Archive has unveiled GifCities – The Geocities Animated GIF Search Engine.

To date, the project contains 4,500,000 animated GIFs (1,600,000 unique images). So wave your flag high, ignore any "Under Construction" signs, don't forget to play with the cats and dogs, and happy searching!

Planet Haskell: Leon P Smith: Announcing Configurator-ng 0.0

I’m pleased to announce a preliminary release of configurator-ng, after spending time writing documentation for it at Hac Phi this past weekend. This release is for the slightly adventurous, but I think that many, especially those who currently use configurator, will find this worthwhile.

This is a massively breaking fork of Bryan O’Sullivan’s configurator package. The configuration file syntax is almost entirely backwards compatible, and mostly forwards compatible as well. However, the application interface used to read configuration files is drastically different. The focus so far has been on a more expressive interface, an interface that is safer in the face of concurrency, and improved error messages. The README offers an overview of the goals and motivations behind this fork, and how it is attempting to satisfy those goals.

I consider this an alpha release, but I am using it in some of my projects and it should be of reasonable quality. The new interfaces I’ve created in the Data.Configurator.Parser and Data.Configurator.FromValue modules should be pretty stable, but I am planning on major breaking changes to the file (re)loading and change notification interfaces inherited from configurator.

Documentation is currently a little sparse, but the README and the preliminary haddocks I hope will be enough to get started. Please don’t hesitate to contact me, via email, IRC (lpsmith on freenode), or GitHub if you have any questions, comments, ideas, needs or problems.

MetaFilter: Arrrr

Iceland's Pirate Party looks likely to take the country's election next weekend - "If you're worn out and depressed with the US election campaign, ponder what's going on in Iceland for a moment. The country's Pirate Party, founded less than four years ago by a group of activists, anarchists, and hackers, is poised to upend Icelandic politics with an Oct. 29 general-election victory."

Slashdot: New Study Shows HIV Epidemic Started Spreading In New York In 1970, Clears the Name of 'Patient Zero'

An anonymous reader quotes a report from NBC News: A new genetic study confirms theories that the global epidemic of HIV and AIDS started in New York around 1970, and it also clears the name of a gay flight attendant long vilified as being "Patient Zero." Researchers got hold of frozen samples of blood taken from patients years before the human immunodeficiency virus (HIV) that causes AIDS was ever recognized, and teased out genetic material from the virus from that blood. They use it to show that HIV was circulating widely during the 1970s, and certainly before people began noticing a "gay plague" in New York in the early 1980s. "We can date the jump into the U.S. in about 1970 and 1971," Michael Worobey, an expert on the evolution of viruses at the University of Arizona, told reporters in a telephone briefing. Their findings also suggest HIV moved from New York to San Francisco in about 1976, they report in the journal Nature. Their findings confirm widespread theories that HIV first leapt from apes to humans in Africa around the beginning of the 20th century and circulated in central Africa before hitting the Caribbean in the 1960s. The genetic evidence supports the theory that the virus came from the Caribbean, perhaps Haiti, to New York in 1970. From there it spread explosively before being exported to Europe, Australia and Asia. The Worobey team also sequenced samples of virus taken from Gaetan Dugas, a Canadian flight attendant named as "Patient Zero." Dugas died in 1984 and stunned researchers when he told them he'd had about 250 sexual partners a year between 1979 and 1981, although it later became clear that was not uncommon. The sequences make it clear he was a victim of an epidemic that had already been raging, and not its originator, Worobey said. "It's shocking how this man's name has been sullied and destroyed by this incorrect history," said Peter Staley, a former Wall Street bond trader who became an AIDS activist in New York in the 1980s. "He was not Patient Zero and this study confirms it through genetic analysis," Staley told NBC News. "No one should be blamed for the spread of viruses," Worobey said.

Read more of this story at Slashdot.

Penny Arcade: News Post: Youth Adjacent

Tycho: I really like the Nintendo Switch commercial, which places me at odds with Mr. Gob Dobolina, who derives from it only shame and the sense, the unavoidable sense, that the meat in his chest keeping him alive has a shelf date, like all other meat. As stated: I like the commercial.  There are many stories presented, and you are supposed to intersect with one or more of them, but I’m a grown man who plays games in the dark and I’m in there somewhere.  Typically the story that gets told about these products doesn’t look like my experience at all, it has an…

Penny Arcade: News Post: The Surface Studio!

Gabe: If you have not heard already, Microsoft just announced a new device called the Surface Studio. It’s essentially a Surface computer for your desktop. From what I understand, you can go to any Microsoft store today and actually play with one. It’s a big beautiful screen on this slick armature that lets you adjust it from a normal monitor to something more like a drafting table for drawing on. I get questions about Surface devices and drawing all the time and I am sure this one will be no different. In fact I can already see tweets coming in asking what I think. So If you’re curious what…

Hackaday: Physics or Phiction?

Do you remember Gilligan’s Island? For many people of a certain age, “The Professor” was our first impression of what a scientist was like. Even in those simpler times, though, you probably couldn’t find anyone like the professor; a jack of all trades, he sort of knew everything about everything (except, apparently, how to make a boat).

Real scientists tend to hyper-specialize. Getting grant money, publication pages, and just advancing the state of the art means that you get more and more focused on more obscure things. It is getting to the point that two scientists in the same field may not be able to really understand each other. You see the same thing in engineering to some degree. Not many digital designers can talk about the frequency dependence of Early effect in bipolar transistors, but not many device gurus can talk intelligently about reservation techniques for superscalar CPUs.

There’s now a website that lets you guess if a physics paper title is real or if it made up jibberish. The site, snarXiv, gets the real titles from arXiv, the site that contains many preprint papers. For example, we were asked to guess if “Brane Worlds with Bolts” was a real paper or if it was “Anthropic Approaches to the Flavor Problem.” (For the record, it was the one about branes.) Give it a whirl!

Filed under: news

Slashdot: Delta Now Lets You Track Your Baggage In Real-Time

Let's face it, tracking down a lost bag at the airport is a pain-in-the-ass. While airlines will often compensate you with money and new clothes for your troubles, the experience is certainly not pleasant. Delta is now attempting to further reduce the number of lost bags through its real-time luggage tracker in the latest version of its mobile app. The Next Web reports: The feature apparently cost $50 million to build. It allows you to see where your stuff is -- provided that it's at one of the 84 airports that support Delta's new tracking tech. Here's how it works. All bags will get a Radio Frequency Identification (RFID) tag. This allows Delta to track them in real-time using radio waves. Scanners positioned throughout the baggage system will allow Delta to monitor where the bag is, and relay that information to the passenger. Delta has traditionally been one of the best airlines when it comes to handling baggage. During 2012, it lost only 200,000 bags. That sounds like a lot, but bear in mind it carried 98 million passengers during the same period. You can try the feature on your next Delta flight by grabbing the app from Google Play and the App Store.

Read more of this story at Slashdot.

Paper Bits: I keep watching this, and every time I break out in hysterical...

I keep watching this, and every time I break out in hysterical giggles. Turn the sound on. You won’t regret it.

Instructables: exploring - featured: Nerf sledgefire mod guide

Hello, here is what you needA screwdriverA container for your screws....that's it The internals of the stock blaster Here are the internals. Look at that plunger tube Minimization Take the stock out BOOM done. Now you have a pistol shotgun Shell ejection mod Move the return spring in the ...
By: tinyhooman

Continue Reading »

Slashdot: Apple Delays AirPods Beyond Original 'Late October' Window

An anonymous reader quotes a report from Ars Technica: Apple's new wireless, $180 AirPods have less than a week to meet their original shipping target of "late October," and now the company has confirmed that such a launch is officially off the table. A Wednesday statement, given to Ars Technica just one day ahead of the company's latest Mac-related press event, confirmed Apple's decision to delay the wireless headphones' launch. In the statement, Apple tells Ars that the company "needs a little more time before AirPods are ready for our customers." "The early response to AirPods has been incredible," the Apple statement reads. "We don't believe in shipping a product before it's ready." Apple declined to offer any estimate or release window information about when to expect the AirPods' official launch.

Read more of this story at Slashdot.

Instructables: exploring - featured: Extreme Pumpkin Carving: Frankenstein Style

Do you feel like your jack-o-lantern missing something? Do you want to carve your Halloween pumpkin in an awesome new way? If so, then this instructable is for you. In this instructable, I will show you how to carve a pumpkin using high voltage. The high voltage creates cool looking marks on the...
By: tanner_tech

Continue Reading »

Instructables: exploring - featured: Scary Eyes

I had read about an idea of using a toilet paper roll and a glow stick to make a scary eyed decoration to put in a bush but I didn't like the idea of using a new glow stick every night plus I wanted something waterproof and big so I came up with this.Here are the parts needed.Transparent plastic bot...
By: James And-JoniD

Continue Reading »

BOOOOOOOM!: Illustrator Spotlight: Jose Mendez


A selection of new work from London-based illustrator Jose Mendez! Click here for previous post. More images below.

All Content: CIFF 2016: "Sieranevada," "Olli Mäki" are Festival Favorities


The Chicago International Film Festival is more than just an occasion for one of the largest and longest running North American fests to display its latest discoveries. It's also an event where audiences and jury members alike dive into a pool of endless cinematic ideas and leave with some unexpected favorites. (To see some of ours, all of our CIFF 2016 coverage can be found here.)

The festival started on October 13 with a screening of Damien Chazelle's widely-adored "La La Land," which brought Chazelle back to the city along with supporting actress Rosemarie Dewitt (who shared that it was her first time in Chicago). The two spoke at a pre-screening cocktail reception and then introduced a screening on the film, setting a strong precedent for the quality that was to come, projects made around the world by many filmmakers due to receive a warm Chicago movie-lover response.

Throughout its two weeks the festival's schedule has been loaded with filmmaker appearances and important events, whether presentations about huge film personalities like Geraldine Chaplin, honored in a tribute on October 15, or a conversation with "12 Years a Slave" director Steve McQueen on October 22. Director Peter Bogdanovich came to the festival on October 16 to receive a tribute, and then presented a screening the next day of his 1981 film, "They All Laughed." Danny Glover accepted the Visionary Award on October 20 while also in town to promote his new film, the Nigerian Ebola drama "93 Days." On Sunday, October 23, Taraji P. Henson joined the festival to discuss her latest project, the heavily anticipated "Hidden Figures" in a conversation with Regina Taylor. That same day, director Julie Dash appeared at the festival to present a new restoration of her 1991 film, "Daughters of the Dust."

A great facet of CIFF is that it runs full speed until the very end. Tonight even features a screening of the highly-acclaimed drama "Moonlight," with director Barry Jenkins, writer Tarell Alvin McCraney and stars Andre Holland and Naomie Harris scheduled to attend. And of course, there's the "Best of the Fest" line-up, shared below, to see award winners before the festival wraps up. The festival will end on a fittingly big note tomorrow night with a closing ceremony screening of "Arrival," the new sci-fi drama from director Denis Villeneuve that features a highly-acclaimed performance by Amy Adams

For a festival with numerous essential events, the awards ceremony on October 22 was certainly a potent designation of the strong narratives and documentaries, features and shorts that the occasion had to offer. 

The International Competition Jury included filmmakers and actors from around the world, as led by Geraldine Chaplin. Their pick for the Gold Hugo was family drama "Sieranevada" by Cristi Puiu [pictured above], who gave back to the festival with a hilarious acceptance video that featured him sitting, mostly in silence, sometimes ruminating on whether he should continue directing or take up painting. It was a perfect blend of dry comedy and full character that, along with the Best Director award given to Puiu, made "Sieranevada" shoot to the top of my must-see list. ["Sieranevada" screens one more time on Thursday, October 27 at 7:45pm. To order your tickets, click here.]

A Silver Hugo Special Jury Prize was given to Asghar Farhadi's "The Salesman," while other films were recognized for their achievement in specific categories. Adrian Titieni received the Best Actor award for writer/director Cristian Mungiu's "Graduation," while Rebecca Hall was given the Best Actress designation for her work as Christine Chubbuck in Antonio Campos' new film, "Christine." Mungiu himself won the Best Screenplay honor for "Graduation." Recognition for Best Cinematography and Best Art Direction went to "The Last Family," a particular favorite of the jury and one that had them specifically staying for the Q&A to see from director Jan P. Matuszyński how he pulled off making the film. ["The Salesman" screens one more time on Wednesday, October 26 at 5:30pm. To order your tickets, click here.]

I had the honor myself of serving on the jury for this year's New Directors Competition, along with film producer Helen du Toit and cinematographer Patricio Castilla. We saw a roster of 15 films that featured debuts or sophomore efforts from exciting new talents, some of them having previously toured through CIFF with shorts in earlier years. The unanimous winner from my jury was "The Happiest Day in the Life of Olli Mäki," a burst of cinephilia joy from director Juho Kuosmanen, which might be one of the sweetest films you'll see in years. Set in 1960s Finland, filmed with digital cinematography and then given a brilliant black & white look (as if it were a film from 1963 digitally restored), Kuosmanen's first feature displays immense talent with the camera, not just in style but in using long takes that are energetic but never showy. The narrative told with such technology is no small feat either: a finely-tuned love story of a man who is being raised to become Finland's world champion boxer, but is starting to find a much more rewarding happiness in the time he spends with his girlfriend. "The Happiest Day in the Life of Olli Mäki" is one of those films that stays with you long after, using character, tone and heart for a walloping effect. It's also the type of festival title that could have competed in the main competition and likely won the big prize. ["The Happiest Day in the Life of Olli Mäki" screens one more time at on Thursday, October 27 at 5:30pm. To order your tickets, click here.]

Along with "The Happiest Day in the Life of Olli Maki," my New Directors Competition jury also gave a Silver Hugo to the German film "Fado" from debut director Jonas Rothlaender, a previous favorite talent of the fest. His movie, which displays the toxic characteristics of jealousy in a loving relationship, was not an easy pick due to its very sensitive focus (one that anyone could be actively ready to reject). But Rothlaender's ability to cinematically get us into the mind of a character without a shred of campiness was very impressive. For all of the films that flatly depict obsession or jealousy, "Fado" treats these common, intense feelings with more nuance than a mere monster movie. 

For the past three years, the New Directors Competition also includes a recipient for the Roger Ebert Award, which goes to a new filmmaker with a fresh vision who recognizes Roger's famous ideology about movies: they are a machine that generates empathy. That experience certainly came to my fellow jury members and myself when we saw "Kills on Wheels," a Hungarian aciton-comedy-thriller about wheelchair assassins, as played with a loving but non-special approach to characters rarely seen on the silver screen. Writer/director Atilla Till has made quite the genre treat for the audience that seeks it out, especially for those looking for storytelling that mixes Hollywood energy with a completely warming sense of empathy. 

There were other highlights, of promising talent and new ideas, that particularly stuck out: "Amerika Square" comes together like a non-irritating version of Paul Haggis' "Crash," and displayed how Greek director Yannis Sarkaridis can succinctly express different characters—a facet that would particularly shine on a great TV show; Shahrbanoo Sabat's "Wolf and Sheep" is an unforgettable piece of atmosphere that presented an Afghan village lost in time, using a very confident approach to editing that resisted narrative or even knowing characters by name, forcing us to take in their world through gorgeous camera framing and unpredictable, very low-key events; "Alba," from Ecuadorian director Ana Christina Barragan, brings viewers into the perspective of a young girl navigating the traumas of a dying mother and trying to fit in with mean kids at school; Iranian director Adel Yaraghi's "Finals" creates high stakes out of a student resisting to take his life-deciding academic tests, and boasted some very simple but articulate camera usage, while also a screenwriting credit from the late Abbas Kiarostami that proved to be more essential to co-writer Yaraghi's film than one would hope. A personal favorite from this batch is "Mara'akame's Dream" from Mexican co-directors Federico Cecchetti and Tsikuri Temai, which takes a common story of the culture clash between old and new to vivid heights with cinematography and sense of location, showing how a father and rebellious son from a tradition Mexican village stick out when they travel to a loud and massive Mexico City. 

Other winners of special note from other categories include: "Heartstone," an Icelandic drama about two young men's sexuality that received the Gold Q Hugo; the Gold Hugo-winning documentary "Samuel in the Clouds" and Andrei Konchalovsky's "Paradise," which received this year's Founder's Award from Michael Kutza. This doesn't even include the batch of enticing narrative and documentary shorts, or the Audience Award winner, the latter which is TBD as of publishing. But with this festival's emblematically strong lineup, the Chicagoan's majority favorite could be a film of any size. 

For more information of the "Best of the Fest" lineup, click here. The Chicago International Film Festival runs from October 13-27. To read our complete coverage of the festival this year, click here.

All Content: Writer Profiles: Simon Abrams


We have some amazing writers, film critics and video essayists at, and as we head into the home stretch of this year, we would like to remind you of some of their work. Although we have many talented critics who contribute reviews and articles occasionally during the year, these particular profiles will highlight the work of our critics who have contributed the most reviews and/or video essays. Here is our critic Simon Abrams, our revered horror expert (check out his recent essay on why 2016 has proven to be a year of adventurous horror cinema).Chaz Ebert, publisher

Thoughts on 2016 (so far):

I don't know if I can diagnose the year as a whole, but I can say what I'd like to see more of: more coverage of Asian films. I'm sick of seeing Asian movies get treated to a minimum of coverage simply because they're distributed as niche products for an insignficant audience. We're talking about popular movies, like "Shin Godzilla," "The Mermaid," and "Train to Busan," stuff that has found its audience despite their minuscule releases. There have been a lot of strong, compelling Asian films released this year, but only a few of them have gotten the attention they deserve. I hope that changes.

Excerpt from Simon's Movie Love Questionnaire (read the full Q&A here):

Volunteering at the New York Asian Film Festival (NYAFF) in the summer of 2004 [was an experience I'll never forget]. I loved working with and getting to know the festival programmers, and got to watch a lot of fun movies for free. That was a real treat in spite of the fact that the Anthology Film Archives' air-conditioning wasn't working, and it was early June. Still, the movies, and fascination I've since developed with films from Asian countries was fostered at NYAFF. I can still remember conversations I had at that year's festival. And I remember the seats (blue, standalone bucket seats). And the little aluminum cans of Mr. Brown coffee, and the bags of shrimp chips I used to sell. And the experience of seeing my first film directed by Johnnie To ("Running on Karma" blew me away). And what it was like to watch movies on the side of the auditorium for the first time instead of center-middle (my current preference) or all the way in the back (my former preference).

Simon's reviews from 2016 (so far):

Monster Hunt
The Witch
The Mermaid
Road Games
The Boy and the Beast
My Golden Days
11 Minutes
Hardcore Henry
My Big Night
Green Room
Dragon Inn
The Asian Connection
Kill Zone 2
The Wailing
Teenage Mutant Ninja Turtles: Out of the Shadows
The Last Heist
The Neon Demon
The Purge: Election Year
Our Little Sister
The Blackout Experiments
The Mind's Eye
Sun Choke
I Am Not a Serial Killer
Mia Madre
Yoga Hosers
Operation Avalanche
The Greasy Strangler
Phantasm: Ravager
Voyage of Time: The IMAX Experience
Shin Godzilla

Check out all of Simon's reviews and interviews here.

TheSirensSound: New track - Cold Car by The Edward Furlongs

The Edward Furlongs are a New Jersey-based endeavor in American music, comprised of Dan Gugger and Nick Afflitto. The project is a tip of the hat to the pioneers before them, a reflection of their collective experiences and a bullish reaction to the state of modern music.

Although Dan and Nick grew up playing music in the same thriving New Jersey music scene, they didn't meet until performing together on the Vans Warped Tour in the summer of 2009. After spending several years performing music for other bands, they decided to create music of their own, with a few core principals in mind.

The most significant of these is the idea that there is a void in modern music that yearns to be filled. It is is a composite of old and new, a return to the clarity and simplicity of rock music from decades past while reflecting the experiences of those living in the world as it is today. If the band achieves its ultimate goal, the music should reflect a desire for something simple and familiar, but modern and unique; these are candid recordings that are, if anything, under-processed by today's standard but hold honesty and individuality that honors both the musicians creating it and the people and experiences that have made their lives better.

All Content: Writer Profiles: Peter Sobczynski


We have some amazing writers, film critics and video essayists at, and as we head into the home stretch of this year, we would like to remind you of some of their work. Although we have many talented critics who contribute reviews and articles occasionally during the year, these particular profiles will highlight the work of our critics who have contributed the most reviews and/or video essays. Here is our critic Peter Sobczynski, our master of satire.Chaz Ebert, publisher

Thoughts on 2016 (so far):

If the success of "The Shallows" tips studios to the fact that doing that kind of lean filmmaking is effective, rather than trying to blow away audiences every six seconds, I for one would be a happy camper.

Excerpt from Peter's Movie Love Questionnaire (read the full Q&A here):

My father was definitely a movie fan but his tastes tended to gravitate towards older films that he enjoyed when he was younger—World War II epics, programmers featuring the adventures of Charlie Chan and Abbot & Costello and musicals—and was somewhat less adventurous when it came to more contemporary fare. (After sitting through "Blue Velvet"—a long story involving lies, betrayal and an ice show—he turned to me and sincerely asked "Uh, the stuff that people were laughing at—was that supposed to be funny?") My mother has never been much of a movie person—the list of classics that she has either dismissed entirely or never even seen continues to blow my mind—but she, strange as it may seem, probably had more influence on my future taste because every once in a while, something would pop up on the 3:00 Movie on Channel 7 and she would make sure that I watched it because she thought I would enjoy it. As a result, at the age of 5 or so, I was watching and digging the likes of "Duel," "Help," "The Girl Most Likely To" (a hilarious Joan Rivers-penned TV movie with Stockard Channing as an ugly duckling who becomes a beautiful swan via plastic surgery and kills her former tormentors) and "The Producers." (I am convinced that "Easy Rider" was another one but she denies it.) That said, both of them encouraged my ever-growing fascination with film as a child in all imaginable ways—driving me to theaters, picking up copies of "Variety" on the newsstand and not flipping out when their son decided to attempt to make a living out of reviewing movies.

Peter's reviews from 2016 (so far):

The Masked Saint

13 Hours: The Secret Soldiers of Benghazi


The Finest Hours
Jane Got a Gun
Nina Forever
London Has Fallen
The Measure of a Man
Precious Cargo
Mother's Day
The Darkness
The Dresser
Therapy for a Vampire
De Palma
The Infiltrator
Hillary's America: The Secret History Of The Democratic Party
Lights Out
Sharknado 4: The 4th Awakens
Into the Forest
Hell or High Water
Beauty and the Beast
Asura: The City of Madness
Keeping Up with the Joneses

Check out all of Peter's reviews and interviews here.

TheSirensSound: New song - The Wait by WANHA

The winter is almost upon the Nordic countries. Time to dive into the darkness with WANHA. This is a project of Joni Vanhanen, a profilic producer/singer/hiphop-artist from Jyväskylä, Finland, known for his versatility above all. In addition to being one of the most respected underground hiphop producers in Finland he has worked with all kinds of music from metal to pop.

WANHA combines all of these influences with surprising ease. The Wait is a slice of trippy downtempo electronica, as dark as the northern days and cold as the nights, with haunting, pitch-shifted vocals that add an even more gripping tone to the distinctively Nordic song. WANHA is working on his debut album, so expect to hear more music from him very soon.

TheSirensSound: New song - Hounds by War Nurse

War Nurse is a union of imagined and real. War Nurse is of no fixed address, of no material world.Festering through psychic cracks, bracing for escape, we look to bring struggle to the forefront. Tension is palpable. Rallying behind cries for power, War Nurse brings no glory. Unified delivery ascending and rupturing with no pause. There is no competition, there is no copy, the copy is the dream.

Hounds is a weapon reaching desperately through time, disrupting normal, reeking of causality, displacing the reconciliation of thoughts and actions. The very historicity of safety and security are at once called into question with a similar note of terminal simplicity. Hope is simultaneously lost and understood to be nonexistent. It is not a worldly possession to be had; it is not an existentially reconcilable concept. There is no hope. There is no home. You are but one of the hounds.

War Nurse 

Instructables: exploring - featured: Doctor Duct-Tape & Nurse Superglue: The unusual First Aid team

You want to go hiking or camping ? Maybe you move into your first own home or a zombie apocalypse has broken out? One of the things you should definitely take with you is duct tape and some superglue. In addition to repairing items, the two can also very well protect wounds and in some cases even sa...
By: Schrottratte

Continue Reading »

Hackaday: Retrofitting Smoke Alarms With Bluetooth

Everybody should have a few smoke alarms in their house, and everyone should go check the battery in their smoke alarm right now. That said, there are a few downsides to the traditional smoke alarm. They only work where you can hear them, and this problem has been solved over and over again by security companies and Internet of Things things.

Instead of investing in smart smoke alarms, [Johan] decided to build his own IoT smoke alarm. It’s dead simple, costs less than whatever wonder gizmo you can buy at a home improvement store, and reuses your old smoke alarm. In short, it’s everything you need to build an Internet-connected smoke alarm.

Smoke alarms, or at least ionization-based alarms with a tiny amount of radioactive americium, are very simple devices. Inside the alarm, there’s a metal can – an ionization chamber – with two metal plates. When smoke enters this chamber, a few transistors sound the alarm. If you’ve ever taken one apart, you can probably rebuild the circuit from memory.

Because these alarms are so simple, it’s possible to hack in some extra electronics into a design that hasn’t changed in fifty years. For [Johan]’s project, he’s doing just that, tapping into one of the leads on the ionization chamber, measuring the current through the buzzer, and adding a microcontroller with Bluetooth connectivity.

For the microcontroller and wireless solution, [Johan] has settled on TI’s CC2650 LaunchPad. It’s low power, relatively cheap, allows for over the air updates, and has a 12-bit ADC. Once this tiny module is complete, it can be deadbugged into a smoke alarm with relative ease. Any old phone can be used as a bridge between the alarm network and the Internet.

The idea of connecting a smoke alarm to the Internet is nothing new. Security companies have been doing this for years, and there are dozens of these devices available at Lowes or Home Depot. The idea of retrofitting smarts into a smoke alarm is new to us, and makes a lot of sense: smoke detectors are reliable, cheap, and simple. Why not reuse what’s easy and build out from there?

Filed under: home hacks, Microcontrollers

Instructables: exploring - featured: Corned Beef Brain Dip

One thing I love about the holidays is the food. One of my favorites is the most simple, my mother’s corned beef dip. Since it’s Halloween though I wanted to update the recipe a bit to fit the holiday. Ingredients • 2 pkgs cream cheese• ½ pound corned beef • 5 – 6 green onions • Red food colorin...
By: Svdownwards

Continue Reading »

Quiet Earth: VIFF 2016: WE ARE X Review

We Are X is the best documentary about a band you've probably never heard of but might be your new favourite. Seriously though, Stephen Kijak's documentary falls somewhere between Anvil: The Story of Anvil and This Is Spinal Tap.

Japan in the 1980s was exactly as you image it: buttoned down, proper and soft spoken. And then in 1982 a musical prodigy by the name of Yoshiki along with his best friend Toshi, started a metal band. We're talking big hair, make-up, outfits and speed metal the likes of which Japan had never seen. And they were a sensation.

But the band's masterminds were never satisfied with just one sound and over the years they have experimented leading to even more fandom and critical acclaim but also to trouble from within.

Wi [Continued ...]

ScreenAnarchy: Composer Bill Brown Discusses His Score to Ross Clarke’s Latest Film "Desiree"

Desiree, formally Dermaphoria, first premiered at the East End Film Festival to a great response and marked Ross Clarke’s directorial debut. “Cinemazero” labeled the film’s visuals “stunning” while “Smoke Screen” compared the film to Mullholland Drive. It has since played at numerous film festivals all over the world and this month was widely released on VOD and DVD.  Also receiving recognition was the film’s score by composer Bill Brown, which is being released on iTunes October 28, 2016. Brown is best known for scoring such projects as CBS’s CSI: NY and Syfy’s Dominion. We spoke with Brown about his latest film score, discussing everything from how he got invloved to his working relationship with the director. Read the full interview below.   -Tell us a...

[Read the whole post on]

Colossal: Aerial Shots of the Bright and Colorful Goods Sold by Street Vendors in Vietnam by Photographer Loes Heerink


Fascinated by the colorful arrangements of flowers and fruits strapped to the bikes of street vendors in Vietnam, photographer Loes Heerink began climbing onto different bridges around Hanoi to capture these pops of color on the streets. Heerink loved that each of the vendors creates a new piece of art everyday, and that the collection of goods they bring into town differs each morning. This act prompted the series “Vendors from Above,” a collection of these street vendor photographs she shot while living in Vietnam.

In order to commemorate these workers, who are often female migrants, Heerink is hoping to expand the project to create a photobook through her new Kickstarter campaign which will bring her back to Vietnam. You can see more series from the now Netherlands-based photographer on her website and Instagram. (via My Modern Met)






loesheerink_06   loesheerink_03

Open Culture: How Akira Kurosawa’s Seven Samurai Perfected the Cinematic Action Scene: A New Video Essay

Jonathan Lethem knows a thing or two about storytelling as well as about caped comic-book characters, and on a recent podcast appearance he accused films about the latter of an inability to do the former: “I think one of the least satisfying film genres I’ve ever encountered is the contemporary superhero movie, which just seems to me kind of dead on arrival. I can’t even get into the hair-splitting about, ‘Oh, but there are three or four good ones.’ I just don’t see any life there.” How can such big productions filled with so much action play out so lifelessly on the screen? Perhaps the work of Akira Kurosawa, known in his day as the “Emperor” of Japanese film, can show us the answer.

“Wouldn’t scenes that display the pinnacle of physicality work better,” asks video essayist Lewis Bond over images of the Avengers battling towering monsters in the centers of major cities, Spider-Man swinging huge arcs through some kind of smoke-and-spark factory, and Batman beating up Superman, “if they also conveyed an emotional intensity to match this? Action and emotion need not be separated by a chasm as they so often are, and this is where the greatness of Seven Samurai lies.” He shows us in “Drama Through Action,” a study of how Kurosawa’s best-known picture delivers its action with impact, which appeared earlier this month on Channel Criswell, previously the source of video essays on such masters of cinema as Yasujirō Ozu and Andrei Tarkovsky.

Bond points to several different factors that make the action in Kurosawa’s 1954 epic adventure of the Sengoku era, despite its technological impoverishment compared to the superhero blockbusters of the 21st century, feel so much more meaningful. A focus less on the action itself and the protagonists performing it than on the consequences of that action meaning that “death carries significance.” A “situational awareness” and clear portrayal of “the characters’ short-term objectives” means that the audience can follow, and thus feel, their successes and failures. A clear establishment of geography enables viewers to place the combatants, and themselves, on the battlefield. A sparing use of cutting and slow motion keeps emotionally charged moments charged.

These and other techniques skillfully employed by Kurosawa and his collaborators ensure that, in Seven Samurai, “every moment of action communicates a sense of urgency” — exactly the quality lacked, in other words, by the expensive and furious yet strangely dull superhero spectacles of today. “To me, Seven Samurai is still the most forward-thinking piece of cinema ever created,” says Bond. “What it did for the way action is photographed can still be seen today. And when it isn’t seen, it probably should be.” Take heed, young directors slated to take on the next wave of superhero-franchise cinematic reboots: to make your entries stand out, you have only to learn from the Emperor.

Related Content:

How Akira Kurosawa Used Movement to Tell His Stories: A Video Essay

How Star Wars Borrowed From Akira Kurosawa’s Great Samurai Films

The Geometric Beauty of Akira Kurosawa and Wes Anderson’s Films

The Dark Knight: Anatomy of a Flawed Action Scene

What Makes Yasujirō Ozu a Great Filmmaker? New Video Essay Explains His Long-Admired Cinematic Style

Watch a Video Essay on the Poetic Harmony of Andrei Tarkovsky’s Filmmaking, Then View His Major Films Free Online

Based in Seoul, Colin Marshall writes and broadcasts on cities and culture. He’s at work on a book about Los Angeles, A Los Angeles Primer, the video series The City in Cinema, the crowdfunded journalism project Where Is the City of the Future?, and the Los Angeles Review of Books’ Korea Blog. Follow him on Twitter at @colinmarshall or on Facebook.

How Akira Kurosawa’s Seven Samurai Perfected the Cinematic Action Scene: A New Video Essay 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.

Hackaday: An Open Source 96 MSPS Logic Analyzer For $22

If you are in the market for an inexpensive USB logic analyser you have a several choices, but few of them deliver much in the way of performance. There are kits from China for a few dollars using microcontrollers at their heart, but they fail to deliver significant sample rates. If you require more, you will have to pay for it.

It is therefore rather interesting to see [kevinhub88]’s SUMP2 project, an open source logic analyser with a claimed 96 MSPS sample rate using an off-the-shelf Lattice iCEstick FPGA evaluation board that only costs about $20. It talks to a host computer via USB using the established SUMP protocol, so its software front-end comes from the logic analyser project. Edit: Since this post was published [Kevin] has contacted us to inform us that the project’s capabilities have now moved beyond SUMP’s capabilities and in fact it now uses his own software.

This project has the promise to add a very useful piece of test equipment to the armoury of the engineer on a budget, and to aid the cost-conscious reader he’s provided extensive documentation and installation instructions, as well as the code for the FPGA. Thanks to one of the more awesome hacks of 2015, there is an entirely open toolchain for this Lattice part, and our own [Al Williams] has written up a multi-part getting-started guide if you want to get your feet wet. You probably want one of these anyway, and now it’s a logic analyzer to boot.

We’ve covered quite a few inexpensive home-produced digital instruments here over the years, including this logic analyser with a slightly higher price tag, this inexpensive VNA, and this oscilloscope board. Maybe one day the bench of our dreams will all come on one open-source PCB for $100, who knows!

Filed under: tool hacks

Paper Bits: The Right Is Giving Up on Democracy

The Right Is Giving Up on Democracy:
  1. I connect Trump with larger right-wing anti-democratic trend here:

TOPLAP: Errata//Data – Live Coding in Pittsburgh


Taking place on November 12th, 2016 in Pittsburgh, PA – Errata//Data will be featuring two live-coded performances by BLÆRG and Spednar using the Tidalcycles platform initiated by yaxu.

The rest of the bill is comprised of live performances spanning various software and hardware suites.  Jeremy Bible will be performing his recent immersive A/V work Broken Ecologies with the help of a multi-pointed sound system.

xliv will be doing her first live performance since GODMODE’s release of Photoburn. Additional self-released material can be found here.

Morgantics will be performing on his extensive modular synthesizer setup and providing a glimpse of the algorithmic possibilities from the hardware perspective.

Pittsburgh staple Good Dude Lojack will be ending the night with his classic live-pa performance setup.

Additional vj work for the evening will be provided by Cake.

The event will be taking place at Wood Street Galleries which focuses on displaying the works of international new media artists. It is the first of the Pittsburgh Cultural Trust organizations to provide a performance space for live coding in the city.  To top things off, the performance will be taking place a floor above Ryoji Ikeda‘s ongoing Data Matrix installation.

Additional event information can be found at following:

OUR VALUED CUSTOMERS: While educating his friend on how it is...

Colossal: Assembled Figurines by Garret Kane Appear to Burst with the Seasons


Assemblage artist Garret Kane just unveiled this new series of figurative sculptures depicting fractured individuals who appear to merge with the seasons. Each piece was first partially designed using digital sculpting software called Zbrush, and then 3D-printed components were affixed to wood, rocks, leaves, and other materials to reach the final forms seen here. You can see more views on his website. (via The Operating System)







Michael Geist: Why Trudeau’s TPP Comments Undermine Freeland’s Credibility on Canada’s Biggest Trade Deal

International Trade Minister Chrystia Freeland has faced a challenging week given the possible collapse of the trade agreement between Canada and the European Union. Freeland and the Liberal government have worked hard to get CETA to the finish line with some changes to the investor – state dispute settlement rules (the rules should be dropped altogether) and frequent travel across Europe to garner support for the deal.

Back at home, the reaction to the CETA problems from the Conservative opposition has been embarrassing. Trade critic Gerry Ritz criticized Freeland, speaking of the need for adult supervision and calling on the government to get the job done. Freeland rightly called him out on the comments, but she could have also noted that the record suggests that it is the Conservatives that failed to get the job done on CETA. In April 2010, the Conservative government said it would be finished in 2011. In 2011, reports said it would be done in 2012. In October 2012, the projection was a deal by year-end. It took until the fall of 2013 for a ceremony marking an “agreement-in-principle”. That too proved to be premature as there was another event celebrating an official draft in 2014 followed by more legal drafting and the renegotiation of controversial ISDS provisions that led to the release of another text earlier this year. In other words, Freeland inherited far less than advertised on CETA and the Conservatives might not want to remind the public that their biggest trade accomplishment never actually involved a signed, final text.

The Ritz remarks have attracted attention, but comments yesterday from Prime Minister Justin Trudeau may have a longer and more damaging impact on Freeland. Speaking at a youth labour summit, Trudeau gave the clearest indication yet that the Liberals plan to move ahead with the TPP assuming the agreement goes ahead (the TPP is facing enormous opposition in the U.S. and cannot take effect without its approval). Asked about the TPP, he stated that “It’s difficult to imagine a world where Canada would turn its back on three of its top five trading partners. We established very clearly during the campaign that we’re a pro-trade party.”

That is a far cry from the Liberal position on the TPP both during the election and since forming government. Freeland has consistently stated the final decision on the TPP would not come before the completion of extensive public consultations. Those consultations are still ongoing with the deadline for submitting comments to the Standing Committee on International Trade open until October 31st. The committee report is therefore still weeks away and the necessary debate in the House of Commons has yet to occur. While Trudeau did not definitively state that Canada will ratify, the comments call into question the seriousness of the consultation and lend credence to concerns that the process is little more than theatre.

Further, not only do the comments hurt Freeland’s credibility on an open consultation, but they also undermine Canada’s bargaining position with respect to potential changes to the TPP. While officials have stated that the deal cannot be amended, the same was said about CETA and changes were ultimately incorporated into the final text. With opposition running high in the U.S., the prospect of re-opening some TPP issues or crafting side letters that involve some change is a real possibility. The Canadian position is weakened by Trudeau’s comments, however, since TPP partners will now assume that any threat to walk away is mere posturing and that no further concessions are needed.

The post Why Trudeau’s TPP Comments Undermine Freeland’s Credibility on Canada’s Biggest Trade Deal appeared first on Michael Geist.

All Content: CIFF 2016: “Bright Lights,” “Raw,” “I, Daniel Blake”


“Amongst your many possessions, you own my likeness, lo all these years so that every time I look in the mirror, I have to send you a check for a couple of bucks,” Carrie Fisher proclaimed at George Lucas during his AFI Lifetime Achievement Award ceremony in 2005. Her deadpan speech brought down the house, and later served as material for her 2008 memoir, Wishful Drinking, and her subsequent one-woman show of the same name, which I was fortunate enough to catch in Chicago. Not only is Fisher one of the funniest people in show business, she is also one of the most invigoratingly honest, with her candid accounts of overcoming the sort of obstacles that would send most Hollywood careers clear off the rails. When she reappeared as Princess Leia in last year’s “Star Wars” film (“Episode Seven—ty-two,” Fisher quipped) to boisterous applause from the audience on opening day, it was impossible not to get a little misty-eyed. Yet that turned out to be a mere primer for the rich emotional journey that is “Bright Lights,” Fisher Stevens and Alexis Bloom’s marvelous vérité documentary about Fisher and her equally indomitable mother, Debbie Reynolds, who achieved stardom around the same age her daughter did, in another landmark picture, “Singin’ in the Rain.” 

Anyone who has seen Reynolds’ brilliant performance in Albert Brooks’ 1996 gem, “Mother,” knows how funny she can be as a stubborn, people-pleasing matriarch, and it turns out that her relationship with Fisher is not all that far removed from the one her character had with Brooks. The withering way Fisher regards her mother’s archaic flip phone is identical to Brooks’ expression when Reynolds offered him a moldy scoop of Sweet Tooth Ice Cream. Just as Fisher’s stage show was much more than a laugh riot, Stevens and Bloom’s film resists the standard talking head formula, opting to linger on the revealing moments between punchlines. Though retirement has never been a desire for Reynolds, whose MGM-bred work ethic is the equal of any veteran athlete, it’s clear that the inevitable ravages of mortality are starting to catch up with her. There’s real tension in the sequences where she belts out songs to adoring crowds before slowly making her way down the stairs offstage. 

Some of the most achingly moving footage takes place in flashbacks, notably Fisher’s visit with her ailing father during his final days (in footage originally shot for HBO’s “Wishful Drinking” special), and a Reynolds concert from the archives where 15-year-old Fisher is invited onstage to sing “Bridge Over Troubled Water” (her splendid vocals sound an awful lot like Meryl Streep in “Postcards from the Edge”). What the film is a testament to, above all, is Fisher’s tireless devotion to her mother, as well as her bracing wit which she utilizes to describe everything from the “celebrity lap dances” of fan conventions to her struggles with manic depression (“one mood is the meal, the other is the check”). Perhaps most uproarious of all is her chat with longtime friend Griffin Dunne, who recalls how he helped Fisher lose her virginity. “My hymen was a burden,” she explains.

Virginity loss couldn’t be a better segue way into discussing Julia Ducournau’s galvanizing debut feature, “Raw,” a portrait of sexual awakening and self-discovery that immediately warrants comparison to Nicolas Winding Refn’s “The Neon Demon.” Both films are deeply pleasurable works of pure cinema featuring a young heroine who undergoes a transformation of sorts, while gaining a newfound awareness of her body and its—shall we say—insatiable needs. The protagonist of “Raw,” Justine (Garance Marillier), kisses her reflection in a mirror just as Elle Fanning does in “Neon Demon,” though Ducournau adds another layer of strangeness by including a song with subtitled lyrics such as “I want to bang the dead” (calling to mind Jena Malone’s experimentation with necrophilia in “Demon”). Whereas Refn intentionally slathers an artificial sheen over every frame and line of dialogue, Ducournau takes a naturalistic approach to her story that is more evocative of “Let the Right One In” in its portrayal of alienation and primal bloodlust. 

Despite reports of audience members fainting during the film’s TIFF screening, “Raw” is surprisingly palatable for a film about cannibalism, and a lot of that has to do with Marillier, who delivers one of the year’s great breakout performances. She looks positively dainty in her early scenes, as she politely refuses meat on multiple occasions, much to the chagrin of her rebellious older sister, Alexia (Ella Rumpf). But after having her first taste of flesh, Justine’s chin gradually lowers as her eyes grow into Kubrickian saucers. One of Ducournau’s gifts is to make a single scene squirm-inducing on a variety of inventive levels, especially the pivotal moment when Alexia decides to give her sister a waxing, the very notion of which is unsettling in itself. Having skin get torn from your body in short, painful bursts is no one’s idea of a picnic, especially with a persistent rash and slobbery dogs to contend with. The set-up is masterful, suggesting any number of ways the scene could go quickly haywire, yet the direction Ducournau ultimately takes is not only unexpected—it is revolting, hilarious and oddly moving, just like the film itself. It is sure to please many audiences aside from the dinner-and-movie crowd…unless they are into finger food.

And now we have arrived at “I, Daniel Blake,” Ken Loach’s Palme d’Or-winning drama that was criticized by some viewers for not being as adventurous as Maren Ade’s “Toni Erdmann” or Paul Verhoeven’s “Elle.” While “Toni Erdmann” remains the best narrative film I have seen in 2016 thus far, “I, Daniel Blake” easily cracks my top 5. Here is a picture that is so close to my everyday reality that I ended up watching it in stunned silence. Only afterwards was I able to let the tears flow. Loach has crafted a no-holds-barred attack on the injustice of a dehumanizing welfare system designed to treat people with serious or chronic illnesses like financial burdens who must be worn down into an early grave. Daniel Blake (beautifully played by Dave Johns) is a lot like my parents: a good-hearted person who has worked his whole life, and is now threatened with being robbed of everything. While recovering from a heart attack that has rendered him unable to work, Blake finds himself lodged in a health care network that couldn’t care less about his health. He’s forced to spend days waiting for a call (one assumes for Godot), while in the meantime, listening a purgatorial loop of Vivaldi reprises after he’s repeatedly put on hold. The system has no time for people his age who are inept when it comes to modern technology—he holds a mouse up to a computer screen and writes his CV in longhand—and quickly brands Blake as a hopeless case.

This film would be intolerably bleak if its titular hero didn’t have such a wry sense of humor. Even before we see his face, his voice earns a big laugh as the opening credits unfold over a black screen. We hear Blake’s mounting exasperation as he’s required to answer a series of clueless and robotic questions, all of which fail to get at the heart of the issue—that being his heart, of course. Johns single-handedly serves as the film’s life force, though he never allows his character to devolve into a one-note saint or martyr. He’s simply a man who has had enough and is determined to preserve his self-respect. Equally Oscar-worthy is Hayley Squires as a young mother so desperate to provide for her children that she becomes prone to having her impulses drown out her good sense. She shoplifts while under the sleazy gaze of a security guard, and rips open a can of pasta to quell her agonizing pangs of hunger. Squires’ performance is shattering, but Loach doesn’t just hold her up as an object of pity. We can sense the embarrassment she feels in her predicament, and the tender bond she and her kids forge with Blake is so well-realized that it left me feeling a little more hope in the human race. Whether or not “I, Daniel Blake” is the film of the year is a worthy topic for debate, yet there’s no question Loach’s latest masterwork is the film of my year.

Open Culture: Spike Jonze’s Stop Motion Film Hauntingly Animates Paris’ Famed Shakespeare and Company Bookstore

Since his breakout early days directing commercials and music videos for the likes of Fatboy Slim, Weezer, Daft Punk, and the Breeders, Spike Jonze has honed a quirky visual sensibility that translated almost seamlessly to feature film. But even at his quirkiest, Jonze hasn’t been about quirk for quirk’s sake. His characters—highly emotional robots, dog-headed men with broken legs, tormented puppeteers, enthusiastic amateur dance troops—are underdogs, weirdos, figures on the fringes who make us question what it means to be people: to be lonely, in love, creatively obsessed, and emotionally scrambled….

There is a paradox inherent in Jonze’s films and videos. Their oddball plots and characters cut through the cynical veneer of cool that keeps us from asking hard questions about our emotional lives, but they do so in stylistic exercises that in some cases themselves become emblems of pop-culture cool. Not so the short film “Mourir auprès de toi” (“To Die by Your Side”), which takes its title from one of the most achingly heartbreaking of Smiths’ songs. This is a love story for the bookish and the crafty, set in Paris’ famed Shakespeare and Company bookstore and featuring animated book covers made from embroidered felt cutouts.

Co-written and with a look inspired by designer Olympia Le-Tan, the short is “an absolutely beautiful stop-motion animation for book-lovers that’s part This Is Where We Live, part Going West, part creative magic only Spike Jonze can bring.” So writes Maria Popova at The Atlantic, summarizing the ups and downs of the plot and alluding to a “happily-ever-after ending” that “comes only after an appropriately dark and grim twist.”

Watch “To Die by Your Side” at the top of the post, then, just above, see a short behind-the-scenes teaser video. “You just start with what the feeling is,” Jonze told Nowness in an interview, “Me and Olympia both wanted to make a love story…. It evolved naturally and it all just started with the feeling. From there you entertain yourself with ideas that excite you.” The quote explains why Jonze’s films and videos—for all their visual inventiveness and imaginative whimsy—nearly always stay grounded in candid emotional realism. However far and wide Jonze’ cinematic and narrative  imagination takes us, his films always start with the feeling.

“Mourir auprès de toi” (“To Die by Your Side”) first appeared on our site in October, 2011.

Related Content:

Spike Jonze and Beastie Boys, Together Again

Spike Jonze’s Imaginative TV Ads

Collaborations: Spike Jonze, Yo-Yo Ma, and Lil Buck

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

Spike Jonze’s Stop Motion Film Hauntingly Animates Paris’ Famed Shakespeare and Company Bookstore 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.

Saturday Morning Breakfast Cereal: Saturday Morning Breakfast Cereal - The Grasshopper and the Ants

I really feel there's an entire field to be had by bringing together literature and economics. Like, does anyone else side with Scrooge during that scene where his nephew asks him to contribute to an unevaluated charity.

New comic!
Today's News:

Wednesday Book Reviews!

Bull’s Eye (Adams)

Of the three major books written on Gerald Bull’s life, this is probably the least good. It’s not a bad book exactly, but it’s very strange. The author was, at least in the early 90s, a reporter on international arms sales and the associated shady behavior of rogue nations. That’s fine and all, but the book ends up being nominally about Gerald Bull while having enormous tangents about the author’s area of expertise. So, you’ll get somewhat loose biographical details, followed by a remarkably in-depth discussion of particular artillery systems from the mid-80s.

The Science of Cheese (Tunick)

I bought this book thinking it’d be a nice light read on, well, the science of cheese. It’s quite good, but really more of a reference book on types of cheese and the chemistry that produces them. So, if you’re rather nerdily-inclined and want to know more about cheese, this is a great book, but I wouldn’t try to read it all in one sitting unless you happen to be a chemist.

Demon, volume 1 (Shiga)

A great little comic book! I mean, also horrifying. Like, really violent and disgusting, but underneath that a very clever story. I’m looking forward to reading the next volume.

The Invention of Science (Wootton)

A fantastic history of the idea of science. I mean, just great. I got this book looking for a sort of light read on early science. It turned out to be a very detailed history on the concept of science as a human behavior, encompassing everything from history to etymology to social science. It’s just absolutely fantastic, and it will probably defy your expectations. I’ve gotten used to books of this sort repeating the same tired sets of moments in scientific history. Wootton not only introduces all sorts of new (to me) parts of history, but he adds more nuance to parts of history you may already be familiar with.

In Milton Lumky Territory (Dick)

Another of Dick’s earlier non-scifi novels. Like the others, it’s good and has good characters, but just seems to be missing something. Honestly, part of what makes his early literary stuff hard to read is that it’s so relentlessly depressing. I don't mind sad novels, but relentlessly sad novels (Updike's Rabbit series springs to mind) always seem to me like they're a palette missing a color.

The other thing is that (perhaps because almost none of it was published), all of these literary novels by Dick hit on very similar territory, almost always concerning themselves with douchey men and crazy women, living dull pointless lives, often starting a pathetic small business of some sort.

That said, it was still a pretty good novel. Reading this early stuff is interesting, because it helps you see Dick’s trajectory toward becoming one of the best science fiction writers of all time.

things magazine: Other half living

This year’s Neiman Marcus Fantasy Gift Catalogue is here, so the Christmas panic is over. Thirty-six classic children’s first editions, a steal at $100,000. The Rose-gold private plane also caught our eye, although the Cobalt Valkyrie is mean enough without … Continue reading

Penny Arcade: Comic: Youth Adjacent

New Comic: Youth Adjacent

ScreenAnarchy: Gamera Obscura: We're the Ones Who Need an Exorcist

If you’re as big a fan of Friedkin’s The Exorcist as I am, you’ll know what I mean when I say it’s been touch and go out there in TV land. For every moment of the new Fox series that has stayed true to the original’s spirit, or at least updated it in a smart, knowing way, there’s another that makes you grit your teeth and remind yourself that you just have to ride it out.  There’s been no way of knowing whether such moves are necessary for expanding story elements to fit the medium... or for just pandering to the medium’s audiences. After last week’s Episode 5, however, it’s safe to say that the show has earned the benefit of the doubt. For the...

[Read the whole post on]

TheSirensSound: New album - Bureaucracy 5-8 YOLD 3182 by Galaxxu

'Bureaucracy 5-8 YOLD 3182' was a 2 song, 20 minute tape that was made for a midwest tour in August 2016. The first side/track, A Tisket, A Trifle, A Flittering Flutter gives us a glimpse into the more subdued side of Galaxxu. At times yearning a soulful, but still operating within the realm of their improvised chaos. Side 2 ("Match This Step, Then Repeat"), gives us more of the full on assault Galaxxu is typically known for before coming to a conclusion in a passage of dreamy, fluttering interactions from the band.

Colossal: Birds Appear in the Negative Space of Shattered Windowpanes in a New Intervention from Pejac


All photos by Sasha Bogojev

Barcelona-based artist Pejac (previously) was recently in Rijeka, Croatia where he completed a number of new artworks as part of a residency with the Museum of Modern and Contemporary Art. His most impressive new intervention appeared in the windows of an abandoned power plant where the artist utilized the cracked glass in old windows to form a flock of birds escaping the aim of a boy in silhouette holding a slingshot. Titled Camouflage, Pejac says the work is in tribute to artist René Magritte who famously depicted birds in many of his paintings as silhouettes filled with clouds. You can see more of his work in Croatia on Arrested Motion.






All Content: CIFF 2016: Table of Contents


The following Table of Contents includes our complete coverage of the 2016 Chicago International Film Festival, as written by Brian Tallerico, Matt Fagerholm, Peter Sobczynski and Omer M. Mozaffar.




"The Salesman"


Steve McQueen Honored at Chicago International Film Festival

"24 Weeks"

"A Mere Breath"

"Among Wolves"

"Bright Lights"

"I, Daniel Blake"




"The Student"

"The View from Tall"


CIFF 2016: "Sieranevada," "Olli Mäki" are Festival Favorites


CIFF 2016: 35 Films to See

Interview: Peter Bogdanovich on "They All Laughed"

"The B-Side: Elsa Dorfman's Portrait Photography"


"The Handmaiden"

"The King of Jazz"

"The Salesman"



Planet Lisp: Lispjobs: Clojure Engineer, ROKT, Sydney, Australia

ROKT ( is hiring thoughtful, talented functional programmers, at all levels, to expand our Clojure team in Sydney, Australia.  (We’re looking for people who already have the right to work in Australia, please.)

ROKT is a successful startup with a transaction marketing platform used by some of the world’s largest ecommerce sites. Our Sydney-based engineering team supports a business that is growing rapidly around the world.

Our Clojure engineers are responsible for ROKT’s “Data Platform”, a web interface for our sales teams, our operations team, and our customers to extract and upload the data that drives our customers’ businesses and our own. We write Clojure on the server-side, and a ClojureScript single-page application on the frontend.

We don’t have a Hadoop-based neural net diligently organising our customer data into the world’s most efficiently balanced red-black tree (good news: we won’t ask you to write one in an interview) — instead, we try to spend our time carefully building the simplest thing that’ll do what the business needs done. We’re looking for programmers who can help us build simple, robust systems — and we think that means writing in a very functional style — whether that involves hooking some CV-enhancing buzzword technology on the side or not.

If you have professional Clojure experience, that’s excellent, we’d like to hear about it. But we don’t have a big matrix of exacting checkboxes to measure you against, so if your Clojure isn’t fluent yet, we’ll be happy to hear what you can do with Common Lisp or Scheme, or in fact any other language.  We have the luxury of building out a solid team of thoughtful developers — no “get me a resource with exactly X years of experience in technology Y, stat!”

If this sounds interesting, please contact Sam Roberton at Sam’s an engineer on the Clojure team, and he’d be happy to tell you whatever you want to know about what we do and what we’re looking for.

Electronics-Lab: The Tiniest 1nm Gate Transistor

A research team led by faculty scientist Ali Javey at Berkeley Lab have debuted the smallest transistor ever reported. A gate structure of just 1 nm long can bring Moore’s law back again after the demonstration of the recent Silicon (Si) transistor with 5 nm gate. It was predicted that transistors will fail below 5 nm gate because of some short channel effects that would change the transistor characteristics, but the new finding is proving that wrong.

Model showing the transistor structure

Because of current leakage that would happen in less than 5-nm Si transistors, the  exploration of new channel materials that have more ideal properties than Si should begin. The researchers used carbon nanotubes and molybdenum disulfide (MoS2), an engine lubricant commonly sold in auto parts shops. MoS2 is part of a family of materials with immense potential for applications in LEDs, lasers, nanoscale transistors, solar cells, and more. Fortunately, MoS2 electronics properties as thin layers will limit leakage that happen in Si alternatives.

While the researchers started using MoS2 as the semiconductor material, they recognized the hardship of constructing the gate using it.Thus, they turned to carbon nanotubes, hollow cylindrical tubes with diameters as small as 1 nanometer. This structure made it easier to control the flow of electrons effectively.

Optical image of a representative device shows the MoS2 flake, gate (G)

This project is just a proof of concept and researchers have not yet found a way to mass-produce it or integrate it in chips. They could break the myth of the Si transistor 5-nm gate limit and they paved the way for future researchers to demonstrate a new device architecture.

With such a small scale it will be an unexpected future of tiny devices that use lots of transistors, since all the technology we use nowadays are made of transistors with minimum 7nm geometry.

The work at Berkeley Lab was primarily funded by the Department of Energy’s Basic Energy Sciences program.

This research was introduced as a research paper in Science magazine on October 2016. More details are available here  “MoS2 transistors with 1-nanometer gate lengths“.

The post The Tiniest 1nm Gate Transistor appeared first on Electronics-Lab.

Electronics-Lab: NEC Display Powered by Raspberry Pi

Earlier this month, NEC Display Solutions Europe announced that they are working on a new generation of large-format displays that support the Raspberry Pi compute module, enabling a seamless integration of Raspberry Pi devices with NEC displays.


Originally developed to promote the teaching of basic computer science in schools and developing countries, the first Raspberry Pi delivered good performance at a very low cost. However, the latest Raspberry Pi 3 compute module boasts significant performance and networking capabilities, making it perfect for NEC displays.

Raspberry Pi announced the compute module about two years ago, which is primarily designed for those who are going to create their own PCB. It is a small 67.6x30mm board that fits into the standard DDR2 SODIMM connector, with integrated BCM2835 quad-core 1.2GHz processor, 512MB of RAM, and 4GB eMMC Flash device. The board is no longer a basic computer for coding, but a reliable intelligent device with unlimited possibilities. In addition to the standard Raspberry Pi 3 compute module, NEC will also offer a customized model to meet the specific performance demands of the display industry.


“When we started Raspberry Pi, we had one main goal of helping people learn about computing and how to make things with computers. However, we’ve been fortunate enough to have sold 10 million Raspberry Pis so far and the commercial success has led to the third generation of a more mature and powerful technology which can be used with NEC’s intelligent display. Our work on the Raspberry Pi mini-computers is driven by the huge community of developers whilst NEC’s work is driven by industry needs, enabling us to meet the demands of the AV and IT industry. Overall, this collaboration shows NEC’s confidence with our ability to provide a platform that can be used in a variety of environments.” said Eben Upton, CEO at Raspberry Pi Trading.

The new NEC displays allow easy access to embedded intelligence smartly connected to Internet of Things (IoT) for digital signage as well as presentation use. The elegant design of the displays is suitable for smooth installations in any environment. There’s also the chance to customize the screens to individual needs, making the displays more reliable anywhere and anytime.

The displays will be available in January 2017 starting with 40″, 48″, and 55″ models and will eventually scale all the way up to a monstrous 98″ by the end of the year.


“Our strategic initiative to team up with Raspberry Pi is an example of how we continue to ensure that organisations in any sector have the most advanced technology in place to meet their application needs. Our open platform approach provides display intelligence at any time, thanks to our modular and interchangeable design. Integrating the Raspberry Pis with our displays will provide businesses with advanced technology suitable for digital signage, streaming and presenting to enhance the overall visual experience at an affordable price point,” said Stefanie Corinth, Senior Vice President Marketing and Business Development at NEC Display Solutions Europe GmbH.

In this video, Thomas Walter – the Head of Product Marketing at NEC, talking more about what’s going on behind the screens.

The post NEC Display Powered by Raspberry Pi appeared first on Electronics-Lab.

Open Culture: Watch an Avant-Garde Bauhaus Ballet in Brilliant Color, the Triadic Ballet First Staged by Oskar Schlemmer in 1922

We credit the Bauhaus school, founded by German architect Walter Gropius in 1919, for the aesthetic principles that have guided so much modern design and architecture in the 20th and 21st centuries. The school’s relationships with artists like Paul Klee, Wassily Kandinsky, Laszlo Moholy-Nagy, and Ludwig Mies van der Rohe means that Bauhaus is closely associated with Expressionism and Dada in the visual and literary arts, and, of course, with the modernist industrial design and glass and steel architecture we associate with Frank Lloyd Wright and Charles and Ray Eames, among so many others.

We tend not to associate Bauhaus with the art of dance, perhaps because of the school’s founding ethos to bring what they saw as enervated fine arts and crafts traditions into the era of modern industrial production. The question of how to meet that demand when it came to perhaps one of the oldest of the performing arts might have puzzled many an artist. But not Oskar Schlemmer. A polymath, like so many of the school’s avant-garde faculty, Schlemmer was a painter, sculptor, designer, and choreographer who, in 1923, was hired as Master of Form at the Bauhaus theatre workshop.


Before taking on that role, Schlemmer had already conceived, designed, and staged his most famous work, Das Triadische Ballet (The Triadic Ballet). “Schlemmer’s main theme,” says scholar and choreographer Debra McCall, “is always the abstract versus the figurative and his work is all about the conciliation of polarities—what he himself called the Apollonian and Dionysian. [He], like others, felt that mechanization and the abstract were two main themes of the day. But he did not want to reduce the dancers to automatons.” These concerns were shared by many modernists, who felt that the idiosyncrasies of the human could easily become subsumed in the seductive orderliness of machines.


Schlemmer’s intentions for The Triadic Ballet translate—in the descriptions of Dangerous Minds’ Amber Frost—to “sets [that] are minimal, emphasizing perspective and clean lines. The choreography is limited by the bulky, sculptural, geometric costumes, the movement stiflingly deliberate, incredibly mechanical and mathy, with a rare hint at any fluid dance. The whole thing is daringly weird and strangely mesmerizing.” You can see black and white still images from the original 1922 production above (and see even more at Dangerous Minds). To view these bizarrely costumed figures in motion, watch the video at the top, a 1970 recreation in full, brilliant color.


For various reasons, The Triadic Ballet has rarely been restaged, though its influence on futuristic dance and costuming is considerable. The Triadic Ballet is “a pioneering example of multi-media theater,” wrote Jack Anderson in review of a 1985 New York production; Schlemmer “turned to choreography,” writes Anderson, “because of his concern for the relationships of figures in space.” Given that the guiding principle of the work is a geometric one, we do not see much movement we associate with traditional dance. Instead the ballet looks like pantomime or puppet show, with figures in awkward costumes tracing various shapes around the stage and each other.


As you can see in the images further up, Schlemmer left few notes regarding the choreography, but he did sketch out the grouping and costuming of each of the three movements. (You can zoom in and get a closer look at the sketches above at the Bauhaus-archiv Museum.) As Anderson writes of the 1985 revived production, “unfortunately, Schlemmer’s choreography for these figures was forgotten long ago, and any new production must be based upon research and intuition.” The basic outlines are not difficult to recover. Inspired by Arnold Schoenberg’s Pierrot Lunaire, Schlemmer began to see ballet and pantomime as free from the baggage of traditional theater and opera. Drawing from the stylizations of pantomime, puppetry, and Commedia dell’Arte, Schlemmer further abstracted the human form in discrete shapes—cylindrical necks, spherical heads, etc—to create what he called “figurines.” The costuming, in a sense, almost dictates the jerky, puppet-like movements of the dancers. (These three costumes below date from the 1970 recreation of the piece.)


Schlemmer’s radical production has somehow not achieved the level of recognition of other avant-garde ballets of the time, including Schoenberg’s  Pierrot Lunaire and Stravinsky’s, Nijinsky-choreographed The Rite of SpringThe Triadic Ballet, with music composed by Paul Hindemith, toured between 1922 and 1929, representing the ethos of the Bauhaus school, but at the end of that period, Schlemmer was forced to leave “an increasingly volatile Germany,” writes Frost. Revivals of the piece, such as a 1930 exhibition in Paris, tended to focus on the “figurines” rather than the dance. Schlemmer made many similar performance pieces in the 20s (such as a “mechanical cabaret”) that brought together industrial design, dance, and gesture. But perhaps his greatest legacy is the bizarre costumes, which were worn and copied at various Bauhaus costume parties and which went on to directly inspire the look of Fritz Lang’s Metropolis and the glorious excesses of David Bowie’s Ziggy Stardust stage show.


Related Content:

Kandinsky, Klee & Other Bauhaus Artists Designed Ingenious Costumes Like You’ve Never Seen Before

Download Original Bauhaus Books & Journals for Free: Gropius, Klee, Kandinsky, Moholy-Nagy & More

 32,000+ Bauhaus Art Objects Made Available Online by Harvard Museum Website

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

Watch an Avant-Garde Bauhaus Ballet in Brilliant Color, the Triadic Ballet First Staged by Oskar Schlemmer in 1922 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.

Electronics-Lab: Layout software eases 3D prototype production


A manufacturer and service provider for PCB prototyping, Beta LAYOUT has developed a 3D MID CAD program to speed up the prototyping and small-series manufacturing of 3D Mechatronic Interconnect Devices (MIDs). by Julien Happich @

Circuit carriers of the three-dimensional circuit boards are produced at Beta LAYOUT using 3D printing. This eliminates the need for costly injection moulding dies, as commonly used in series production. After this, the MID components are processed on a special production line using laser direct structuring, and then assembled.

Layout software eases 3D prototype production – [Link]

The post Layout software eases 3D prototype production appeared first on Electronics-Lab.

ScreenAnarchy: Watch the Stunning New Trailer for Osamu Tezuka's METROPOLIS, Coming to UK Blu-ray in 2017

Inspired by Fritz Lang's seminal 1927 masterpiece, adapted by Akira director Katsuhiro Otomo from the manga by Astro Boy creator Osamu Tezuka, and directed by Rentaro (Galaxy Express 999), Metropolis is hailed as one of the most beautiful Japanese animes of all time, and arrives on dual format Blu-ray and DVD in 2017 courtesy of Eureka! Entertainment.  On 16 January, a Limited Edition steelbook release of the film will hit the shelves, followed on 13 March by a regular release. Both versions will include both the Blu-ray and DVD of the film, as well as Japanese & English DTS-HD Master Audio soundtracks, The Making of Osamu Tezuka’s Metropolis documentary,  interviews with the film's creators, multi-angle animation comparisons and the original trailer. First released in 2001, Metropolis takes...

[Read the whole post on]

Open Culture: Wabi-Sabi: A Short Film on the Beauty of Traditional Japan

We’ve featured the work of Spanish filmmaker Cristóbal Vila before: His short film “Inspirations” celebrated the mathematical art of M.C. Escher. “Fallingwater” animated one of Frank Lloyd Wright’s finest creations. And “Nature by Numbers” showed us geometrical and mathematical formulas found in nature.

Today, we bring you Vila’s latest “Wabi-Sabi: A Handful of Memories from Traditional Japan.” As he notes on his site, the animation captures the “aspects that interest me the most about traditional Japan,” featuring “scenes inspired by nature, gardens, architecture, interior scenes, etc.” And it attempts to “create a calm and balanced atmosphere through the use of light, composition, materials, movement… and the choice of the motifs themselves.”

Above, you can watch “Wabi-Sabi,” a Japanese term that refers to “the [aesthetic] beauty of the impermanent, the imperfect, the rustic, and the melancholy,” as explains The School of Life video below. If you’re entranced by Vila’s short film, also watch the “Making of” video (middle).

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. And if you want to make sure that our posts definitely appear in your Facebook newsfeed, just follow these simple steps.

Related Content:

Frank Lloyd Wright’s Fallingwater Animated

Inspirations: A Short Film Celebrating the Mathematical Art of M.C. Escher

Nature by Numbers: Short Film Captures the Geometrical & Mathematical Formulas That Reveal Themselves in Nature

Wabi-Sabi: A Short Film on the Beauty of Traditional Japan 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.

Disquiet: An Hour-Long Grouper Set

The prolific Boiler Room electronic-music content generation feed machine is often full of fish-eye views of sweaty DJs, but it veers at times down less beat-intensive corridors. This here is a nearly hour-long set of Grouper, aka Liz Harris, performing against a backdrop of footage by filmmaker Paul Clipson. It’s breathy stuff, her voice layered with keyboards, mere snippets of atmosphere given minutes to loop on end, the whole thing like veils giving hints of veils giving hints of veils. It’s all intonation and gauze, but the seeming softness belies a deeper tension. Much ambient music sounds — and is — peaceful, but there’s a tensile quality to Grouper’s music, like just past the threadbare scrim is something tough as nails, an unknowable intensity. The video gives glimpses of her at the mixing board, her fingers lightly adjusting signals, keeping certainty just out of reach.

Video originally posted on the Boiler Room YouTube channel. More from Grouper at this address.

Planet Haskell: Functional Jobs: Clojure Engineer at ROKT (Full-time)

ROKT is hiring thoughtful, talented functional programmers, at all levels, to expand our Clojure team in Sydney, Australia. (We're looking for people who already have the right to work in Australia, please.)

ROKT is a successful startup with a transaction marketing platform used by some of the world's largest ecommerce sites. Our Sydney-based engineering team supports a business that is growing rapidly around the world.

Our Clojure engineers are responsible for ROKT's "Data Platform", a web interface for our sales teams, our operations team, and our customers to extract and upload the data that drives our customers' businesses and our own. We write Clojure on the server-side, and a ClojureScript single-page application on the frontend.

We don't have a Hadoop-based neural net diligently organising our customer data into the world's most efficiently balanced red-black tree (good news: we won't ask you to write one in an interview) — instead, we try to spend our time carefully building the simplest thing that'll do what the business needs done. We're looking for programmers who can help us build simple, robust systems — and we think that means writing in a very functional style — whether that involves hooking some CV-enhancing buzzword technology on the side or not.

If you have professional Clojure experience, that's excellent, we'd like to hear about it. But we don't have a big matrix of exacting checkboxes to measure you against, so if your Clojure isn't fluent yet, we'll be happy to hear how you've been writing functional code in whatever language you're most comfortable in, whether it be Haskell or JavaScript, Common Lisp or Scala. We have the luxury of building out a solid team of thoughtful developers — no "get me a resource with exactly X years of experience in technology Y, stat!"

Get information on how to apply for this position.

TheSirensSound: New track -My Baby's Gone Away by Trudy and the Romance

With a Big Moon support slot this autumn and SXSW in the bag, Trudy and the Romance’s scurvy ascent has been as pestilent as the plague, infecting hearts and minds everywhere. Labelled ‘50s mutant pop’ by assorted members of the press, their previous single ‘He Sings’ sallied lecherously up to number 7 on the UK Spotify viral charts. Their freakbeat flavoured skiffle clearly strikes a chord with legions of mutant fans everywhere and is a broken bottle to the face of blind conformity. With more material in the works and more gigging before the year is out, whatever Trudy and the Romance are cooking up will be a drunken witch’s brew of lovesick sea shanties and rabble rousing ditties. To all those who thought the age of romance in music is long dead, Trudy and the Romance stand defiant as mutated specimens of a bygone era. Comic for 2016.10.26

New Cyanide and Happiness Comic

Planet Haskell: Joachim Breitner: Showcasing Applicative

My plan for this week’s lecture of the CIS 194 Haskell course at the University of Pennsylvania is to dwell a bit on the concept of Functor, Applicative and Monad, and to highlight the value of the Applicative abstraction.

I quite like the example that I came up with, so I want to share it here. In the interest of long-term archival and stand-alone pesentation, I include all the material in this post.1


In case you want to follow along, start with these imports:

import Data.Char
import Data.Maybe
import Data.List

import System.Environment
import System.IO
import System.Exit

The parser

The starting point for this exercise is a fairly standard parser-combinator monad, which happens to be the result of the student’s homework from last week:

newtype Parser a = P (String -> Maybe (a, String))

runParser :: Parser t -> String -> Maybe (t, String)
runParser (P p) = p

parse :: Parser a -> String -> Maybe a
parse p input = case runParser p input of
    Just (result, "") -> Just result
    _ -> Nothing -- handles both no result and leftover input

noParserP :: Parser a
noParserP = P (\_ -> Nothing)

pureParserP :: a -> Parser a
pureParserP x = P (\input -> Just (x,input))

instance Functor Parser where
    fmap f p = P $ \input -> do
	(x, rest) <- runParser p input
	return (f x, rest)

instance Applicative Parser where
    pure = pureParserP
    p1 <*> p2 = P $ \input -> do
        (f, rest1) <- runParser p1 input
        (x, rest2) <- runParser p2 rest1
        return (f x, rest2)

instance Monad Parser where
    return = pure
    p1 >>= k = P $ \input -> do
        (x, rest1) <- runParser p1 input
        runParser (k x) rest1

anyCharP :: Parser Char
anyCharP = P $ \input -> case input of
    (c:rest) -> Just (c, rest)
    []       -> Nothing

charP :: Char -> Parser ()
charP c = do
    c' <- anyCharP
    if c == c' then return ()
               else noParserP

anyCharButP :: Char -> Parser Char
anyCharButP c = do
    c' <- anyCharP
    if c /= c' then return c'
               else noParserP

letterOrDigitP :: Parser Char
letterOrDigitP = do
    c <- anyCharP
    if isAlphaNum c then return c else noParserP

orElseP :: Parser a -> Parser a -> Parser a
orElseP p1 p2 = P $ \input -> case runParser p1 input of
    Just r -> Just r
    Nothing -> runParser p2 input

manyP :: Parser a -> Parser [a]
manyP p = (pure (:) <*> p <*> manyP p) `orElseP` pure []

many1P :: Parser a -> Parser [a]
many1P p = pure (:) <*> p <*> manyP p

sepByP :: Parser a -> Parser () -> Parser [a]
sepByP p1 p2 = (pure (:) <*> p1 <*> (manyP (p2 *> p1))) `orElseP` pure []

A parser using this library for, for example, CSV files could take this form:

parseCSVP :: Parser [[String]]
parseCSVP = manyP parseLine
    parseLine = parseCell `sepByP` charP ',' <* charP '\n'
    parseCell = do
        charP '"'
        content <- manyP (anyCharButP '"')
        charP '"'
        return content

We want EBNF

Often when we write a parser for a file format, we might also want to have a formal specification of the format. A common form for such a specification is EBNF. This might look as follows, for a CSV file:

cell = '"', {not-quote}, '"';
line = (cell, {',', cell} | ''), newline;
csv  = {line};

It is straight-forward to create a Haskell data type to represent an ENBF syntax description. Here is a simple EBNF library (data type and pretty-printer) for your convenience:

data RHS
  = Terminal String
  | NonTerminal String
  | Choice RHS RHS
  | Sequence RHS RHS
  | Optional RHS
  | Repetition RHS
  deriving (Show, Eq)

ppRHS :: RHS -> String
ppRHS = go 0
    go _ (Terminal s)     = surround "'" "'" $ concatMap quote s
    go _ (NonTerminal s)  = s
    go a (Choice x1 x2)   = p a 1 $ go 1 x1 ++ " | " ++ go 1 x2
    go a (Sequence x1 x2) = p a 2 $ go 2 x1 ++ ", "  ++ go 2 x2
    go _ (Optional x)     = surround "[" "]" $ go 0 x
    go _ (Repetition x)   = surround "{" "}" $ go 0 x

    surround c1 c2 x = c1 ++ x ++ c2

    p a n | a > n     = surround "(" ")"
          | otherwise = id

    quote '\'' = "\\'"
    quote '\\' = "\\\\"
    quote c    = [c]

type Production = (String, RHS)
type BNF = [Production]

ppBNF :: BNF -> String
ppBNF = unlines . map (\(i,rhs) -> i ++ " = " ++ ppRHS rhs ++ ";")

Code to produce EBNF

We had a good time writing combinators that create complex parsers from primitive pieces. Let us do the same for EBNF grammars. We could simply work on the RHS type directly, but we can do something more nifty: We create a data type that keeps track, via a phantom type parameter, of what Haskell type the given EBNF syntax is the specification:

newtype Grammar a = G RHS

ppGrammar :: Grammar a -> String
ppGrammar (G rhs) = ppRHS rhs

So a value of type Grammar t is a description of the textual representation of the Haskell type t.

Here is one simple example:

anyCharG :: Grammar Char
anyCharG = G (NonTerminal "char")

Here is another one. This one does not describe any interesting Haskell type, but is useful when spelling out the special characters in the syntax described by the grammar:

charG :: Char -> Grammar ()
charG c = G (Terminal [c])

A combinator that creates new grammar from two existing grammars:

orElseG :: Grammar a -> Grammar a -> Grammar a
orElseG (G rhs1) (G rhs2) = G (Choice rhs1 rhs2)

We want the convenience of our well-known type classes in order to combine these values some more:

instance Functor Grammar where
    fmap _ (G rhs) = G rhs

instance Applicative Grammar where
    pure x = G (Terminal "")
    (G rhs1) <*> (G rhs2) = G (Sequence rhs1 rhs2)

Note how the Functor instance does not actually use the function. How should it? There are no values inside a Grammar!

We cannot define a Monad instance for Grammar: We would start with (G rhs1) >>= k = …, but there is simply no way of getting a value of type a that we can feed to k. So we will do without a Monad instance. This is interesting, and we will come back to that later.

Like with the parser, we can now begin to build on the primitive example to build more complicated combinators:

manyG :: Grammar a -> Grammar [a]
manyG p = (pure (:) <*> p <*> manyG p) `orElseG` pure []

many1G :: Grammar a -> Grammar [a]
many1G p = pure (:) <*> p <*> manyG p

sepByG :: Grammar a -> Grammar () -> Grammar [a]
sepByG p1 p2 = ((:) <$> p1 <*> (manyG (p2 *> p1))) `orElseG` pure []

Let us run a small example:

dottedWordsG :: Grammar [String]
dottedWordsG = many1G (manyG anyCharG <* charG '.')
*Main> putStrLn $ ppGrammar dottedWordsG
'', ('', char, ('', char, ('', char, ('', char, ('', char, ('', …

Oh my, that is not good. Looks like the recursion in manyG does not work well, so we need to avoid that. But anyways we want to be explicit in the EBNF grammars about where something can be repeated, so let us just make many a primitive:

manyG :: Grammar a -> Grammar [a]
manyG (G rhs) = G (Repetition rhs)

With this definition, we already get a simple grammar for dottedWordsG:

*Main> putStrLn $ ppGrammar dottedWordsG
'', {char}, '.', {{char}, '.'}

This already looks like a proper EBNF grammar. One thing that is not nice about it is that there is an empty string ('') in a sequence (…,…). We do not want that.

Why is it there in the first place? Because our Applicative instance is not lawful! Remember that pure id <*> g == g should hold. One way to achieve that is to improve the Applicative instance to optimize this case away:

instance Applicative Grammar where
    pure x = G (Terminal "")
    G (Terminal "") <*> G rhs2 = G rhs2
    G rhs1 <*> G (Terminal "") = G rhs1
    (G rhs1) <*> (G rhs2) = G (Sequence rhs1 rhs2)
Now we get what we want:
*Main> putStrLn $ ppGrammar dottedWordsG
{char}, '.', {{char}, '.'}

Remember our parser for CSV files above? Let me repeat it here, this time using only Applicative combinators, i.e. avoiding (>>=), (>>), return and do-notation:

parseCSVP :: Parser [[String]]
parseCSVP = manyP parseLine
    parseLine = parseCell `sepByP` charG ',' <* charP '\n'
    parseCell = charP '"' *> manyP (anyCharButP '"') <* charP '"'

And now we try to rewrite the code to produce Grammar instead of Parser. This is straight forward with the exception of anyCharButP. The parser code for that in inherently monadic, and we just do not have a monad instance. So we work around the issue by making that a “primitive” grammar, i.e. introducing a non-terminal in the EBNF without a production rule – pretty much like we did for anyCharG:

primitiveG :: String -> Grammar a
primitiveG s = G (NonTerminal s)

parseCSVG :: Grammar [[String]]
parseCSVG = manyG parseLine
    parseLine = parseCell `sepByG` charG ',' <* charG '\n'
    parseCell = charG '"' *> manyG (primitiveG "not-quote") <* charG '"'

Of course the names parse… are not quite right any more, but let us just leave that for now.

Here is the result:

*Main> putStrLn $ ppGrammar parseCSVG
{('"', {not-quote}, '"', {',', '"', {not-quote}, '"'} | ''), '

The line break is weird. We do not really want newlines in the grammar. So let us make that primitive as well, and replace charG '\n' with newlineG:

newlineG :: Grammar ()
newlineG = primitiveG "newline"

Now we get

*Main> putStrLn $ ppGrammar parseCSVG
{('"', {not-quote}, '"', {',', '"', {not-quote}, '"'} | ''), newline}

which is nice and correct, but still not quite the easily readable EBNF that we saw further up.

Code to produce EBNF, with productions

We currently let our grammars produce only the right-hand side of one EBNF production, but really, we want to produce a RHS that may refer to other productions. So let us change the type accordingly:

newtype Grammar a = G (BNF, RHS)

runGrammer :: String -> Grammar a -> BNF
runGrammer main (G (prods, rhs)) = prods ++ [(main, rhs)]

ppGrammar :: String -> Grammar a -> String
ppGrammar main g = ppBNF $ runGrammer main g

Now we have to adjust all our primitive combinators (but not the derived ones!):

charG :: Char -> Grammar ()
charG c = G ([], Terminal [c])

anyCharG :: Grammar Char
anyCharG = G ([], NonTerminal "char")

manyG :: Grammar a -> Grammar [a]
manyG (G (prods, rhs)) = G (prods, Repetition rhs)

mergeProds :: [Production] -> [Production] -> [Production]
mergeProds prods1 prods2 = nub $ prods1 ++ prods2

orElseG :: Grammar a -> Grammar a -> Grammar a
orElseG (G (prods1, rhs1)) (G (prods2, rhs2))
    = G (mergeProds prods1 prods2, Choice rhs1 rhs2)

instance Functor Grammar where
    fmap _ (G bnf) = G bnf

instance Applicative Grammar where
    pure x = G ([], Terminal "")
    G (prods1, Terminal "") <*> G (prods2, rhs2)
        = G (mergeProds prods1 prods2, rhs2)
    G (prods1, rhs1) <*> G (prods2, Terminal "")
        = G (mergeProds prods1 prods2, rhs1)
    G (prods1, rhs1) <*> G (prods2, rhs2)
        = G (mergeProds prods1 prods2, Sequence rhs1 rhs2)

primitiveG :: String -> Grammar a
primitiveG s = G (NonTerminal s)

The use of nub when combining productions removes duplicates that might be used in different parts of the grammar. Not efficient, but good enough for now.

Did we gain anything? Not yet:

*Main> putStr $ ppGrammar "csv" (parseCSVG)
csv = {('"', {not-quote}, '"', {',', '"', {not-quote}, '"'} | ''), newline};

But we can now introduce a function that lets us tell the system where to give names to a piece of grammar:

nonTerminal :: String -> Grammar a -> Grammar a
nonTerminal name (G (prods, rhs))
  = G (prods ++ [(name, rhs)], NonTerminal name)

Ample use of this in parseCSVG yields the desired result:

parseCSVG :: Grammar [[String]]
parseCSVG = manyG parseLine
    parseLine = nonTerminal "line" $
        parseCell `sepByG` charG ',' <* newline
    parseCell = nonTerminal "cell" $
        charG '"' *> manyG (primitiveG "not-quote") <* charG '"
*Main> putStr $ ppGrammar "csv" (parseCSVG)
cell = '"', {not-quote}, '"';
line = (cell, {',', cell} | ''), newline;
csv = {line};

This is great!

Unifying parsing and grammar-generating

Note how simliar parseCSVG and parseCSVP are! Would it not be great if we could implement that functionaliy only once, and get both a parser and a grammar description out of it? This way, the two would never be out of sync!

And surely this must be possible. The tool to reach for is of course to define a type class that abstracts over the parts where Parser and Grammer differ. So we have to identify all functions that are primitive in one of the two worlds, and turn them into type class methods. This includes char and orElse. It includes many, too: Although manyP is not primitive, manyG is. It also includes nonTerminal, which does not exist in the world of parsers (yet), but we need it for the grammars.

The primitiveG function is tricky. We use it in grammars when the code that we might use while parsing is not expressible as a grammar. So the solution is to let it take two arguments: A String, when used as a descriptive non-terminal in a grammar, and a Parser a, used in the parsing code.

Finally, the type classes that we except, Applicative (and thus Functor), are added as constraints on our type class:

class Applicative f => Descr f where
    char :: Char -> f ()
    many :: f a -> f [a]
    orElse :: f a -> f a -> f a
    primitive :: String -> Parser a -> f a
    nonTerminal :: String -> f a -> f a

The instances are easily written:

instance Descr Parser where
    char = charP
    many = manyP
    orElse = orElseP
    primitive _ p = p
    nonTerminal _ p = p

instance Descr Grammar where
    char = charG
    many = manyG
    orElse = orElseG
    primitive s _ = primitiveG s
    nonTerminal s g = nonTerminal s g

And we can now take the derived definitions, of which so far we had two copies, and define them once and for all:

many1 :: Descr f => f a -> f [a]
many1 p = pure (:) <*> p <*> many p

anyChar :: Descr f => f Char
anyChar = primitive "char" anyCharP

dottedWords :: Descr f => f [String]
dottedWords = many1 (many anyChar <* char '.')

sepBy :: Descr f => f a -> f () -> f [a]
sepBy p1 p2 = ((:) <$> p1 <*> (many (p2 *> p1))) `orElse` pure []

newline :: Descr f => f ()
newline = primitive "newline" (charP '\n')

And thus we now have our CSV parser/grammar generator:

parseCSV :: Descr f => f [[String]]
parseCSV = many parseLine
    parseLine = nonTerminal "line" $
        parseCell `sepBy` char ',' <* newline
    parseCell = nonTerminal "cell" $
        char '"' *> many (primitive "not-quote" (anyCharButP '"')) <* char '"'

We can now use this definition both to parse and to generate grammars:

*Main> putStr $ ppGrammar2 "csv" (parseCSV)
cell = '"', {not-quote}, '"';
line = (cell, {',', cell} | ''), newline;
csv = {line};
*Main> parse parseCSV "\"ab\",\"cd\"\n\"\",\"de\"\n\n"
Just [["ab","cd"],["","de"],[]]

The INI file parser and grammar

As a final exercise, let us transform the INI file parser into a combined thing. Here is the parser (another artifact of last week’s homework) again using applicative style2:

parseINIP :: Parser INIFile
parseINIP = many1P parseSection
    parseSection =
        (,) <$  charP '['
            <*> parseIdent
            <*  charP ']'
            <*  charP '\n'
            <*> (catMaybes <$> manyP parseLine)
    parseIdent = many1P letterOrDigitP
    parseLine = parseDecl `orElseP` parseComment `orElseP` parseEmpty

    parseDecl = Just <$> (
        (,) <*> parseIdent
            <*  manyP (charP ' ')
            <*  charP '='
            <*  manyP (charP ' ')
            <*> many1P (anyCharButP '\n')
            <*  charP '\n')

    parseComment =
        Nothing <$ charP '#'
                <* many1P (anyCharButP '\n')
                <* charP '\n'

    parseEmpty = Nothing <$ charP '\n'

Transforming that to a generic description is quite straight-forward. We use primitive again to wrap letterOrDigitP:

descrINI :: Descr f => f INIFile
descrINI = many1 parseSection
    parseSection =
        (,) <*  char '['
            <*> parseIdent
            <*  char ']'
            <*  newline
            <*> (catMaybes <$> many parseLine)
    parseIdent = many1 (primitive "alphanum" letterOrDigitP)
    parseLine = parseDecl `orElse` parseComment `orElse` parseEmpty

    parseDecl = Just <$> (
        (,) <*> parseIdent
            <*  many (char ' ')
            <*  char '='
            <*  many (char ' ')
            <*> many1 (primitive "non-newline" (anyCharButP '\n'))
	    <*  newline)

    parseComment =
        Nothing <$ char '#'
                <* many1 (primitive "non-newline" (anyCharButP '\n'))
		<* newline

    parseEmpty = Nothing <$ newline

This yields this not very helpful grammar (abbreviated here):

*Main> putStr $ ppGrammar2 "ini" descrINI
ini = '[', alphanum, {alphanum}, ']', newline, {alphanum, {alphanum}, {' '}…

But with a few uses of nonTerminal, we get something really nice:

descrINI :: Descr f => f INIFile
descrINI = many1 parseSection
    parseSection = nonTerminal "section" $
        (,) <$  char '['
            <*> parseIdent
            <*  char ']'
            <*  newline
            <*> (catMaybes <$> many parseLine)
    parseIdent = nonTerminal "identifier" $
        many1 (primitive "alphanum" letterOrDigitP)
    parseLine = nonTerminal "line" $
        parseDecl `orElse` parseComment `orElse` parseEmpty

    parseDecl = nonTerminal "declaration" $ Just <$> (
        (,) <$> parseIdent
            <*  spaces
            <*  char '='
            <*  spaces
            <*> remainder)

    parseComment = nonTerminal "comment" $
        Nothing <$ char '#' <* remainder

    remainder = nonTerminal "line-remainder" $
        many1 (primitive "non-newline" (anyCharButP '\n')) <* newline

    parseEmpty = Nothing <$ newline

    spaces = nonTerminal "spaces" $ many (char ' ')
*Main> putStr $ ppGrammar "ini" descrINI
identifier = alphanum, {alphanum};
spaces = {' '};
line-remainder = non-newline, {non-newline}, newline;
declaration = identifier, spaces, '=', spaces, line-remainder;
comment = '#', line-remainder;
line = declaration | comment | newline;
section = '[', identifier, ']', newline, {line};
ini = section, {section};

Recursion (variant 1)

What if we want to write a parser/grammar-generator that is able to generate the following grammar, which describes terms that are additions and multiplications of natural numbers:

const = digit, {digit};
spaces = {' ' | newline};
atom = const | '(', spaces, expr, spaces, ')', spaces;
mult = atom, {spaces, '*', spaces, atom}, spaces;
plus = mult, {spaces, '+', spaces, mult}, spaces;
expr = plus;

The production of expr is recursive (via plus, mult, atom). We have seen above that simply defining a Grammar a recursively does not go well.

One solution is to add a new combinator for explicit recursion, which replaces nonTerminal in the method:

class Applicative f => Descr f where
    recNonTerminal :: String -> (f a -> f a) -> f a

instance Descr Parser where
    recNonTerminal _ p = let r = p r in r

instance Descr Grammar where
    recNonTerminal = recNonTerminalG

recNonTerminalG :: String -> (Grammar a -> Grammar a) -> Grammar a
recNonTerminalG name f =
    let G (prods, rhs) = f (G ([], NonTerminal name))
    in G (prods ++ [(name, rhs)], NonTerminal name)

nonTerminal :: Descr f => String -> f a -> f a
nonTerminal name p = recNonTerminal name (const p)

runGrammer :: String -> Grammar a -> BNF
runGrammer main (G (prods, NonTerminal nt)) | main == nt = prods
runGrammer main (G (prods, rhs)) = prods ++ [(main, rhs)]

The change in runGrammer avoids adding a pointless expr = expr production to the output.

This lets us define a parser/grammar-generator for the arithmetic expressions given above:

data Expr = Plus Expr Expr | Mult Expr Expr | Const Integer
    deriving Show

mkPlus :: Expr -> [Expr] -> Expr
mkPlus = foldl Plus

mkMult :: Expr -> [Expr] -> Expr
mkMult = foldl Mult

parseExpr :: Descr f => f Expr
parseExpr = recNonTerminal "expr" $ \ exp ->
    ePlus exp

ePlus :: Descr f => f Expr -> f Expr
ePlus exp = nonTerminal "plus" $
    mkPlus <$> eMult exp
           <*> many (spaces *> char '+' *> spaces *> eMult exp)
           <*  spaces

eMult :: Descr f => f Expr -> f Expr
eMult exp = nonTerminal "mult" $
    mkPlus <$> eAtom exp
           <*> many (spaces *> char '*' *> spaces *> eAtom exp)
           <*  spaces

eAtom :: Descr f => f Expr -> f Expr
eAtom exp = nonTerminal "atom" $
    aConst `orElse` eParens exp

aConst :: Descr f => f Expr
aConst = nonTerminal "const" $ Const . read <$> many1 digit

eParens :: Descr f => f a -> f a
eParens inner =
    id <$  char '('
       <*  spaces
       <*> inner
       <*  spaces
       <*  char ')'
       <*  spaces

And indeed, this works:

*Main> putStr $ ppGrammar "expr" parseExpr
const = digit, {digit};
spaces = {' ' | newline};
atom = const | '(', spaces, expr, spaces, ')', spaces;
mult = atom, {spaces, '*', spaces, atom}, spaces;
plus = mult, {spaces, '+', spaces, mult}, spaces;
expr = plus;

Recursion (variant 1)

Interestingly, there is another solution to this problem, which avoids introducing recNonTerminal and explicitly passing around the recursive call (i.e. the exp in the example). To implement that we have to adjust our Grammar type as follows:

newtype Grammar a = G ([String] -> (BNF, RHS))

The idea is that the list of strings is those non-terminals that we are currently defining. So in nonTerminal, we check if the non-terminal to be introduced is currently in the process of being defined, and then simply ignore the body. This way, the recursion is stopped automatically:

nonTerminalG :: String -> (Grammar a) -> Grammar a
nonTerminalG name (G g) = G $ \seen ->
    if name `elem` seen
    then ([], NonTerminal name)
    else let (prods, rhs) = g (name : seen)
         in (prods ++ [(name, rhs)], NonTerminal name)

After adjusting the other primitives of Grammar (including the Functor and Applicative instances, wich now again have nonTerminal) to type-check again, we observe that this parser/grammar generator for expressions, with genuine recursion, works now:

parseExp :: Descr f => f Expr
parseExp = nonTerminal "expr" $

ePlus :: Descr f => f Expr
ePlus = nonTerminal "plus" $
    mkPlus <$> eMult
           <*> many (spaces *> char '+' *> spaces *> eMult)
           <*  spaces

eMult :: Descr f => f Expr
eMult = nonTerminal "mult" $
    mkPlus <$> eAtom
           <*> many (spaces *> char '*' *> spaces *> eAtom)
           <*  spaces

eAtom :: Descr f => f Expr
eAtom = nonTerminal "atom" $
    aConst `orElse` eParens parseExp

Note that the recursion is only going to work if there is at least one call to nonTerminal somewhere around the recursive calls. We still cannot implement many as naively as above.


If you want to play more with this: The homework is to define a parser/grammar-generator for EBNF itself, as specified in this variant:

identifier = letter, {letter | digit | '-'};
spaces = {' ' | newline};
quoted-char = non-quote-or-backslash | '\\', '\\' | '\\', '\'';
terminal = '\'', {quoted-char}, '\'', spaces;
non-terminal = identifier, spaces;
option = '[', spaces, rhs, spaces, ']', spaces;
repetition = '{', spaces, rhs, spaces, '}', spaces;
group = '(', spaces, rhs, spaces, ')', spaces;
atom = terminal | non-terminal | option | repetition | group;
sequence = atom, {spaces, ',', spaces, atom}, spaces;
choice = sequence, {spaces, '|', spaces, sequence}, spaces;
rhs = choice;
production = identifier, spaces, '=', spaces, rhs, ';', spaces;
bnf = production, {production};

This grammar is set up so that the precedence of , and | is correctly implemented: a , b | c will parse as (a, b) | c.

In this syntax for BNF, terminal characters are quoted, i.e. inside '…', a ' is replaced by \' and a \ is replaced by \\ – this is done by the function quote in ppRHS.

If you do this, you should able to round-trip with the pretty-printer, i.e. parse back what it wrote:

*Main> let bnf1 = runGrammer "expr" parseExpr
*Main> let bnf2 = runGrammer "expr" parseBNF
*Main> let f = Data.Maybe.fromJust . parse parseBNF. ppBNF
*Main> f bnf1 == bnf1
*Main> f bnf2 == bnf2

The last line is quite meta: We are unsing parseBNF as a parser on the pretty-printed grammar produced from interpreting parseBNF as a grammar.


We have again seen an example of the excellent support for abstraction in Haskell: Being able to define so very different things such as a parser and a grammar description with the same code is great. Type classes helped us here.

Note that it was crucial that our combined parser/grammars are only able to use the methods of Applicative, and not Monad. Applicative is less powerful, so by giving less power to the user of our Descr interface, the other side, i.e. the implementation, can be more powerful.

The reason why Applicative is ok, but Monad is not, is that in Applicative, the results do not affect the shape of the computation, whereas in Monad, the whole point of the bind operator (>>=) is that the result of the computation is used to decide the next computation. And while this is perfectly fine for a parser, it just makes no sense for a grammar generator, where there simply are no values around!

We have also seen that a phantom type, namely the parameter of Grammar, can be useful, as it lets the type system make sure we do not write nonsense. For example, the type of orElseG ensures that both grammars that are combined here indeed describe something of the same type.

  1. It seems to be the week of applicative-appraising blog posts: Brent has posted a nice piece about enumerations using Applicative yesterday.

  2. I like how in this alignment of <*> and <* the > point out where the arguments are that are being passed to the function on the left.

Ideas from CBC Radio (Highlights): Dust to Dust: Notes on rituals for the dead

How do we meet the needs of the dead and to our own? Barbara Nichol talks with anthropologists and historians about the role that ritual plays in our attempts to cope with the conundrum of the corpse.

ScreenAnarchy: HAVANA DARKNESS: Hunting For Hemingway And Humans For Sport

Touting itself as the fist English language horror film to be shot in Cuba, Guillermo Iván's Havana Darkness is looking to make a big impression on buyers at EFM in Berlin in the new year. Iván directed, wrote and stars in his own film. Still in post production, we were sent a trailer from one of the production companies, Open Frames, for you viewing enjoyment.    When historian Carlos Carrasco comes into possession of a manuscript that he believes to have been written by the late, great Ernest Hemmingway during his stay in Havana, Cuba, he embarks on a journey from New York City with his two close friends, John and Karen, to the bustling Caribbean island in an attempt to prove the manuscripts’ authenticity....

[Read the whole post on]

explodingdog: You can find me at -Sam

You can find me at -Sam

Disquiet: What Sound Looks Like


An ongoing series cross-posted from

things magazine: Books about things

Grim London, a macabre map of the capital / McMansion Hell, the ten circles of housing insanity / A Brief History of the Studio as an Instrument, over at the Ableton website / The Adventures of Tintin: Breaking Free, anarchism … Continue reading

Planet Lisp: Lispjobs: Clojure Engineer, Funding Circle, San Francisco


Would you describe yourself as a creative and ambitious engineer who's always ready to take on the next cutting edge technology? If your answer is yes, you're going to fit right in with our global team. We're looking for an experienced and enthusiastic Clojure Engineer who will bring elegance and simplicity to the forefront of our distributed systems. We are a group of passionate engineers whose bread and butter is learning new technologies and fostering a collaborative and inclusive environment – we're looking for partners in crime who feel the same.

Bird's eye view of the role:

  • Be an automator: we are continually reevaluating our stack to improve efficiency throughout the pipeline. We practice continuous integration and have a container-based deployment workflow.
  • Be a builder: you'll build and expand our highly-available architecture to handle over $2 billion in loans originated through our pipeline.
  • Be a collector: you'll help build scalable infrastructure to collect data for real time analytics and risk modeling.
  • Be a collaborator: you'll be expected to forge deep bonds with your business counterparts to truly understand the needs of our Borrowers and Investors. We work in an Agile environment including pair programming and daily stand-ups.
  • Be a teacher: be generous with your time and expertise to teach stakeholders and our fellow engineers how to answer their own questions with tools you build.

Our ideal teammate has:

  • at least 1 year of professional experience working with Clojure (or really strong personal projects using Clojure).
  • 3+ years of overall software engineering experience in any language (Ruby, Python, Java, etc).
  • an interest in Functional Programming languages.
  • comfortable in a Unix/Linux environment.

Brownie points for:

  • Github or other open source code we can check out.
  • distributed systems experience.
  • experience with microservices and/or event-driven architecture.
  • operating at scale with low-latency systems.
  • familiarity with Docker, Mesos, and/or experience with distributed database systems, such as Cassandra

Quiet Earth: VIFF 2016: THE INTESTINE Review

Until now, Lev Lewis has been best known as an accomplished composer but with his debut feature The Intestine, he also proves to have some considerable talent as a writer/director.

On the surface, The Intestine is a weird little dramatic thriller starring Melanie J. Scheiner as Maya, a young woman barely eking out an existence in a big city. She works a crummy job, lives in a dumpy apartment with her drug addicted mother and is generally miserable.

While out one night she picks up a man and spends the night at his well appointed house in the suburbs. She wakes up alone in the big house and spends the day snooping around. When he doesn't come home that night, rather than going home, she spends the night in the big house, imagining that she belongs there.

One nig [Continued ...]

CreativeApplications.Net: Oscilloscope Music / Jerobeam Fenderson and Hansi Raber

oscilloscope_musicCreated by Jerobeam Fenderson and Hansi Raber, Oscilloscope Music is an audio-visual album that uses old analogue oscilloscopes for displaying hand crafted waveforms as x-y plot.

Colossal: Bright Environmental Paintings Focused on Survival by Artist Julie Heffernan


Artist Julie Heffernan's paintings are technically complicated, layers of detail filling her often 5-foot-tall canvases. Although enchanting, her environments reference disaster and distress, situations that peek into how we might reposition ourselves in nature after massive traumas such as Hurricane Katrina and the BP oil spill.

“We are slowly making our world unlivable, and I want to bring to the surface the destructive action, waster, and contamination that is generally invisible to us,” says Heffernan in her artist statement. “I need to imagine another way, to outfit myself with signs and banners that speak louder than I can, to envision how we might remake the world as it is slowly falling apart.”

Another far lighter inspiration Heffernan works with in her paintings is the childhood game of Chutes and Ladders. Like the climbing, twisting, and meandering board game, her paintings allow the eye to crawl up, down, and around the forests and mountains she paints. You can see more of these ambitious landscape works on her portfolio site, and read her own thoughts on painting on her blog, Painters on Paintings. (via Booooooom)



julieheffernan_07  julieheffernan_04





Quiet Earth: VIFF 2016: ANOTHER EVIL Review

When you hear that a movie was one of the funniest things anyone saw at SXSW and then follow it up with info that the writer/direct has also written for "Eastbound and Down" and "Silicon Valley," one naturally prepares for laughs. At least I did when I sat down to watch Carson D. Mell's Another Evil.

The thing with comedy is that, even more so than other genres, it's very particular and what works for some doesn't work for others and as much as I've enjoyed Mell's other work, this really isn't for me.

The concept for Another Evil is pretty typical horror stuff. Dan, an artist, is spending some time at his vacation home with his wife Mary and their teenage son when they begin to see apparitions. Convinced that the house has become haunted, Mary finds an exorcist to co [Continued ...]

OUR VALUED CUSTOMERS: While discussing the newest episode of The WALKING DEAD...

Colossal: A Child’s Drawings Turned Into Realistic Imaginings of Animals, Cars, and People



An artist is turning his 6-year-old son Dom’s wild imagination and childlike drawing skills into realistic renderings of animals and cars, transforming rough sketches into Photoshop masterpieces. The father and son pair have a project titled Things I Have Drawn, an account that chronicles their collaborative illustrations of misshapen dolphins, wobbly vehicles, and laughing lions. In addition to their drawings, Dom’s father also makes up rhymes for each of his son’s creations, bringing a storybook quality to each strange and endearing work. You can see more of their animal portraits on their Instagram @thingsihavedrawn. (via Designboom)












Michael Geist: The Devil is in the Details: Why CETA is on the Verge of Collapse

The seeming collapse of the trade agreement between Canada and the European Union (CETA) has created obvious disappointment for International Trade Minister Chrystia Freeland and the entire Canadian government, which made the deal as its top trade issue. Efforts to salvage CETA will undoubtedly continue, but my Globe and Mail column points out that the underlying problem with the agreement is not the complicated European political system that requires support from all member states.

Rather, it is the expansion of trade negotiations from agreements that once focused primarily on tariff reductions to far broader regulatory documents that now mandate domestic legal reforms and establish dispute resolution systems that can be result in huge liability for national governments. This enlarged approach to trade deals, which can also be found in the controversial Trans Pacific Partnership (TPP), run the risk of surrendering domestic policy choices to other countries or dispute tribunals.

If CETA were limited to tariff reductions, it would be relatively uncontroversial. The discomfort with the agreement lies instead in the mandated changes to domestic regulations and the creation of investor – state dispute settlement mechanisms that may prioritize corporate concerns over local rules.

Regulatory provisions in CETA mean that both parties face the prospect of changing national laws to accommodate foreign businesses. For example, CETA requires Canada to expand patent protections, largely due to demands from European pharmaceutical companies. The required changes would add billions to Canadian health care costs by extending the term of protection for popular drugs. Similarly, European countries would face the prospect of altering food and safety regulations as part of their end of the bargain.

The insistence on including investor – state dispute resolution provisions are particularly puzzling. These rules, which allow companies to seek damages where local regulations interfere with their economic expectations, are commonly found in foreign investment treaties with developing countries whose court systems are unknown or viewed as risky by potential investors.

There are no such risks in Canada and Europe, however, since both offer reliable, respected court systems that are widely used by companies from around the world.

The full column is posted here.

The post The Devil is in the Details: Why CETA is on the Verge of Collapse appeared first on Michael Geist.

Saturday Morning Breakfast Cereal: Saturday Morning Breakfast Cereal - Progress

Now, it's time to create a pig that can fly.

New comic!
Today's News:

Perlsphere: What’s next for bash, completion-wise?

Trying out completion feature in several other shells which I don’t use daily–including zsh, tcsh, and fish–I can’t help but comparing them with bash.

IMHO, the last major feature in completion in bash happens in 2009-2010, when bash 4.1 introduces -D option for the “complete” command. This enables fallback/catch-all mechanism like already found in other shells like fish and zsh. When a user requests completion for a command that does not yet have a completion definition, the hook function specified in “complete -D” can execute and find a completion definition somewhere. And the completion can be activated right there and then instead of having to wait for the next command (or after the user logs out and logs in again). A major convenience as completion can be activated or deactivated instantly.

The subsequent major bash versions don’t introduce anything ground-breaking in terms of completion: 4.2 allows us to configure the number of columns used when displaying completion (nice, but not an additional core functionality) and case-map to treat underscore and dash as the same (really convenient, but we can do that ourselves if we want using function or external command backend). 4.3 introduces “-o noquote” and 4.4 introduces “-o nosort” which are just minor.

Completion description. As many bash users who have tasted fish and zsh would agree, I think bash really needs to add the feature of showing description/help text next to each completion answer. This is a major boost for CLI usability. For example, user can see or be reminded of what each command option does instead of having to “man” or open a browser to Google for it.

Menu select. The other popular feature is “menu select” like in zsh (not to be confused with the already existing option “menu-completion” in bash), where after the user presses Tab and is presented with the list of completions, she can use arrow keys to select the completion she wants instead of typing. This is nice but of lesser impact compared to the previous item. A seasoned CLI user would prefer and can complete faster using typing anyway. What I think would be really nifty is incremental matching, where the list of completions is reduced or expanded as the user types. So for example you press “deluser t” and get presented with a list of 30 usernames starting with “t”. You can now type more letters to match fewer of those names until you get the one you want. The list displayed interactively shrinks or reexpands to show only the matching items. The exact detail of how this would work can be tuned to be as comfortable and powerful as possible. What I described just now is actually just a UI (TUI?) improvement of the functionality already present, as when we use tab completion we often do just that, albeit without the interactive list being displayed automatically (we still need to press Tab whenever we want to get the list of completions).

Colors. Fish utilizes colors a lot, for good purpose. For example if you type “ls -” in fish you’ll get a much nicer output compared to in bash. This lets you scan the list faster. It would be nice if we can show colors more in the list of completion in bash.

New Humanist Blog: How can we make sense of death?

Q&A with Andrew Stark, author of a new book on the stories we tell ourselves to comprehend mortality.

New Humanist Blog: The last city of the Soviets

After the catastrophe of Chernobyl, Soviet architects built a new ideal city on humanist principles, the Ukrainian town of Slavutych.

Perlsphere: Adding support for fish, zsh, tcsh in shcompgen

I’ve recently added support for the other three shells (fish, zsh, tcsh) in shcompgen. shcompgen is basically a utility to write those shell commands “complete -C foo foo” or “complete -c foo -l longopt1 –description ‘Add a thing to foo'” for you. It recognizes scripts written using Getopt::Long::Complete, Perinci::CmdLine, and a few others so that you can enable shell tab completion for your scripts.

fish. Enabling tab completion for a command in fish is relatively simple. For each short/long option of a command, you can define a separate “complete” command, e.g.:

complete -c man -s k --description "Show apropos information"
complete -rc man -s C --description "Configuration file"
complete -xc man -a 1 --description "Program section"
complete -xc man -a 2 --description "Syscall section"
complete -xc man -a 3 --description "Library section"

Doing this has the advantage of fish knowing about the each program option and its description, so you can get a prettier/more informative completion. It is not possible to just say like in bash “complete -F somefunc cmd; # delegate completion to a function” or “complete -C somecmd cmd ; # delegate completion to an external command”. It’s also possible to just delegate to the program entirely a la bash’s “complete -C”:

complete -c somecmd -a '(begin; set -lx COMP_SHELL fish; set -lx COMP_LINE (commandline); set -lx COMP_POINT (commandline -C); shcompgen; end)'

zsh. Completion in zsh is complex and complicated with lots and lots of options, if not featureful. You can, in theory, use “complete” or “compgen” command like in bash because zsh has “bashcompinit” that (partially) simulates those two bash commands. This enables you to reuse your bash completion definitions in zsh. I tried to do that but didn’t succeed though.

#compdef pmman
autoload bashcompinit
# this is bash-style
complete -C pmman pmman

The commands I type will sometimes complete, but at other times won’t. So I use “compadd” instead, which is the standard way to add completion results in zsh. For example:

#compdef pmman
_pmman() {
_pmman "$@"

tcsh. tcsh lacks a fallback or autoload mechanism (like “complete -D” in bash or similar mechanism in fish and zsh), so activating or deactivating completion for a command requires you to explicitly re-source a definition script or logout + login again.

Tab completion now works in zsh, fish, and tcsh but since I don’t use those shells daily and am not familiar enough with them, there are still known issues (documented in the shcompgen’s POD) like with escaping of special characters like whitespace. I hope that Perl programmers that use one of those shells can give inputs on how to resolve the issues.

Better Embedded System SW: Peer Review Tutorial

Here's a preview video on Peer Review (about 1 minute of content, plus leader/trailer stuff).  There is also a full version of this video available for free from the Edge Case Research video library (see below for details).

Full tutorial video:

  • Peer review finds half the defects for 10% of the project cost. (Blog)
  • But they only work if you actually do the reviews! (Blog)
  • If you're finding more than 50% of your defects in test instead of peer review, then your peer reviews are broken. It's as simple as that. (Blog)
  • Here's a peer review checklist to get you started. (Blog) You should customize it to your needs.
For more about Edge Case Research and how to subscribe to our video training channel, please see this Blog posting.

Perlsphere: Tau Station Updates

I haven't blogged lately because of ridiculous amounts of work on the Tau Station MMORPG (the game formerly known as Veure and written almost entirely in Perl). I had reluctantly stopped my last contract with ZipRecruiter because of surgery (long story, but not life-threatening) and then experiencing the joy of physiotherapy. Near the end of physio, we decided as a company to make a serious push on Tau Station and bring it to alpha. Here's an update.

wallpaper mockup of Tau Station art

(If you're curious, the above graphic is some low-res concept art I threw together for a desktop wallpaper. The font and its color are wrong, so we didn't use it, but I still like it. The image in the background is of the ruins of one of the space stations in the game. Click on it for a larger version.)

If you're not familiar with the game, it's an attempt to create a text MMORPG with the richness of top-tier graphic MMORPGs. It's hard, and the "text-based" moniker is hanging around our neck like an albatross. We've heard people from other companies think that it's a simple amateur Web site. People are thinking MUD, or Zork, or some weird Web version of those old "choose your own adventure" flip books. It's none of those. For example, here's our sickbay:

example of the Web interface for the Tau Station game

So yes, it's text, but no, it's not simple. As for the game theme, I like to think "Firefly meets Mad Max." This blog post explains more about the setting.

A few notes about it:

  • It's designed "mobile first," but naturally still looks awesome in a regular browser
  • It's "progressive enhancement" instead of "graceful degradation" because the latter is often isn't
  • We're working hard to make it accessible as possible so that anyone can play
  • Our standing rule for devs: they're free to open source anything (with approval) so long as it doesn't give away game play

Internally the code is pretty darned clean. It's not perfect, but for a business, it's the best code I've ever seen. We also have awesome test coverage to the point where if something is broken, we almost always find it immediately in the tests. That sounds like a "duh" moment, but in reality, it's simply not true for the vast majority of company test suites I've worked on.

$ prove -rl t
t/001sanity.t ..... ok   
t/002selenium.t ... skipped: Skipping Selenium tests by default
t/003templates.t .. ok     
t/perlcritic.t .... ok     
t/sqitch.t ........ ok     
t/tcm.t ........... ok       
All tests successful.
Files=6, Tests=1377, 399 wallclock secs ( 1.11 usr  0.17 sys + 630.44 cusr 11.22 csys = 642.94 CPU)
Result: PASS

Note that the t/tcm.t tests use Test::Class::Moose and are actually around 7,500 individual tests. That may not seem like a lot, but many of those are full integration tests and capture a huge amount of behavior. Due to how inter-related so many features are--especially compared to "normal" software--this has been hugely beneficial.

As for features, I'm currently building out the career task system. In addition to missions and odd jobs, careers are long-term, such as politician, operative, criminal, and so on. You can get promoted or demoted by succeeding or failing at enough career tasks. Of course, you don't really know how much beneficial each task is, and illegal or dangerous tasks just might send you to the brig or sickbay ...

Sign up for our newsletter if you want to keep up with the latest news. Comic for 2016.10.25

New Cyanide and Happiness Comic

Planet Haskell: Brent Yorgey: Adventures in enumerating balanced brackets

Since I’ve been coaching my school’s ACM ICPC programming team, I’ve been spending a bit of time solving programming contest problems, partly to stay sharp and be able to coach them better, but also just for fun.

I recently solved a problem (using Haskell) that ended up being tougher than I thought, but I learned a lot along the way. Rather than just presenting a solution, I’d like to take you through my thought process, crazy detours and all.

Of course, I should preface this with a big spoiler alert: if you want to try solving the problem yourself, you should stop reading now!

> {-# LANGUAGE GADTs #-}
> {-# LANGUAGE DeriveFunctor #-}
> module Brackets where
> import Data.List (sort, genericLength)
> import Data.MemoTrie (memo, memo2)
> import Prelude hiding ((++))

The problem

There’s a lot of extra verbiage at the official problem description, but what it boils down to is this:

Find the mth element of the lexicographically ordered sequence of all balanced bracketings of length n.

There is a longer description at the problem page, but hopefully a few examples will suffice. A balanced bracketing is a string consisting solely of parentheses, in which opening and closing parens can be matched up in a one-to-one, properly nested way. For example, there are five balanced bracketings of length 6:

((())), (()()), (())(), ()(()), ()()()

By lexicographically ordered we just mean that the bracketings should be in “dictionary order” where ( comes before ), that is, bracketing x comes before bracketing y if and only if in the first position where they differ, x has ( and y has ). As you can verify, the list of length-6 bracketings above is, in fact, lexicographically ordered.

A first try

Oh, this is easy, I thought, especially if we consider the well-known isomorphism between balanced bracketings and binary trees. In particular, the empty string corresponds to a leaf, and (L)R (where L and R are themselves balanced bracketings) corresponds to a node with subtrees L and R. So the five balanced bracketings of length 6 correspond to the five binary trees with three nodes:

We can easily generate all the binary trees of a given size with a simple recursive algorithm. If n = 0, generate a Leaf; otherwise, decide how many nodes to put on the left and how many on the right, and for each such distribution recursively generate all possible trees on the left and right.

> data Tree where
>   Leaf :: Tree
>   Node :: Tree -> Tree -> Tree
>   deriving (Show, Eq, Ord)
> allTrees :: Int -> [Tree]
> allTrees 0 = [Leaf]
> allTrees n =
>   [ Node l r
>   | k <- [0 .. n-1]
>   , l <- allTrees ((n-1) - k)
>   , r <- allTrees k
>   ]

We generate the trees in “left-biased” order, where we first choose to put all n-1 nodes on the left, then n-2 on the left and 1 on the right, and so on. Since a subtree on the left will result in another opening paren, but a subtree on the right will result in a closing paren followed by an open paren, it makes intuitive sense that this corresponds to generating bracketings in sorted order. You can see that the size-3 trees above, generated in left-biased order, indeed have their bracketings sorted.

Writing allTrees is easy enough, but it’s definitely not going to cut it: the problem states that we could have up to n = 1000. The number of trees with 1000 nodes has 598 digits (!!), so we can’t possibly generate the entire list and then index into it. Instead we need a function that can more efficiently generate the tree with a given index, without having to generate all the other trees before it.

So I immediately launched into writing such a function, but it’s tricky to get right. It involves computing Catalan numbers, and cumulative sums of products of Catalan numbers, and divMod, and… I never did get that function working properly.

The first epiphany

But I never should have written that function in the first place! What I should have done first was to do some simple tests just to confirm my intuition that left-biased tree order corresponds to sorted bracketing order. Because if I had, I would have found this:

> brackets :: Tree -> String
> brackets Leaf       = ""
> brackets (Node l r) = mconcat ["(", brackets l, ")", brackets r]
> sorted :: Ord a => [a] -> Bool
> sorted xs = xs == sort xs
ghci> sorted (map brackets (allTrees 3))

ghci> sorted (map brackets (allTrees 4))

As you can see, my intuition actually led me astray! n = 3 is a small enough case that left-biased order just happens to be the same as sorted bracketing order, but for n = 4 this breaks down. Let’s see what goes wrong:

In the top row are the size-4 trees in “left-biased” order, i.e. the order generated by allTrees. You can see it is nice and symmetric: reflecting the list across a vertical line leaves it unchanged. On the bottom row are the same trees, but sorted lexicographically by their bracketings. You can see that the lists are almost the same except the red tree is in a different place. The issue is the length of the left spine: the red tree has a left spine of three nodes, which means its bracketing will begin with (((, so it should come before any trees with a left spine of length 2, even if they have all their nodes in the left subtree (whereas the red tree has one of its nodes in the right subtree).

My next idea was to try to somehow enumerate trees in order by the length of their left spine. But since I hadn’t even gotten indexing into the original left-biased order to work, it seemed hopeless to get this to work by implementing it directly. I needed some bigger guns.

Building enumerations

At this point I had the good idea to introduce some abstraction. I defined a type of enumerations (a la FEAT or data/enumerate):

> data Enumeration a = Enumeration
>   { fromNat :: Integer -> a
>   , size    :: Integer
>   }
>   deriving Functor
> enumerate :: Enumeration a -> [a]
> enumerate (Enumeration f n) = map f [0..n-1]

An Enumeration consists of a size along with a function Integer -> a, which we think of as being defined on [0 .. size-1]. That is, an Enumeration is isomorphic to a finite list of a given length, where instead of explicitly storing the elements, we have a function which can compute the element at a given index on demand. If the enumeration has some nice combinatorial structure, then we expect that this on-demand indexing can be done much more efficiently than simply listing all the elements. The enumerate function simply turns an Enumeration into the corresponding finite list, by mapping the indexing function over all possible indices.

Note that Enumeration has a natural Functor instance, which GHC can automatically derive for us. Namely, if e is an Enumeration, then fmap f e is the Enumeration which first computes the element of e for a given index, and then applies f to it before returning.

Now, let’s define some combinators for building Enumerations. We expect them to have all the nice algebraic flavor of finite lists, aka free monoids.

First, we can create empty or singleton enumerations, or convert any finite list into an enumeration:

> empty :: Enumeration a
> empty = Enumeration (const undefined) 0
> singleton :: a -> Enumeration a
> singleton a = Enumeration (\_ -> a) 1
> list :: [a] -> Enumeration a
> list as = Enumeration (\n -> as !! fromIntegral n) (genericLength as)
ghci> enumerate (empty :: Enumeration Int)

ghci> enumerate (singleton 3)

ghci> enumerate (list [4,6,7])

We can form the concatenation of two enumerations. The indexing function compares the given index against the size of the first enumeration, and then indexes into the first or second enumeration appropriately. For convenience we can also define union, which is just an iterated version of (++).

> (++) :: Enumeration a -> Enumeration a -> Enumeration a
> e1 ++ e2 = Enumeration
>   (\n -> if n < size e1 then fromNat e1 n else fromNat e2 (n - size e1))
>   (size e1 + size e2)
> union :: [Enumeration a] -> Enumeration a
> union = foldr (++) empty
ghci> enumerate (list [3, 5, 6] ++ empty ++ singleton 8)

Finally, we can form a Cartesian product: e1 >< e2 is the enumeration of all possible pairs of elements from e1 and e2, ordered so that all the pairs formed from the first element of e1 come first, followed by all the pairs with the second element of e1, and so on. The indexing function divides the given index by the size of e2, and uses the quotient to index into e1, and the remainder to index into e2.

> (><) :: Enumeration a -> Enumeration b -> Enumeration (a,b)
> e1 >< e2 = Enumeration
>   (\n -> let (l,r) = n `divMod` size e2 in (fromNat e1 l, fromNat e2 r))
>   (size e1 * size e2)
ghci> enumerate (list [1,2,3] >< list [10,20])

ghci> let big = list [0..999] >< list [0..999] >< list [0..999] >< list [0..999]
ghci> fromNat big 2973428654

Notice in particular how the fourfold product of list [0..999] has 1000^4 = 10^{12} elements, but indexing into it with fromNat is basically instantaneous.

Since Enumerations are isomorphic to finite lists, we expect them to have Applicative and Monad instances, too. First, the Applicative instance is fairly straightforward:

> instance Applicative Enumeration where
>   pure    = singleton
>   f <*> x = uncurry ($) <$> (f >< x)
ghci> enumerate $ (*) <$> list [1,2,3] <*> list [10, 100]

pure creates a singleton enumeration, and applying an enumeration of functions to an enumeration of arguments works by taking a Cartesian product and then applying each pair.

The Monad instance works by substitution: in e >>= k, the continuation k is applied to each element of the enumeration e, and the resulting enumerations are unioned together in order.

> instance Monad Enumeration where
>   return  = pure
>   e >>= f = union (map f (enumerate e))
ghci> enumerate $ list [1,2,3] >>= \i -> list (replicate i i)

Having to actually enumerate the elements of e is a bit unsatisfying, but there is really no way around it: we otherwise have no way to know how big the resulting enumerations are going to be.

Now, that function I tried (and failed) to write before that generates the tree at a particular index in left-biased order? Using these enumeration combinators, it’s a piece of cake. Basically, since we built up combinators that mirror those available for lists, it’s just as easy to write this indexing version as it is to write the original allTrees function (which I’ve copied below for comparison):

allTrees :: Int -> [Tree]
allTrees 0 = [Leaf]
allTrees n =
  [ Node l r
  | k <- [0 .. n-1]
  , l <- allTrees ((n-1) - k)
  , r <- allTrees k
> enumTrees :: Int -> Enumeration Tree
> enumTrees 0 = singleton Leaf
> enumTrees n = union
>   [ Node <$> enumTrees (n-k-1) <*> enumTrees k
>   | k <- [0 .. n-1]
>   ]

(enumTrees and allTrees look a bit different, but actually allTrees can be rewritten in a very similar style:

allTrees :: Int -> [Tree]
allTrees 0 = [Leaf]
allTrees n = concat
  [ Node <$> allTrees ((n-1) - k) <*> r <- allTrees k
  | k <- [0 .. n-1]

Doing as much as possible using the Applicative interface gives us added “parallelism”, which in this case means the ability to index directly into a product with divMod, rather than scanning through the results of calling a function on enumerate until we have accumulated the right size. See the paper on the GHC ApplicativeDo extension.)

Let’s try it out:

ghci> enumerate (enumTrees 3)
  [Node (Node (Node Leaf Leaf) Leaf) Leaf,Node (Node Leaf (Node Leaf Leaf)) Leaf,Node (Node Leaf Leaf) (Node Leaf Leaf),Node Leaf (Node (Node Leaf Leaf) Leaf),Node Leaf (Node Leaf (Node Leaf Leaf))]

ghci> enumerate (enumTrees 3) == allTrees 3

ghci> enumerate (enumTrees 7) == allTrees 7

ghci> brackets $ fromNat (enumTrees 7) 43

It seems to work! Though actually, if we try larger values of n, enumTrees just seems to hang. The problem is that it ends up making many redundant recursive calls. Well… nothing a bit of memoization can’t fix! (Here I’m using Conal Elliott’s nice MemoTrie package.)

> enumTreesMemo :: Int -> Enumeration Tree
> enumTreesMemo = memo enumTreesMemo'
>   where
>     enumTreesMemo' 0 = singleton Leaf
>     enumTreesMemo' n = union
>       [ Node <$> enumTreesMemo (n-k-1) <*> enumTreesMemo k
>       | k <- [0 .. n-1]
>       ]
ghci> size (enumTreesMemo 10)

ghci> size (enumTreesMemo 100)

ghci> size (enumTreesMemo 1000)

ghci> brackets $ fromNat (enumTreesMemo 1000) 8234587623904872309875907638475639485792863458726398487590287348957628934765

That’s better!

A second try

At this point, I thought that I needed to enumerate trees in order by the length of their left spine. Given a tree with a left spine of length s, we enumerate all the ways to partition the remaining n-s elements among the right children of the s spine nodes, preferring to first put elements as far to the left as possible. As you’ll see, this turns out to be wrong, but it’s fun to see how easy it is to write this using the enumeration framework.

First, we need an enumeration of the partitions of a given n into exactly k parts, in lexicographic order.

> kPartitions :: Int -> Int -> Enumeration [Int]

There is exactly one way to partition 0 into zero parts.

> kPartitions 0 0 = singleton []

We can’t partition anything other than 0 into zero parts.

> kPartitions _ 0 = empty

Otherwise, pick a number i from n down to 0 to go in the first spot, and then recursively enumerate partitions of n-i into exactly k-1 parts.

> kPartitions n k = do
>   i <- list [n, n-1 .. 0]
>   (i:) <$> kPartitions (n-i) (k-1)

Let’s try it:

ghci> let p43 = enumerate $ kPartitions 4 3
ghci> p43

ghci> all ((==3) . length) p43

ghci> all ((==4) . sum) p43

ghci> sorted (reverse p43)

Now we can use kPartitions to build our enumeration of trees:

> spinyTrees :: Int -> Enumeration Tree
> spinyTrees = memo spinyTrees'
>   where
>     spinyTrees' 0 = singleton Leaf
>     spinyTrees' n = do
>       -- Pick the length of the left spine
>       spineLen  <- list [n, n-1 .. 1]
>       -- Partition the remaining elements among the spine nodes
>       bushSizes <- kPartitions (n - spineLen) spineLen
>       bushes <- traverse spinyTrees bushSizes
>       return $ buildSpine (reverse bushes)
>     buildSpine :: [Tree] -> Tree
>     buildSpine []     = Leaf
>     buildSpine (b:bs) = Node (buildSpine bs) b

This appears to give us something reasonable:

ghci> size (spinyTrees 7) == size (enumTreesMemo 7)

But it’s pretty slow—which is to be expected with all those monadic operations required. And there’s more:

ghci> sorted . map brackets . enumerate $ spinyTrees 3

ghci> sorted . map brackets . enumerate $ spinyTrees 4

ghci> sorted . map brackets . enumerate $ spinyTrees 5

Foiled again! All we did was stave off failure a bit, until n=5. I won’t draw all the trees of size 5 for you, but the failure mode is pretty similar: picking subtrees for the spine based just on how many elements they have doesn’t work, because there are cases where we want to first shift some elements to a later subtree, keeping the left spine of a subtree, before moving the elements back and having a shorter left spine.

The solution: just forget about trees, already

It finally occurred to me that there was nothing in the problem statement that said anything about trees. That was just something my overexcited combinatorial brain imposed on it: obviously, since there is a bijection between balanced bracketings and binary trees, we should think about binary trees, right? …well, there is also a bijection between balanced bracketings and permutations avoiding (231), and lattice paths that stay above the main diagonal, and hundreds of other things, so… not necessarily.

In this case, I think trees just end up making things harder. Let’s think instead about enumerating balanced bracket sequences directly. To do it recursively, we need to know how to enumerate possible endings to the start of any balanced bracket sequence. That is, we need to enumerate sequences containing n opening brackets and c extra closing brackets (so n+c closing brackets in total), which can be appended to a sequence of brackets with c more opening brackets than closing brackets.

Given this idea, the code is fairly straightforward:

> enumBrackets :: Int -> Enumeration String
> enumBrackets n = enumBracketsTail n 0
> enumBracketsTail :: Int -> Int -> Enumeration String
> enumBracketsTail = memo2 enumBracketsTail'
>   where

To enumerate a sequence with no opening brackets, just generate c closing brackets.

>     enumBracketsTail' 0 c = singleton (replicate c ')')

To enumerate balanced sequences with n opening brackets and an exactly matching number of closing brackets, start by generating an opening bracket and then continue by generating sequences with n-1 opening brackets and one extra closing bracket to match the opening bracket we started with.

>     enumBracketsTail' n 0 = ('(':) <$> enumBracketsTail (n-1) 1

In general, a sequence with n opening and c extra closing brackets is either an opening bracket followed by an (n-1, c+1)-sequence, or a closing bracket followed by an (n, c-1)-sequence.

>     enumBracketsTail' n c =
>         (('(':) <$> enumBracketsTail (n-1) (c+1))
>         ++
>         ((')':) <$> enumBracketsTail n (c-1))

This is quite fast, and as a quick check, it does indeed seem to give us the same size enumerations as the other tree enumerations:

ghci> fromNat (enumBrackets 40) 16221270422764920820

ghci> size (enumBrackets 100) == size (enumTreesMemo 100)

But, are they sorted? It would seem so!

ghci> all sorted (map (enumerate . enumBrackets) [1..10])

At this point, you might notice that this can be easily de-abstracted into a fairly simple dynamic programming solution, using a 2D array to keep track of the size of the enumeration for each (n,c) pair. I’ll leave the details to interested readers.

Ideas from CBC Radio (Highlights): What's On Our Quarter? The past and future of Canadian Caribou

No, it's not a moose, which is what most people think it is. The animal is actually a caribou -- one of the most important but misunderstood species in Canada. Paul Kennedy reports on the past and the future of Canadian caribou.

Penny Arcade: News Post: The Road Most Travelled

Tycho: There is a quote from George R. R. Martin on the cover of Dinosaur Knights, which is the second volume of what may or may not be called the Dinosaur Lords trilogy.  Here is the quote: It’s like a cross between Jurassic Park and Game of Thrones. - George R. R. Martin except generally, cover quotes traffic in something you might consider laudatory.  This doesn’t sound like praise, even!  It’s a spartan statement of fact, like I’ll take the number three.  With Canadian back bacon ham, yes.  I order it that way so I’m always right, wherever…

Jesse Moynihan: Jam of the Week

Not much of a post here, but for music enthusiasts I just wanted to share this hot jam from 80’s Japan. Definitely check it out on headphones. I love the transition from weird sax proto-post rock into a captivating minimalist pop hook and then how it blends the two into a cinematic trance that gets […]

Jesse Moynihan: Forming 233

Sorry for the wait I was having a little trouble getting back on that horse.

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

Chemical bike lock causes vomiting to deter thieves Insulating snow collected during winter months to use during the summer Here, we show that a fresh semen sample confined inside a ring displays a very robust and stable rotational motion Pokemon Go has done what every fitness app dreams of — motivate the most sedentary Americans to get off [...]

Embedded in Academia: How Getting Tenure Is Supposed to Work

The other day Geoff Challen posted a blog entry about his negative tenure vote. Having spent roughly equal time on the getting-tenure and having-tenure sides of the table, I wanted to comment on the process a little. Before going any further I want to clarify that:

  • I know Geoff, but not well
  • I wasn’t involved in his case in any capacity, for example by writing a letter of support
  • I have no knowledge of his tenure case beyond what was written up in the post

Speaking very roughly, we can divide tenure cases into four quadrants. First, the professor is doing well and the tenure case is successful — obviously this is what everybody wants, and in general both sides work hard to make it happen. Second, the professor is not doing well (not publishing at all, for example) and the tenure case is unsuccessful. While this is hugely undesirable, at least the system is working as designed. Third, the professor is not doing well and the tenure case is successful — this happens, but very rarely and usually in bizarre circumstances, for example where the university administration overrules a department’s decision. Finally, we can have a candidate who is doing well and then is denied tenure. This represents a serious failure of the system. Is this what happened to Geoff? It’s hard to be sure but his academic record looks to me like a strong one for someone at his career stage. But keep in mind that it is (legally) impossible for the people directly involved in Geoff’s case to comment on it, so we are never going to hear the other side of this particular story.

So now let’s talk about how tenure is supposed to work. There are a few basic principles (I suspect they apply perfectly well to performance evaluations in industry too). First, the expectations must be made clear. Generally, every institution has a written document stating the requirements for tenure, and if a department deviates from them, decisions they make can probably be successfully appealed. Here are the rules at my university. Junior faculty need to look up the equivalent rules at their institution and read them, but of course the university-level regulations miss out on department-specific details such as what exactly constitutes good progress. It is the senior faculty’s job to make this clear to junior faculty via mentoring and via informal faculty evaluations that lead up to the formal ones.

If you look at the rules for tenure at Utah, you can see that we’re not allowed to deny tenure just because we think someone is a jerk. On the other hand, there is perhaps some wiggle room implied in this wording: “In carrying out their duties in teaching, research/other creative activity and service, faculty members are expected to demonstrate the ability and willingness to perform as responsible members of the faculty.” I’m not sure what else to say about this aspect of the process: tenure isn’t a club for people we like, but on the other hand the faculty has to operate together as an effective team over an extended period of time.

The second principle is that the tenure decision should not be a surprise. There has to be ongoing feedback and dialog between the senior faculty and the untenured faculty. At my institution, for example, we review every tenure track professor every year, and each such evaluation results in a written report. These reports discuss the candidate’s academic record and provide frank evaluations of strengths and weaknesses in the areas of research, teaching, and service (internal and external). The chair discusses the report with each tenure-track faculty member each year. The candidate has the opportunity to correct factual errors in the report. In the third and sixth years of a candidate’s faculty career, instead of producing an informal report (that stays within the department), we produce a formal report that goes up to the university administration, along with copies of all previous reports. The sixth-year formal evaluation is the one that includes our recommendation to tenure (or not) the candidate.

A useful thing about these annual evaluations is that they provide continuity: the reports don’t just go from saying glowing things about someone in the fifth year to throwing them under the bus in the sixth. If there are problems with a case, this is made clear to the candidate as early as possible, allowing the candidate, the candidate’s mentor(s), and the department chair to try to figure out what is going wrong and fix it. For example, a struggling candidate might be given a teaching break.

Another thing to keep in mind is that there is quite a bit of scrutiny and oversight in the tenure process. If a department does make a recommendation that looks bad, a different level of the university can overrule it. I’ve heard of cases where a department (not mine!) tried to tenure a research star who was a very poor teacher, but the dean shot down the case.

If you read the Hacker News comments, you would probably come to the conclusion that tenure decisions are made capriciously in dimly lit rooms by people smoking cigars. And it is true that, looking from the outside, the process has very little transparency. The point of this piece is that internally, there is (or should be) quite a bit of transparency and also a sane, well-regulated process with plenty of checks and balances. Mistakes and abuses happen, but they are the exception and not the rule.

Phil Guo, Sam Tobin-Hochstadt, and Suresh Venkatasubramanian gave me a bit of feedback on this piece but as always any blunders are mine. Sam pointed me to The Veil, a good piece about tenure.

new shelton wet/dry: I can’t feel you anymore, I can’t even touch the books you’ve read

If you were at work last Friday, you might have noticed that you couldn’t get on Twitter, Spotify, [Amazon, Tumblr, Reddit, Netflix…]. The sites themselves were fine, but users across the country lost access due to a large-scale attack on Dyn, a company whose servers provide infrastructure and routing services for the internet’s top destinations. { [...]

Saturday Morning Breakfast Cereal: Saturday Morning Breakfast Cereal - Dentistry

When will someone finally invent sour straws with pointy chips and Cap'n Crunch embedded in them?

New comic!
Today's News:

Almost sold out of BAHFest San Francisco tickets! Get'em while they exist!

Better Embedded System SW: Training Video Series

Summary: My startup company is launching a series of training videos.  Here's an overview.

(This blog posting is an ad for my startup company ... but it also has links to free training videos!)

Edge Case Research:

I have a startup company that has built a brisk business in design reviews, robustness testing, and software safety.  We're building on the 20 years and 200 design reviews I've done working with industry partners on a variety of embedded systems. We're also building on my long collaboration with my co-founder Mike Wagner and others at the National Robotics Engineering Center doing autonomy validation and safety.

We do a lot of work with autonomous systems (robots, self-driving cars), but also with consumer electronics and industrial controls. In general the idea is that we have a dedicated team of embedded system experts who can help companies with both the technical aspects of their product and their software development processes. Our strengths are:
If we can help you with your embedded product just let us know!

Free Training Videos:

One of the things we have found is that there are a number of common areas in which our customers (and probably many others) could use some help with in terms of updating technical and process skills.  Thus, we're launching a video training series to help with the topics we most commonly see as we review projects.

To access the full videos for free, visit our video library page here.  If this is successful we'll add more videos over time, possibly requiring registration and/or a subscription for the full library.  But the ones there now are free, and I expect that these particular videos will stay free indefinitely.  Please respect our copyright and substantial investment in creating them by pointing people there to view them instead of trying to download the full length videos.

We also have a YouTube channel with just the previews that you can subscribe to if you want notification of new videos as they come out.  Our full length videos as well as the previews are hosted on our Vimeo channel.

Hope you enjoy these!

The Shape of Code: Producing software for money and/or recognition

In the commercial environment money makes the world go around, while in academia recognition (e.g., number of times your work is cited, being fawned over at conferences, impressive job titles) is the coin of the realm (there are a few odd balls who do it out of love for the subject or a desire to understand how things work, but modern academia is a large bureaucracy whose primary carrot is recognition).

There is an incentive problem for those writing software in academia; software does not attract much, if any, recognition.

Does the lack of recognition for writing software matter? Surely what counts are the research results, not the tools used to get there (be they writing software or doing mathematics).

A recent paper bemoans the lack of recognition for the development of Python packages for Astronomy researchers. Well, its too late now, they have written the software and everybody gets to make perfect copies for free.

What the authors of Astropy want, is for researchers who use this software to include a citation to it in any published papers. Do all 162 authors deserve equal credit? If a couple of people add a new package, should they get a separate citation? What if a new group of people take over maintenance, when should the citation switch over from the old authors/maintainers to the new ones? These are a couple of the thorny questions that need to be answered.

R is perhaps the most widely used academic developed software ecosystem. A small dedicated group of people has invested a lot of their time over many years to make something special. A lot more people have invested effort to create a wide variety of add-on packages.

The base R library includes the citation function, which returns the BibTeX information for a given package; ready to be added to a research papers work flow.

Both commercial and academic producers need to periodically create new versions to keep ahead of the competition, attract more customers and obtain income. While they both produce software to obtain ‘income’, commercial and academic software systems have different incentives when it comes to support for end users of the software.

Keeping existing customers happy is the way to get them to pay for upgrades and this means maintaining compatibility with what went before. Managers in commercial companies make sure that developers don’t break backwards compatibility (developers hate having to code around what went before and would love to throw it all away).

In the academic world it does not matter whether end users upgrade, as long as they cite the package, the version used is irrelevant; so there is a lot less pressure to keep backwards compatibility. Academics are supposed to create new stuff, they are researchers after all, so the incentives are pushing them to create brand new packages/systems to be seen as doing new stuff (and obtain a whole new round of citations). A good example is Hadley Wickham, who has created some great R packages, who seems to be continually moving on, e.g., reshape -> reshape2 -> tidyr (which is what any good academic is supposed to do).

The run-time performance of a system is something end users always complain about, but often get used to. The reason is invariably that there is little or no incentive to address this issue (for both commercial and academic systems). Microsoft Windows is slower than it need be and the R interpreter could go a lot faster (the design of the interpreter looks like something out of the 1980s; I’m seeing a lot of packages in R only, so the idea that R programs spend all their time executing in C/Fortran libraries may be out of date. Where is the incentive to use post-2000 designs?)

How many new versions of a software package can be produced before enough people stop being willing to pay for an update? How many different packages solving roughly the same problem can academics produce?

I don’t think producing new packages for income has a long term future.

Planet Lisp: Zach Beane: Random wish: tests for convergence and consensus

There are a lot of areas where most Common Lisp implementations have converged on a common way to do something, even though the specification allows freedom to approach them in divergent ways.

For example, it’s not required that (code-char 97) evaluates to #\a, but in practice, that’s how all implementations currently work.

Similarly, although probe-file’s description repeatedly refers to a file, in practice, nearly every implementation allows a directory pathname. (CLISP signals an error, instead, and has a parallel set of system functions that can probe directories.)

And although it’s not required, reading and writing specialized octet vectors to streams does what you’d generally expect. The octets on the Lisp side line up one-to-one with the octets that are read from or written to the stream. There isn’t any padding or swapping or headers or other stuff.

I think it would be pretty cool to accumulate these de facto standard behaviors into a test suite so you could see exactly where you need to adjust your expectations, and perhaps provide persuasive evidence to change unnecessarily divergent behavior.

I don’t have time to make this, sorry! But if you make it, let me know, because I’d love to try it out.

TOPLAP: ChoreoGraphic Coding

Here follows a guest post from Joana Chicau, giving some of the context behind “WebPage Act I,II,III”, her performance at the second International Conference on Live Coding. This performance was very well received, and brought together the threads of live coding, software art, net art and choreography.


How to move away from pre-choreographed environments and compose our own choreographies?

As in choreography, web design also deals with space, time and movement qualities. It has been defining ways of moving, collectively or individually, through fluid nonetheless complex landscapes of information displays, networked spaces, and media environments.
I understand choreography as a way to reflect and find alternative paths towards the use of tools, systems of visuality, accessibility, and distribution of information. As well as the way space and time are then perceived within its technological environment.

Choreographic Coding: a dual syntax.

Choreographic code is a grammar or vocabulary that links choreographic concepts with web coding functions [1]. The new vocabulary brings a new meaning and produces a new imaginary around the act of coding. And since in the performance the coding is also made live, it allows for a clearer articulation between choreographic concept in the written code and its expression the web interface.

Enacting code: a performance series

A ‘WebPage in (x) Acts’ is a live coding performance/ demonstration: an assemblage of audio-visual and graphic experiments combining principles of choreography (post modern choreographic language) with the formal structures of coding (web code/ languages, such as JavaScript).

The piece WebPage Act I,II,III [2] has been recently presented at ICLC’ 16 [3]. The performance starts with a regular search webpage, followed by the opening of the web console. The screen is now divided in two stages: the “frontstage”, the interface a user normally accesses and the “backstage” or the web console in which programming languages can be run. In the web console I call, juxtapose and manipulate different functions from a choreographic code while simultaneously displaying the varied outcomes of graphic elements in the screen. These functions are named after choreographic concepts which are assigned to specific web design actions. While the computer interprets the code, the readers/ audience will be interpreting and start wondering about the relationship between the ‘choreographic vocabulary’ in the code and its immediate outcome. The page originally filled with information, will be deconstructed , with elements being moved and removed, ending with a minimal layout. The performance structure is divided in three acts, and comprehends physical movement.

An important point in developing this project as a live setting performance is the question of presence: being here and now. Breaking the distancing between mind/body, designer/audience, designer/design-piece, discovery/invention. This way, enhancing the idea of process over product. Reflecting on how web-design/coding methods maybe driven by choreo-aesthetic, choreo-political, choreo-graphic possibilities.


Choreographic thinking and methodologies address questions of unpredictability, indeterminacy, immateriality, spatial and temporal paradoxes that can inform new media on how to respond to the digital logic. Considering the indeterminate interactions between scripts, machines and users,  bodies and languages, this project is then a re-articulation of the two disciplines at a fundamental level: choreography and coding technologies.
The source code [4] for the piece WebPage Act I,II,III is available on github and in the form of a glossary which further explains the more conceptual dimension [5].

The project has grown into diverse live performances/coding demonstrations of her methodology/research. To follow up on the many iterations, please follow up the link:

Hope to see you in future choreographies,

~ Joana Chicau

Penny Arcade: Comic: The Road Most Travelled

New Comic: The Road Most Travelled

Tea Masters: Exploring the taste of Lishan

Lishan tea plantations
This spring, I selected several high mountain Oolongs from very close mountains: Tsui Feng, Tsui Luan, LiShan and FuShouShan. Usually, they'd be all be lumped as Lishan (or FuShou Shan). This horizontal tasting of very similar Oolongs is a great practice to feel the subtleties of different mountains.
I recently received an e-mail from a reader, passionate for tea, who works in a famous tea shop (in the Western world) that specializes in Taiwanese Oolongs. What he wrote made my day:
"I tried the Lishan I ordered from you and it was very different than the ones offered at the place I work at. Your Taiwanese Oolongs seems to be much sweeter and higher notes that sings while the ones I try at my place are a bit more vegetal (sic) and thick."
There are numerous reasons why it's not easy to find real Lishan Oolong outside (and even inside) Taiwan. One of them is that too few people know the real flavor of this noble location.

things magazine: More roads to the future

The Road Not Taken: How we found (and lost) the dream of Personal Rapid Transit, by Adi Robertson. In the utopian timeline (which could sitll happen), these PRT systems could be reborn in the form of self-driving autonomous cars. What … Continue reading Comic for 2016.10.24

New Cyanide and Happiness Comic

Ideas from CBC Radio (Highlights): The Shadow of Charm City

In a bid to instill civic pride forty years ago, Baltimore was officially named "Charm City". Today, some call Baltimore a war zone -over 300 homicides per year amid 16,000 vacant homes. Mary O'Connell takes us inside America's great racial divide.

Planet Lisp: Zach Beane: SLIME's "fancy" inspector is great. I've...

SLIME's "fancy" inspector is great. I've used it for a long time, but just recently found a new feature.

I was working with a file that had some non-standard syntax in it, but the error message didn't make it clear exactly where.

In the slime debugger, you can inspect the condition that is signaled while reading a file and find the stream associated with the read operation. When you inspect that stream, there's an action available, [visit file and show current position], that will open an Emacs buffer for the file, with the cursor at the stream's position in the file.

From there, it was easy to see the syntax that tripped up the reader. Give it a try the next time you have a similar issue.

Planet Lisp: Hans Hübner

Berlin Lispers Meetup: Tuesday October 25th, 2016, 8.00pm

You are kindly invited to the next "Berlin Lispers Meetup", an informal gathering for anyone interested in Lisp, beer or coffee:

Berlin Lispers Meetup
Tuesday, October 25th, 2016
8 pm onwards

St Oberholz, Rosenthaler Straße 72, 10119 Berlin
U-Bahn Rosenthaler Platz

We will try to occupy a large table on the first floor, but in case you don't see us,
please contact Christian: 0157 87 05 16 14.

Please join for another evening of parentheses!

Perlsphere: Grant Report : RPerl User Documentation #2 - Sept/Oct 2016

Will reports on RPerl documentation for September and most of October:

"Chapter 3 is coming along nicely!

The following new sections of Learning RPerl have been published:

Also, more extensive example code has been added to the following sections:




Perlsphere: Give your first talk at the London Perl Workshop

If you've never given a talk at a Perl event before, and perhaps never given a talk at any tech event, I'd like to encourage you to give your first talk at the London Perl Workshop. I'm happy to be your LPW talk buddy, and help you prepare for it, and am confident that other people would be happy to help too.

The London Perl Workshop is on Saturday December 3rd in central London. There's still plenty of time to submit a talk, but the earlier you do that, the better.

Maybe you'd like to give a talk, but you don't know about what, or how to go about coming up with a talk. Here's a very simple plan:

  • Decide what you want to talk about
  • Collect a lot of notes
  • Distil out your key message(s) and then structure your notes around a narrative to get your message(s) across
  • Decide what length of talk
  • Submit your proposal

The best way to come up with an idea for a talk is to write down as many talk ideas as you can come up with. Then spend a couple of minutes on each one, jotting down things you could say on that topic. You also need to consider for each one whether people are going to be interested in hearing it.

I think a talk buddy might be able to help you in the following ways:

  • Coming up with a list of ideas for things you could talk about
  • Evaluating the ideas on your list
  • Giving feedback on your message and narrative
  • Giving feedback on drafts of your slides, if your proposal is accepted

I'm in the middle of writing a series of blog posts to help you think about giving a talk. At some point you should watch this Damian Conway talk; it's one and a half hours, but well worth it.

Email me if you'd like to try the buddy idea: neil at bowers dot com. If multiple people take me up on this offer, I'll ask some other people to be buddies (let me know if you'd like to help out).

Quiet Earth: TAD 2016: AS THE GODS WILL Review

At this point in the game, wildly prolific Japanese director Takashi Miike – 100 directorial credits in 25 years! – could pretty much phone it in and his fans will still fawn over whatever he commits to celluloid. With such a vast body of work, one could justifiably expect varying degrees of quality in his output. But whether it’s slinky horror like Audition or gross-out action like Ichi The Killer, or even the musical teenaged romance of For Love’s Sake, each one is unmistakably a Takashi Miike film. As The Gods Will is no different.

Based on the Japane [Continued ...] / 2016-10-27T10:40:48