Events: Global Energy Systems Conference

Bifurcated Rivets: From FB

Deep down in Florida

Bifurcated Rivets: From FB

Ways with peppers

Bifurcated Rivets: From FB

Nicely done

Bifurcated Rivets: From FB


Bifurcated Rivets: From FB


Recent CPAN uploads - MetaCPAN: Cron-Sequencer-0.04

show the sequence of commands that cron would run

Changes for 0.04 - 2022-05-23

  • Fix --hide-env regression; --show 'last 30 minutes'

MetaFilter: What The Hell Happened To The LA Marathon?

Adam "tweebiscuit" Conover decided to run the LA Marathon more or less on a whim. It sucked, even more than a marathon should.

Recent additions: unpacked-maybe-numeric

Added by andrewthad, 2022-05-23T11:59:53Z.

maybes of numeric values with fewer indirections

Slashdot: Survey Finds Highest Developer Interest in Blockchain Apps, Cryptocurrencies, and NFTs

Charlotte Web writes: A recent survey of 20,000 developers found a third (34%) were learning about cryptocurrencies, ZDNet reports — and 16% even said they were actively working on crypto-related projects. (And 11% said they were actively working on NFT technology, while 32% said they were learning more about NFTs.) 30% also said they were learning about blockchain technologies other than cryptocurrencies (with just 12% currently working on blockchain projects — just 1% higher than in a 2021 survey). Citing the survey, ZDNet adds that "The next most popular technologies were the metaverse and AI-assisted software development: 28% of developers are learning about these technologies."

Read more of this story at Slashdot.

Recent additions: natural-arithmetic

Added by andrewthad, 2022-05-23T11:42:51Z.

Arithmetic of natural numbers

Hackaday: Using a Fusion Splicer to Repair a Samsung TV’s Cable

A fusion splicer being used to repair an optical fiber

Some Samsung TVs come with a system called One Connect, where all external cabling is connected to a separate box so that only one small signal cable goes to the TV. In some versions, the cable linking the TV with its Connect Box is a pure fiber optic cable that’s nearly transparent and therefore easy to hide.

Thin fiber optic cables are fragile however; when [Elecami Wolf] got one of these TVs for a very low price it turned out that this was because its One Connect cable had snapped. Replacement cables are quite expensive, so [Elecami Wolf] went on to investigate the inner workings of the fiber optic cable and figured out how to repair a broken one.

The cable consists of four pairs of plastic-coated glass fibers, which are attached to receivers and transmitters inside the thick connectors on either end. Repairing the cable required two things: figuring out which fibers should connect to each other, and a reliable way of connecting them together.

The first was difficult enough: a simple 1:1 connection didn’t work, so it took a bit of work to figure out the correct connection setup. One clever trick was pointing a camera at a working cable and comparing the flashing lights at each end; this helped to identify the right order for two of the four pairs. For the other two, a combination of reverse-engineering the electronic circuits and some systematic trial-and-error yielded a complete wiring diagram.

For the second part, [Elecami Wolf] called on a fiber optic expert who lent him a fusion splicer. This is a rather neat piece of equipment that semi-automatically brings two pieces of fiber together and welds them with an electric arc. Once this was complete, it was a matter of covering the splices to protect them from sharp bends, and the fancy TV was working again.

Although not everyone will have access to a multi-mode fusion splicer machine, [Elecami Wolf]’s videos provide fascinating insights into the workings of modern fiber-optic based consumer electronics. This might be the first fiber-optic splicing attempt we’ve seen; but if you’re trying to hook up an optical fiber to your circuit, this ball lens setup is a neat trick.

Thanks for the tip, [X-Cubed]!

Recent CPAN uploads - MetaCPAN: Authen-Pluggable-0.01

A Perl module to authenticate users via pluggable modules

Changes for 0.01 - 2022-05-23T10:40:00Z

  • First Release

Recent CPAN uploads - MetaCPAN: MooX-Private-Attribute-1.01

private attributes

Changes for 1.01 - 2022-05-23

  • Improve test coverage to 100%

Recent CPAN uploads - MetaCPAN: YAML-As-Parsed-0.05

Read/Write YAML predictably

Recent CPAN uploads - MetaCPAN: Test-Lib-0.003

Use libraries from a t/lib directory

Changes for 0.003 - 2022-05-23

  • fail with croak rather than die
  • miscellaneous packaging cleanups


Mel Arzamarski



















Mel Arzamarski’s Website

Mel Arzamarski on Instagram

BOOOOOOOM! – CREATE * INSPIRE * COMMUNITY * ART * DESIGN * MUSIC * FILM * PHOTO * PROJECTS: “Koreatown Dreaming” by Photographer Emanuel Hahn

Recent additions: one-liner 2.1

Added by SjoerdVisscher, 2022-05-23T09:54:51Z.

Constraint-based generics

MetaFilter: When I'm dancing, I am free

This week's free thread is dancing, dancing, dancing ... and narrated by Florence (+ the Machine) with Bill Nighy, co-starring as Florence's anxiety.

("Filmed in Kyiv on 18 November 2021 with Ukrainian filmakers and artists, whose radiant freedom can never be extinguished")

Lyrics, and scroll down for some extra info on the song.

Enjoy, and dance (and comment) freely!

Hackaday: Lotus 123 for Linux is Like a Digital Treasure Hunt

Ever hear of Lotus 123? It is an old spreadsheet program that dominated the early PC market, taking the crown from incumbent Visicalc. [Tavis Ormandy] has managed to get the old software running natively under Linux — quite a feat for software that is around 40 years old and was meant for a different operating system. You can see the results in glorious green text on a black screen in the video below.

If you are a recent convert to Linux, you might not remember what a pain it was “in the old days” to install software. But in this case, it is even worse since the software isn’t even for Linux. The whole adventure started with [Tavis] wanting to find the API kit used to add plugins to Lotus. In theory, you could use it to add modern features to the venerable spreadsheet program.

The $395 software development kit wasn’t very common and there was also a Unix version of Lotus 123, but no one seemed to have a copy of that. [Tavis] eventually found someone who ran a circa-1990 BBS and had the data on tape. Turned out there was a hot copy of the SDK that he was able to use. But he noticed something else in the BBS’s list of files: the long-lost Unix version of Lotus!

An investigation found the installer used TD0 files which took some research. Luckily, a utility exists that can convert these to raw disk images. Inside was a very large object file. Apparently, in the days without dynamic loading, that object would be linked with plug in modules to install them.

The object file had all of its debugging information intact which shed a lot of light on the program’s internal operations. The old executables used COFF format but it is possible to relink it to an ELF file. Of course, it isn’t just that easy. [Tavis] wrote a small program to remove the old-style Unix system calls so they could be rerouted to Linux system calls. Some calls just pass through, but others need some translation due to differences in things like structure layout, sizes, and alignment.

In the end, it all worked but didn’t have a valid license. However, [Tavis] felt like since he did have a license and the software is abandoned, he was within his rights to crack the license check.

We are well-known abusers of spreadsheets around here. Of course, we aren’t the only ones.

Slashdot: What Made Golang Become Popular? Its Creators Look Back

Created at Google in late 2007, the Go programming language was open sourced in late 2009, remember its creators, and "since then, it has operated as a public project, with contributions from thousands of individuals and dozens of companies." In a joint essay in Communications of the ACM, five of the language's five original creators explore what brought growing popularity to this "garbage-collected, statically compiled language for building systems" (with its self-contained binaries and easy cross-compilation). "The most important decisions made in the language's design...were the ones that made Go better for large-scale software engineering and helped us attract like-minded developers...." Although the design of most languages concentrates on innovations in syntax, semantics, or typing, Go is focused on the software development process itself. Go is efficient, easy to learn, and freely available, but we believe that what made it successful was the approach it took toward writing programs, particularly with multiple programmers working on a shared codebase. The principal unusual property of the language itself — concurrency — addressed problems that arose with the proliferation of multicore CPUs in the 2010s. But more significant was the early work that established fundamentals for packaging, dependencies, build, test, deployment, and other workaday tasks of the software development world, aspects that are not usually foremost in language design. These ideas attracted like-minded developers who valued the result: easy concurrency, clear dependencies, scalable development and production, secure programs, simple deployment, automatic code formatting, tool-aided development, and more. Those early developers helped popularize Go and seeded the initial Go package ecosystem. They also drove the early growth of the language by, for example, porting the compiler and libraries to Windows and other operating systems (the original release supported only Linux and MacOS X). Not everyone was a fan — for instance, some people objected to the way the language omitted common features such as inheritance and generic types. But Go's development-focused philosophy was intriguing and effective enough that the community thrived while maintaining the core principles that drove Go's existence in the first place. Thanks in large part to that community and the technology it has built, Go is now a significant component of the modern cloud computing environment. Since Go version 1 was released, the language has been all but frozen. The tooling, however, has expanded dramatically, with better compilers, more powerful build and testing tools, and improved dependency management, not to mention a huge collection of open source tools that support Go. Still, change is coming: Go 1.18, released in March 2022, includes the first version of a true change to the language, one that has been widely requested — the first cut at parametric polymorphism.... We considered a handful of designs during Go's first decade but only recently found one that we feel fits Go well. Making such a large language change while staying true to the principles of consistency, completeness, and community will be a severe test of the approach.

Read more of this story at Slashdot.

MetaFilter: A sign of where things are going

A wild new court decision would blow up much of the government's ability to operate - "The US Court of Appeals for the Fifth Circuit's decision in Jarkesy v. SEC would dismantle much of the system the federal government uses to enforce longstanding laws."
The Jarkesy decision claims that the system the Securities and Exchange Commission (SEC) uses to enforce federal laws protecting investors from fraud is unconstitutional for at least three different reasons; that it has been unconstitutional for years; and that somehow no one has noticed this fact until two particularly partisan judges, taking liberties with existing law, discovered these defects in the Jarkesy case.

The holding of Jarkesy is broad. It could destroy the federal government's power to enforce key laws preventing companies from deceiving investors, and it likely goes much further than that. Among other things, the decision could blow up the process that the Social Security Administration uses to determine who is entitled to benefits — although someone would have to file a new lawsuit before that could happen.
Is the SEC Unconstitutional? [ungated] - "It was the sort of case that would not have made it to the Supreme Court a decade earlier — obviously this is constitutional, everyone would have said — but times were changing... The point is that the nondelegation doctrine is alive again, and the Fifth Circuit is making a bet that the next time it goes before the Supreme Court it will win. The point is that the SEC's actual legislative actions — writing rules about stock buybacks or swaps disclosure or climate change — are now in danger. It used to be accepted as a routine matter that the SEC could make rules under a very broad grant of power from Congress to regulate securities markets in the public interest. I am not sure that is true anymore."

The 5th Circuit's Ambush Against the SEC Is Unprecedented and Shocking - "Our most radical court is threatening to turn the executive branch into an instrument of the president's personal power."

Penny Arcade: Eros IV

New Comic: Eros IV

Recent additions: aeson-commit 1.5

Added by jonascarpay, 2022-05-23T05:49:55Z.

Parse Aeson data with commitment

MetaFilter: robot cowboy remix

From the department of 'pop culture ephemera which is far better than it has any right to be,' I bring you the BMO Mixtape. Or listen on soundcloud, which breaks it out by tracks, but that's kinda cheating, because the whole point of this thing is starting at the beginning and just melting into the chillest remixes of Adventure Time songs imaginable.

(and if you're wondering what's the point of an adventure time post years after the end of the show? Well, everything stays right where you left it... everything stays but it still changes, ever so slightly, daily and nightly, in little ways, when everything stays.)

Hackaday: Do Flat Tyres Make Your Speedo Lie?

There are some engineering questions that may not have huge importance in the world, but which become the subject of intense idle speculation. A good example is the question of whether a lower tyre pressure on a motor vehicle would make a difference to the indicated speed. There are several contrasting intuitive theories as to what should happen, so [mechatronicsguy] has taken the time for a bit of experimentation in order to find out what really happens.

At stake were the change in effective radius from a flattened portion of the tyre, the so-called tank tracks effect in which the entire circumference of the tyre is still traversed, and the prospect of a change in circumference due to the different pressure. The test wheels were made from foam, and were found to give a different reading when compressed. This might solve toe problem, but of course real car wheels have radial wires to give them stiffness. When these were simulated on the foam wheels with packing tape, the difference evaporated. Later this was confirmed by GPS-measuring a real car with deflated wheels.

All this makes for a fascinating read, because after all, there’s sometimes no substitute for a real-world test.

Header image: Gerlach, Public domain.

Slashdot: Scientists Research An Even More Powerful Technique for Genetically-Modifying Mosquitos

The BBC reports on "the next generation of genetic modification technology" — which goes beyond simply introducing a "lab-tweaked gene" into an organism. Instead it introduces a "gene drive" — a lab-tweaked gene "that targets and removes a specific natural gene." if an animal (parent A) that contains a gene drive mates with one that doesn't (parent B), then in the forming embryo that starts to combine their genetic material, parent A's gene drive immediately gets to work. It recognises the natural gene version of itself in the opposite chromosome from parent B, and destroys it, by cutting it out of the DNA chain. Parent B's chromosome then repairs itself — but does so, by copying parent A's gene drive. So, the embryo, and the resulting offspring, are all but guaranteed to have the gene drive, rather than a 50% chance with standard GM — because an embryo takes half its genes from each parent. Gene drives are created by adding something called Crispr, a programmable DNA sequence, to a gene. This tells it to target the natural version of itself in the DNA of the other parent in the new embryo. The gene drive also contains an enzyme that does the actual cutting. It is hoped that gene drives can be used to greatly reduce the numbers of malarial mosquitos, and other pests or invasive species.... One organisation at the forefront of this is Target Malaria, which has developed gene drives that stop mosquitos from producing female offspring. This is important for two reasons — only the females bite, and without females, mosquito numbers will plummet. The core aim is to greatly reduce the number of people who die from malaria — of which there were sadly 627,000 in 2020, according to the World Health Organization. It could also slash the economic impact of the disease. With 241 million cases in 2020, mostly in Africa, malaria is estimated to cost the continent $12bn (£9.7bn) in reduced economic output every year.... One of the world's pioneering developers of gene drives is US biologist Kevin Esvelt, an assistant professor at Massachusetts Institute of Technology. He first came up with the technology back in 2013.... Prof Esvelt adds that this technology is being provided by something called "daisy chain". This is where a gene drive is designed to become inert after a few generations. Or halving its spread every generation until it eventually stops. Using this technology he says it is possible to control and isolate the spread of gene drives. "A town could release GM organisms with its boundaries to alter the local population [of a particular organism] while minimally affecting the town next door," he says. The technology has not been authorized for use "in the wild," the article points out. But there are currently no bans on laboratories researching it.

Read more of this story at Slashdot.

Disquiet: Rock On

When bird droppings look like a metal band’s logo

Recent additions: core-telemetry

Added by AndrewCowie, 2022-05-23T02:05:19Z.

Advanced telemetry

Hackaday: Truly Giant Telescope Could Image Exoplanets

Have you ever wished we could peek at all these exoplanets that have been recently discovered? We aren’t likely to visit anytime soon, but it would be possible to build a truly giant telescope that could take a look at something like that. At least according to [SciShow Space] in a recent video you can see below.

The idea put forth in a recent scientific paper is to deliberately create the conditions that naturally form gravitational lenses. If you recall, scientists have used these naturally-occurring lenses to image the oldest star ever observed. These natural super-telescopes have paid off many times, but you can’t pick what you want to look at. It is all a function of the distance to the star creating the lens and the direction a line between us points.

But what if you could create your own gravity lens? Granted, we probably aren’t going to do that in our garages. However, a recent paper talks about launching an optical detector that you could maneuver so that it was on a line that would pass through the object you want to see and our own sun. We clearly have the technology to do this. After all, we have several nice space telescopes, and several probes operating far away from the sun.

That is one of the biggest catches, though. This new telescope will need to be some 550 AU from the sun to get good results. For the record, the Earth is 1 AU (about 8 light minutes) out. Pluto — maybe not a planet anymore, but still a signpost on the way out of the solar system — is a scant 39 AU out. Voyager I, which has been racing away from the sun since 1977 is only about 156 AU out.

Because the craft would be so far out, it would be practically a one-shot mission. You also have to have something reliable enough to go the 17 years it would take with today’s technology to get in place. You also need a way to get the data back over that distance. All doable, but non-trivial.

The paper simulates what the Earth would look like using this technique from a nearby star. The images are shockingly good, especially after a bit of post-processing. Meanwhile, we may have to settle for more modest images. You might not see detail, but it is possible to find exoplanets with reasonably modest equipment.

Slashdot: Lecturer Argues Cryptocurrency Should 'Die in a Fire', Predicts Implosion

Nicholas Weaver is a senior staff researcher at the International Computer Science Institute and lecturer in the computer science department at UC Berkeley. But he's also a raging cryptocurrency skeptic, arguing that cryptocurrency is useless and destructive, and should "die in a fire." In a recent interview in Current Affairs he promulgates what he calls Weaver's Iron Law of Blockchain. "When somebody says you can solve X with blockchain, they don't understand X, and you can ignore them." So for those pushing cryptocurrency for "Banking the unbanked," Weaver points to M-Pesa, a payment system Vodafone started in Kenya in 2007 "about the same time as Bitcoin..." It has eaten the Third World. It's huge. Because it just basically attaches a balance to your phone account. And you can text to somebody else to transfer money that way.... So even with the most basic dumb phone you have easy-to-use electronic money. And this has taken over multiple countries and become a huge primary payment system. [Whereas] the cryptocurrency doesn't work." Weaver also contends that when companies say they accept payments in Bitcoin, "They're lying." (They're using a service which pays them in "actual money" after performing conversions on any Bitcoin proferred-up by a customer.) He believes cryptocurrency is only seriously used for payments for ransomware and drug deals — the things that non-decentralized currencies are legally obligated to block. The reason I've gotten so sour on the cryptocurrency space is the ransomware. It's doing tens to hundreds of billions of dollars worth of damage to the global economy. And it only exists because people can pay in Bitcoin. Weaver also believes cryptocurrency lets venture capitalists "carry out securities fraud as a business model" when they sell one of their startup's tokens to retail investors. This is blatantly an unlicensed security. This is blatant securities fraud, but they didn't commit the securities fraud. It was just the companies they invested in that did the securities fraud, and the SEC has not been proactively enforcing this. They only retroactively enforce against the initial coin offerings after they fail.... and when things fail, the only people to prosecute are the companies, not Andreessen Horowitz itself. So they've been able to make securities fraud a business in such a way that they are legally remote, so you will not be able to throw them in jail.... The SEC has the authority to stop those proactively rather than reactively. They choose not to.... Basically, there's a fear among regulators — that I think started in the '80s — of being accused of "stifling innovation." There's no innovation to stifle. So regulate away. He's also skeptical of cryptocurrency's other supposed advantages. Weaver argues cryptocurrency incentivizes green power "the same way that a whole bunch of random shootings would incentivize bulletproof vests." And even as an investment vehicle, Weaver sees it as "a self-created pyramid scheme." [Y]ou have to keep getting new suckers in. As soon as the number of suckers dries up, it collapses. And because it's not zero-sum, but deeply negative-sum, there are actually a lot of mechanisms that can cause it to collapse suddenly to zero. We saw this just the other day with the Terra stablecoin and the Luna side token. So when asked for the future of cryptocurrency, Weaver predicts "It will implode spectacularly." (By which he means it will "collapse greatly.") The only question is when. I thought it would have actually imploded a year ago. But basically, what we saw with Terra and Luna, where it collapsed suddenly due to these downward positive feedback loops — situations where basically the system is designed to collapse utterly and quickly — those will happen to the larger cryptocurrency space.... [T]he Washington Nationals just the other day started doing a lot of tweets for their business relationship with Terra. That was $5 million for five years prepaid in advance in cash. So for the next five years, the Washington Nationals are obliged to hype a cryptocurrency that failed spectacularly already. Thanks to Slashdot reader sdinfoserv for sharing the article...

Read more of this story at Slashdot.

Slashdot: Would You Blur Your House on Every Map App?

If you'd like to deter "digital voyeurs," Popular Science points out that you can ask the map apps from Google, Apple, and Microsoft "to draw a veil of privacy across your property. "You'd be in good company too: Apple CEO Tim Cook had his home blurred from mapping apps after issues with a stalker." There is something to bear in mind before you do this, though: you may not be able to reverse the process. The blur could be there for good. This is the case for Google Maps, and while Apple and Microsoft don't specify whether blurs on their services are permanent, they may follow the same protocol or decide to do so in the future. The case for blurring? "Having strangers from all over the world stare at your home isn't necessarily something you want to happen — but it can be done in seconds on the mapping apps we all carry around on our phones." ("Stop people from peering at your place," suggests the article's subtitle.) But is there also a case against demanding platforms blur what's essentially just the exterior of a building? Where's the boundary where we're honoring the wishes of the privacy-conscious — and does the public ever have a right to see? Share your own thoughts in the comments. And would you blur your house on every map app? (Thanks to long-time Slashdot reader schwit1 for sharing the article...)

Read more of this story at Slashdot.

Hackaday: Hackaday Links: May 22, 2022

Hackaday Links Column Banner

It looks like it’s soon to be lights out for the Mars InSight lander. In the two years that the lander has been studying the geophysics of Mars from its lonely post on Elysium Planitia, InSight’s twin solar arrays have been collecting dust, and now are so dirty that they’re only making about 500 watt-hours per sol, barely enough to run the science packages on the lander. And that’s likely to worsen as the Martian winter begins, which will put more dust in the sky and lower the angle of the Sun, reducing the sunlight that’s incident to the panels. Barring a “cleaning event” courtesy of a well-placed whirlwind, NASA plans to shut almost everything down on the lander other than the seismometer, which has already captured thousands of marsquakes, and the internal heaters needed to survive the cold Martian nights. They’re putting a brave face on it, emphasizing the continuing science and the mission’s accomplishments. But barely two years of science and a failed high-profile experiment aren’t quite what we’ve come to expect from NASA missions, especially one with an $800 million price tag.

Closer to home, it turns out there’s a reason sailing ships have always had human crews: to fix things that go wrong. That’s the lesson learned by the Mayflower Autonomous Ship as it attempted the Atlantic crossing from England to the States, when it had to divert for repairs recently. It’s not clear what the issue was, but it seems to have been a mechanical issue, as opposed to a problem with the AI piloting system. The project dashboard says that the issue has been repaired, and the AI vessel has shoved off from the Azores and is once more beating west. There’s a long stretch of ocean ahead of it now, and few options for putting in should something else go wrong. Still, it’s a cool project, and we wish them a fair journey.

Have you ever walked past a display of wall clocks at the store and wondered why someone went to the trouble of setting the time on all of them to 10:10? We’ve certainly noticed this, and always figured it had something to do with some obscure horological tradition, like using “IIII” to mark the four o’clock hour on clocks with Roman numerals rather than the more correct “IV”. But no, it turns out that 10:10 is more visually pleasing, and least on analog timepieces, because it evokes a smile on a human face. The study cited in the article had volunteers rate how pleasurable watches are when set to different times, and 10:10 won handily based on the perception that it was smiling at them. So it’s nice to know how easily manipulated we humans can be.

If there’s anything more pathetic than geriatric pop stars trying to relive their glory days to raise a little cash off a wave of nostalgia, we’re not sure what it could be. Still, plenty of acts try to do it, and many succeed, although seeing what time and the excesses of stardom have wrought can be a bit sobering. But Swedish megastars ABBA appear to have found a way to cash in on their fame gracefully, by sending digital avatars out to do their touring for them. The “ABBA-tars,” created by a 1,000-person team at Industrial Light and Magic, will appear alongside a live backing band for a residency at London’s Queen Elizabeth Olympic Park. The avatars represent Benny, Bjorn, Agnetha, and Anni-Frid as they appeared in the 1970s, and were animated thanks to motion capture suits donned while performing 40 songs. It remains to be seen how fans will buy into the concept, but we’ll say this — the Swedish septuagenarians look pretty darn good in skin-tight Spandex.

And finally, not that it has any hacking value at all, but there’s something shamefully hilarious about watching this poor little delivery bot getting absolutely wrecked by a train. It’s one of those food delivery bots that swarm over college campuses these days; how it wandered onto the railroad tracks is anyone’s guess. The bot bounced around a bit before slipping under the train’s wheels, with predictable results once the battery pack is smooshed.

The Shape of Code: Complex software makes economic sense

Economic incentives motivate complexity as the common case for software systems.

When building or maintaining existing software, often the quickest/cheapest approach is to focus on the features/functionality being added, ignoring the existing code as much as possible. Yes, the new code may have some impact on the behavior of the existing code, and as new features/functionality are added it becomes harder and harder to predict the impact of the new code on the behavior of the existing code; in particular, is the existing behavior unchanged.

Software is said to have an attribute known as complexity; what is complexity? Many definitions have been proposed, and it’s not unusual for people to use multiple definitions in a discussion. The widely used measures of software complexity all involve counting various attributes of the source code contained within individual functions/methods (e.g., McCabe cyclomatic complexity, and Halstead); they are all highly correlated with lines of code. For the purpose of this post, the technical details of a definition are glossed over.

Complexity is often given as the reason that software is difficult to understand; difficult in the sense that lots of effort is required to figure out what is going on. Other causes of complexity, such as the domain problem being solved, or the design of the system, usually go unmentioned.

The fact that complexity, as a cause of requiring more effort to understand, has economic benefits is rarely mentioned, e.g., the effort needed to actively use a codebase is a barrier to entry which allows those already familiar with the code to charge higher prices or increases the demand for training courses.

One technique for reducing the complexity of a system is to redesign/rework its implementation, from a system/major component perspective; known as refactoring in the software world.

What benefit is expected to be obtained by investing in refactoring? The expected benefit of investing in redesign/rework is that a reduction in the complexity of a system will reduce the subsequent costs incurred, when adding new features/functionality.

What conditions need to be met to make it worthwhile making an investment, I, to reduce the complexity, C, of a software system?

Let’s assume that complexity increases the cost of adding a feature by some multiple (greater than one). The total cost of adding n features is:

K=C_1*F_1+C_2*F_2 ...+C_n*F_n

where: C_i is the system complexity when feature i is added, and F_i is the cost of adding this feature if no complexity is present.

C_2=C_B+C_1, C_3=C_B+C_1+C_2, … C_n=C_B+sum{i=1}{n}{C_i}

where: C_B is the base complexity before adding any new features.

Let’s assume that an investment, I, is made to reduce the complexity from C_b+C_N (with C_N=sum{i=1}{n}{C_i}) to C_B+C_N-C_R, where C_R is the reduction in the complexity achieved. The minimum condition for this investment to be worthwhile is that:

I+K_{r2} < K_{r1} or I < K_{r1}-K_{r2}

where: K_{r2} is the total cost of adding new features to the source code after the investment, and K_{r1} is the total cost of adding the same new features to the source code as it existed immediately prior to the investment.

Resetting the feature count back to 1, we have:


and the above condition becomes:

I < ((C_B+C_N+C_1)-(C_B+C_N-C_R+C_1))*F_1+...+((C_B+C_N+C_m)-(C_B+C_N-C_R+C_m))*F_m

I < C_R*F_1 ...+C_R*F_m

I < C_R*sum{i=1}{m}{F_i}

The decision on whether to invest in refactoring boils down to estimating the reduction in complexity likely to be achieved (as measured by effort), and the expected cost of future additions to the system.

Software systems eventually stop being used. If it looks like the software will continue to be used for years to come (software that is actively used will have users who want new features), it may be cost-effective to refactor the code to returning it to a less complex state; rinse and repeat for as long as it appears cost-effective.

Investing in software that is unlikely to be modified again is a waste of money (unless the code is intended to be admired in a book or course notes).

Ansuz - mskala's home page: Spywar

When I was a child I always wanted to invent games. As I got older I became more and more disheartened by the number of my games that were never actually played, and in fact the larger pattern of my work going unused has been an issue for me throughout my life. But Spywar was one of my most successful childhood games.

Ansuz - mskala's home page: Spywar

When I was a child I always wanted to invent games. As I got older I became more and more disheartened by the number of my games that were never actually played, and in fact the larger pattern of my work going unused has been an issue for me throughout my life. But Spywar was one of my most successful childhood games.

MetaFilter: People with excited delirium are said to display "superhuman strength"

Most medical authorities do not consider excited delirium to be real. A 'city on fire': How [1980s] Miami shaped a disputed diagnosis used to justify deaths in police custody is a May 2022 podcast episode from StatNews (pdf transcript). Earlier StatNews coverage on the topic: The term was first used in 1985 to explain a series of seven deaths among people who used cocaine, all of whom were forcibly restrained and five of whom died in police custody.

First Opinion podcast in April 2021: "Though the term excited delirium was first used in its modern sense in 1985, there's weak — or no — evidence to support it as a valid diagnosis."

Saturday Morning Breakfast Cereal: Saturday Morning Breakfast Cereal - Datum

Click here to go see the bonus panel!

They are however quite pleased to have their dead family members listened in a spreadsheet.

Today's News:

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

“Call me Ishmael,” he says, since being a civil servant in Ottawa these days makes paranoia a virtue.

So, Ish and his squeeze want change. They bought an upscale property in a New Brunswick city, where sub-$400k still means you live a good life. They’re transitioning jobs and futures eastward, looking forward to better days for them and the dogs.

But there’s a niggle. Actually, with recent events, it’s turned worse. A dark cloud.

“You’ve repeatedly assured us that 2008 isn’t going to happen again,” he says. “And if it does, big deal, we know how to handle it. I didn’t blink in March 2020. But, should I be worried about 1982 happening again? And what is my best strategy for dealing with this unlikely but non-zero possibility?”

Specifically, this fiftysomething couple are obsessing about what now appears to be endless and worsening inflation, leading to central bank tightening and a dramatic increase in the cost of money – and their mortgage.

“What really keeps me up at night is inflation, or more properly the hike in interest rates needed to tame it. The spectre of 20% interest rates a la Volcker 1982 would be apocalyptic; obviously lots of people would be wiped out, given their million-dollar mortgages. But even on our (by-2026) $290k-ish mortgage, that would be almost $60k a year in interest alone when we renew. This terrifies me.”

The first thing to remember is that this is not 1982. At that time inflation in Canada was 12.5%. The Bank of Canada rate rose to 13.96%. In the summer of ‘82, five-year mortgages were 19.2%. Several of the major banks stopped lending long-term money. I was the daily business columnist and editor of a large urban newspaper at the time, with a front-row seat to the carnage being caused as readers were mowed down and houses seized. That summer I lost my mind, organized a protest on Parliament Hill and succeeded in convincing the Trudeau government (the first one) to declare a moratorium on bank mortgage foreclosures.

What’s different?

Yes, inflation today is half what it was then. And household debt in 2022 bears no relation to where it sat forty years ago. The average house in Toronto sold for $95,496. A mortgage of $100,000 was a rare and scary thing as Canada slipped into a recession in 1982, hammered by central banks determined to squish the runaway cost of living. It worked.

In short, a central bank rate north of 5%, or double-digit consumer loan and mortgage costs are no longer feasible without economic devastation. We owe $1.73 trillion in home loans alone. Plus hundreds of billions more in home equity lines of credit. All those HELOCs have floating rates, rising each time the chartered bank prime swells. And 37% of all outstanding mortgages come up for renewal within 24 months. Already the savings rate has plunged and incomes are increasing far less than the CPI. The conclusion is, clearly, that a 1982-rerun is not in the cards.

Having said that, rates do not need to hit 20% to wreak havoc. Not with this epic level of debt in the land. A CB rate of 3.5%, chartered bank prime at 5.7% and five-year mortgages at 7% would have a similar effect. And there is perhaps a seven-in-ten chance we’ll get there.

This brings us to the question of why.

Unlike what Pepe is busy telling scared little beavs, inflation is not the fault of the central bank. It did not cause it. It did not ‘print’ $400 billion and hand it to Justin to spend on CERB. Nor is inflation a Canadian thing. Look at current rates in other countries:

US 8.1%
UK 9.0%
Euro 7%
Russia 17.8%
Germany 7.8%
Poland 12.4%
Australia 5.1%
Canada 6.8%


Was Tiff Macklem responsible for a global trend? Nah. Think deeper. We’re in a post-pandemic world where consumer spending and demand have exploded. Look at Toronto’s jammed airport chaos, or the fact you can’t find a car rental in Canada these days. Travel has exploded. So have audiences at concerts, parks and pro sports. Now consider energy. During Covid oil prices collapsed as lockdowns depressed demand. Now crude is consistently over $100 a barrel, helped along by the insane war in Ukraine. And the supply chain’s a big deal. Factories shut during Covid and are now overwhelmed. Demand exceeds supply. Prices rise sharply. A chip shortage means fewer new cars are built, so used car prices explode. That’s inflation. And fuel charges are goosing food costs, while full employment is now feeding strikes, labour discord and a wage-price spiral.

This is not the CB’s doing. Yes, government spending has been extreme and our national debt has erupted, putting pressure on bond yields. But that is fiscal stimulus adding to inflation. Monetary stimulus – which the Bank of Canada’s responsible for – is being seriously and quickly reduced. Interest rates are rising. Bonds are being sold and matured. Lots more to come. When the world needed help to survive a pandemic, CBs gave it. Now they taketh away.

So, Ishy, there’s reason to expect your mortgage rate will be higher upon renewal. But it will not be 20%. Or even 10%. And the value of your house – even in cheapo NB – may drop as the cost of money rises. And, yup, we could well go through a few quarters of negative growth. So factor it all in. Save a lot and pay down the principal upon renewal. Get a weekly-pay mortgage to shorten the amortization and reduce the debt faster. Maintain your B&D portfolio and use gains in a few years (they’re coming) to reduce the outstanding obligation.

But understand CBs will not tolerate double-digit inflation. Nor did they create this evil.

About the picture: “Here’s a photo of my dog Shenzie,” writes Brody. “I didn’t name her but kept the original name on her collar. With the high rent here on Vancouver Island,  she was left in the basement of a vacant house for 2 days alone. My brother-in-law was moving in to rent the new place and found they had left all their stuff and a dog in the basement. My wife said we would “foster her” and before you know it she is now a part of the family.”

Colossal: Vibrant Textiles and Repurposed Eyewear Camouflage the Subjects of Thandiwe Muriu’s Celebratory Portraiture

All images © Thandiwe Muriu, shared with permission

From chunky hair beads and rollers to sink strainers and brake pedals, Nairobi-based photographer Thandiwe Muriu (previously) finds fashionable use for ordinary objects. Worn as glasses that obscure a subject’s identity, the repurposed items add cultural flair to Muriu’s vibrant portraits and are connected to both her background and Kenyan life, more broadly. Red fringe evokes the tassel that hung from her uncle’s Toyota Corolla, which transported the artist home from school each day, while the orange plastic drain catcher references the joy found in sharing chores. She explains:

In Kenya, when a group of friends meet, the women usually gather in the kitchen to clean up after the meal is done, and as is part of Kenyan culture, wash the piles of dishes by hand. This routine task suddenly becomes a moment of laughter and stories as the women mingle and bonds are reinforced…(The portrait) celebrates the African spirit of community as it turns humble sink strainers into bright circles of joy.

Shot against bold fabric backdrops printed with dizzying patterns, Muriu’s works conceal her subjects’ bodies under perfectly aligned garments, leaving only their heads and hands visible. The photographs are part of her ongoing CAMO series, which explores how culture both creates and consumes individual identities. Incorporating rich color palettes and traditional architectural hairstyles, Muriu celebrates her African heritage while questioning beauty standards and self-perception.

Some of the photographer’s portraits are on view this month at Photo London 2022 and at 1-54 Fair in New York. In July, she’ll have a solo show with 193 Gallery at the new Maison Kitsuné Gallery in New York, as well. You can explore the full CAMO series on her site and Instagram.


Image © Thandiwe Muriu

Image © Thandiwe Muriu

Image © Thandiwe Muriu

Image © Thandiwe Muriu

Image © Thandiwe Muriu

Image © Thandiwe Muriu

Image © Thandiwe Muriu

MattCha's Blog: 2004 Biyun Hao Yiwu: Complex Taste +++ Power +++

Got this 2004 BiYun Hao Yiwu quarter cake ($170.00 for 95 g or $1.79/g) from Teas We Like in their drop of early Bi Yun Hao productions.

The dry leaves smell both woody and intensely herby also a bit sweet.  There is a slight pondy marshland Taiwanese dry stored smell and lots of depth to the odour.

First infusion has a medicinal root beer like onset with a subtle bitter sweet taste.  There is a nice deep cooling happening here with a silty full mouthfeeling and herbal sweet taste.  The texture is nicely oily with a subtle pondy marshland nuance of the storage.  Nice very complex balance of herbs, woods, sweet almost brown sugars.

Second has a rich woody resin herbal bitter sweetness.  It is classic wood-bitters taste with a resin and herbal edge.  There is a vibrant sweetness of brown sugars taste underneath and on the edges.  The mouthfeel is full and almost drying silty.  The throat is a medium-upper depth cooling.  Complex taste here.  Very root beer like complexity.  The Qi is pretty strong in the chest you can feel the heart go and a euphoria building.

Third infusion is left to cool and has a creamy menthol medicinal herb taste to it there are emerging caramel sweetness and a nice rich depth.  The throat opening and cooling is middle-deep and opening where the mouthfeeling is silty and slightly sticky and faintly drying.  The oily texture sort of just melts over the tongue.  Nice stronger chest beats with an uplifting energy feeling subtle high with stronger body chest feeling that almost wraps around the ribs.

The fourth infusion has a very herbal medicinal deep dark menthol root beer thing happening here.  There are just very faint suggestions of pondy storage but not really and more herbal-bitter-sweet-medicinal tastes.  The taste is deep and dense.  There is this initial splash of tastes that comes up in the mouth a result of a pop of bittersweetness.  Nice chest beats and uplifting Qi with subtle mild high.  There is a creamy sweetness left in the mouth minutes later.  Dense and rich and deep tastes.  Strong Qi.

5th has an almost turpentine good woody taste with a sweet almost floral taste to it over a caramel.  There is an emerging candy like sweetness in the mid-throat and breath.  There are also layers of herbs, chalky sweetness, and creamy sweetnotes.  There is a bitter sweet taste in there and less of the bitter-sweet woodiness.  Lots going on in this Yiwu blend.  The mouthfeel is chalky slight dry-sticky full in the mouth.  This infusion has that sweet almost candy-like breath… Yummy!

6th has a deep medicinal syrupy taste with sweet edges but a bitter-sweet woody rich taste and nice oily texture.  There is a deep sweet almost resin and incense.  There is a lingering rich sort of caramel.  Nice strong chest beats and upbeat energy with mild high.

The 7th has a woody almost bitters that quickly turns to melon fruity Yiwu and lingers in the mouth like this a while before sort of fading into a creamy sweetness, there is some richness there and some woody caramel resin sort of thing, even slight herbs.  Nice chesty bodyfeeling with heart beats and some mild euphoria high building in the body.

8th has a woody bitters and resin taste with a pop of sweetness underneath it.  There is a creamy sweetness that emerges.  Lots of rich depth to the taste.  Nice Chesty Qi feeling with a bit of uplift and kind of zoning out.  The mouthfeel is a bit of an oily chalky now.

9th has an incense woody onset with a sweet edge.  There is a bitter sweet pop with some melon tastes also some bland woody tastes starting to emerge now as well.  The mouthfeeling is a dry chalky feeling.  There is an almost melon creamy sweet aftertaste left in the mouth minutes later.  Nice mild building high with chesty feelings.

10th has a woody varnish with some sweet edges that develop into a melon sweetness that then turns into a creamy sweetness only mild cooling here.  Still rich taste in a way and deep things that are less obvious now but still within grasp. 

11th has a rich syrupy woody bitters deep like medicinal sweetness.  There is still some oily texture and sticky mouthcoating.  The taste goes toward a long creamy sweetness with medicinal woody base.  Sometimes it tastes almost mushroom.  Nice mild high with chest beats and energy uplift.

12th has an almost sour bitter woody with touches of coco and flashes of melon tastes.  There is more mouth salivating here than in the infusions before it and it has a sweeter and syrupy and fruitier feel.  Nice uplift and chest beats…. This Qi is pretty steady throughout.

13th has a rich juicier and thick sweet almost tobacco fruity sweetness that is a bit caramel and flashes of fresh honeydew melon.  The mouthfeeling is very sticky and full the breath is faintly cooling.  Nice high with a bit of pep.

14th was another complexity of sweetnesses.  With a caramel sweetness creamy sweet with melon tastes and creamy tastes over a sticky mouthfeeling with less intense mouthfeeling and less woody-bitter herbs.  Now is the time for the sweetness to shine.

Mug steepings reveal a mushroom bland woody taste with creamy sweet and almost sweet potato sweetness that you could get out of Gua Feng Zhi.  Nice oily still, still lots of depth and complexity.

The longer overnight steepings pushes out more strong bitterness and woody-bitters with a rootbeer like sweetness at the edges but strongly bitter… there is still lots of bitter bones in this deep complex Yiwu blend.  There are some pond-marshland notes in there as well and herbs… complex…

Overall, this is a pretty intense Yiwu experience.  It feels more like a factory tea trying to make a gushu type of thing than a Taiwanese Boutique production!  It likely represents the historical transformation of factory type gushu productions to more modern type gushu productions that we will see in my next post.  It has still a strong bitter back bone and intense invigorating Qi to it. 

Vs 2004 Nan Qiao Bulang King- It reminds me lots of the 2004 Nan Qiao Bulang King for some strange reason.  I think the dry pondy marshland storage, factory/gushu type production and the general intensity of the Qi are strangely similar.  They both have a sort of herby body to them this 2005 BiYun Hao has more Yiwu sweetness layered in for sure but a lot of other complexity which includes cola, herbs, woods, bitters, creamy, vegetables, melon-candy, mushroom, medicinal… anyways the dry storage and blend gives this one way more complexity than most Yiwu of this age I’ve tried but it has a strength and harshness that could almost be aged out longer and is more of a rugged beauty than an ethereal Yiwu beauty for sure.  It was interesting and intense enough for me to pick up another quarter cake to play with mainly because it left me feeling so good…  but it is pretty pricy to go in for a full cake for me right now…

Vs 2013 BiYun Hao Mahei -This cake also reminds me of my blind tasting of the 2013 BiYun Hao Mahei which almost tricked me into believing it was a Bulang blend, before reflecting that it was actually a Yiwu… this 2004 BiYun Hao Yiwu is very much in this stronger BiYun Hao style.

Marco’s (Late Steeps) Tasting Notes


MattCha's Blog: BiYun Hao: Where Art Thou????

Where has Biyun Hao been all these years?

I think, I remember first seeing it for sale, a 2007? Byunhao Yiwu at Puerhshop of all places!  Then you really didn’t see any Biyun Hao at all really but you knew it was going to be pretty good because James of TeaDB got a hold of the better older BiYun Hao cakes a while ago and it was my guess at the time that someone gave him a hot tip… and you would hear some mummers by the Tea Illuminati that Bi Yun Hao has some pretty good mid-aged older boutique stuff… but nothing really appeared until Teas We Like decided to take it on.

I think it has been, since its earliest formation, one of the missions of Teas We Like to give us a deep and thorough introduction to Bi Yun Hao.  Biyun Hao is a Taiwanese boutique brand of puerh that has never had the attention nor the appreciation in the English speaking world that has afforded Yang Qing Hao (thanks to Emmett) and Zhi Zi Hao (Thanks to Houde).  I think the choice of which cakes to offer from the BiYun Hao catalogue was a very deliberate decision by TeasWeLike .  They have kindly given us a slow, easy and controlled intro to BiYun Hao.  First with some newer and better priced (less expensive) gushu stuff that is both stronger blended materials such as the Mahei blends they offer (such as this 2013 BiYun Hao Mahei) as well as the more elegant Yuwu Gushu stuff such as the Yibi Gushus (including this 2015 Yibi Gushu) and even the 2015 Lishan Gongcha and the brand new 2020 and 2021 BiYun Hao Longdui productions (here and here ).

However, the main attraction, as far as I could gather, has always been these older Biyun Hao productions…

They are finally letting these out of the gate with both quarter cakes and full cakes.  The slow release of the other productions over the years has put me, I think, in a greater position to appreciate them on a different and deeper level.  So I very much appreciate their care in releasing them.

I managed to get a few of these before they sold out and will post them here with a few other BiYun Hao that they will likely focus on in the coming years which they haven’t released (2008-2010).


Saturday Morning Breakfast Cereal: Saturday Morning Breakfast Cereal - Proof

Click here to go see the bonus panel!

If there is no God, there is no morality. There is no morality, therefore no God.

Today's News:

The Universe of Discourse: What's long and hard?

Sometime in the previous millennium, my grandfather told me this joke:

Why is Fulton Street the hottest street in New York?

Because it lies between John and Ann.

I suppose this might have been considered racy back when he heard it from his own grandfather. If you didn't get it, don't worry, it wasn't actually funny.

cropped screenshot from Google Maps, showing
a two-block region of lower Manhattan, bounded by John Street on the
south and Ann Street on the north. Fulton Street lies between them,

Today I learned the Philadelphia version of the joke, which is a little better:

What's long and black and lies between two nuts?

Sansom Street.

cropped screenshot from Google Maps, showing
a two-block region of West Philadelphia, bounded by Walnut Street on the
south and Chestnut Street on the north. Sansom Street lies between them,

I think it that the bogus racial flavor improves it (it looks like it might turn out to be racist, and then doesn't). Some people may be more sensitive; to avoid making them uncomfortable, one can replace the non-racism with additional non-obscenity and ask instead “what's long and stiff and lies between two nuts?”.

There was a “what's long and stiff” joke I heard when I was a kid:

What's long and hard and full of semen?

A submarine.

Eh, okay. My opinion of puns is that they can be excellent, when they are served hot and fresh, but they rapidly become stale and heavy, they are rarely good the next day, and the prepackaged kind is never any good at all.

The antecedents of the “what's long and stiff” joke go back hundreds of years. The Exeter Book, dating to c. 950 CE, contains among other things ninety riddles, including this one I really like:

A curious thing hangs by a man's thigh,
under the lap of its lord. In its front it is pierced,
it is stiff and hard, it has a good position.
When the man lifts his own garment
above his knee, he intends to greet
with the head of his hanging object that familiar hole
which is the same length, and which he has often filled before.

(The implied question is “what is it?”.)

The answer is of course a key. Wikipedia has the original Old English if you want to compare.

Finally, it is off-topic but I do not want to leave the subject of the Exeter Book riddles without mentioning riddle #86. It goes like this:

Wiht cwom gongan
  þær weras sæton
monige on mæðle,
  mode snottre;
hæfde an eage
  ond earan twa,
ond II fet,
  XII hund heafda,
hrycg ond wombe
  ond honda twa,
earmas ond eaxle,
  anne sweoran
ond sidan twa.
  Saga hwæt ic hatte.

I will adapt this very freely as:

What creature has two legs and two feet, two arms and two hands, a back and a belly, two ears and twelve hundred heads, but only one eye?

The answer is a one-eyed garlic vendor.

Planet Haskell: Mark Jason Dominus: What's long and hard?

Sometime in the previous millennium, my grandfather told me this joke:

Why is Fulton Street the hottest street in New York?

Because it lies between John and Ann.

I suppose this might have been considered racy back when he heard it from his own grandfather. If you didn't get it, don't worry, it wasn't actually funny.

cropped screenshot from Google Maps, showing a two-block region of lower Manhattan, bounded by John Street on the south and Ann Street on the north. Fulton Street lies between them, parallel.

Today I learned the Philadelphia version of the joke, which is a little better:

What's long and black and lies between two nuts?

Sansom Street.

cropped screenshot from Google Maps, showing a two-block region of West Philadelphia, bounded by Walnut Street on the south and Chestnut Street on the north. Sansom Street lies between them, parallel.

I think it that the bogus racial flavor improves it (it looks like it might turn out to be racist, and then doesn't). Some people may be more sensitive; to avoid making them uncomfortable, one can replace the non-racism with additional non-obscenity and ask instead “what's long and stiff and lies between two nuts?”.

There was a “what's long and stiff” joke I heard when I was a kid:

What's long and hard and full of semen?

A submarine.

Eh, okay. My opinion of puns is that they can be excellent, when they are served hot and fresh, but they rapidly become stale and heavy, they are rarely good the next day, and the prepackaged kind is never any good at all.

The antecedents of the “what's long and stiff” joke go back hundreds of years. The Exeter Book, dating to c. 950 CE, contains among other things ninety riddles, including this one I really like:

A curious thing hangs by a man's thigh,
under the lap of its lord. In its front it is pierced,
it is stiff and hard, it has a good position.
When the man lifts his own garment
above his knee, he intends to greet
with the head of his hanging object that familiar hole
which is the same length, and which he has often filled before.

(The implied question is “what is it?”.)

The answer is of course a key. Wikipedia has the original Old English if you want to compare.

Finally, it is off-topic but I do not want to leave the subject of the Exeter Book riddles without mentioning riddle #86. It goes like this:

Wiht cwom gongan
  þær weras sæton
monige on mæðle,
  mode snottre;
hæfde an eage
  ond earan twa,
ond II fet,
  XII hund heafda,
hrycg ond wombe
  ond honda twa,
earmas ond eaxle,
  anne sweoran
ond sidan twa.
  Saga hwæt ic hatte.

I will adapt this very freely as:

What creature has two legs and two feet, two arms and two hands, a back and a belly, two ears and twelve hundred heads, but only one eye?

The answer is a one-eyed garlic vendor.

Disquiet: Autechre, Burrell/Adderley, Sun Ra

I do this manually each Saturday, collating most of the tweets I made the past week at, which I think of as my public notebook. Some tweets pop up sooner in expanded form or otherwise on I’ve found it personally informative to revisit the previous week of thinking out loud. This isn’t a full accounting. Often there are, for example, conversations on Twitter that don’t really make as much sense out of the context of Twitter itself. And sometimes I tweak them a bit, given the additional space. And sometimes I re-order them just a bit.

▰ Officially have done the This Week in Sound email newsletter 20 weeks in a row:

▰ Afternoon trio for birdsong, percolating crockpot, and neighborhood gearhead revving motorcycle engine.

▰ TFW 8 hours of live Autechre sets pop up in your YouTube subscriptions at the start of a workday

(Also at

▰ Feels really good to get the Junto projects set up the night prior. Thursday feels a little odd, still, because I spent a decade putting the post together and then hitting send. Now I prep it more thoroughly in advance, and it arrives automatically, and I follow up via email.

▰ Says to self: “I’m gonna practice Kenny Burrell’s ‘Chitlins Con Carne’ for half an hour without looking at the sheet music or listening to the track.”

Proceeds to practice Nat Adderley’s “Work Song” for 15 minutes.

Finds “Chitlins Con Carne” sheet music. Listens. Practices it.

▰ Verb I heard this morning that I will not be employing: “diligencing”

Phrase I used this morning and plan to make more use of: “synth dandruff”

A friend followed up with the quite amazing “laptop dander”

▰ Bosch listens to Sun Ra.

Long day, long week. Have a good one. See you Monday.

Michael Geist: No Comment: Government Moves to End Debate on Online News Bill Despite a No-Show from Canadian Heritage Minister Pablo Rodriguez

Since its introduction in the House of Commons last month, the Online News Act (Bill C-18) has been debated or discussed just once. The bill was tabled without comment by Canadian Heritage Minister Pablo Rodriguez on April 5th. Thus far, Friday, May 13th was the only one day devoted debate on the bill at second reading, a day when so many MPs were not present that there was a question on whether there was sufficient quorum to proceed. Rodriguez did not deliver a speech or answer questions that day, leaving it to his Parliamentary Secretary Chris Bittle, who I pointed out inaccurately characterized the requirement for payments by Internet platforms as “use” of content and implausibly argued that the bill involved “minimal government intervention.” There has been a total of less than two hours of speeches and debate with just 10 MPs speaking to the bill or asking questions (Bittle and Mark Gerretsen being the only Liberal MPs).

Despite virtually no House debate and no comments from the responsible Minister, the government moved yesterday to end debate and send the bill to committee.  The decision to invoke time allocation on a bill that has scarcely had any discussion and no presence from the Minister is a remarkably anti-democratic approach. This bill has enormous implications for an independent press and for the Internet. It raises the prospect of paying for links and search indexing, limits access to copyright exceptions, and creates an unprecedented level of government intervention into the media sector. It also grants yet more power to the CRTC and the prospect of payment demands from the CBC and communications giants such as Bell.

I think there should be serious concerns about the government’s plans with far better approaches available to address the challenges faced by the media sector. Yet even for those who disagree, surely there is a need for a fulsome discussion, debate and review of the bill. Some of that may occur in committee, but House of Commons debate at second reading is essential as it provides all MPs with the opportunity to learn more about the bill, provide their views, and ask questions of other MPs, including the Minister. The decision to largely dispense with that debate – with the Minister so far a no-show on his own bill – simply can’t happen. The government should use the week off to reconsider its motion and restore much needed House debate before the prospect of sending Bill C-18 to committee.

The post No Comment: Government Moves to End Debate on Online News Bill Despite a No-Show from Canadian Heritage Minister Pablo Rodriguez appeared first on Michael Geist.

ScreenAnarchy: Frontieres 2022: First Wave of Titles Announced

Aw yeah, it's Frontières time once again. After spending the last two years participating in the co-production market virtually it will be with excitement and a little nervousness that we will return to Montreal to be among our peers. Not just because we resume our role as an outsider looking in but because this is one of the first times we'll all gather en masse since this (waves hands around him) began.   I was speaking with one of the filmmakers earlier this week about their project before it was announced. After presenting a project in one of the previous virtual editions they're very excited about attending in person this year. Frontières' reputation preceeds itself.    So. How do I hang out with loads of friends and...

[Read the whole post on]

Greater Fool – Authored by Garth Turner – The Troubled Future of Real Estate: Where do we go from here?

RYAN   By Guest Blogger Ryan Lewenza

It’s official! The S&P 500 has now experienced a bear market decline of 20%, coming in relative quick succession to the 2020 pandemic-induced bear market.

With this week’s big mid-week decline the S&P 500 and TSX are down 19% and 5%, respectively, year-to-date (ytd). While we were calling for higher market volatility this year as a result of the Fed rate hikes, we definitely didn’t envision a 20% bear market unfolding.

We can thank, in part, Tsar Putin for this market decline as it’s my belief that the Ukraine war is having a material impact on the equity markets as a result of the hit to global GDP and how it’s exacerbating the high inflation problem. Essentially, this terrible war is amplifying the volatility and downside across the capital markets.

At its crux the equity markets are trying to determine whether the Fed rate hikes, the Ukraine war, and lockdowns in China will lead to a US/global recession. This is the million dollar question.

We did get some good news on the China front this week with the government starting to roll back some of the restrictions and with a projected full reopening date of June 1. I’m expecting a good bounce back in economic activity in the second half as the Chinese economy fully reopens, which could alleviate this concern. However, until we get clarity on the inflation/Fed rate hikes and Ukraine, the markets are likely to remain volatile in the short-term.

Today I’m going to review the data around past bear markets to see what insights we can glean on when this bear market may run its course. This post is pretty data heavy so my apologies in advance.

First, we’ve had it pretty good over the last three years in the markets and portfolios and nothing goes straight up. These selloffs, while hard and stressful, help to blow off the excess, get us back to long-term trend, and set us for a future recovery and ultimately new market highs. Equity markets always recover because of human progress and our collective ability to figure things out, generally speaking.

So, when markets are good for an extended period we forget that corrections occur and, in fact, are pretty normal occurrences. The chart below speaks to this. I provide the annual returns for the S&P 500 (green) along with the maximum decline or drawdown (blue) in each year. Since 1980, the S&P 500 has experienced an average decline of 14% in any given year. Some years it’s -5% like last year or -34% during 2020. But over the long-term the average intra-year drawdown is 14%, which is where we were to start this week.

The Average Drawdown for the S&P 500 is 14%

Source: Bloomberg, Turner Investments

No one likes these sell-offs and to see our net worth decline but it’s important to keep a few key things in mind – equity markets experience these sell-offs fairly regularly, and they always recover from bear market declines. Full stop!

So now that we’ve experienced a bear market decline of 20%, where do we go from here?
As I covered in a recent post I don’t believe it’s inevitable that the US economy is going to fall into recession. If we get the ‘soft landing’ that I’ve been calling for, then I believe we could be getting closer to the bottom given that the S&P 500 has experienced the typical or average drawdown in a year.

If in fact the US/global economy falls back into recession, then there likely could be more downside before this bear market fully runs its course. Below I include a table of every bear market since WW2. I further break up the bear markets into non-recession and recession bear markets. Recession bear markets are the worst with an average decline of 35% peak-to-trough.

Non-recession bear markets fall a gentler 24% on average. When looking at all bear markets the average decline is 30% so that would put us roughly at 2/3rds of the decline if there is a recession.

Historical Bear Market Declines for the S&P 500

Source: Bloomberg, Turner Investments

So that’s the bad news. Now fast forward and focus on what happens following bear markets. We’re so caught up in the present that we can’t see into the future and the inevitable recovery that will unfold.

In the table below I continue with the data dump and analyzed how long it took to get back to even and stock market returns following bear markets. Looking at the last 12 bear markets it took on average three years to get back to even following bear markets. Markets always recover. It’s just a matter of time.

More importantly, the returns following bear market lows are phenomenal and why investors need to remain invested to take advantage of the future recovery. On average the S&P 500 is up 42% and 59%, one and three years later, respectively. And note how the S&P 500 was positive every single time one and three years after the bear market low. So based on this extensive data set, 100% of the time the S&P 500 is up following bear market lows and is up big.

Historical Recoveries from Bear Markets for the S&P 500

Source: Bloomberg, Turner Investments

So there you have it.

It’s been a tough go in the markets this year and in fact is the worst start for the S&P 500 since 1939. It’s our contention that the unjust and unprovoked invasion of Ukraine, along with the lockdowns in China, have greatly contributed to the current market volatility and declines this year.

We’ll find out in the coming months whether these factors will lead to a global/US recession. But today’s post is to provide readers a potential roadmap of what may unfold in the coming months and most importantly to emphasize that: 1) bear markets end; and 2) recoveries from bear markets always occur so stay invested, turn off the TV, avoid looking at your account balance and enjoy the summer days. And maybe a few more ‘pops’ or whiskeys to get you through this challenging period wouldn’t hurt.

The sun will rise again and so will the markets and your portfolio.

Ryan Lewenza, CFA, CMT is a Partner and Portfolio Manager with Turner Investments, and a Senior Investment Advisor, Private Client Group, of Raymond James Ltd.


Disquiet: Two Classics

The Xbox controller and Modern Jazz Quartet album cover in the living room went unexpectedly well together.

explodingdog: Getting lost

View On WordPress

things magazine: End Titles

Some tributes to Vangelis: MeFi; CDM; Guardian obituary; Synthtopia / a dramatic suburban London house by SPPARC / The Peculiar Manicule, a collection of pigeon-toed orange peel-style imagery (via Meanwhile) / Jony Ive’s stationery fetish is called out / new … Continue reading

ScreenAnarchy: THE SMOKE MASTER: Check Out This New Trailer and Poster For The Brazilian Stoner Action Comedy

Check out the brand new poster and trailer for the stoner comedy martial arts spectacular that is The Smoke Master.    Two brothers and a fistful of friends have to face the Chinese mafia three generations revenge. Counting on The Smoke Master and his unique Cannabis fighting style, they stand a chance.    This Brazilian stoned Kung-Fu movie from writers and directors Andre Sigwalt and Augusto Soares recently played back home at Fantaspoa. This week it is being presented during Marche du Film by our friends at Raven Banner.   They have cut a new trailer and made a new poster for the occasion.   The Smoke Master stars Daniel Rocha, Tony Lee, Ravel Andrade and Yasmin Thin Qi.   ...

[Read the whole post on]


Charlie Roberts (previously featured here).







Charlie Roberts’ Website

Charlie Roberts on Instagram

Greater Fool – Authored by Garth Turner – The Troubled Future of Real Estate: Now & next

The theme this week, of course, has been consequences. Next week we’ll prattle on about opportunities.

There are consequences to buying the biggest asset in your life on emotion. FOMO is a disease. So is familial pressure. The only cure is a bad outcome.

There are consequences to recency bias. That’s believing asset prices can never go down (because they just went up) or that interest rates can never rise (because they recently fell).

There are consequences to thinking you don’t have to go to work anymore, but will still always be paid and valued. WFH is doomed.

There are consequences in moving to a distant place you know nothing about just because properties are cheaper there. Life is not about a house. The intangibles you give up are… consequential. Like culture and a career. And now, equity.

There are consequences to debt. Society is pickled in it. Worse, all this debt is variable-rate, floating debt or at rates which are routinely reset.

We’re entering a storm. Not quite there yet. Just wind and rain. The hail, gale and locusts come later. But we can clearly see where this system is heading. The cost of money takes a big jump in 12 days, then again in a month, then again eight weeks later. Veteran realtor Carly texted me on Friday about a listing (over $2 million) in Bunnypatch north of T.O on three acres. “Got a full priced offer the day after and tons of showings,” she said. “There is panic buying happening before the rates go up.”

(Of course, she and I both know it’s better to wait for lower prices, then buy with a smaller mortgage at a higher interest rate. Affordability remains the same. Debt tumbles. But her job is to reward the seller, not advise the buyer.)

Down the death highway in Kitchener-Waterloo, where prices romped higher 45% in 2021, comes word April sales dropped 25% and listings have increased 48%. The average house price fell $50,000 last month, a 5.2% decline – more than 1% a week.

Michael is a local lawyer. He sends this report:

Sales dropping, dropping, dropping. People can’t afford the gas to go to all the sudden open houses!!!!. A few of my fellow Lawyers in the big smoke tell me their Real Estate Litigation Departments are getting very busy on Agreement of Purchase and Sale/failure to close breach items (with all kinds of creative/stupid answers: ‘The Agent and Lawyer never told me I could not get my deposit back.’ ‘I don’t speak English and it was not explained to me’ (this from a U of T Engineering Graduate who had a Chinese/English-speaking Agent) ‘I overpaid and it’s not fair, my bank never told me my mortgage commitment was not actually firm (good luck when your condo finally gets registered in two years and you qualified on a today interest rate- yikes in two years).

Well, you get what’s happening. Lots of deals inked in March and scheduled for June conclusion will not close. Condo assignment sales are blowing up. Bank appraisals are coming in under sale prices, causing a panic attack for buyers without an extra boatload of cash. And as the stats published here yesterday clearly show, average prices everywhere are heading down – despite some panic buying ahead of the next 50-point CB bomb on June 1st.

Consequences. For sellers who waited too long to hit MLS, they include leaving money on the table. Hundreds of thousands. For buyers brave enough to wade in, here are some guidelines.

First, do not buy before you sell. That was a winning, no-risk strategy six months ago. Today you stand an elevated chance of ending up with two properties, no money, extreme debt and endless marital stress.

So, if you really need to move and find a perfect place to buy, make the offer conditional upon the sale of your existing home. It’s simple. Commit to buying the new property if yours sells within a certain period of time (30 or 60 days). If the seller receives an offer you have 48 hours to firm up, or lose the deal. But the odds of that are low since properties with a conditional offer on them attract less buyer interest. Anyway, your risk is eliminated.

In fact, feel free to make an offer these days on any property with the two key conditions: (a) a satisfactory home inspection and (b) financing. It’s no longer a seller’s market so if the vendor doesn’t like conditions, tough. You da boss.

Regarding financing, get pre-approved. Don’t go VRM but instead lock into a fiver. They’ve swelled in cost but compared to what happens later this year they’re still bargain-priced. And be aware that bank appraisals are dropping faster than Jason Kenney. Lots of buyers are coming up to closing day and learning lenders will be handing over far less than they anticipated.

Rates are not rising briefly, by the way. 2% mortgages are so 2021. We’re heading back to a normalization where loans at 5%, 6% and 7% are common and may be with us for years. So do the math. Can you afford your mortgage if payments soar upon renewal in 60 months?

Finally, always buy what you can sell later. There is no such thing as a Forever Home, like your spouse believes. Understand that once you firm up an offer to buy there’s no backing out. You cannot walk free. At a minimum you’ll lose the deposit, face litigation costs and could suffer a court judgment forcing you to pay the seller that difference between what you offered and the actual discounted sale price when the property moves.


You’ll like next week a lot more. Trust me.

About the picture: “Thank you for all that you do with this informational site,” writes Rob. “My wife showed me your blog a few years ago, and it’s been a part of my daily lunch-time read ever since. The attached photo is Pylot. He’s a Border Collie / Lab X that was in our lives for 15 years. He was smarter than the average grad student, but could still chill out, especially on a beach. He was a rescue from Border Collie Friends Rescue in BC. I will always maintain that I may have rescued him, but he saved me.”

Saturday Morning Breakfast Cereal: Saturday Morning Breakfast Cereal - Quantum

Click here to go see the bonus panel!

This comic delivered to your eyes by... QUANTUM MECHANICS

Today's News:

Colossal: A Brilliant Orange Orb Shape-Shifts Through Time in a Meditative Animated Short

A metaphor for the way fragments of time both accumulate and mutate as they slip from one moment to the next, a glowing sphere is the subject of a calming short film by Argentinian artist Ezequiel Pini, of Six N. Five. The CGI animation follows the bright orb as it expands, multiplies, and transfigures into alternate forms like a sun dropping beneath the horizon and windows evocative of the recently demolished Nakagin Capsule Tower. Although simple in shape, the round object “represents care, calm, and attention to achieve its ultimate perfection. We are a circle, without boundaries, beginning or end. Infinity,” Pini says. Watch more of his poetic works on Vimeo.


CreativeApplications.Net: Entry is Open! 1minute Projection Mapping Competition in TOKYO 2022!

~Entry for participating creators is now open!~ 1minute Projection Mapping in TOKYO will be held again this year. This is an international competition planned by Projection Mapping Association of Japan for competing projection mapping works of 1 minute to 1 minute and 59 seconds. Creators from all over the world are invited to submit their…

Category: Member Submissions
Tags: / / /

CreativeApplications.Net (CAN) is a community supported website. If you enjoy content on CAN, please consider Becoming a Member. Thank you!

Penny Arcade: Generation ZZZ

If you were wondering how MiYoHo was investing their Genshin billions, now we know. They're making some kind of crazy action thing called Zenless Zone Zero and it is exclusively for those with the natural and wholesome glow of youth, as opposed to humanity's waste products - remaindered husks of once vital souls, cherubic perfection fettered by the accretion of time and skin.

Charles Petzold: Lissajous Animations Revisited

A recent discussion on Facebook about oscilloscopes led to a mention of Lissajous patterns, and I was reminded of an article I wrote for *MSDN Magazine* back in 2011 entitled "[Lissajous Animations in Silverlight](" Interestingly enough, the article has stuck around longer than Silverlight has, and the [source code]( is also available. I decided to take a stab at rewriting this program using JavaScript and the HTML5 *canvas* object, and here it is: !JavaScript Lissajous.js !CSS LissajousStyles.css
Your browser does not support the canvas element.

... more ...

Michael Geist: Is the Government Seeking to Short Circuit the Senate Review of Bill C-11?

The review of the Online Streaming Act (Bill C-11) heads to committee next week as the Standing Committee on Canadian Heritage plans to devote roughly 20 hours to hearing over the next two weeks. I have received an invitation and may appear as soon as next week. While the House of Commons committee study is just getting underway, the Senate has been debating the possibility of conducting a “pre-study” of the bill at its own committee. Pre-studies are somewhat unusual since they are conducted before the bill has formally been referred to the committee or, in the case of the Senate, even passed the House of Commons. In fact, Bill C-10, the predecessor to Bill C-11, started with a pre-study which ultimately undermined the overall committee study that many believed was inadequate.

The proposal for a Senate pre-study comes from the government as a motion in support was introduced by Senator Marc Gold, who represents the government in the Senate. A vote on the plan could come next week, but yesterday Senator Donna Dasko, who sits with the Independent Senators Group and was appointed to the Senate by Prime Minister Justin Trudeau in 2018, articulated the concerns with the pre-study approach and what it could mean for Bill C-11:

However, in my view, the process has been unsatisfactory. Typically, government witnesses present the bill and take questions, followed by other witnesses who offer a critique of the bill or propose changes to it. In some cases, their suggestions for change cannot be adequately assessed. We want to know: Are they practical changes? Do they fit with the goals of the bill? Are they doable? Are they good ideas? These questions come up after the witnesses testify, but often these questions remain unanswered in this process; that is what I have observed. Often there are time limitations to this process, and that is one of the reasons why some of these questions cannot be addressed, but in other cases, proposed changes from witnesses that do seem desirable cannot become amendments to this bill, because this is not possible with our pre-studies.

My concern with Bill C-11 is that I fear we will be doomed to this inadequate process and its shortcomings and that we will not conduct the proper investigation we need on Bill C-11, and we have no assurances that a regular committee study would follow from our pre-study. With Bill C-11, the ideal process, in my view, would be for us to take into account all the learnings from the House of Commons committee, their proceedings and their report, and build from there.
Let’s look at their witnesses, the issues arising from their work and the arguments that have been made, and let’s go forward from there. Of course, amendments may result from their process as well, which a pre-study here would not have and, therefore, could not consider. We wouldn’t have them in a timely fashion, and therefore, we couldn’t consider them. Remember Bill C-10, and how that bill was significantly changed very late in their process.

Honourable senators, during the pandemic over the past couple of years, the number of our Senate sittings was cut back dramatically, our scrutiny of legislation was reduced, with minimal review of so much legislation, and our committee work was curtailed. I look forward to returning to a better and more thorough process as we go forward.

In the end, colleagues, when it comes to Bill C-11, I am looking for assurances that a regular committee review process will take place. Even if a pre-study is undertaken, we should and must commit to this. If committees are indeed the masters of their fates, as we learned yesterday, I will be seeking the views of committee colleagues over the next several days for their commitment to a fulsome process.

But there is more than just that. We also need assurances that the committee will have the time it needs to do its work. When I hear about the urgent need to pass a bill, I can’t help but wonder whether we will really have the time to review a bill. If we keep hearing about the urgent need, it most certainly raises questions about whether we will be given the time.

After Senator Gold responded by arguing that the pre-study could mean more study, Senator Dasko made plain what many suspect: that the pre-study will ultimately be used as a pre-text to shorten the formal study of the bill with pressure to pass it before the summer without the proper review:

My view of this process is that I feel it’s a lesser process. From what I have observed, it doesn’t feel like it’s a thorough process; it seems to be truncated, in my observation. It also doesn’t allow us to make amendments. So from what I have observed, I feel that it’s lacking.

I know you have given some assurances of time, but at the same time, senator, yesterday, you did talk about the absolute need and the pressures coming from various communities. I understand there is pressure. I live in Toronto, and the cultural community in Toronto is very supportive of this bill. They want this to go forward.

But when June comes — and it’s just around the corner — we always get this feeling of pressure to pass bills. I fear that we have this pre-study coming down the track along with the end of June coming, and they end up colliding with each other. Then we end up getting pressure to pass a bill.

In this case, I worry we will be in a process that doesn’t allow us to examine it the way I feel it should be examined, especially given the uncertainties in the other place and what they will do, as well as what sorts of amendments and changes they may come up with. The last time this happened, it was really rather a mess. You might remember from last year what happened in their committee and all of the amendments. They were rejected by their Speaker and they had to go back. It truly was a mess.

That is where I am coming from with my concerns. This is coming along this track and the end of June is there; we know what June is like. You yourself have said that there is an urgency to get this bill passed because of the various stakeholders and so on who are involved. So this all leaves me just a little bit suspicious.

Senator Dasko’s suspicions are on the money. Canadians’ confidence in Bill C-11 depends upon a comprehensive review by both the House and Senate. Any effort to limit that review – including by way of a pre-study that seems likely to limit formal committee review – should be rejected.

The post Is the Government Seeking to Short Circuit the Senate Review of Bill C-11? appeared first on Michael Geist.

Colossal: Cloaked in Bold Motifs, Ceramic Vessels by Ariana Heinzman Sprout Playful Botanical Forms

All images courtesy of J. Reinhart Gallery, shared with permission

From her studio on Vashon Island in Washington, artist Ariana Heinzman channels the lithe forms of the human body into supple clay vessels. Enveloped in quirky botanical patterns and thick outlines, the sculptures twist and bow into elegant shapes that sprout buds and spiked flowers. Bold, dense motifs evoke the Garden of Eden, Heinzman shares, and serve as a metaphor for the impulse to cover the nude figure with layers of garments.

The vessels shown below are on view through June 18 at J. Rinehart Gallery in Seattle as part of the artist’s solo show, It’s Good to be Here. You can shop functional ceramic pieces like cups and planters on Heinzman’s site, and explore an archive of her floral sculptures on Instagram.


Colossal: A Conservationist Teaches Geese to Use Safer Migration Routes by Flying With Them Across Europe

Back in 1995, Christian Moullec embarked on his first migration alongside a flock of lesser white-fronted geese that he intended to introduce to Sweden. He flew an adapted delta plane alongside the birds, which were threatened after being overhunted, and protect them on their journey. This initial mission quickly morphed into a now decades-long project of training avian populations to utilize more secure paths as they travel across Europe, ensuring that the already dwindled species would survive the trek and be able to reproduce.

English YouTuber and educator Tom Scott (previously) joins Moullec on one of the flights above Southern France as they glide in a microlight aircraft just inches from the animals—Scott is so close that he’s able to touch goose’s tail feathers. Reaching this level of intimacy takes dedication and immersion in the flock, Moullec shares, saying that he raises the birds, sleeps with them, and even bathes in the pond on his property. This establishes trust and is essential as they define their routes, which sometimes traverse thousands of kilometers each day. “I’m not the one who teaches the birds to fly with me,” Moullec shares. “I’ve been flying with birds for 27 years, and they taught me how to fly with them.”

In addition to his conservation-oriented flights, Moullec offers passenger trips for those interested in joining the flock, and you can find more about his work on his site. (via The Kids Should See This)


explodingdog: Wonderful

View On WordPress

Ideas: Edward Yong: The Art of Science Journalism

Early on in his coverage of COVID, journalist Ed Yong realized it was more than just a science story — it was an omni-crisis. His journalism focuses on exposing the cracks in society exacerbated by the pandemic. He delivered this lecture as part of the Lind Initiative Future of the Media series at the University of British Columbia in April 2022.

BOOOOOOOM! – CREATE * INSPIRE * COMMUNITY * ART * DESIGN * MUSIC * FILM * PHOTO * PROJECTS: “Consider Things” by Photographer Erli Grünzweil

Penny Arcade: Generation ZZZ

New Comic: Generation ZZZ

ScreenAnarchy: Now Streaming: NOW AND THEN, Crime Never Changes

Rosie Perez plays a supporting role but is the star of the bilingual crime series, debuting globally on Apple TV+.

[Read the whole post on]

explodingdog: Nothing

View On WordPress

explodingdog: Last time

View On WordPress

ScreenAnarchy: Review: DOWNTON ABBEY: A NEW ERA, More of the Same, Except Slightly Different

Deliberately billed as an old-school, throwback “Motion Picture Event” three years ago, Downtown Abbey brought the unqualified, unreserved, ultimately uncritical nostalgia for interwar British aristocracy to multiplexes around the world after a six-season, 52-episode run on television. Given better (and bigger) than expected revenues, a sequel to Downton Abbey seemed all but inevitable. Marketed as the “Motion Picture Event of the Year” with barely a hint of hyperbole this time out, the sequel adds a not entirely accurate subtitle, “A New Era,” to distinguish it from its progenitor, but otherwise follows a comfortingly familiar formula, mixing audience-friendly soap opera tropes with a deeply uncritical, unironic embrace of the pre-WWII British aristocracy and the inflexible, rigid class system that supported, reinforced, and elevated their wealth, status,...

[Read the whole post on]

ScreenAnarchy: Indiecan Entertainment Launches Genre Label, RED WATER ENTERTAINMENT

In case you missed it, Indiecan Entertainment announced that they were launching a genre label here in Canada called Red Water Entertainment. The goal is to bring more international genre cinema to audiences here in Canada. As international genre cinema has always been our focus this is very appealing to us here at ScreenAnarchy.    Indiecan Entertainment CEO Avi Federgreen is running the show and he already has five films on his slate with the intent on gathering more titles this week at Marche du Film in Cannes. Friend and filmmaker Justin McConnell (Lifechanger, Clapboard Jungle) will carry over his role at Indiecan as acquisitions and operations advisor into the new company.    Announcements for Cannes related acquisitions when the blood, we meant ink, ink,...

[Read the whole post on]

Arduino Blog: Meander Coil++ enables safe, wireless power transmission

Modern wearable devices have allowed for a wide array of smart technologies to become mobile, including health tracking, receiving notifications, and much more. But due to their small battery size, they often run out of charge within a day or two, thus requiring frequent charging. This problem is what inspired a group of students from the University of Tokyo to create the Meander Coil++ project with the goal of enabling watt-scale wireless power transmission while also remaining safe.

Meander Coil++ differs from other wireless charging solutions in that it consists of a single shirt that has a series of tubes filled with liquid metal running horizontally through it. By applying an electric current, the large coil then creates a magnetic field and can induce current in the device to be charged. Because of this unique design, the researchers were able to achieve an efficiency of 41% for AC-to-AC transfers and a maximum power of 52W.

The coil’s design also relies on a 6.78MHz resonance frequency for power transfer, and this must be maintained no matter how the user is positioned. For this task, an Arduino Nano was combined with a bank of capacitors and relays which toggle on or off based on the values from the current monitoring module.

You can check out the team’s paper here for more details on Meander Coil++ and watch their CHI 22 presentation below, which features application examples such as charging a smartphone, a neck fan, a smartwatch, multiple LEDs, and even a Nano 33 BLE for activity and humidity monitoring.

The post Meander Coil++ enables safe, wireless power transmission appeared first on Arduino Blog.

Schneier on Security: Forging Australian Driver’s Licenses

The New South Wales digital driver’s license has multiple implementation flaws that allow for easy forgeries.

This file is encrypted using AES-256-CBC encryption combined with Base64 encoding.

A 4-digit application PIN (which gets set during the initial onboarding when a user first instals the application) is the encryption password used to protect or encrypt the licence data.

The problem here is that an attacker who has access to the encrypted licence data (whether that be through accessing a phone backup, direct access to the device or remote compromise) could easily brute-force this 4-digit PIN by using a script that would try all 10,000 combinations….


The second design flaw that is favourable for attackers is that the Digital Driver Licence data is never validated against the back-end authority which is the Service NSW API/database.

This means that the application has no native method to validate the Digital Driver Licence data that exists on the phone and thus cannot perform further actions such as warn users when this data has been modified.

As the Digital Licence is stored on the client’s device, validation should take place to ensure the local copy of the data actually matches the Digital Driver’s Licence data that was originally downloaded from the Service NSW API.

As this verification does not take place, an attacker is able to display the edited data on the Service NSW application without any preventative factors.

There’s a lot more in the blog post.

Schneier on Security: Friday Squid Blogging: Squid Street Art


As usual, you can also use this squid post to talk about the security stories in the news that I haven’t covered.

Read my blog posting guidelines here.

Schneier on Security: Bluetooth Flaw Allows Remote Unlocking of Digital Locks

Locks that use Bluetooth Low Energy to authenticate keys are vulnerable to remote unlocking. The research focused on Teslas, but the exploit is generalizable.

In a video shared with Reuters, NCC Group researcher Sultan Qasim Khan was able to open and then drive a Tesla using a small relay device attached to a laptop which bridged a large gap between the Tesla and the Tesla owner’s phone.

“This proves that any product relying on a trusted BLE connection is vulnerable to attacks even from the other side of the world,” the UK-based firm said in a statement, referring to the Bluetooth Low Energy (BLE) protocol—technology used in millions of cars and smart locks which automatically open when in close proximity to an authorised device.

Although Khan demonstrated the hack on a 2021 Tesla Model Y, NCC Group said any smart locks using BLE technology, including residential smart locks, could be unlocked in the same way.

Another news article.

Colossal: Wildflowers, Trees, and Quaint Cabins Spring From Su Blackwell’s Book Sculptures

“Nature in Britain” (2012). Photo by Jaron James. All images © Su Blackwell, shared with permission

The enchanting, imaginative narratives usually bound between the covers of a book burst from the page in the sculptures of Su Blackwell. Often sourcing materials from secondhand shops, flea markets, and library sales, the British artist, who’s based in Hastings, constructs lush gardens of birds and wildflowers and quiet cottages in the midst of evergreens that appear to emerge from vintage volumes.

Imbued with movement in the form of wind or waves, the whimisical works tend to revolve around the fleeting and finding refuge during times of loneliness and mundanity. Blackwell shares with Colossal:

I take my inspiration from fairytales and folklore and use these well-known tales as conduits for modern-day experiences. I often search for stories that relate to my life, whether that be Little Red Riding Hood meeting the big bad wolf or a princess given an impossible task of spinning straw (or in my case ‘words’) into gold, as in the Brother Grimm’s story “Rumplestiltskin. “The themes I explore have a universal appeal, and overall, there is a sense of hope pervading the works.

Blackwell is participating in a group show opening this August at Gustav Lübcke Museum in Hamm, Germany, and has solo exhibitions scheduled for 2023 and 2024 at The Last Tuesday Society and Long and Ryle in London. You can shop prints, cards, and her illustrated book of fairytales in her shop, and follow her practice on Instagram. (via Women’s Art)


“Migrating Words” (2014)

“Blue Butterflies” (2022)

“The Lighthouse Keeper’s Cottage” (2014). Photo by Yeshen

Left: “The Painted Lady” (2019). Photo by John Reynolds. Top right: “Weeds.” Bottom right: “Weeds (How to Control and Love Them” (2021)

“To Kill a Mockingbird” (2020)

“The Ship” (2020)

Saturday Morning Breakfast Cereal: Saturday Morning Breakfast Cereal - Noble

Click here to go see the bonus panel!

It's surprisingly hard to do an awesome story in which the culmination is a messy democracy.

Today's News:

Planet Haskell: Monday Morning Haskell: Interactive IO

Today we'll continue our study of IO by looking at an interactive IO program. In this kind of program, the user will enter commands continuously on the command line to interact with our program. The fun part is that we'll find a use for a lesser-known library function called, well, interact!

Imagine you're writing a command line program where you want the user to keep entering input lines, and you do some kind of processing for each line. The most simple example would be an echo program, where we simply repeat the user's input back out to them:

>> Hello
>> Goodbye

A naive approach to writing this in Haskell would use recursion like so:

main :: IO ()
main = go
    go = do
      input <- getLine
      putStrLn input

However, there's no terminal condition on this loop. It keeps expecting to read a new line. Our only way to end the program is with "ctrl+C". Typically, the cleaner way to end a program is to use the input "ctrl+D" instead, which is the "end of file" character. However, this example will not end elegantly if we do that:

>> Hello
>> Goodbye
>> (ctrl+D)
<stdin>: hGetLine: end of file

What's happening here is that getLine will throw this error when it reads the "end of file" character. In order to fix this, we can use these helper functions.

hIsEOF :: Handle -> IO Bool

-- Specialized to stdin
isEOF :: IO Bool

These give us a boolean that indicates whether we have reached the "end of file" as our input. The first works for any file handle and the second tells us about the stdin handle. If it returns false, then we are safe to proceed with getLine. So here's how we would rewrite our program:

main :: IO ()
main = go
    go = do
      ended <- isEOF
      if ended
        then return ()
        else do
          input <- getLine
          putStrLn input

Now we won't get that error message when we enter "ctrl+D".

But for these specific problems, there's another tool we can turn to, and this is the "interact" function:

interact :: (String -> String) -> IO ()

The function we supply simply takes an input string and determines what string should be output as a result. It handles all the messiness of looping for us. So we could write our echo program very simply like so:

main :: IO ()
main = interact id


>> Hello
>> Goodbye
>> Ctrl+D

Or if we're a tiny bit more ambitious, we can capitalize each of the user's entries:

main :: IO ()
main = interact (map toUpper)


>> Hello
>> Goodbye
>> Ctrl+D

The function is a little tricky though, because the String -> String function is actually about taking the whole input string and returning the whole output string. The fact that it works line-by-line with simple functions is an interesting consequence of Haskell's laziness.

However, because the function is taking the whole input string, you can also write your function so that it breaks the input into lines and does a processing function on each line. Here's what that would look like:

processSingleLine :: String -> String
processSingleLine = map toUpper

processString :: String -> String
processString input = result
    ls = lines input
    result = unlines (map processSingleLine ls)

main :: IO ()
main = interact processString

For our uppercase and id examples, this works the same way. But this would be the only proper way to write our program if we wanted to, for example, parse a simple equation on each line and print the result:

processSimpleAddition :: String -> String
processSingleAddition input = case splitOn " " input of
  [num1, _, num2] -> show (read num1 + read num2)
  _ -> "Invalid input!"

processString :: String -> String
processString input = result
    ls = lines input
    result = unlines (map processSimpleAddition ls)

main :: IO ()
main = interact processString


>> 4 + 5
>> 3 + 2
>> Hello
Invalid input!

So hIsEOF and interact are just a couple more tools you can add to your arsenal to simplify some of these common types of programs. If you're enjoying these blog posts, make sure to subscribe to our monthly newsletter! This will keep you up to date with our newest posts AND give you access to our subscriber resources!

new shelton wet/dry: They plan, but don’t imagine

Calling a man bald counts as sexual harassment, UK judge rules

New York Now Has More Airbnb Listings Than Apartments for Rent

San Francisco Police Are Using Driverless Cars as Mobile Surveillance Cameras

Biofire Technologies has raised $17 million in seed funding to further develop its smart gun, which uses a fingerprint sensor to unlock the trigger.

Do Insects Have Consciousness? — bugs feel something like hunger and pain, and “perhaps very simple analogs of anger,” but no grief or jealousy. “They plan, but don’t imagine”

CreativeApplications.Net: Cuts – Udit Mahajan

Category: NFT

CreativeApplications.Net (CAN) is a community supported website. If you enjoy content on CAN, please consider Becoming a Member. Thank you!

Michael Geist: CRTC Chair Confirms Bill C-11 Captures User Content, Will Take Years to Implement

CRTC Chair Ian Scott appeared before the Standing Committee on Canadian Heritage yesterday and Bill C-11 proved to be a popular topic of discussion. The exchanges got testy at times as Scott seemingly stepped outside of his role as an independent regulatory by regularly defending government legislation, even veering into commenting on newspapers, which clearly falls outside the CRTC’s jurisdiction. With respect to Bill C-11, most newsworthy were two comments regarding the regulation of user content and the timelines for implementing the bill if it receives royal assent.

First, Scott was asked about the regulation of user content, confirming what has been obvious for months despite denials from Canadian Heritage Minister Pablo Rodriguez. The following exchange with Conservative MP Rachael Thomas got Scott on the record:

Thomas: Bill C-11 does in fact leave it open to user generated content being regulated by the CRTC. I recognize that there have been arguments against this, however, Dr. Michael Geist has said “the indisputable reality is that the net result of those provisions is that user generated content is in the bill.” Jeanette Patel from Youtube Canada said “the draft law’s wording gives the broadcast regulator” – in other words you – “scope to oversee everyday videos posted for other users to watch.” Scott Benzie from Digital First Canada has also said that “while the government says the legislation will not capture digital first creators, the bill clearly does capture them.”

So all these individuals are individual users creating content. It would appear that the bill does, or could in fact, capture them, correct?

Scott: As constructed, there is a provision that would allow us to do it as required.

While Scott continued by arguing that the Commission already has equivalent regulatory powers and is not interested in regulating user content, the confirmation that Bill C-11 currently does cover user generated content should put an end to the government’s gaslighting that it does not.

Scott was also asked about how long it would take to implement Bill C-11. Canadians make recall that former Heritage Minister Steven Guilbeault implausibly claimed that it would take nine months to complete the process. Not so, said Scott in an exchange with Conservative MP John Nater:

Nater: I’m curious what timeline you see from the time Bill C-11 is passed and receives royal assent to when it is fully implemented. What’s the best case scenario for the CRTC to have that fully implemented?

Scott: To say when it will be fully implemented is very difficult. I think the first stages of setting up the broad parameters – the regulatory regime, who will contribute, who is caught, how much, major definitions – those things should be done reasonably within a year. But there are many other more technical aspects – transition, licences from five year to seven years they will all need to be changed, there are a set of regulations that have to be passed that are beyond the control of the CRTC. If I had to put a number on it, I think it could be fully implemented in two years.

That’s not unreasonable, but it highlights how Guilbeault’s claims were pure fiction. Even if the bill was passed quickly (which the government is trying to do with a pre-study in the Senate that will limit hearings), it would still take until at least 2024 for the CRTC to address many of the unanswered questions in the bill. Further, the CRTC process is unlikely to be the final say in the matter as the possibility of cabinet or judicial appeals means that the system could take many more years to become operational. All the more the reason to get it right now, rather than creating a false sense that new money will be available in the short term.

The post CRTC Chair Confirms Bill C-11 Captures User Content, Will Take Years to Implement appeared first on Michael Geist.

CreativeApplications.Net: Symphony in Acid – Typography, sound and (the limits of) language

Created as a collaboration between Max Cooper (Music) and Ksawery Komputery (video), 'Symphony in Acid' is a (generative) music video that maps every sound to the writings of Ludwig Wittgenstein with references to the combination of orchestral-like synths with 303-like synthesis of acid house.

Category: Javascript
Tags: / / / / / / / / / /

CreativeApplications.Net (CAN) is a community supported website. If you enjoy content on CAN, please consider Becoming a Member. Thank you!

Ideas: Body Language | Olivia Laing: Visions of the Free Body

Writer Olivia Laing reflects on the fight for bodily freedom, through polarizing figures such as psychoanalyst Wilhelm Reich and feminist Andrea Dworkin, in this conversation based on her book, Everybody. *This episode originally aired on Sept. 23, 2021 as part of our series, Body Language.


CreativeApplications.Net: Copenhagen Interpretation – Spøgelsesmaskinen & Galo Canizares

Category: NFT

CreativeApplications.Net (CAN) is a community supported website. If you enjoy content on CAN, please consider Becoming a Member. Thank you!

CreativeApplications.Net: SCRIBBLERS – Galo Canizares

Category: NFT

CreativeApplications.Net (CAN) is a community supported website. If you enjoy content on CAN, please consider Becoming a Member. Thank you!

Disquiet: Disquiet Junto Project 0542: 2600 Club

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

Deadline: This project’s deadline is the end of the day Monday, May 23, 2022, at 11:59pm (that is, just before midnight) wherever you are. It was posted on Thursday, May 19, 2022.

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

Disquiet Junto Project 0542: 2600 Club
The Assignment: Make some phreaking music

Thanks to Alan Bland for proposing this concept for a project.

Step 1: The number 2600 holds particular meaning in hacker circles. Roughly half a century ago, it was discovered that 2600 cycles per second, or 2600 hertz, was the frequency that let people gain operator-level access to phone systems. If this story isn’t familiar, a quick web search will bring you up to speed. It’s widely documented. Familiarize (or re-familiarize) yourself with the doors opened by a whistle at 2600 cycles per second.

Step 2: Make music that somehow engages with the number 2600. You might employ a tone of 2600 hertz, though fair warning it’s quite high-pitched. You might simply use a whistle, in celebration of the Cap’n Crunch toy at the center of the 2600 phone phreaking (as it was called) story. Or you might come up with some other sonic exploration of the number.

Eight Important Steps When Your Track Is Done:

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

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

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

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

Project discussion takes place on

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

Step 6: If posting on social media, please consider using the hashtag #DisquietJunto so fellow participants are more likely to locate your communication.

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

Step 8: Also join in the discussion on the Disquiet Junto Slack. Send your email address to for Slack inclusion.

Note: Please post one track for this weekly Junto project. If you choose to post more than one, and do so on SoundCloud, please let me know which you’d like added to the playlist. Thanks.

Additional Details:

Deadline: This project’s deadline is the end of the day Monday, May 23, 2022, at 11:59pm (that is, just before midnight) wherever you are. It was posted on Thursday, May 19, 2022.

Length: The length is up to you. How long can you exhale?

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

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

Download: It is always best to set your track as downloadable and allowing for attributed remixing (i.e., a Creative Commons license permitting non-commercial sharing with attribution, allowing for derivatives).

For context, when posting the track online, please be sure to include this following information:

More on this 542nd weekly Disquiet Junto project — 2600 Club (The Assignment: Make some phreaking music) — at:

Thanks to Alan Bland for proposing this concept for a project.

More on the Disquiet Junto at:

Subscribe to project announcements here:

Project discussion takes place on

Image by arbyreed. And it is used (cropped, with text added) thanks to a Creative Commons Attribution-license: Original at

Planet Lisp: Eitaro Fukamachi: Woo: a high-performance Common Lisp web server

Hi, all Common Lispers.

It's been 7 years since I talked about Woo at European Lisp Symposium. I have heard that several people are using Woo for running their web services. I am grateful for that.

I quit the company I was working for when I developed Woo. Today, I'm writing a payment service in Common Lisp as ever in another company. Not surprisingly, I'm using Woo there as well, and so far have had no performance problems or other operational difficulties.

But on the other hand, some people are still reckless enough to try to run web services using Hunchentoot. And, some people complain about the lack of articles about Woo.

Sorry for my negligence in not keeping updating the information and publishing articles. Therefore, it may be worthful to take Woo as the topic even today.

What is Woo?

Woo is a high-performance web server written in Common Lisp.

It's almost the same level as Go's web server in performance and several times better than other Common Lisp servers, like Hunchentoot.

Web server benchmark

What's different? Not only eliminate bottlenecks by tuning the Common Lisp code but the architecture is designed to handle many concurrent requests efficiently.

Compared to Hunchentoot

Hunchentoot is the most popular web server. According to Quicklisp download stats in April 2022, Hunchentoot is the only web server in the top 100 (ref. Woo is 302th).

An excellent point of Hunchentoot is that it's written in portable Common Lisp. It works on Linux, macOS, and Windows with many Lisp implementations. No external libraries are required.

On the other hand, there are concerns about using it as an HTTP server open to the world.

Because Hunchentoot takes a thread-per-request approach to handle requests.

Hunchentoot thread-per-request architecture

The disadvantage of this architecture is that it is not good at handling large numbers of simultaneous requests.

Hunchentoot thread-per-request architecture

Hunchentoot creates a thread when accepting a new connection, done sending a response, and terminates the thread when it's disconnected. Therefore, more concurrent threads are required when it takes longer to process a slow client (e.g., network transmission time).

It doesn't matter if every client works fast enough. In reality, however, some clients are slow or unstable, for example, smartphone users.

There is also a DoS attack, which intentionally makes large numbers of slow simultaneous connections, called Slowloris attack. Web services running on Hunchentoot can be instantly inaccessible by this attack. The bad news is that you can easily find a script to make Slowloris attack on the web.

Compared to Wookie

Event-driven is another approach to handling a massive amount of simultaneous connections. Let's take Wookie as an example.

Wookie event-driven architecture

In this model, all connection I/O is processed asynchronously, so the speed and stability of the connection do not affect other connections.

Of course, this architecture also has its drawbacks as it works in a single thread, which means only one process can be executed at a time. When a response is being sent to one client, it is not possible to read another client's request.

Wookie's throughput is slightly worse than Hunchentoot for simple HTTP request and response iterations in my benchmark.

Besides that, it is more advantageous for protocols such as WebSocket, in which small chunks are exchanged asynchronously.

Wookie depends on libuv, C library to support asynchronous I/O. Although installing an external library is bothersome, libuv is used internally in Node.js, so it is not so difficult to do it in most environments, including Windows.

Another web server house is event-driven but written in portable Common Lisp. Its event-loop is implemented with cl:loop and usocket:wait-for-input. If the performance doesn't matter, it would be another option.

Multithreaded Event-driven

Woo also adopts the event-driven model, except it has multiple event loops.

Woo multithreaded event-driven architecture

First, it accepts a connection in the main thread, dispatches to pre-created worker threads, and processes requests and responses with asynchronous I/O in each worker.

That is why its throughput is exceptionally high: it processes multiple requests simultaneously in worker threads.

In addition, Woo uses libev while Wookie uses libuv. libev runs fast since it is a pretty small library that only wraps the async I/O API between each OS, like epoll, kqueue, and poll. Its downside is less platform support. Especially, it doesn't support Windows. However, I don't think it will be a problem in most cases since it's rare to use Windows for a web server.

Woo is Clack-compliant

Woo's feature I'd like to mention is that it is Clack-compliant.

Clack is an abstraction layer for Common Lisp web servers. It allows running a web application on different web servers which follows Clack standard without any changes.

Since Woo supports Clack natively, it can run Lack applications without any libraries. I want to introduce what Clack and Lack are in the other article.

Running inside Docker

Lastly, let's run Woo inside a Docker container.


These 3 files are necessary.

  • Dockerfile
  • app.lisp


FROM fukamachi/sbcl

RUN set -x; \
  apt-get update && apt-get -y install --no-install-recommends \
    libev-dev \
    gcc \
    libc6-dev && \
  rm -rf /var/lib/apt/lists/*

COPY /srv

RUN set -x; \
  ros install clack woo

ENTRYPOINT ["/srv/"]
CMD ["app.lisp"]

A script to start a web server, Woo, in this case.


exec clackup --server woo --debug nil --address "" --port "$PORT" "$@"


A Lack application is written in this file. See Lacks documentation for the detail.

(lambda (env)
  (declare (ignore env))
  '(200 () ("Hello from Woo")))


"`bash $ docker build -t server-app-test .

### Run

$ docker run --rm -it -p 5000:5000 -v $PWD:/app server-app-test

Then, open localhost:5000 with your browser.


I showed how Woo is different from other web servers and how to run it with Docker.

Clack allows switching web servers easily without modifying the application code. In the case of, I use Hunchentoot for development and use Woo for the production environment.

I will introduce Clack/Lack in the next article.

Disquiet: Unofficial Channels: Data Sonification Archive

A merging of distant galaxies that hits the ear like the Doppler effect on an urban highway. El Niño weather patterns as expressed by an instrumental ensemble. Covid-19 statistics that transform into an increasingly complex drone. These are not gestures conceived by modern classical composers. This is scientific research, examples of data sonification, a word still underlined in red by word processors despite its high profile exploration at NASA, the United Nations, and the Guggenheim Museum Bilbao.

Data sonification is an umbrella term for a growing variety of techniques by which information — from stock market fluctuations to DNA sequences to air pollution trends — gets represented through sound. Sonification is often compared with data visualization, an iffy correlation that perhaps fueled unrealistic expectations for its widespread utility.

Still, engaging work happens regularly. In the first example above, the creators fast-forwarded through billions of years of planetary activity to orient the listener: “the surround sound enables them to hear the galaxies approach from each side and orbit around each other before finally merging together,” write the collaborators, from two observatories and the engineering firm Arup, in accompanying documentation.

The weather one is by Benjamin Renard, a hydrologist doing statistical analysis of climatic datasets. The pandemic one is by Chelidon Frame, extrapolating open data from the Center for Systems Science and Engineering (CSSE) at Johns Hopkins University. These works are among the nearly 400 examples of sonification that constitute the ever-growing collection indexed at the website The online resource is maintained by Sara Lenzi and Paolo Ciuccarelli, both from the Center for Design at Northeastern University in Boston, Massachusetts.

Asked on a Zoom call if she has identified best practices of what works in sonification, Lenzi, who researched the topic for her PhD at the Polytechnic University of Milan, helpfully reframed the inquiry: “The main research question was,” she says, “does sonification work or not? Is it going somewhere or not?” Sonification doesn’t “replace” data visualization, she argues. “It never really came out of its niche.” But a diminishing sonic purism is allowing a new wave of intriguing work, according to Lenzi: “People started using different strategies, like combining it with other sensory modalities,” among them data visualization. In the Covid-19 example cited above, a user interface (you adjust how quickly time passes) and fluid diagrams align with the drone to make a deeper impression on the user than sound or image alone would have.

Lenzi is currently working on a report summarizing the first year of, which launched in January 2021. “We curate the collection,” she explains. “We don’t accept automatically what is sent to us by the submission form. We analyze each case.” And since the field remains new, the website’s categorization, Lenzi says, “keeps changing.”

The above is slightly expanded from the version that appeared in the Unofficial Channels column in the May 2022 issue of The Wire.


View On WordPress

Schneier on Security: Websites that Collect Your Data as You Type

A surprising number of websites include JavaScript keyloggers that collect everything you type as you type it, not just when you submit a form.

Researchers from KU Leuven, Radboud University, and University of Lausanne crawled and analyzed the top 100,000 websites, looking at scenarios in which a user is visiting a site while in the European Union and visiting a site from the United States. They found that 1,844 websites gathered an EU user’s email address without their consent, and a staggering 2,950 logged a US user’s email in some form. Many of the sites seemingly do not intend to conduct the data-logging but incorporate third-party marketing and analytics services that cause the behavior.

After specifically crawling sites for password leaks in May 2021, the researchers also found 52 websites in which third parties, including the Russian tech giant Yandex, were incidentally collecting password data before submission. The group disclosed their findings to these sites, and all 52 instances have since been resolved.

“If there’s a Submit button on a form, the reasonable expectation is that it does something—that it will submit your data when you click it,” says Güneş Acar, a professor and researcher in Radboud University’s digital security group and one of the leaders of the study. “We were super surprised by these results. We thought maybe we were going to find a few hundred websites where your email is collected before you submit, but this exceeded our expectations by far.”

Research paper.

Arduino Blog: FingerX is a gadget that lets people feel the shapes of VR objects physically

One of virtual reality’s largest unsolved challenges is allowing players to interact with a virtual environment beyond just video and audio. This is why a team of researchers from National Chengchi University in Taiwan came up with the FingerX project as a way to get haptic feedback when touching objects in a real and VR setting simultaneously.

Whereas other ideas revolve around constricting finger motion or using pins to generate rudimentary shapes, FingerX incorporates a single extender module that rests upon each fingertip and extends when certain conditions are met. When touching virtual objects that rest on a flat surface, the shape of the virtual object is intersected by the hand’s position and causes the extenders to mold around the form. Entirely virtual objects can also be held in the player’s hand using this same principle while also being able to fold away the extenders when grasping a physical object.

The device is equipped with a pair of Arduino Mega boards, which control a set of eight motors through four dual motor drivers. Positioning of the ring actuator is accomplished by reading its current rotation from the center with a rotary encoder connected to an interrupt pin. Power for everything comes from a 6V external supply.

Dive into the details of the project by reading the team’s paper here.

The post FingerX is a gadget that lets people feel the shapes of VR objects physically appeared first on Arduino Blog.

Penny Arcade: New Stuff!

I've been in a bit of a slump recently when it comes to drawing but a new idea has got me drawing a bunch more and feeling better!

Penny Arcade: Intentionality

As a corrolary to the assertion that there are certain flavors of stupid you can only learn at college, I think we have to say that there are certain types of harm that only the very, very well-intentioned can even aspire to.

Arduino Blog: This robotic system automatically scans film slides on its own

Before the advent of digital cameras, people used film to capture their most cherished memories. And nowadays, there is a rush to convert them into a digital format before they inevitably degrade and become unrecognizable. Film slides in particular have a major drawback in that they are separate, individual pieces of film placed onto small cards which makes scanning them manually a very long and expensive process. In order to digitize his family’s collection of film slides, user Chris was able to create a robot that automates this tedious task.

Most of the robot was made from an old, repurposed Anet A8 Plus 3D printer as Chris kept the existing X and Z axes while replacing the printhead with a custom toolhead. He swapped out the previous control circuitry in the printer for an Arduino Mega 2560 and combined the board with several stepper motor drivers. The gripper module was mounted to the X axis carriage and is responsible for picking up slides from below and moving them into and out of the scanner to the side. Several sensors within the toolhead, including a pair of load cells and a time-of-flight module, assist in ensuring the robot doesn’t collide with the scanner and potentially damage it.

For more details on this project, check out Chris’ write-up here and watch his video below.

The post This robotic system automatically scans film slides on its own appeared first on Arduino Blog.

Saturday Morning Breakfast Cereal: Saturday Morning Breakfast Cereal - Efficient

Click here to go see the bonus panel!

If you play long enough, it's not a bet, since the outcome is certain.

Today's News:

Quiet Earth: Welcome to THE FRINGE - The Exciting New Cinematic Universe Coming from the Makers of PROSPECT

Something very special is coming from the creators of Prospect (review). Directors Zeek Earl and Chris Caldwell are kickstarting one of the coolest looking new cinematic universes via an NFT drop and if you are not convinced by all the amazing and meticulously detailed material and thoughtful backstory they've created for it, I don't know what to tell you.

The world they are created looks to be set within the same one as Prospect, one owing to the western tradition of lawlessness and populated by miners, engineers, bounty hunters, trappers and mercenaries.

Read an introductio [Continued ...]

Michael Geist: Is There Anything Less Convincing than CRTC Chair Ian Scott’s Empty Assurances on Bill C-11 User Content Regulation?

The Online Streaming Act (Bill C-11) has now passed second reading in the House of Commons and will be the subject of hearings at the Standing Committee on Canadian Heritage in the coming weeks. With the prospect of user generated content regulation still a serious concern, outgoing CRTC Chair Ian Scott tried to provide assurances earlier this week that the Commission has no interest in exercising regulatory powers over user generated content. Yet Scott’s comments rang hollow as he twisted himself in a series of contradictory knots that lead to the inescapable conclusion that non-binding promises without actual reforms mean little.

Consider that Scott – who is set to be replaced later this year – told the conference that:

(1) the CRTC has no interest in regulating user content
(2) as chair he doesn’t make decisions for the Commission
(3) the CRTC relies on an exhaustive public record to make decisions, and
(4) platforms should be making contributions including discoverability.

If I have this right, the lame duck chair of the CRTC, who is currently under investigation by Conflict of Interest and Ethics Commissioner, says that the Commission only makes decisions based on the public record, but he has nevertheless already made up his mind that it is not in the interest of the CRTC to regulate user content despite the absence of a public record. While trying to reconcile that position, Scott’s vision of “no regulation” still involves discoverability requirements, which are precisely the regulations that have sparked concerns for digital first creators. So Scott has made up his mind on no regulation or discoverability regulation all without a public record, but have no fear since he doesn’t make decisions for the CRTC anyway.

Is there anything other than “I resign” that Scott isn’t willing to say? The contradictory comments leave Canadians with empty assurances about future CRTC regulatory positions that will be developed by a different Commission chair, while Canadian Heritage Minister Pablo Rodriguez talks about fixing the CRTC rather than fixing the bill or releasing the still-secret policy direction to the Commission.

The post Is There Anything Less Convincing than CRTC Chair Ian Scott’s Empty Assurances on Bill C-11 User Content Regulation? appeared first on Michael Geist.

Planet Haskell: Gabriel Gonzalez: Namespaced De Bruijn indices

Namespaced De Bruijn indices

In this post I share a trick I use for dealing with bound variables in Dhall that I thought might be useful for other interpreted programming languages. I have no idea if this trick has been introduced before but if it has then just let me know and I’ll acknowledge any prior art here.

Edit: Todd Wilson points out that Mark-Oliver Stehr’s CINNI originally introduced this idea.

The brief explanation of the trick is: instead of choosing between a named or a nameless representation for bound variables you can get the best of both worlds by namespacing De Bruijn indices by variable names. This simplifies the implementation and in some cases improves the end user’s experience.

The rest of this post is a longer explanation of the above summary, starting with an explanation of the trick and followed by a review of the benefits of this approach.


I’d like to first explain what I mean by “named” and “nameless” representations before I explain the trick.

A named representation of the lambda calculus syntax tree typically looks something like this:

data Syntax
= Variable String
| Lambda String Syntax
| Apply Syntax Syntax

For example, if the user wrote the following Haskell-like code:

\f -> \x -> f x

… then that would correspond to this syntax tree:

example :: Syntax
example = Lambda "f" (Lambda "x" (Apply (Variable "f") (Variable "x")))

The named representation has the nice property that it preserves the original variable names … well, sort of. This representation definitely preserves the variable names when you initially parse the code into the syntax tree, but if you β-reduce an expression you can potentially run into problems.

For example, consider this expression:

\x -> (\y -> \x -> y) x

… which corresponds to this syntax tree:

Lambda "x" (Apply (Lambda "y" (Lambda "x" (Variable "y"))) (Variable "x"))

If you try to β-reduce (\y -> \x -> y) x without renaming any variables then you get the following incorrect result:

\x -> \x -> x

This bug is known as “name capture” and capture-avoiding substitution requires renaming one of the variables named x so that the inner x does not shadow the outer x. For example, we could fix the problem by renaming the outer x to x1 like this:

\x1 -> \x -> x1

A nameless representation tries to work around these name capture issues by replacing the variable names with numeric indices (known as De Bruijn indices):

data Syntax
= Variable Int
| Lambda Syntax
| Apply Syntax Syntax

For example, code like this:

\f -> \x -> f x

… corresponds to this nameless representation:

example :: Syntax
example = Lambda (Lambda (Apply (Variable 1) (Variable 0)))

Carefully note that the Lambda constructor now has no field for the bound variable name, so it’s as if the user had instead written:

\ -> \ -> @1 @0

… using @n to represent the variable whose De Bruijn index is n.

The numeric De Bruijn indices refer to bound variables. Specifically, the numeric index 0 refers to the “closest” or “innermost” variable bound by a lambda:

--                This 0 index …
-- ↓
\ -> \ -> @1 @0
-- ↑ … refers to the variable bound by this lambda

… and incrementing the index moves to the next outermost lambda:

--             This 1 index …
-- ↓
\ -> \ -> @1 @0
-- ↑ … refers to the variable bound by this lambda

De Bruijn indices avoid name collisions between bound variables, but they require you to do additional work if you wish to preserve the original variable names. There are several ways to do so, and I’ll present my preferred approach.

The trick - Part 1

We can get the best of both worlds by combining the named and nameless representations into a hybrid representation like this:

data Syntax
= Variable String Int
| Lambda String Syntax
| Apply Syntax Syntax

I call this representation “namespaced De Bruijn indices”.

This is almost the exact same as our named representation, except that we have now added an Int field to the Variable constructor. This Int field is morally the same as the De Bruijn index in the nameless representation, except that this time the De Bruijn index is “namespaced” to a specific variable name.

The easiest way to explain this is with a few examples.

The following expression:

\x -> \y -> \x -> x@0

… corresponds to this syntax tree:

Lambda "x" (Lambda "y" (Lambda "x" (Variable "x" 0)))

… and this curried function returns the third function argument:

--                    This …
-- ↓
\x -> \y -> \x -> x@0
-- ↑ … refers to this bound variable

… because that is the innermost bound variable named x.

Similarly, the following expression:

\x -> \y -> \x -> y@0

… corresponds to this syntax tree:

Lambda "x" (Lambda "y" (Lambda "x" (Variable "y" 0)))

… which returns the second function argument:

--                    This …
-- ↓
\x -> \y -> \x -> y@0
-- ↑ … refers to this bound variable

… because that is the innermost bound variable named y.

Carefully note that our variable still has a De Bruijn index of 0, but we ignore the innermost bound variable named x because we also pair our De Bruijn index with name of the variable we are referring to (y) so we only count bound variables named y when resolving the De Bruijn index.

Finally, the following expression:

\x -> \y -> \x -> x@1

… corresponds to this syntax tree:

Lambda "x" (Lambda "y" (Lambda "x" (Variable "x" 1)))

… which returns the first function argument:

--                    This …
-- ↓
\x -> \y -> \x -> x@1
-- ↑ … refers to this bound variable

The De Bruijn index is 1, which means that it refers to the second innermost (0-indexed) bound variable named x.

Notice how this representation lets us refer to shadowed variables by their index. These De Bruijn indices are not an internal implementation detail, but are actually available to the user as part of the surface syntax of the language.

However, we want to avoid littering the code with these De Bruijn indices, which brings us to the second part of the trick.

The trick - Part 2

The next step is to add syntactic sugar to the language by allowing users to omit the index in the source code, which defaults the index to 0. This means that an expression that never references shadowed variables never needs to specify a De Bruijn index.

For example, instead of writing this:

\x -> \y -> \x -> x@0

… we can elide the index to simplify the code to:

\x -> \y -> \x -> x

… which will still parse as:

Lambda "x" (Lambda "y" (Lambda "x" (Variable "x" 0)))

Similarly, we can simplify this:

\x -> \y -> \x -> y@0

… to this:

\x -> \y -> \x -> y

… which will still parse as:

Lambda "x" (Lambda "y" (Lambda "x" (Variable "y" 0)))

However, we cannot use this syntactic sugar to simplify the final example:

\x -> \y -> \x -> x@1

… since the index is non-zero. Any code that references a shadowed variable still needs to use an explicit De Bruijn index to do so.

Vice versa, we also omit zero indices when pretty-printing code. When we pretty-print this syntax tree:

Lambda "x" (Lambda "y" (Lambda "x" (Variable "x" 0)))

… we don’t include the index:

\x -> \y -> \x -> x

This syntactic sugar ensures that most users do not need to be aware that indices exist at all when writing code. The user only encounters the indices in two scenarios:

  • The user wishes to explicitly reference a shadowed variable

    For example, in the following expression:

    \x -> \y -> \x -> x@1

    … the user might prefer to use the built-in language support for disambiguating variables of the same name rather than renaming one of the two variables named x.

  • The indices appear in a β-reduced result

    For example, this expression has no user-visible De Bruijn indices:

    \x -> (\y -> \x -> y) x

    … but if you β-reduce the expression (I’ll cover how in the Appendix) and pretty-print the β-reduced expression then the result will introduce a non-zero De Bruijn index to disambiguate the two variables named x:

    \x -> \x -> x@1

In fact, the latter scenario is the reason I originally adopted this trick: I wanted to be able to display β-reduced functions to the end user while preserving the original variable names as much as possible.

Note that De Bruijn indices don’t appear when a β-reduced expression does not reference any shadowed variables. For example, if you β-reduce this expression:

(\f -> f f) (\x -> x)

… the result has no De Bruijn index (because the index is 0 and is therefore elided by the pretty-printer):

\x -> x

The trick - Part 3

One of the benefits of the traditional nameless representation using (non-namespaced) De Bruijn indices is that you get α-equivalence for free. Two nameless expressions are α-equivalent if they are syntactically identical. We can build upon this useful property to derive a compact algorithm for α-equivalence of “namespaced De Bruijn indices”.

The trick is to recognize that namespaced De Bruijn indices reduce to ordinary De Bruijn indices in the degenerate case when you rename all variables to the same name. I’ll call this renaming process “α-reduction”.

For example, if we α-reduce the following expression by renaming all of the: variables to _:

\x -> \y -> \x -> x@1

… then we get this result:

\_ -> \_ -> \_ -> _@2

See the Appendix for the α-reduction algorithm.

Equipped with α-reduction, then we can derive α-equivalence: two expressions are α-equivalent if their α-reduced forms are syntactically identical.

For example, this expression:

\x -> x

… and this expression:

\y -> y

… both α-reduce to:

\_ -> _

… so they are α-equivalent.


There are a few benefits of using this trick that motivate me to use this in all of my interpreted languages:

  • This trick improves the readability of β-reduced functions

    β-reduced functions preserve the original variable names and this trick doesn’t suffer from the rename-related name pollution that plagues other capture-avoiding substitution algorithms. In particular, β-reduced expressions only display De Bruijn indices when absolutely necessary (if they reference a shadowed variable) and they otherwise use the original pristine variable names.

  • This trick simplifies the internal implementation

    You don’t need to maintain two separate syntax trees for a named and nameless representation. You can use the same syntax tree for both since any named syntax tree can be α-reduced to give the equivalent nameless syntax tree.

  • This trick enables userland support for referencing shadowed variables

    I know some people think that referencing shadowed variable names is a misfeature. However, I personally feel that resolving name collisions by adding ' or _ characters to the end of variable names is less principled than having language support for resolving name collisions using optional De Bruijn indices.

  • (Not shown) This trick can sometimes improve type errors

    To be precise, this trick improves the inferred types displayed in error messages when using explicit universal quantification.

    Type variables also have to avoid name collisions, so if you use the same namespaced De Bruijn representation for your types then you avoid polluting your inferred types and error messages with junk type variables like a14.

    This post doesn’t cover the equivalent type-level trick, but you can refer to the Dhall standard if you need an example of a language that uses this trick.


I believe that namespaced De Bruijn indices are most appropriate for languages that are (A) strongly normalizing (like Dhall) and (B) interpreted, because such languages tend to support pretty-printing β-reduced functions.

I think this trick is also useful to a lesser extent for all interpreted languages, if only because the implementation is (in my opinion) simpler and more elegant than other algorithms for capture-avoiding substitution (See the Appendix below).

On the other hand, compiled languages will likely not benefit much from this trick since they typically have no need to preserve the original variable names and they also will use an intermediate representation that is very different from the concrete syntax tree.

Appendix - Implementation

This section provides Haskell code specifying how to α-reduce and β-reduce a syntax tree that uses namespaced De Bruijn indices.

This reference implementation is not the most efficient implementation, but it’s the simplest one which I use for pedagogical purposes. If you’re interested in efficiency then check out my Grace project, which mixes this trick with the more efficient normalization-by-evaluation algorithm.

I also don’t include code for the parser or pretty-printer, because the only interesting part is the syntactic sugar for handling variables with a De Bruijn index of 0. Again, check out Grace if you want to refer to a more complete implementation.

-- | Syntax tree
data Syntax
= Variable String Int
| Lambda String Syntax
| Apply Syntax Syntax
deriving (Eq, Show)

{-| Increase the index of all bound variables matching the given variable name

This is modified from the Shifting definition in Pierce's \"Types and
Programming Languages\" by adding an additional argument for the namespace
to shift
:: Int
-- ^ The amount to shift by
-> String
-- ^ The variable name to match (a.k.a. the namespace)
-> Int
-- ^ The minimum bound for which indices to shift
-> Syntax
-- ^ The expression to shift
-> Syntax
shift offset namespace minIndex syntax =
case syntax of
Variable name index -> Variable name index'
| name == namespace && minIndex <= index = index + offset
| otherwise = index

Lambda name body -> Lambda name body'
| name == namespace = minIndex + 1
| otherwise = minIndex

body' = shift offset namespace minIndex' body

Apply function argument -> Apply function' argument'
function' = shift offset namespace minIndex function

argument' = shift offset namespace minIndex argument

{-| Substitute the given variable name and index with an expression

This is modified from the Substitution definition in Pierce's \"Types and
Programming Languages\" by adding an additional argument for the variable
:: Syntax
-- ^ The expression to substitute into
-> String
-- ^ The name of the variable to replace
-> Int
-- ^ The index of the variable to replace
-> Syntax
-- ^ The expression to substitute in place of the given variable
-> Syntax
substitute expression name index replacement =
case expression of
Variable name' index'
| name == name' && index == index' -> replacement
| otherwise -> Variable name' index'

Lambda name' body -> Lambda name' body'
| name == name' = index + 1
| otherwise = index

shiftedBody = shift 1 name' 0 replacement

body' = substitute body name index' shiftedBody

Apply function argument -> Apply function' argument'
function' = substitute function name index replacement

argument' = substitute argument name index replacement

-- | β-reduce an expression
betaReduce :: Syntax -> Syntax
betaReduce syntax =
case syntax of
Variable name index -> Variable name index

Lambda name body -> Lambda name body'
body' = betaReduce body

Apply function argument ->
case function' of
Lambda name body -> body'
shiftedArgument = shift 1 name 0 argument

substitutedBody = substitute body name 0 shiftedArgument

unshiftedBody = shift (-1) name 0 substitutedBody

body' = betaReduce unshiftedBody

_ -> Apply function' argument'
function' = betaReduce function

argument' = betaReduce argument

-- | α-reduce an expression
alphaReduce :: Syntax -> Syntax
alphaReduce syntax =
case syntax of
Variable name index -> Variable name index

Lambda name body -> Lambda "_" body'
shiftedBody = shift 1 "_" 0 body

substitutedBody = substitute shiftedBody name 0 (Variable "_" 0)

unshiftedBody = shift (-1) name 0 substitutedBody

body' = alphaReduce unshiftedBody

Apply function argument -> Apply function' argument'
function' = alphaReduce function

argument' = alphaReduce argument

-- | Returns `True` if the two input expressions are α-equivalent
alphaEquivalent :: Syntax -> Syntax -> Bool
alphaEquivalent left right = alphaReduce left == alphaReduce right

Appendix - History

I actually first introduced this feature in Morte, not Dhall. The idea originated from the discussion on this issue.

Planet Haskell: Gabriel Gonzalez: Dynamic type errors lack relevance

Dynamic type errors lack relevance

Proponents of statically typed languages commonly motivate types as a way to safely detect bugs ahead of time. For example, consider the following Python program that attempts to increment a number stored in counter.txt:

# ./

with open('counter.txt', 'r') as handle:
x = handle.readline()

with open('counter.txt', 'w') as handle:
handle.write(int(x) + 1)

This program contains a type error, but by the time we find out it’s too late: our program will have already wiped the contents of counter.txt by opening the file as a writable handle:

$ echo -n '0' > ./counter.txt

$ cat counter.txt

$ python
Traceback (most recent call last):
File "", line 5, in <module>
handle.write(int(x) + 1)
TypeError: expected a string or other character buffer object

$ cat counter.txt # The contents of the file were lost

Defenders of dynamically typed languages sometimes counter that these pitfalls do not matter when runtime failures are mostly harmless. If you want to find errors in your program, just run the program!

As an extreme example, Nix is a purely functional language with a dynamic type system, and you can safely interpret a Nix program ahead of time to detect errors since Nix evaluation has no side effects1. Consequently, Nix proponents sometimes reason that these dynamic type errors are functionally indistinguishable from static type errors thanks to Nix’s purity.

However, dynamic types are not a substitute for static types, even in a purely functional language like Nix. To see why, consider the following Nix expression, which attempts to render a structured value as command-line options:

# ./options.nix

pkgs = import <nixpkgs> { };

enable = option: "${option}=true";

disable = option: "${option}=false";

pkgs.lib.cli.toGNUCommandLine { }
{ option = [
enable "fallback"

The intention was to produce this result:

[ "--option" "max-jobs=5" "--option" "cores=4" "--option" "fallback=true" ]

… but we actually get a dynamic type error when we interpret the expression:

$ nix-instantiate --eval options.nix --strict
error: evaluation aborted with the following error message: 'generators.mkValueStringDefault: functions not supported: <λ>'

This error message is not very helpful, and it’s not due to a lack of effort, funding, or attention. This sort of poor user experience is inherent to any dynamic type system.

The fundamental issue is that in a dynamically typed language you cannot explain errors to the user in terms of the source code they wrote. In other words, dynamic type errors commonly fail to be relevant to the user.

For example, if Nix had a typical static type system, then the diagnostic might have looked something like this:

# ./options.nix

pkgs = import <nixpkgs> { };

enable = option: "${option}=true";

disable = option: "${option}=false";

pkgs.lib.cli.toGNUCommandLine { }
{ option = [
enable "fallback"
# ~~~~~~
# This element of the list is not a string

This sort of diagnostic helps us more easily discern that we forgot to parenthesize (enable "fallback"), so the enable function is treated as another list element.

In a dynamic type system, type errors can potentially be far removed from the code that the user wrote. From Nix’s point of view, the actual error is that somewhere in the middle of interpretation it is trying to apply a mkValueStringDefault utility function to the user’s exclaim function:

mkValueStringDefault enable

… but by that point the Nix interpreter is no longer “thinking” in terms of the original program the user wrote, so any interpreter diagnostics will have difficulty explaining the error in terms that the user can understand. For example:

  • In the middle of interpretation any offending subexpressions are abstract syntax trees, not source code

  • Some of these abstract syntax trees may be functions or closures that cannot be (easily) displayed to the user

    We see this above where the error message is unable to render the enable function so it falls back to displaying <λ>.

  • Intermediate evaluation results might not correspond to the source code at all

    For example, the user might not understand where mkValueStringDefault is originating from in the absence of a stack trace.

  • Even if we could trace subexpressions to their original source code the user still might not be able to work backwards from the dynamic type error to the real problem.

    In other words, even if we showed the user the call site for the mkValueStringDefault function they still wouldn’t necessarily understand why exclaim is the function argument.

In fact, the example error message came out better than I expected. The reason why is because somebody took the time to add a custom error message to the mkValueStringDefault utility instead of falling back on the interpreter throwing a dynamic type error:

  mkValueStringDefault = {}: v: with builtins;
let err = t: v: abort
("generators.mkValueStringDefault: " +
"${t} not supported: ${toPretty {} v}");

Had they not done so then the error message would have been even further disconnected from the user’s experience. This only reinforces that the relevance of error messages is inversely proportional to the extent to which we avail ourselves of the dynamic type system.

This is why I prefer to lean on static type systems as much as possible to detect errors, because they tend to do a better job of “explaining” what went wrong than dynamic type systems.

Note: The criticisms in this post also apply to exceptions in general (where you can view dynamic types as a special case of exceptions auto-generated by the interpreter). Exceptions also need to be supplemented by stack traces, logging, or debuggers in order to improve their relevance.

  1. Technically, Nix evaluation can trigger builds via “import from derivation”. However, with appropriate sandboxing even builds are mostly harmless. Either way, just assume for the purpose of discussion that Nix evaluation is safe. After all, any unsafety in evaluation only makes the case for static types even stronger.↩︎

Ideas: Body Language | The Problem of Too Much Body

Fat acceptance — the idea that bodies come in all sizes and all bodies have equal value and deserve equal treatment. But socially, we remain deeply invested in diet and weight loss culture. Is it possible to get to a place where body size no longer matters? *This episode originally aired on Sept. 22, 2021 and is part of our Body Language series.

Jesse Moynihan: Tarot Cards Are Here

Please send your name and address to I will send your complimentary tarot deck in the next couple weeks when I get the crate from the printer. Thank you for hanging with me on this wild journey of getting these things made. It took way too long. I do blame myself for being extremely […]

Arduino Blog: Continuously measure wind speed and direction with this EMT conduit-mounted station

It seems like DIY weather stations are everywhere, and while most can perform the basic functions of measuring temperature, humidity, and air pressure, the majority are still unable to determine wind speed and direction. In response, Austin Allen of Elation Sports Technologies LLC created his own system that uses an anemometer and weathervane to monitor the wind.

Both the wind direction sensor and wind speed sensor were secured to sections of a telescoping pole constructed from EMT conduit via 3D-printed mounts. The speed sensor utilizes a series of internal photo interrupters which get blocked by small plastic tabs whenever the disc spins. By reading the resulting analog voltage output, the connected Arduino Nano can map the value to a speed. The directions sensor uses a single Hall effect sensor combined with a polarized magnet in order to determine the orientation of the resulting magnetic field.

Once every 0.8 seconds, the Arduino takes a reading from the two wind sensors and sends that data over USB to a host PC where a Python script collects and writes it to a CSV file. This newly-gathered information can then be converted into actual speed and directional values, which can be plotted with the help of a graphing utility.

To read more about this project, you can check out Allen’s blog post here.

The post Continuously measure wind speed and direction with this EMT conduit-mounted station appeared first on Arduino Blog.

Schneier on Security: iPhone Malware that Operates Even When the Phone Is Turned Off

Researchers have demonstrated iPhone malware that works even when the phone is fully shut down.

t turns out that the iPhone’s Bluetooth chip­—which is key to making features like Find My work­—has no mechanism for digitally signing or even encrypting the firmware it runs. Academics at Germany’s Technical University of Darmstadt figured out how to exploit this lack of hardening to run malicious firmware that allows the attacker to track the phone’s location or run new features when the device is turned off.


The research is the first—or at least among the first—to study the risk posed by chips running in low-power mode. Not to be confused with iOS’s low-power mode for conserving battery life, the low-power mode (LPM) in this research allows chips responsible for near-field communication, ultra wideband, and Bluetooth to run in a special mode that can remain on for 24 hours after a device is turned off.

The research is fascinating, but the attack isn’t really feasible. It requires a jailbroken phone, which is hard to pull off in an adversarial setting.

Slashdot thread.

Quiet Earth: Here's What's New On Blu-ray and DVD this week! [May 17, 2022]

Licorice Pizza is the timeless story of Alana Kane and Gary Valentine growing up, running around and falling in love in the San Fernando Valley, 1973.

"This hypnotically gorgeous, funny, romantic movie freewheels its way around from scene to scene, from character to character, from setpiece to setpiece, with absolute mastery."* "Paul Thomas Anderson's most lovable and magical work to date. The breakthrough performances from Alana Haim and Cooper Hoffman are so magnetic and natural that they feel like some kind of miracle."** "Watching Licorice Pizza is like watching life with all the boring parts cut out and like watching movies with all the phony parts cut out." *** Featuring performances by Bradley Cooper, Sean Penn, Tom Waits and B [Continued ...]

Arduino Blog: Introvention is a wearable device that can help diagnose movement disorders early

Conditions such as Parkinson’s disease and essential tremors often present themselves as uncontrollable movements or spasms, especially near the hands. By recognizing when these troubling symptoms appear, earlier treatments can be provided and improve the prognosis for the patient compared to later detection. Nick Bild had the idea to create a small wearable band called “Introvention” that could sense when smaller tremors occur in hopes of catching them sooner.

An Arduino Nano 33 IoT was used to both capture the data and send it to a web server since it contains an onboard accelerometer and has WiFi support. At first, Bild collected many samples of typical activities using the Edge Impulse Studio and fed them into a K-means clustering algorithm which detects when a movement is outside of the “normal” range. Once deployed to the Arduino, the edge machine learning model can run entirely on the board without the need for an external service.

If anomalous movements are detected by the model, a web request gets sent to a custom web API running on the Flask framework where it’s then stored in a database. A dashboard shows a chart that plots the number of events over time for easily seeing trends.

To read more about Bild’s project, check out its write-up here on

The post Introvention is a wearable device that can help diagnose movement disorders early appeared first on Arduino Blog.

Ideas: Body Language | Beyond Ugly: A documentary

For thousands of years, disability, disfigurement, or ugliness have been connected to evil. From the ancient world to modern time this unsettling concept has survived the cultural narrative. As part of our series Body Language, this documentary explores the root of ugliness and unpacks the legacy that harms people today. *This episode originally aired on Sept. 21, 2021.

Michael Geist: Digging Into the Government’s Online News Act Claims, Part Two: This is “Minimal Market Intervention”?!

The government has started its defence of Bill C-18, the Online News Act, in the House of Commons with claims that it simply requires compensation for use of news content and adopts a “minimal market intervention” approach. My post yesterday focused on the use claims and this post digs into the bill to see just how minimalist it is. Canadian Heritage Minister Pablo Rodriguez promoted the bill as a market-oriented approach on the day the bill was tabled, leading to an interview with Vassy Kapelos in which she was visibly puzzled at the claim.

Setting aside the fact that many leading Canadian media organizations have already struck news deals with Google and Facebook without government intervention, here is a look at what the government thinks constitutes “minimal market intervention”:

  • The government establishes the standards to determine which Internet platforms are required to negotiate agreements or enter into binding arbitration. It can also establish further regulations on the issue. (Section 6)
  • The government establishes the standards of what constitutes an eligible news organization for the purposes of requiring the Internet platforms to negotiate agreements or enter into binding arbitration (Section 27) and designates the CRTC to issue orders for who qualifies. The government plans additional regulations for public broadcasters.
  • The government establishes the standards to determine whether a private agreement is entitled to an exemption order from binding arbitration and can establish additional regulations (Section 11(1)). The CRTC rules on whether the agreement meets the standard and can establish additional regulations. The standard includes assessments on whether the agreement provides fair compensation, allocates an appropriate portion of compensation to news content, doesn’t allow corporate influence to undermine freedom of expression, contributes to the sustainability of the Canadian news marketplace, ensure benefits for independent local news businesses, and involves a wide range of news outlets (Section 11(1)(b)).
  • The CRTC can also issue an interim order in circumstances where it does not believe the criteria for an exemption are met, but expects it will change its opinion within a reasonable period. In other words, it will pressure the parties into changing the agreement (Section 12(1)).
  • The CRTC can repeal exemption orders and interim orders (Section 14).
  • The government establishes all the steps in the bargaining process and the rules for mandatory arbitration (Section 19).
  • The government limits the use of copyright limitations and exceptions in the bargaining process (Section 24).
  • The CRTC runs the arbitration process, including establishing qualifications of arbitrators (Section 33), selecting the arbitration panel in some instances (Section 34), and determining if any arbitrators have a conflict of interest (Section 35).
  • The government establishes the factors the arbitration panel must consider in making its decision (Section 38).
  • The government orders the arbitration panel to reject offers that are not in the public interest or “inconsistent with the purposes of enhancing fairness in the Canadian digital news market” (Section 39).
  • The CRTC is required to establish a code of conduct for the bargaining on news content (Section 49(1)). The government establishes multiple factors that must be included (Section 49(3)).
  • The CRTC is empowered to demand any information from either platforms or media organizations (Section 53).
  • The CRTC is required to appoint an independent auditor to review the impact of the bill on the Canadian digital news marketplace. The government establishes the content that must be included in the report (Section 86).

This is what Canadian Heritage Parliamentary Secretary Chris Bittle called “a market-based solution that involves minimal government intervention.”

The post Digging Into the Government’s Online News Act Claims, Part Two: This is “Minimal Market Intervention”?! appeared first on Michael Geist.

OCaml Weekly News: OCaml Weekly News, 17 May 2022

  1. Browsing OCaml source tree with VSCode/merlin?
  2. release of prbnmcn-gnuplot 0.0.3
  3. Call for Presentations for "Teaching Functional Programming in OCaml" as part of the OCaml Workshop 2022

Quiet Earth: First Poster for Anticipated Apocalyptic Thriller VESPER

A film that looks to be in the vein of contemporary indie scifi classics like Prospect and Monsters, it goes without saying that Vesper (formerly "Vesper Seeds") ranks high on our most anticipated movies list. We brought you the first image some months back and now we a look at the first teaser poster courtesy of Screen Anarchy.

After the collapse of Earth’s ecosystem, Vesper, a 13-year-old girl struggling to survive with her paralyzed Father, meets a mysterious woman with a secret that forces Vesper to use her wits, strength and bio-hacking abilities to fight for the po [Continued ...]

Quiet Earth: Teaser Trailer for PREY, Latest Predator Movie

Dan Trachtenberg directs the latest film in the Predator franchise... with a very interesting historical twist.

Set in the Comanche Nation 300 years ago, “Prey” is the story of a young woman, Naru, a fierce and highly skilled warrior. She has been raised in the shadow of some of the most legendary hunters who roam the Great Plains, so when danger threatens her camp, she sets out to protect her people. The prey she stalks, and ultimately confronts, turns out to be a highly evolved alien predator with a technically advanced arsenal, resulting in a vicious and terrifying showdown between the two adversaries.

“Prey” is directed by Dan Trachtenberg, written by Patrick Aison (“Jack Ryan,” “Treads [Continued ...]

Planet Haskell: Monday Morning Haskell: Buffering...Please Wait...

Today we continue our exploration of more obscure IO concepts with the idea of buffering. Buffering determines the more precise mechanics of how our program reads and writes with files. In the right circumstance, using the proper buffering method can make your program work a lot more efficiently.

To start, let's consider the different options Haskell offers us. The BufferMode type has three options:

data BufferMode =
  NoBuffering |
  LineBuffering |
  BlockBuffering (Maybe Int)

Every handle has an assigned buffering mode. We can get and set this value using the appropriate functions:

hGetBuffering :: Handle -> IO BufferMode

hSetBuffering :: Handle -> BufferMode -> IO ()

By default, terminal handles will use NoBuffering and file handles will use BlockBuffering:

main :: IO ()
main = do
  hGetBuffering stdin >>= print
  hGetBuffering stdout >>= print
  (openFile "myfile.txt" ReadMode) >>= hGetBuffering >>= print
  (openFile "myfile2.txt" WriteMode) >>= hGetBuffering >>= print


BlockBuffering Nothing
BlockBuffering Nothing

So far this seems like some nice trivia to know, but what do these terms actually mean?

Well, when your program reads and writes to files, it doesn't do the "writing" at the exact time you expect. When your program executes hPutStr or hPutStrLn, the given string will be added to the handle's buffer, but depending on the mode, it won't immediately be written out to the file.

If you use NoBuffering though, it will be written immediately. Once the buffer has even a single character, it will write this character to the file. If you use LineBuffering, it will wait until it encounters a newline character.

Finally, there is BlockBuffering. This constructor holds an optional number. The buffer won't write until it contains the given number of bytes. If the value is Nothing, then the underlying number just depends on the operating system.

This idea might sound dangerous to you. Does this mean that it's likely that your program will just leave data unwritten if it doesn't get the right amount? Well no. You can also flush buffers, which will cause them to write their information out no matter what. This happens automatically on important operations like hClose (remember to close your handles!). You can also do this manually with the hFlush function:

hFlush :: Handle -> IO ()

For the most part, you won't notice the difference in buffer modes on normal programs. But under certain circumstances, it can make a big difference in performance. The act of writing information to a file is actually a very long and expensive operation as far as programs are concerned. So doing fewer writes with larger amounts of data tends to be more efficient than doing more writes with smaller amounts of data.

Hopefully you can see now why BlockBuffering is an option. Typically, this is the most efficient way if you're writing a large amount of data, while NoBuffering is the least efficient.

To these this out, I wrote a simple program to write out one hundred thousand numbers to a file, and timed it with different buffer modes:

someFunc :: IO ()
someFunc = do
  let numbers = [1..100000]
  h <- openFile "number.txt" WriteMode
  hSetBuffering h NoBuffering
  timestamp1 <- getCurrentTime
  forM_ numbers (hPrint h)
  hClose h
  timestamp2 <- getCurrentTime
  print $ diffUTCTime timestamp2 timestamp1

When running with NoBuffering, this operation took almost a full second: 0.93938s. However, when I changed to LineBuffering, it dropped to 0.2367s. Finally, with BlockBuffering Nothing, I got a blazing fast 0.05473s. That's around 17x faster! So if you're writing a large amount of data to a file, this can make a definite difference!

If you're writing a program where write-performance is important, I hope this knowledge helps you! Even if not, it's good to know what kinds of things are happening under the hood. If you want to keep up to date with more Haskell knowledge, both obscure and obvious, make sure to subscribe to our monthly newsletter! If you're just starting out, this will give you access to resources like our Beginners Checklist and Recursion Workbook!

Ideas: Body Language | Face to Face in an Uncertain World

Philosopher Emmanuel Levinas believed the face-to-face encounter was the beginning of our ethical obligation to each other. In our series Body Language, IDEAS considers the changing meaning of the face during COVID and imagines new ethical relationships for an uncertain time. *This episode originally aired on Sept. 6, 2021.

Trivium: 16may2022

The Shape of Code: A new career in software development: advice for non-youngsters

Lately I have been encountering non-young people looking to switch careers, into software development. My suggestions have centered around the ageism culture and how they can take advantage of fashions in software ecosystems to improve their job prospects.

I start by telling them the good news: the demand for software developers outstrips supply, followed by the bad news that software development culture is ageist.

One consequence of the preponderance of the young is that people are heavily influenced by fads and fashions, which come and go over less than a decade.

The perception of technology progresses through the stages of fashionable, established and legacy (management-speak for unfashionable).

Non-youngsters can leverage the influence of fashion’s impact on job applicants by focusing on what is unfashionable, the more unfashionable the less likely that youngsters will apply, e.g., maintaining Cobol and Fortran code (both seriously unfashionable).

The benefits of applying to work with unfashionable technology include more than a smaller job applicant pool:

  • new technology (fashion is about the new) often experiences a period of rapid change, and keeping up with change requires time and effort. Does somebody with a family, or outside interests, really want to spend time keeping up with constant change at work? I suspect not,
  • systems depending on unfashionable technology have been around long enough to prove their worth, the sunk cost has been paid, and they will continue to be used until something a lot more cost-effective turns up, i.e., there is more job security compared to systems based on fashionable technology that has yet to prove their worth.

There is lots of unfashionable software technology out there. Software can be considered unfashionable simply because of the language in which it is written; some of the more well known of such languages include: Fortran, Cobol, Pascal, and Basic (in a multitude of forms), with less well known languages including, MUMPS, and almost any mainframe related language.

Unless you want to be competing for a job with hordes of keen/cheaper youngsters, don’t touch Rust, Go, or anything being touted as the latest language.

Databases also have a fashion status. The unfashionable include: dBase, Clarion, and a whole host of 4GL systems.

Be careful with any database that is NoSQL related, it may be fashionable or an established product being marketed using the latest buzzwords.

Testing and QA have always been very unsexy areas to work in. These areas provide the opportunity for the mature applicants to shine by highlighting their stability and reliability; what company would want to entrust some young kid with deciding whether the software is ready to be released to paying customers?

More suggestions for non-young people looking to get into software development welcome.

The Universe of Discourse: Cathedrals of various sorts

A while back I wrote a shitpost about octahedral cathedrals and in reply Daniel Wagner sent me this shitpost of a cat-hedron:

computer graphics drawing of a roughly cat-shaped polyhedron with a
glowing blue crucifix stuck on its head.

But that got me thinking: the ‘hedr-’ in “octahedron” (and other -hedrons) is actually the Greek word ἕδρα (/hédra/) for “seat”, and an octahedron is a solid with eight “seats”. The ἕδρα (/hédra/) is akin to Latin sedēs (like in “sedentary”, or “sedate”) by the same process that turned Greek ἡμι- (/hémi/, like in “hemisphere”) into Latin semi- (like in “semicircle”) and Greek ἕξ (/héx/, like in “hexagon”) into Latin sex (like in “sextet”).

So a cat-hedron should be a seat for cats. Such seats do of course exist:

combination “cat tree” and scratching post sits on the floor of a
living room in front of the sofa.  The object is about two feed high
and has a carpeted platform atop a column wrapped in sisal rope.
Hanging from the platform is a cat toy, and  on
the platform resides a black and white domestic housecat.  A second
cat investigates the carpeter base of the cat tree.

But I couldn't stop there because the ‘hedr-’ in “cathedral” is the same word as the one in “octahedron”. A “cathedral” is literally a bishop's throne, and cathedral churches are named metonymically for the literal throne they contain or the metaphorical one represent. A cathedral is where a bishop has his “seat” of power.

So a true cathedral should look like this:

same picture as before, but the cat has been digitally erased from the
platform, and replaced with a gorgeously uniformed cardinal of the
Catholic Church, wearing white and gold robes and miter.

s mazuk:

MattCha's Blog: 1000th Blog Post!!!!

 1000 eh?  I still remember over 12 years ago reading the day Stephane of Teamasters posted his 1000th Blog post.  I remember thinking that was a crazy amount of posts about tea!  So I guess that makes me crazy then too?  Hahaha….  Stephane was one of the earliest tea bloggers that indirectly motivated me to start blogging. He was posting fast and fantastically furious about puerh and oolong from his background in Taiwan and it took him only a handful of years to hit 1000!

A year or so ago I remember reading Char of Oolong Owl posting her 1000th post.  That was unbelievable for me as well because she just started in 2013 and I have only been reading her for a few years at that point.  She is a real workhorse and I always end up reading her puerh posts.  Her post had me, for the first time , checking how far I was from my 1000th post.  It also had me thinking of Shah8 and his Sheng of the Day posts at Badger and Blade.  He must have the most puerh posts in English of all time maybe even 2000??? Anyways he’s my favourite one to read in the last few years here.  Don’t think anyone else has hit 1000?  Have I missed anyone???

It also got me thinking what it takes to get to 1000 posts… it think it’s a combination of resilience, a bit of obessive compulsiveness, a bit of inflexibility and a true love of the tea.

This blog has evolved lots over the years but I think it always stays authentic to where I am in life at the time.  Lately, my articles about broader topics have been less.  This is not because I’m out of thoughts or ideas or things to say but mainly because I don’t have the time or energy to write them out or to put my thoughts into writing.  Instead it is mainly my detailed tasting notes and comparisons and rankings.  

What you see on the blog is my evaluative writings.  For some people writing everything down as meticulously as me takes away from their focus and enjoyment but for me it actually keeps me present, engaged, and in the moment with the tea that I’m evaluating.  I find an extreme focused evaluation of tea is in some ways similar to a meditative experience for me.  It sharpens the use of my senses and everyday judgments and evaluations in all aspects of life.  Because I’m already writing this stuff down it’s pretty easy to share it with you wonderful readers!

A few years ago I wondered if there was a resurgence of puerh blogging but now I’m pretty sure it’s an old person’s thing… but I’m old anyways … hahaha

Thanks readers as well you also give me the motivation to continue to post because I can feel your energy and I really do put that into this blog.  Thank you for this!


new shelton wet/dry: difference in sclera color

00.jpegCanada Proposes Space Law to Punish Crimes Committed on Moon

Man died from heart attack while burying woman he strangled, South Carolina deputies say

While males and females are equally at risk of sudden cardiac arrest (SCA), females are less likely to be resuscitated. Cardiopulmonary Resuscitation (CPR) may be inhibited by socio-cultural norms about exposing female victims’ chests. […] Participants were randomly assigned to provide CPR and defibrillation as instructed by a commercially-available automated external defibrillator on a patient simulator presented as either a male or female experiencing cardiac arrest. […] Rescuers removed significantly more clothing from the male than the female, with men removing less clothing from the female.

Scientists are developing magnetically guided microscopic projectiles that can be injected into patients’ blood to attack breast, prostate and other tumours. The first involves viruses that specifically attack tumours. The second focuses on soil bacteria that manufacture magnets which they use to align themselves in the Earth’s magnetic field.

Long-duration space flight alters fluid-filled spaces along veins and arteries in astronauts’ brains

the human sclera—the white of the eye—is unique among primates for its whitish color […] Our data support the claim that indeed there is a sex difference in sclera color, with male sclera being yellower and redder than female sclera.

Twitter bots, explained

“Temporarily on hold” is not a thing. Elon Musk has signed a binding contract requiring him to buy Twitter. […] You are not supposed to say things that aren’t true and that will affect the stock of a public company that you are trying to buy. That is what is usually called “securities fraud,” or what I sometimes like to call “lite securities fraud.” Musk has a long history of lite securities fraud

Position of the north magnetic pole since 1590

Occlusion Grotesque is an experimental typeface that is carved into the bark of a tree. As the tree grows, it deforms the letters and outputs new design variations, that are captured annually.

Daniel Lemire's blog: Avoid exception throwing in performance-sensitive code

There are various ways in software to handle error conditions. In C or Go, one returns error code. Other programming languages like C++ or Java prefer to throw exceptions. One benefit of using exceptions is that it keeps your code mostly clean since the error-handling code is often separate.

It is debatable whether handling exceptions is better than dealing with error codes. I will happily use one or the other.

What I will object to, however, is the use of exceptions for control flow. It is fine to throw an exception when a file cannot be opened, unexpectedly. But you should not use exceptions to branch on the type of a value.

Let me illustrate.

Suppose that my code expects integers to be always positive. I might then have a function that checks such a condition:

int get_positive_value(int x) {
    if(x < 0) { throw std::runtime_error("it is not positive!"); }
    return x;

So far, so good. I am assuming that the exception is normally never thrown. It gets thrown if I have some kind of error.

If I want to sum the absolute values of the integers contained in an array, the following branching code is fine:

    int sum = 0;
    for (int x : a) {
        if(x < 0) {
            sum += -x;
        } else {
            sum += x;

Unfortunately, I often see solutions abusing exceptions:

    int sum = 0;
    for (int x : a) {
        try {
            sum += get_positive_value(x);
        } catch (...) {
            sum += -x;

The latter is obviously ugly and hard-to-maintain code. But what is more, it can be highly inefficient. To illustrate, I wrote a small benchmark over random arrays containing a few thousand elements. I use the LLVM clang 12 compiler on a skylake processor. The normal code is 10000 times faster in my tests!

normal code 0.05 ns/value
exception 500 ns/value

Your results will differ but it is generally the case that using exceptions for control flow leads to suboptimal performance. And it is ugly too!

things magazine: The devil’s jukebox

A round-up of the battered and forgotten devices that were the iPod’s failed competitors (via tmn) / excellent music by Pocket Sun / Flummox Industries / music by Dreamweapon / a traumatic update on the life and work of the … Continue reading

Quiet Earth: Teaser Trailer for Netflix's RESIDENT EVIL Series

Netflix has premiered a teaser trailer for its live-action zombie series Resident Evil, based on the popular video game franchise. Nearly three decades after the discovery of the T-virus, an outbreak reveals the Umbrella Corporation's dark secrets. Based on the horror franchise.

Nothing eventful ever happens in the peaceful New Raccoon City. The legendary franchise Resident Evil brings its battle for survival to Netflix on July 14th.

Also please let us not forget Paul WS Anderson's epic series which is now on 4K.

Check out the trailer below:

[Continued ...]

things magazine: Spaces and places

Big Beautiful Brutalism, a new limited-edition monograph from photographer Jo Underhill / the series ‘A Future City from the Past’, by Clemens Gritl (via Meanwhile) / Bold Ventures is a book by Charlotte van den Broeck about ‘buildings that were … Continue reading

Planet Lisp: vindarel: Video: Create a Common Lisp project from scratch with our project generator

In this video I want to demo real-world Lisp stuff I had trouble finding tutorials for:

  • how to create a CL project:
    • what’s in the .asd file?
    • what’s a simple package definition?
    • how do we load everything in our editor (Emacs and SLIME here)?
  • how to set up tests?
    • and how to run them from the terminal?
    • and (WTF) how to get the correct exit code????
  • how to build a binary in order to run our app from the terminal?
    • and so, how to get command-line arguments?
    • but also, can I run my app from sources, without building a binary?
  • what’s Roswell and how do I share my app with it?

Let’s find out (it’s 5 minutes long):

I use my project generator: cl-cookieproject. See setup, alternatives, limitations and TODOs there. You will also find a similar generator for web projects.

If you find it useful, share the video!

MattCha's Blog: 2003 Chen Yuan Hao Youle: vs Teas We Like

In my exploration of earlier Chenyuan Hao from the above two vendors the 2003 Chenyuan Hao Youle is one of my favorites after this reallynice session from Teas We Like.  I like the strong gushu Youle presentation, particularly the strong happy mood altering effect that often lasts a few days for me.  It’s a strong exaggeration of the typical Qi one would get from the Youle producing area.  It’s got to be one of the better examples of the Youle area with this much age on it.  I mentioned in the Teas We Like review that I’m considering purchasing a cake or maybe at least another quarter.  

I purchased this 2003 Chen Yuan Hao (approx. $492.00for 357g cake or $1.38/g) storage version from  I have tried this same storage in other Chenyuan Hao which include this 2005 Chen Yuan Hao Shanzhong Chuanqi cake as well as samples of the 2011 Chenyuan Hao Qian Jia Zhai Jincha and 2003 Chen Yuan HaoTong Qing Hao.  The Taiwanese storage is a bit drier than Teas We Like and tends to have more sweetness and higher notes exaggerated as well as more bitter and astringency but sometimes less depth.  For some cakes I prefer the Teas We Like storage and for some I prefer the storage.  Let’s sample this one and see how it compares…

The dry leaves have a pine tree, slight grain and prune/raison odour.

The first infusion has a woody sort of creamy flat menthol taste.  It finishes a watery prune taste that has a flat almost tight watery mouthfeeling.  There is a nice mid-profile of peachy prune that comes and goes.  The mouthfeeling is a very thin almost watery but full reaching pucker.  There is a lingering coolness in the breath minutes later with a bread-like sweetness to it.  Lots going on early with this one.

The second infusion has a sweet prune almost woody menthol with a dazzling pop of sweetness initially there is a strong puckering astringent mouthfeeling that is less gagging in the throat and more on the cheeks and tongue.  This induces lots of saliva to push out of the throat and into the mouth.  There is a long cooling in the breath and long sort of menthol taste.  The Qi is very happy euphoria with a mind slowing feature with a chest pressure.  Strong Qi sensation.  There is an almost woody menthol and bready taste lingering in the mouth.  Strong warming in the face and chest and body.

The third infusion has a woody almost cherry tart menthol sweet astringent onset.  The woodiness is more prominent here as is the astringency.  Strong puckering mouthfeeling with sweetness and woody and menthol punching through.  The tongue and mouth is a full dry pucker with the throat opening deeply to push some saliva out and greet a lingering cool bready sweet woody menthol.  This version seems more astringent and puckering and less layered and deep than the Teas We Like version.  There is some sort of peachy/prune sweetness lingering at the end.  Nice time slowing and happy euphoria Qi sensation.  The profile has 4 sort of phases: the initial sweet and astringency, woody menthol puckering, deep throat cooling and flavours, lingering sweet prune/peachy.  Qi is equally layered and complex with slowing properties to the mind, chest beats, and happy euphoria feelings.

The 4th has an almost sour tart tangerine woody taste initially.  The astringency is less as is the menthol.  The mouthfeeling is almost a grainy sandy feeling here with a chalkiness to it.  There is some throat cooling and bready tastes in the finish.  A bland chalky taste lingers.

5th infusion has a woody bland chalky very slightly sweet tart cherries onset.  There is a dry bland woody taste that comes after then a woody faint tart cherry finish. This infusion has a bland chalky woody taste that dominates even in the aftertaste.  There is less of a deeper aftertaste now.  Minutes later a bland chalky taste is left in the mouth.  Warming feeling mild happy euphoria with Chest heaviness and openness.

6th is left to cool and gives off a bland woody creamy sweet peachy taste with less astringency and more bland with a cooling almost but not really menthol finish.  This cool infusion has a long bland chalky taste to it.  Faint bread in the aftertaste and a lingering sweetness with not as much astringency and pucker and chalkier mouthfeeling than pucker and bland woody chalky taste throughout.

7th has a fruity fresh fruity sort of melon peach type of taste over a bland chalky woody taste.  The astringency becomes less here and is just very mild now in these flash infusions.  There is a creamy bready sweetness in the finish.  Nice calm mind, less slowing now but still nice happy vibe with chest opening and beating.

8th has a fresh but muted by woody bland tasting fruity melon/peach.  No astringency in these flash steepings.  It has a deep open slight cooling with creamy sweet woody bready sweet aftertastes.  This infusion is less astringent and less bland chalky than previous.  Nice mind slow focus juxtaposed with a happy vibe with a slight euphoria.  Long creamy chalky sweetness many minutes later.

9th as a more vibrant peachy sweet onset with a mild oily texture.  There are woody almost incense notes underneath.  With an open mid-deep throat there are lingering bread and creamy tastes with dry woody lingering.  Nice chest beats.

10th has a more woody than peachy fresh onset that is a bit oily and put together and full.  Nice slow emerging creamy sweet over woody with lesser bready notes.  Nice heat beats and warming feeling in the body with stronger euphoria and happy feeling.  Deep creamy woody lingering taste sort of resin but not really not really incense but satisfying.

11th infusion is left to cool and gives off a creamy woody chalky taste.  There is a deep throat faint cooling creamy sweetness that lingers.  The flavours are less now but the Qi has pushed me into a very happy-go-lucky state of mind which this Youle always manages to do.

12 has a woody bland sort of but not really sweet taste.  There is suggestions of peachy tastes but barely now with more of a grains cereal nuance with bland tastes- some faint breads.

I mug steep out the rest and it gives off a woody bitter with just edges of faint sweetness with a long strong deep coolness in the deep throat and strong Heart beats and vibrant happy mood feeling.  The Qi of this puerh is just great- the best of Youle!

Vs Teas We Like storage Overall, the Teas We Like storage on this is maybe a bit more preferable.  This storage version, I don’t think has the depth of the Teas We Like storage other than its interesting pine woody resin taste and dry leaf odour which I really loved… actually there was lots of complexity here. The Teas We Like storage has a deeper resin ashy quality that gives it depth without being as astringent.  The layers of this kind of thing appeals to me bit more but it lacks the complexity the version has lots more dynamic complexity in the first few infusions.

Oh man… still can’t decide on if I’m going to get more of this Youle or just back away with the two quarter cakes here…. Both storage options here are are good in their own way…


things magazine: Mixing it up

The magnificent David Rumsey Map Collection / see also the very excellent Layers of London, which is endlessly interesting. It sent us off on a tangent to the remarkable LJ4D Project, ‘an ongoing project to model the development of Loughborough … Continue reading / 2022-05-23T13:02:18