Shared posts

20 Nov 04:53

The Inventor of Assembly Language

by Eugene Wallingford

This weekend, I learned that Kathleen Booth, a British mathematician and computer scientist, invented assembly language. An October 29 obituary reported that Booth died on September 29 at the age of 100. By 1950, when she received her PhD in applied mathematics from the University of London, she had already collaborated on building at least two early digital computers. But her contributions weren't limited to hardware:

As well as building the hardware for the first machines, she wrote all the software for the ARC2 and SEC machines, in the process inventing what she called "Contracted Notation" and would later be known as assembly language.

Her 1958 book, Programming for an Automatic Digital Calculator, may have been the first one on programming written by a woman.

I love the phrase "Contracted Notation".

Thanks to several people in my Twitter feed for sharing this link. Here's hoping that Twitter doesn't become uninhabitable, or that a viable alternative arises; otherwise, I'm going to miss out on a whole lotta learning.

20 Nov 04:40

TILER's tiles are weatherproof, on-street charging pads for e-bikes

by Liesbeth den Toom
12 Nov 17:31

The Frightening Essence of our AI-Distilled Selves

by peter@rukavina.net (Peter Rukavina)

Andy Baio posted Invasive Diffusion: How one unwilling illustrator found herself turned into an AI model today, and I immediately followed his lead and used this (very helpful, clear) YouTube tutorial to train an AI model on the essence of Peter Rukavina, and then produced AI-generated images derived from that essence.

Here are the 18 images I used to train the model:

18 images used to train the AI model -- all portraits of me

An hour later, Stable Diffusion was generating images like this:

Serious-looking AI-generated image of me

New Yorker cover with me on it, AI-generated

ICartoon me, AI-generated

Pink and Blue Peter, AI-generated

1920s movie star Peter, AI-generated

Here’s a sampling of the 100 or so images that I generated, using prompts that evolved as I went along:

A grid of the AI-generated images of me

The thing about all this is that nobody really knows how it works. It’s like the anaesthetic of the digital world, a magic potion that does what it says on the tin, but by means unknown.

Almost all of the generated images look like me—if you know me, and you were shown one of them, you’d likely guess it was me. How does it do that? You’ve got me. I have no idea.

What’s clear is that the AI uses photos of me to train a model, a model that is enough to generate other images of me. Does the model “know about people.” I have no idea. Maybe it has just been fed a lot of photos of people, and it’s figured out the patterns. Regardless, it is all tantamount to magic.

And it’s frightening. Not in an Orwellian way, but more viscerally in a personal way: the AI is distilling the visual parts of what makes me me.

In my case, more often than not the AI comes up with derivatives that make me look like an old man. I am an old(ish) man, of course. But the ways in which this is true are accentuated in the distillation: receding hairline, grey hair, prevalent sweaters and button-down shirts. There’s no hiding from it.

We exist in the world—we survive in the world—through a combination of confronting both the reality of ourselves, and the magical thinking we tell ourselves about ourselves: the AI has no such need, and simply plays the cards it’s dealt.

The ramifications of this “digital mirror that shows us who we really are” for our mental health, individually and collectively, are far more concerning to me than losing my job to a machine, robot cars run amuck, and animatronic presidents.

12 Nov 05:15

Mozilla Ventures: Investing in responsible tech

by Mark Surman

Early next year, we will launch Mozilla Ventures, a first-of-its-kind impact venture fund to invest in startups that push the internet — and the tech industry — in a better direction 

_____

Many people complain about today’s tech industry. Some say the internet has lost its soul. And some even say it’s impossible to make it better. 

My response: we won’t know unless we try, together. 

Personally, I think it is possible to build successful companies — and great internet products — that put people before profits. Mozilla proves this. But so do WordPress, Hugging Face, ProtonMail, Kickstarter, and a good number of others. All are creating products and technology that respect users — and that are making the internet a healthier place.

I believe that, if we have A LOT more founders creating companies like these, we have a real chance to push the tech industry — and the internet — in a better direction. 

The thing is, the system is stacked against founders like this. It is really, really hard. This struck us when Mozilla briefly piloted a startup support program a couple of years ago. Hundreds of young founders and teams showed up with ideas for products and tech that were ‘very Mozilla’. Yet, we’ve also heard it’s hard to find mission aligned investors, or mentors and incubators who shared their vision for products that put people first.  

Through this pilot, Mozilla found the kinds of mentors these founders were looking for. And, we offered pre-seed investments to dozens of companies. But we also saw the huge need to do more, and to do it systematically over time. Mozilla Ventures will be our first step in filling this need. 

Launching officially in early 2023, Mozilla Ventures will start with an initial $35M, and grow through partnerships with other investors.

The fund will focus on early stage startups whose products are designed to delight users or empower developers — but with the sort of values outlined in the Mozilla Manifesto baked in from day one. Imagine a social network that feels like a truly safe place to connect with your closest family and friends. Or an AI tooling company that makes it easier for developers to detect and mitigate bias when developing digital products and services. Or a company offering a personal digital assistant that is both a joy to use and hyper focused on protecting your privacy. We know there are founders out there who want to build products and companies like these, and that want to do so in a way that looks and feels different than the tech industry of today. 

Processwise, Mozilla Ventures will look for founders with a compelling product vision and alignment with Mozilla’s values. From there, it will look at their team, their product and their business, just as other investors do. And, where all these things add up, we’ll invest. 

The fund will be led by Managing Partner Mohamed Nanabhay. Mohamed brings a decade of experience investing in digital media businesses designed to advance democracy and free speech where those things are hard to come by. Which perfectly sets him up for the job ahead — finding and funding founders who have the odds stacked against them, and then helping them succeed. 

Over the past few months, Mohamed and I have spent a good amount of time thinking about the basic thesis behind the fund (find great startups that align with the Mozilla Manifesto) — and testing this thesis out through conversations with founders. 

Even before we publicly announced Mozilla Ventures in November 2022, we’d already found three companies that validate our belief that companies like this are out there — Secure AI Labs, Block Party and HeyLogin. They are all companies driven by the idea that the digital world can be private, secure, respectful, and that there are businesses to be built creating this world. We’re honored that these companies saw the same alignment we did. They all opened up space on their cap table for Mozilla. And we invested.

Our first few months of conversations with founders (and other investors) have also underlined this: we have more questions than answers. Almost everyone we’ve talked to is excited by the idea of pushing the tech industry in a different direction, especially younger founders. On the flipside, everyone sees huge challenges — existing tech monopolies, venture funding growth at all costs, public cynicism. It’s important to be honest, we don’t have all the answers. We will (collectively) need to work through these challenges as we go. So, that’s what we will do. Our plan is to continue talking to founders — and making select investments — in the months leading up to the launch of the fund. We will also keep talking to fellow travelers like Lucid Capitalism, Startups and Society and Responsible Innovation Labs, who have already started asking some of the tough questions. And, we will continue speaking with a select group of potential co-investors (LPs) who share our values. We believe that, together, we have a chance of putting the tech industry on a truly different course in the years ahead.

The post Mozilla Ventures: Investing in responsible tech appeared first on The Mozilla Blog.

11 Nov 19:46

How Much For Twitter?

Following on Mr Musk’s acquisition of Twitter a discussion has broken out about what to charge for. Which makes sense, because Twitter revenue is kind of lousy, notably out of sync with its societal importance, and now they’ve got a great big honking debt to service.

Whatever I may think about Twitter’s leadership, previous or current, I like the service and would prefer that it continue functioning. In fact, I like it enough to pay for it! But how much and what for?

Blue check? No!

The first idea being floated is charging for the “blue check” Verified label. Lots of people have opined that this is the wrong way to go. For example, in the exchange below Mr King sneers at $20/month and Mr Musk counterproposes $8.

Stephen King and Elon Musk argue about what a blue check’s worth

I also dislike this idea. Disclosure: I’m a blue check, and I’d be disinclined to cough up money to prove who I am; it’s easy enough to look me up on Wikipedia, find my blog from there, and notice my claim there that I’m also @timbray.

So I worry that the only people who’d pay for the blue check are entities who need Twitter for self-promotion. Lord knows there are plenty, of whom I follow as few as possible.

Some have argued that blue checks are key adders of value to the service. But you should ignore my opinion on that because I’ve got an obvious conflict of interest.

Package pricing

So here’s what I suggest: A package of services, priced individually, and you put together your own package.

All the prices from here on in are per-month.

Free: Follow five

Any Twitter account can follow five feeds for free. That’s plenty enough to get a flavor of what the service is like. But free accounts can’t post or like or retweet.

$1: Tweet away

For a buck a month, you can post as much as you want; also like and retweet. This feels like a very low price to enter the global conversation. Also for that $1 you can follow twenty feeds, not just five.

It also occurs to me that making contributors pay just a bit could be a powerful anti-spam tool. The reason people can too easily build bot armies on Twitter is because it’s effectively free. That $1 would be a significant disincentive, and tracking the payment sources (i.e. credit-card numbers) could also be useful in bot-fighting.

What about ads?

In Q2 of 2022, Twitter reported 237.8 million monetizable daily active users and $1.18B in revenue, nearly all ads. By my arithmetic, that’s monthly average revenue per user of about $1.65.

Which feels like a pretty terrible business, and also has the effect of turning your users into your product. On top of which, I find that the Twitter ads I see are pretty useless to me.

Also they’re jarringly unpleasant. The great value of Twitter is that you get exposed to a lot of interesting human voices, which tend to have spicy flavors including cynicism, anger, and lewdness. Then there’s the cheery upbeat corporate-approved ad content. I’m just not sure it can ever be made harmonious.

$5: Full citizenship

This lets you do everything you can do on Twitter today, with no ads. Revenue per user has suddenly more than doubled! How many Twitterers — in particular, how many of those who add value — would decline to pay $60/year for it? Not too damn many, I’m thinking.

But I’m also thinking that going off advertising cold-turkey could be financially painful. So maybe there’s an interim package of $2.50+ads or some such.

Blue check

It doesn’t figure into the pricing. It’s a service offered by Twitter to flag people whose identity is established and are perhaps apt to be a bit more interesting than average. If it benefits anyone it’s the customers, once you’ve done what it takes to make them customers not product.

Yes, I think it would be good if Twitter’s users were its customers. Yes, I grant that you could never launch a new social network and ask people to pay for it. But Twitter has a base of pretty-addicted users, so it might work.

Anyhow: Hey there Twitter people, good luck to you. You’re gonna need it.

01 Nov 01:18

Sticks and stones (and disinformation)

Doug Belshaw, Open Thinkering, Oct 31, 2022
Icon

Doug Belshaw addresses disinformation from the perspective of First Draft's 7 Types of Mis- and Disinformation spectrum. And I agree with him when he writes, "there isn't a single way of preventing harms when it comes to the examples on the right-hand side of First Draft's spectrum of mis- and disinformation." We can't just ban fabricated or manipulated content; it's just not feasible. How to deal with it then? Lessen the impact. "That's why," he says, "I think that the future of social interaction is federated... a multi-pronged approach which empowers communities... to deem what they consider problematic."

Web: [Direct Link] [This Post]
01 Nov 00:52

View west from the foot of Broughton Street

by ChangingCity

Broughton Street crosses West Hastings and ends in a traffic circle that allows vehicles to turn around and head south again. This is the view standing in the middle of the circle, looking west. In front is the edge of Cascina and Denia, a pair of towers designed by James K M Cheng, completed in 2003. To the north the Coal Harbour marina shelters boats and a few live-aboard homes, but in 1925 this was the water’s edge, with logs washed up on the foreshore.

The landscaping for the condo towers includes street trees planted into pits protected by reproduction circular saw blades. Although there’s no explanation, it’s not a random choice by the landscape architects. Off in the distance was the former Pacific Coast Lumber Co, with a sawmill, drying kiln, planing mill and steel sawdust burner. Today the Bayshore Hotel sits on the land that the mill occupied, and the railtrack that ran along the edge of the water has long gone.

James G Scott was born in Stratford, Ontario in 1860, and came west to New Westminster founding the Pacific Coast Lumber Company in 1891. He had married Lizzie Stewart in Guelph in 1887 and they had a son, Douglas, in 1892. By 1898 Scott was elected an Alderman in New Westminster, and he was elected Mayor for the year 1900. The following year he was elected again, this time by popular acclamation. In 1902 the family moved to Vancouver where he had built a new mill in Coal Harbour, at the foot of Cardero Street.

The decision to allow the construction was not initially supported by Vancouver interests. The approval came from Ottawa, but the Vancouver harbourmaster tried to get construction stopped several times, with threats of injunctions made, but apparently never pursued. In 1902 the mill was expanded, filling in between Pender Street and the rail tracks (which was on a trestle) with a ‘floating dry-dock’. It was a big mill operation consisting of a sawmill and shingle mill, side by side.  From the western end of the CPR railway terminus, a short line was extended to serve the mill.  A large pier jutted out into Coal Harbour to load sea-going vessels, and a loading dock serviced wagon traffic.  The mill dominated the waterfront on the approach to Stanley Park, in an area that had once been natural mud-flats. Mr. Scott ruffled further feathers when he placed piles in the harbour to moor his logs – and was then required to remove them. He became part of the BC Lumber Association and was soon trying to ensure major lumber purchases by prairie lumber buyers went through Association buyers – not always successfully.

The family home was at 746 Cardero in 1904, and by 1907 they had moved to Pendrell. There was an auction sale that year, including fine furniture and an American Billiard Table, and in 1908 the family were living in an apartment on 1175 Haro, where Mr. Scott was shown as retired (although no retirement notice ever appeared in the press). George Gibson had taken over running the mill.

Mr. Scott had an active interest in the North Vancouver Ferry and Power Company for a number of years, and when a rival operation was proposed he sold out his interest to the City of North Vancouver. In 1909 the Scott family were living on Haro Street, but a year later the Province announced an “Auction of high-class furniture and piano at Mrs. J. G. Scott’s residence, 1175 Haro street, Tuesday next”. In 1911 the Daily World reported “Mr. and Mrs. J. G. Scott of Vancouver, who went east about a year ago, have been enjoying a Mediterranean trip during the winter, and have visited many points of Interest on the continent. They are accompanied by their son.”

During wartime the family had returned to Vancouver, and no longer retired, James was listed as ‘lumberman’ and living on Larch Street. Son Douglas was working for the Empress Manufacturing Co in 1916 and was on active service a year later. We don’t know what happened to Douglas after the war, but he survived the war, with his death recorded in Victoria in 1961.

His parents, age 60, were living in, and running the Ivanhoe Hotel on Main Street in 1921. James died on a visit to Chicago in June 1924, and his body was returned to Ontario. His will was probated in August, and he left an estate of $72,286.49 to his widow, Eliza Stewart Scott. She died in 1941 and was buried with her husband in Ontario.

The mill looks to have stopped operations briefly in the early 1920s and reopened as the Vancouer-Iowa Shingle Mill. In 1923 Chinese saw operator was killed when a sawblade he had replaced flew off the machine. The company moved their operations to Marpole, on the Fraser River by 1928, and the mill was no longer in active use soon after this picture was taken.

The site was redeveloped as a rather isolated Bayshore Hotel, with the first building completed in 1959. It was to be called the Edgewater but opened with its current name. A 20 storey tower was added in the early 1960s, and there was a further addition in the early 2000s. Recently purchased by Concord Pacific, it’s likely that a redevelopment proposal will emerge in the future.

Image source: City of Vancouver Archives Bu N38.

1230

 

01 Nov 00:51

Introducing Lucas Siebert

by Rizki Kelimutu

Hey folks,

I’m super delighted to introduce you to our new Technical Writer, Lucas Siebert. Lucas is joining the content team alongside Abby and Fabi. Some of you may meet him already in our previous community call in October. Here’s a bit more info about Lucas:

Hi, everyone! I’m Lucas, Mozilla’s newest Technical Writer. I’m super excited to work alongside you all to provide content for our knowledge base. You will find me authoring, proofreading, editing, and localizing articles. If you have suggestions for making our content more accurate and user-friendly, please get in touch!

Please join me to congratulate and welcome Lucas!

01 Nov 00:51

Adobe Now Charging Extra to Use Pantone Colors

Noor Al-Sibai, The Byte, Oct 31, 2022
Icon

How bad is it? Images - even very old images - are being changed to black because they used a now-prohibited colour. This arose from a dispute between Pantone and Adobe where the former decided the latter should start paying licensing fees for colours. The inevitable result? "Users will have to pay $21 per month to get access to Pantone's encyclopedic color catalog — and that moreover, this move appears to be retroactive, and would remove any Pantone-trademarked color from any Adobe file you open starting in November, regardless of the age of one's software or the file itself." Tell me again that it's about protecting the creators.

Web: [Direct Link] [This Post]
01 Nov 00:51

Welcome to hell, Elon - The Verge

Nilay Patel, The Verge, Oct 31, 2022
Icon

This article was widely lauded as the best statement about Elon Musk's acquisition of Twitter. "The problems with Twitter are not engineering problems," writes Nilay Patel. "They are political problems. Twitter, the company, makes very little interesting technology; the tech stack is not the valuable asset. The asset is the user base: hopelessly addicted politicians, reporters, celebrities, and other people who should know better but keep posting anyway." There's truth to this remark. But you can't put 396 million users in to a single town square and not expect issues to arise. That fact is why Twitter (only the 15th most popular social network in the world) seems outsized, and why its problems magnify to become global problems. That's why politicians, propagandists and broadcast media celebrities are attracted to it. It's a platform for shouting, mass following, and mob behaviour, and that's what we get.

Web: [Direct Link] [This Post]
01 Nov 00:50

I renounced my British citizenship for my grandfather who was born a slave

mkalus shared this story .

This First Person column is written by Ben Samaroo, who lives in Vancouver. For more information about CBC's First Person stories, please see the FAQ.

I stood outside the British Consulate office in Vancouver with my renunciation documents in hand and a sense of conviction. Thirty-five years as a British citizen were about to come to an end. But I needed to do this. I needed to sever the long and complicated ties of my family to the British Empire. 

My parents met in London. They fell in love on dates at Hyde Park as they talked about their shared love of music. They witnessed music history together — Jimi Hendrix, Stevie Wonder, the Rolling Stones, Leonard Cohen, Santana and many more. Perhaps their fondest memory was Bob Marley's last concert in England on June 7, 1980. Marley came out for a solo encore with an acoustic guitar. He played a new song, which would later be released under the title, Redemption Song. When my parents reminisce about London, they often speak of this moment. 

They started our family in London, and we moved to Canada in 1989 in pursuit of better education and opportunities. 

Growing up, I didn't have a connection to my roots on either side of my family — not  through language, culture, religion, anything. My father, who was from Guyana and my mother, who was born in Kenya, always went against the grain. They strived to be Canadian and had little desire to maintain connection to their cultures. They left behind their pasts to allow for a new future for my siblings and me. Perhaps they felt if they distanced themselves from their cultures, they would more easily assimilate in England and Canada. And in turn, so would us kids.

We became Canadian citizens in 1994. I was seven and I remember the citizenship ceremony and sharing the details in school vividly, because my teachers and friends were confused. It seemed everyone else in Edmonton was already Canadian. 

I embraced that confusion. Being a dual citizen of Canada and the United Kingdom was something I was proud of, because it made me different and unique. In school, we were taught that Canada was a young country, whereas countries like England had more history. So being a British citizen made me feel a part of something bigger. I felt so lucky. 

As I got older, I felt a growing desire for freedom. This manifested in different ways and became more pronounced when I started working as a corporate lawyer. It was a job that made me feel accomplished but took away from the many freedoms in my life. I worked until my soul withered away, and then I kept working some more. Bringing me a bit closer to freedom — or so I thought. 

It was during this period of my life that I started researching my family history. We had no official records and very little was known about my grandparents and nothing of previous generations. I needed to learn more. I would come home after working 14-hour days and stay up all night researching. 

I spent the next 10 years digging deeper, which involved trips to England and Guyana and countless conversations with distant relatives and family friends. I searched far and wide to unearth the history of my ancestors. 

I discovered some harsh truths during this time. 

My paternal grandfather was born a slave. So were several generations prior. 

My great-great-grandparents were taken by the British from a small village in India to Guyana under false pretenses, believing they were going to the land of opportunity on a six-hour boat ride. Six months later, they arrived in the Caribbean and effectively became slaves on a sugar plantation. They signed contracts for indentured servitude in a language they didn't speak, which bound them to slavery — even if the colonizers preferred to use watered-down terms. 

Those ancestors in India were specifically targeted, because they were vulnerable following mass famines in the region that were orchestrated by 18th-century British trade policies with little thought toward the millions of people who died.

For some reason, during this research, I kept thinking about my grandfather. We never met, but I heard stories about him, his character and determination. I have one picture of him and a letter that he wrote in the last year of his life to my father — both of which I hold dearly. He passed in 1970, the same year that Guyana became a republic and gained independence from Britain. 

My connection to Britain felt different from when I was younger. What used to make me feel proud now makes me feel angered, hurt and confused. Citizen or not, Britain will forever be a part of my history, and with it comes the complexity of oppression and colonization. And while this is my family's history, it's also not unique. The British Empire spanned across the globe and affected so many people while extracting trillions of dollars of wealth from its colonies. 

When the Queen died and Charles was officially proclaimed King of the United Kingdom as well as Canada, I felt anger and frustration.

"On behalf of the Government of Canada, we affirm our loyalty to Canada's new King, His Majesty King Charles III…" said Prime Minister Justin Trudeau at the time in a statement. I wasn't sure if it was 1822 or 2022. 

It felt like the passing of the Queen was a golden opportunity for Canada to re-evaluate its relationship with the monarchy and, at a minimum, acknowledge the impacts of colonization on millions of Canadians. But Canada completely ignored it. 

If not now, then when? 

I decided I wasn't going to make the same mistake. While renouncing my British citizenship might seem symbolic, it's an important step for me and my ancestors. I have the choice to sever ties with Britain in that way — a choice that my grandfather and ancestors did not have.

This act is for me — and to show myself, my parents, my grandparents that we can choose differently. There is a freedom in that choice, and that's a step forward. 

The actual renunciation happened without fanfare. I simply dropped off the documents with the receiving clerk. But as I left the British Consulate and stepped into the sunlight after ending my relationship with the colonial power that owned my ancestors, I felt a sense of pride and healing. And the words of a wise man ran through my head. 

Old pirates, yes, they rob I

Sold I to the merchant ships

Minutes after they took I

From the bottomless pit

But my hand was made strong

By the hand of the Almighty

We forward in this generation

Triumphantly

— Bob Marley


Do you have a compelling personal story that can bring understanding or help others? We want to hear from you. Here's more info on how to pitch to us.

01 Nov 00:49

Lightroom replacement

by jwz
mkalus shared this story from jwz.

What are my options?

I have still been unable to get my copy of Lightroom 6.5.1 to launch on an M1 Mac, via these instructions or any variant I've tried. I was able to get it working fine on a 64 bit x86 Mac running 12.6, though, so it's an architecture issue, not an OS version issue.

 Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Codes: KERN_PROTECTION_FAILURE at 0x00007ff81e8fc7b9 Exception Codes: 0x0000000000000002, 0x00007ff81e8fc7b9 Termination Reason: Namespace SIGNAL, Code 10 Bus error: 10 Terminating Process: exc handler [48076] Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libConfigurer.dylib 	 0x10b9550a7 0x10b901000 + 344231 1 libobjc.A.dylib 	 0x7ff80089a537 load_images + 1315 2 dyld 	 0x2031a7672 dyld4::RuntimeState::notifyObjCInit(dyld4::Loader const*) + 170 3 dyld 	 0x2031b1745 dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const*>&) const + 167 4 dyld 	 0x2031b1733 dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const*>&) const + 149 5 dyld 	 0x2031b1733 dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const*>&) const + 149 6 dyld 	 0x2031b182c dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const + 164 7 dyld 	 0x2031d1117 dyld4::APIs::runAllInitializersForMain() + 337 8 dyld 	 0x20319c369 dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3743 9 dyld 	 0x20319b281 start + 2289

My primary requirements are:

  • Keep my photos in the folders where I placed them, rather than sucking them into a database and renaming everything. This eliminates Apple Photos as an option.
  • Don't modify the original files except to write tags and other metadata into them.
  • Do not store things in The Clown.
  • Understand the EXIF tags that Lightroom already wrote.
  • Make rating, tagging and tag searching easy.
  • Make exporting to JPEG with presets easy.

I gave DarkTable a try, and it's an almost. It claims to understand the sidecar XML files used by Lightroom with raw files, but I find much of the UI baffling:

  • There seems to be no way to display a set of photos full screen and go through and rate them one by one.
  • The interface for displaying and editing tags is confusing and ugly, especially hierarchical tags.
  • Presumably there's a way to show all photos that match a tag, but I haven't found it.
  • I keep getting stuck in sub-modes where I can't figure out how to get back to my list of folders, and have to quit and restart.

What else is out there?

Previously, previously, previously.

01 Nov 00:48

PHPUnit tests for Drupal

by Dries

Writing tests can be hard. The key is to get started. When I start work on a new Drupal module, I like to start off by adding a very simple test and making it pass. Once I have one simple test passing, it becomes easy to add more. The key is get started with the simplest test possible. This page explains how I do that.

The most basic PHPUnit test for Drupal

The most basic test looks something like this:


   */
  protected static $modules = ['my_module'];

  /**
   * Theme to enable. This field is mandatory.
   *
   * @var string
   */
  protected $defaultTheme = 'stark';

  /**
   * The simplest assert possible.
   */
  public function testOne() {
    $this->assertTrue(TRUE);
  }
}

Drupal uses PHPUnit for testing, and the test above is a PHPUnit test.

The test lives in docroot/modules/custom/my_module/tests/src/Functional/MyModuleTest.php.

Installing PHPUnit for Drupal

Drupal does not ship with PHPUnit out-of-the-box, so it needs to be installed.

The best way to install PHPUnit on a Drupal site is by installing the drupal/core-dev package. It can be installed using Composer:

$ composer require drupal/core-dev --dev --update-with-all-dependencies

The command above will download and configure PHPUnit, along with other development dependencies that are considered a best-practice for Drupal development (e.g. PHPStan).

Configuring PHPUnit for Drupal

Once installed, you still have to configure PHPUnit. All you need to do is set two variables:

  • SIMPLETEST_BASE_URL should be the URL of your site (e.g. http://localhost/).
  • SIMPLETEST_DB should be your database settings (e.g. mysql://username:password@localhost/database).

You can specify these directly in docroot/core/phpunit.xml.dist, or you can set them as environment variables in your shell.

Running a PHPUnit test for Drupal

With PHPUnit installed, let's run our basic test:

$ cd docroot/core
$ ../../vendor/bin/phpunit ../modules/custom/my_module/tests/src/Functional/MyModuleTest.php

We have to execute our test from inside the docroot/core/ directory so PHPUnit can find our test.

Using PHPUnit with Lando

I use Lando for my local development environment. There are a couple of things you can add to your .lando.yml configuration file to make using PHPUnit a bit easier:

services:
  appserver:
    overrides:
      environment:
        SIMPLETEST_BASE_URL: "http://localhost/"
        SIMPLETEST_DB: "mysql://username:password@localhost/database"
        BROWSERTEST_OUTPUT_DIRECTORY: "/app/phpunit-results"
tooling:
  test:
    service: appserver
    cmd: "php /app/vendor/bin/phpunit --verbose -c /app/docroot/core/phpunit.xml.dist"

The first 6 lines sets the variables and the last 4 lines create a new lando test command.

After changing my .lando.yml, I like to rebuild my Lando environment, though that might not be strictly necessary:

$ lando rebuild -y

Now, you can run the PHPUnit test as follows:

$ lando test modules/custom/my_module/tests/src/Functional/MyModuleTest.php

About this page

This page is part of my digital garden. It's like a page in my personal notebook rather than a finished blog post. I documented this information for myself, but I'm putting it out there as it might be useful for others. Contrary to my blog posts, pages in my digital garden are less finished, and updated and refined over time. It grows and lives like a plant in a garden, and I'll tend to it from time to time.

01 Nov 00:48

Meta Myths

by Ben Thompson

Meta deserves a bit of a discount off of its recent highs, but a number of myths about its business have caused the market to over-react.


Listen to this Update in your podcast player


What happened to Meta last week — and my response to it — expressed in meme-form:

The GTA meme about "Here we go again" as applied to Facebook

In 2018, the market was panicking about Facebook’s slowing revenue and growing expenses, and was concerned about the negative impact that Stories was having on Facebook’s feed advertising business. I wrote that the reaction was overblown in Facebook Lenses, which looked at the business in five different ways:

  • Lens 1 was Facebook’s finances, which did show troubling trends in terms of revenue and expense growth:

    Facebook's revenue growth is decreasing even as its expense growth increases

    As I noted at the time, I could understand investor trepidation about these trends lines, which is why other lenses were necessary.

  • Lens 2 was Facebook’s products, where I argued that investors were over-indexed on Facebook the app and were ignoring Instagram’s growth potential, and, in the very long run, WhatsApp.
  • Lens 3 was Facebook’s advertising infrastructure, which I argued was very underrated, and which would provide a platform for dramatically scaling Instagram monetization in particular.
  • Lens 4 was Facebook’s moats, including its network, scaled advertising product, and investments in security and content review.
  • Lens 5 was Facebook’s raison d’être — connecting people — where I made the argument that the company’s core competency was in addressing a human desire that wasn’t going anywhere.

I concluded:

To insist that Facebook will die any day now is in some respects to suggest that humanity will cease to exist any day now; granted, it is a company and companies fail, but even if Facebook failed it would only be a matter of time before another Facebook rose to replace it.

That seems unlikely: for all of the company’s travails and controversies over the past few years, its moats are deeper than ever, its money-making potential not only huge but growing both internally and secularly; to that end, what is perhaps most distressing of all to would-be competitors is in fact this quarter’s results: at the end of the day Facebook took a massive hit by choice; the company is not maximizing the short-term, it is spending the money and suppressing its revenue potential in favor of becoming more impenetrable than ever.

The optimism proved prescient, at least for the next three years:

Facebook's stock run-up from 2018 to 2021

Facebook’s stock price increased by 118% between the day I wrote that Article, before peaking on September 15, 2021. Over the past year, though, things have certainly gone in the opposite direction:

Meta's massive drawdown in 2022

Meta, née Facebook, is now, incredibly enough, worth 42% less than it was when I wrote Facebook Lenses, hitting levels not seen since January 2016. It seems the company’s many critics are finally right: Facebook is dying, for real this time.

The problem is that the evidence just doesn’t support this point of view. Forget five lenses: there are five myths about Meta’s business that I suspect are driving this extreme reaction; all of them have a grain of truth, so they feel correct, but the truth is, if not 100% good news, much better than most of those dancing on the company’s apparent grave seem to realize.

Myth 1: Users Are Deserting Facebook

Myspace is, believe it or not, still around; however, it has been irrelevant for so long that I needed to look it up to remember if the name used camel case or not (it doesn’t). It does, though, still seem to loom large in the mind of Meta skeptics certain that the mid-2000’s social network’s fate was predictive for the company that supplanted it.

The problem with this narrative is that Meta is still adding users: the company is up to 2.93 billion Daily Active Users (DAUs), an increase of 50 million, and 3.71 billion Monthly Active Users (MAUs), an increase of 60 million. Moreover, this isn’t all Instagram and WhatsApp: Facebook itself increased its DAUs by 16 million (to 1.98 billion) and its MAUs by 24 million (to 2.96 billion). Granted, all of that growth, at least in the case of Facebook, was in Asia-Pacific and the rest of the world, but the U.S. and Europe were flat, not declining; given that Facebook long ago completely saturated those markets, it is meaningful that the service is not seeing any churn.

This goes back to my fifth lens: Facebook does connect people, and that connection is still meaningful enough for a whole lot of people to continue to use its services, and there is no sign of that desire for connection disappearing or shifting to other apps.

Myth 2: Instagram Engagement is Plummeting

The obvious retort is that sure, users may occasionally open Meta’s apps when they are bored, but they are spending most of their time in other apps like TikTok, and that that time is coming at the expense of Meta’s apps, particularly Instagram.

There is, to be clear, good reason to think that TikTok is having a big impact on Instagram specifically and Facebook broadly, but that impact, to the extent it is being felt, is in depressing growth, not in reversing it. CEO Mark Zuckerberg said at the beginning of his opening remarks on Meta’s earnings call:

There has been a bunch of speculation about engagement on our apps and what we’re seeing is more positive. On Facebook specifically, the number of people using the service each day is the highest it’s ever been — nearly 2 billion — and engagement trends are strong. Instagram has more than 2 billion monthly actives. WhatsApp has more than 2 billion daily actives, also with the exciting trend that North America is now our fastest growing region. Across the family, some apps may be saturated in some countries or some demographics, but overall our apps continue to grow from a large base. We’re also seeing engagement grow — especially strong growth in Reels — and I’ll share more details around that when I discuss our product priorities shortly.

Analysts on the call were skeptical, and asked specifically about the U.S. market; CFO Dave Wehner had good news in that regard as well:

So on time spent, we are really pleased with what we’re seeing on engagement. And as Mark mentioned, Reels is incremental to time spent. Specifically, in terms of aggregate time spent on Instagram and Facebook, both are up year-over-year in both the U.S. and globally. So while we’re not specifically optimizing for time spent, those trends are positive. And we aren’t specifically optimizing for time spent because that would tend to tilt us towards longer-form video, and we’re actually focused more on short-form and other types of content.

Again, TikTok usage is certainly usage that Meta would prefer happen on their platforms; what seems clear, though, is that short-form videos are growing the overall market for user-generated content. In other words, TikTok isn’t eating Meta’s usage, but rather growing the overall pie (and, to be clear, taking more of that pie than Meta is — at least until recently).

Myth 3: TikTok is Dominating

It is frustrating to not know exactly how big that new pie is, or what Meta’s share is relative to TikTok, but the company offered more evidence in line with my takeaway last quarter that Meta has contained the TikTok threat. First, according to Sensor Tower data as reported by Morgan Stanley, TikTok usage appears to be plateauing:

TikTok's growth is plateauing in the U.S.

Growth in the U.S. specifically was around 4%, with half the penetration of Instagram.

Second, Reels usage is still growing: Zuckerberg said on the earnings call:

Our AI discovery engine is playing an increasingly important role across our products — especially as advances enable us to recommend more interesting content from across our networks in feeds that used to be primarily driven just by the people and accounts you follow. This of course includes Reels, which continues to grow quickly across our apps — both in production and consumption. There are now more than 140 billion Reels plays across Facebook and Instagram each day. That’s a 50% increase from six months ago. Reels is incremental to time spent on our apps. The trends look good here, and we believe that we’re gaining time spent share on competitors like TikTok.

It’s fair to be a bit skeptical about that number, particularly as auto-playing Reels take over more of both the Facebook and Instagram feeds; what is perhaps more meaningful is the fact that Reels now has a $3 billion annual run rate (despite the fact it doesn’t monetize nearly as well as Meta’s other ad formats — for now, anyways). TikTok, by comparison, had $4 billion in revenue in 2021, and set a goal for $12 billion this year (I suspect the company won’t reach that goal, thanks to both ATT and the macroeconomic environment; still, it should be a good-sized number).

Meta, to be sure, has a much more fleshed out ad product that almost certainly monetizes better than TikTok; the takeaway here is not that Reels is surpassing TikTok anytime soon, but it is a real product that is almost certainly growing more quickly (which, it’s worth noting, is what Instagram did to Snapchat with Stories: Facebook didn’t take usage back, but it stopped more users from moving, which ultimately resulted in far more usage).

Third, the fact that Reels usage is “incremental to time spent on [Meta] apps” supports the argument above that short-form video is growing the pie for user-generated content; to be sure, all of that TikTok usage is probably the equivalent of tens of billions of revenue if Meta could harvest it, but once again the evidence suggests that the cost of TikTok to Meta is, at least for now, opportunity cost, not actual infringement on the company’s business.

Myth 4: Advertising is Dying

This is probably the point where my statement in the beginning, that all of these myths have a bit of truth to them that makes them believable, is the most important: a good chunk of Meta’s drawdown is justified, and the reason is Apple’s App Tracking Transparency (ATT) policy.

Before ATT, ad measurement, particularly for all-digital transactions like app installs and e-commerce sales, was measured deterministically: this meant that Meta knew with a high degree of certainty which ads led to which results, because it collected that data from within advertisers’ apps and websites (via a Facebook SDK or pixel). This in turn gave advertisers the confidence to spend on advertising not with an eye towards its cost, but rather with an expectation of how much revenue could be generated.

ATT severed that connection between Meta’s ads on one side, and conversions on the other, by labeling the latter as third party data and thus tracking (never mind that none of the data was collected by the app maker or merchant, who were more than happy to deputize Meta for ad-related data collection). This not only made the company’s ads less valuable, it also made them more uncertain: unlike COVID, when return-on-advertising spend (ROAS)-focused advertisers bought up inventory abandoned by brands, the current macroeconomic slowdown has much less of a buffer.

This was, needless to say, a big deal for the entire industry, but what has been fascinating to observe over the last nine months is how few companies want to talk about it (particularly Google in the context of YouTube). Meta’s stock slide, though, shows why: ATT was a secular, structural change in the digital ad market, that absolutely should have a big impact on an affected company’s stock price. Meta, to their credit, admitted that ATT would reduce their revenue by $10 billion a year, and because that impact is primarily felt through lower prices, that is money straight off of the bottom line — and it’s a loss that will only accumulate over time, by extension reducing the terminal value of the company. Again, the stock should be down!

What ATT did not do, though, was kill digital advertising. There are still plenty of ads on Facebook, and mostly not from traditional advertisers from the analog world: entire industries have developed online over the last fifteen years in particular, built for a reality where the entire world as addressable market makes niche products viable in a way they never were previously — as long as the seller can find a customer. Meta is still the best option for that sort of top-of-the-funnel advertising, which is why the company still took in $27 billion in advertising last quarter. Moreover, the fact that number was barely down year-over-year speaks to the fact that digital advertising is still growing strongly: yes, ATT lopped off a big chunk of revenue, but it is not as if Meta revenue actually decreased by $10 billion annually (there is an analogy here to how short-form video has increased the share of time of user-generated content, as opposed to taking time away from Meta).

Meta, of course, is not standing still, either: SKAdNetwork 4 has seen Apple retreat from its most extreme positions with a new ad API that should help larger advertisers in particular; Meta is meanwhile working to move more conversions onto their own platform (which magically makes that data allowable as far as Apple is concerned, even though there is no meaningful difference for merchants beyond losing that much more control of their business).1 It’s also notable that the company’s click-to-message advertising product is itself on a $9 billion run rate, and growing fast. The most important efforts, though, are AI-driven.

Myth 5: Meta’s Spending is a Waste

That revenue and expenses graph I posted in 2018 does look a lot more hairy today:

Facebook's expense growth relative to revenue growth looks worse than ever

Some of this is Metaverse-related, which I will get to in a moment; what also has investors spooked, though, is Facebook’s increasing capital expenditures, which have nothing to do with the Metaverse (Metaverse spending is almost all research and development). Meta expects to spend $32-$33 billion in capital expenditures in 2022, and $34-$39 billion in 2023; that won’t hit the income statement right way (capital expenditures show up as depreciation in cost of revenue), but that just means that longer-term profitability may be increasingly impaired. Facebook’s gross margins were down to 79% last quarter, its lowest mark since 2013, and if revenue growth doesn’t pick back up then those margins will fall further, given that the costs are already built in.

The problem with this line of reasoning is that Meta’s capital expenditures are directly focused on both of the two main reasons for alarm: TikTok and ATT. That is because the answer to both challenges is more AI, and building up AI capacity requires a lot of capital investment.

Start with the second point: Wehner said in his prepared remarks:

We are significantly expanding our AI capacity. These investments are driving substantially all of our capital expenditure growth in 2023. There is some increased capital intensity that comes with moving more of our infrastructure to AI. It requires more expensive servers and networking equipment, and we are building new data centers specifically equipped to support next generation AI-hardware. We expect these investments to provide us a technology advantage and unlock meaningful improvements across many of our key initiatives, including Feed, Reels and ads. We are carefully evaluating the return we achieve from these investments, which will inform the scale of our AI investment beyond 2023.

Meta has huge data centers, but those data centers are primarily about CPU compute, which is what is needed to power Meta’s services. CPU compute is also what was necessary to drive Meta’s deterministic ad model, and the algorithms it used to recommend content from your network.

The long-term solution to ATT, though, is to build probabilistic models that not only figure out who should be targeted (which, to be fair, Meta was already using machine learning for), but also understanding which ads converted and which didn’t. These probabilistic models will be built by massive fleets of GPUs, which, in the case of Nvidia’s A100 cards, cost in the five figures; that may have been too pricey in a world where deterministic ads worked better anyways, but Meta isn’t in that world any longer, and it would be foolish to not invest in better targeting and measurement.

Moreover, the same approach will be essential to Reels’ continued growth: it is massively more difficult to recommend content from across the entire network than only from your friends and family, particularly because Meta plans to recommend not just video but also media of all types, and intersperse it with content you care about. Here too AI models will be the key, and the equipment to build those models costs a lot of money.

In the long run, though, this investment should pay off. First, there are the benefits to better targeting and better recommendations I just described, which should restart revenue growth. Second, once these AI data centers are built out the cost to maintain and upgrade them should be significantly less than the initial cost of building them the first time. Third, this massive investment is one no other company can make, except for Google (and, not coincidentally, Google’s capital expenditures are set to rise as well).

That last point is perhaps the most important: ATT hurt Meta more than any other company, because it already had by far the largest and most finely-tuned ad business, but in the long run it should deepen Meta’s moat. This level of investment simply isn’t viable for a company like Snap or Twitter or any of the other also-rans in digital advertising (even beyond the fact that Snap relies on cloud providers instead of its own data centers); when you combine the fact that Meta’s ad targeting will likely start to pull away from the field (outside of Google), with the massive increase in inventory that comes from Reels (which reduces prices), it will be a wonder why any advertiser would bother going anywhere else.

The one caveat to this happy story is the existential threat of TikTok not just stealing growth but actually stealing users and time, but again the answer there is better recommendation algorithms first and foremost, and that, as noted, is an AI problem. In other words, this is the most important money that Meta can spend.

Maybe True: The Metaverse is a Waste of Time and Money

This isn’t an Article about the Metaverse, which as I noted in Meta Meets Microsoft, may be a real product even as it is potentially a bad business for Meta (as an addendum to that piece, I noted on Dithering that I found John Carmack’s critique of Meta’s approach very compelling; he believes the company should be focused on low-cost low-weight devices, which to my mind makes much more sense for a social network).

It’s worth pointing out, though, that the Metaverse’s costs, which will exceed $10 billion this year and be even more next year, are, relative to Meta’s overall business and overall spending, fairly small. It’s definitely legitimate to decrease your valuation of Meta’s business if you think this investment will never contribute to the bottom line — that’s a lot of foregone profit — but this idea that Meta’s business is doomed and that the Metaverse is a Hail Mary flail to build something out of the ashes simply isn’t borne out by the numbers.

Zuckerberg does, to be sure, deserve blame for this perception: he’s the one that renamed the company and committed to spending all of that money, and made clear that it was his vision that dictated that Meta’s efforts go towards expensive hardware like face-tracking, and the fact that he can’t be replaced has always been worth its own discount. This, though, feels like a rebrand that was too successful: Meta the metaverse company may be a speculative boondoggle, but that doesn’t change the fact that the old Facebook is still a massive business with far more of its indicators pointing up-and-to-the-right than its Myspace-analogizers want to admit.


  1. The news last month about pulling back on Instagram Shopping was about focusing on ad-driven commerce. 


Add to your podcast player: Stratechery | Sharp Tech | Dithering | Sharp China | GOAT


Subscription Information

Member: Roland Tanglao
Email: rolandt@gmail.com

Manage your account

01 Nov 00:47

How to Leave Dying Social Media Platforms | by Cory Doctorow | Oct, 2022 | Medium

Cory Doctorow, Medium, Oct 31, 2022
Icon

"Anyone in the Fediverse can easily talk to other people in the Fediverse," writes Cory Doctorow, " but they can't talk to the people they leave behind on the big platforms like Facebook and Twitter." And that's how services like Twitter and Facebook hang on to their users, even as they create an increasingly unpleasant environment for them. These services could interact with other social media services, but they won't. Doctorow calls for passage of 'the ACCESS Act,' similar to Europe's Digital Markets Act (DMA), "which promises to impose interoperability on giant social media platforms... eventually." I am less sanguine about the possibility of a legislated solution, since the billionaires who own these companies can but as much legislative influence as they want. But I'm not sure what else would open up social media.

Web: [Direct Link] [This Post]
01 Nov 00:47

AI is plundering the imagination and replacing it with a slot machine - Bulletin of the Atomic Scientists

Annie Dorsen, Bulletin of the Atomic Scientists, Oct 31, 2022
Icon

Annie Dorsen argues that "plugging prompts into AI models hijacks human curiosity and robs them of a process meant to spur creativity." She writes, "These tools represent the complete corporate capture of the imagination, that most private and unpredictable part of the human mind... When tinkerers and hobbyists, doodlers and scribblers—not to mention kids just starting to perceive and explore the world—have this kind of instant gratification at their disposal, their curiosity is hijacked and extracted." Really? It's not clear to me that this is true. We may be limited by our existing lack of artistic abilities - I know I am - and might be liberated by having the capacity top realizes visually that which we could only tentatively express with a few halting words.

Web: [Direct Link] [This Post]
01 Nov 00:47

31oct2022

by Leah Neukirchen

OpenBSD 7.2 has been released.

rset(1), configure systems using any scripting language.

JRM’s Syntax-rules Primer for the Merely Eccentric, by Joe Marshall.

Elevator Saga: The elevator programming game

Troubleshoot and make a sad server happy!, “Capture The Flag challenges. Train and prove your debugging skills.”

Spacewar!, original 1962 game code running on a PDP-1 emulator in JavaScript.

smolnes, a NES emulator in ≈5000 significant bytes of C++.

RFC XXXX: Asynchronous Rock-Paper-Scissors over Instant Message by Flisk.

01 Nov 00:46

The pdb interact command

by Simon Willison

Today Carlton told me about the interact command in the Python debugger.

Here's how to use it with pytest (but it works anywhere else where you find yourself in a pdb session).

Use pytest --pdb to cause pytest to open a debugger at the first failed assertion (I added assert False to my test suite to demonstrate this).

Then type interact to drop into a full Python interactive prompt that keeps all of the local and global variables from the debugger:

% pytest -k test_drop --pdb                                               
======== test session starts ========
platform darwin -- Python 3.10.3, pytest-7.1.3, pluggy-1.0.0
...
>       assert False
E       assert False

tests/test_api_write.py:272: AssertionError
>>>> entering PDB >>>>

>>>> PDB post_mortem (IO-capturing turned off) >>>>
> /Users/simon/Dropbox/Development/datasette/tests/test_api_write.py(272)test_drop_table()
-> assert False
(Pdb) interact
>>> locals().keys()
dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__file__', '__cached__', '__builtins__',
  '@py_builtins', '@pytest_ar', 'Datasette', 'sqlite3', 'pytest', 'time', 'ds_write', 'write_token', 'test_write_row',
  'test_write_rows', 'test_write_row_errors', 'test_delete_row', 'test_drop_table', 'scenario', 'token', 'should_work',
  'path', 'response', '@py_assert0', '@py_format2'])

Crucially, once you are in the interactive prompt you can inspect local variables with names like s and c without accidentally triggering matching debugger commands.

Hit Ctrl+D to exit back to the debugger:

>>> <Ctrl+D>
now exiting InteractiveConsole...
(pdb)
01 Nov 00:32

CogDog Does it Again –> Openverse

by Nancy White
https://cogdogblog.com/2022/10/open-to-openverse/ is a great post for all of you searching for free to use images. You used to be able to easily find them via an advanced search on Google, but Alan discovered that this was, shall we say, borked? So click in, read and then see all this fantastic visual material you can use … Continue reading CogDog Does it Again –> Openverse

Source

31 Oct 02:30

mitsuhiko/insta

mitsuhiko/insta

I asked for recommendations on Twitter for testing libraries in other languages that would give me the same level of delight that I get from pytest. Two people pointed me to insta by Armin Ronacher, a Rust testing framework for "snapshot testing" which automatically records reference values to your repository, so future tests can spot if they change.

Via @david_raznick

31 Oct 02:29

The Perfect Commit

For the last few years I've been trying to center my work around creating what I consider to be the Perfect Commit. This is a single commit that contains all of the following:

  • The implementation: a single, focused change
  • Tests that demonstrate the implementation works
  • Updated documentation reflecting the change
  • A link to an issue thread providing further context

Our job as software engineers generally isn't to write new software from scratch: we spend the majority of our time adding features and fixing bugs in existing software.

The commit is our principle unit of work. It deserves to be treated thoughtfully and with care.

Implementation

Each commit should change a single thing.

The definition of "thing" here is left deliberately vague!

The goal is have something that can be easily reviewed, and that can be clearly understood in the future when revisited using tools like git blame or git bisect.

I like to keep my commit history linear, as I find that makes it much easier to comprehend later. This further reinforces the value of each commit being a single, focused change.

Atomic commits are also much easier to cleanly revert if something goes wrong - or to cherry-pick into other branches.

For things like web applications that can be deployed to production, a commit should be a unit that can be deployed. Aiming to keep the main branch in a deployable state is a good rule of thumb for deciding if a commit is a sensible atomic change or not.

Tests

The ultimate goal of tests is to increase your productivity. If your testing practices are slowing you down, you should consider ways to improve them.

In the longer term, this productivity improvement comes from gaining the freedom to make changes and stay confident that your change hasn't broken something else.

But tests can help increase productivity in the immediate short term as well.

How do you know when the change you have made is finished and ready to commit? It's ready when the new tests pass.

I find this reduces the time I spend second-guessing myself and questioning whether I've done enough and thought through all of the edge cases.

Without tests, there's a very strong possibility that your change will have broken some other, potentially unrelated feature. Your commit could be held up by hours of tedious manual testing. Or you could YOLO it and learn that you broke something important later!

Writing tests becomes far less time consuming if you already have good testing practices in place.

Adding a new test to a project with a lot of existing tests is easy: you can often find an existing test that has 90% of the pattern you need already worked out for you.

If your project has no tests at all, adding a test for your change will be a lot more work.

This is why I start every single one of my projects with a passing test. It doesn't matter what this test is - assert 1 + 1 == 2 is fine! The key thing is to get a testing framework in place, such that you can run a command (for me that's usually pytest) to execute the test suite - and you have an obvious place to add new tests in the future.

I use these cookiecutter templates for almost all of my new projects. They configure a testing framework with a single passing test and GitHub Actions workflows to exercise it all from the very start.

I'm not a huge advocate of test-first development, where tests are written before the code itself. What I care about is tests-included development, where the final commit bundles the tests and the implementation together. I wrote more about my approach to testing in How to cheat at unit tests with pytest and Black.

Documentation

If your project defines APIs that are meant to be used outside of your project, they need to be documented. In my work these projects are usually one of the following:

  • Python APIs (modules, functions and classes) that provide code designed to be imported into other projects.
  • Web APIs - usually JSON over HTTP these days - that provide functionality to be consumed by other applications.
  • Command line interface tools, such as those implemented using Click or Typer or argparse.

It is critical that this documentation must live in the same repository as the code itself.

This is important for a number of reasons.

Documentation is only valuable if people trust it. People will only trust it if they know that it is kept up to date.

If your docs live in a separate wiki somewhere it's easy for them to get out of date - but more importantly it's hard for anyone to quickly confirm if the documentation is being updated in sync with the code or not.

Documentation should be versioned. People need to be able to find the docs for the specific version of your software that they are using. Keeping it in the same repository as the code gives you synchronized versioning for free.

Documentation changes should be reviewed in the same way as your code. If they live in the same repository you can catch changes that need to be reflected in the documentation as part of your code review process.

And ideally, documentation should be tested. I wrote about my approach to doing this using Documentation unit tests. Executing example code in the documentation using a testing framework is a great idea too.

As with tests, writing documentation from scratch is much more work than incrementally modifying existing documentation.

Many of my commits include documentation that is just a sentence or two. This doesn't take very long to write, but it adds up to something very comprehensive over time.

How about end-user facing documentation? I'm still figuring that out myself. I created my shot-scraper tool to help automate the process of keeping screenshots up-to-date, but I've not yet found personal habits and styles for end-user documentation that I'm confident in.

A link to an issue

Every perfect commit should include a link to an issue thread that accompanies that change.

Sometimes I'll even open an issue seconds before writing the commit message, just to give myself something I can link to from the commit itself!

The reason I like issue threads is that they provide effectively unlimited space for commentary and background for the change that is being made.

Most of my issue threads are me talking to myself - sometimes with dozens of issue comments, all written by me.

Things that can go in an issue thread include:

  • Background: the reason for the change. I try to include this in the opening comment.
  • State of play before the change. I'll often link to the current version of the code and documentation. This is great for if I return to an open issue a few days later, as it saves me from having to repeat that initial research.
  • Links to things. So many links! Inspiration for the change, relevant documentation, conversations on Slack or Discord, clues found on StackOverflow.
  • Code snippets illustrating potential designs and false-starts. Use ```python ... ``` blocks to get syntax highlighting in your issue comments.
  • Decisions. What did you consider? What did you decide? As programmers we make hundreds of tiny decisions a day. Write them down! Then you'll never find yourself relitigating them in the future having forgotten your original reasoning.
  • Screenshots. What it looked like before, what it looked like after. Animated screenshots are even better! I use LICEcap to generate quick GIF screen captures or QuickTime to capture videos - both of which can be dropped straight into a GitHub issue comment.
  • Prototypes. I'll often paste a few lines of code copied from a Python console session. Sometimes I'll even paste in a block of HTML and CSS, or add a screenshot of a UI prototype.

After I've closed my issues I like to add one last comment that links to the updated documentation and ideally a live demo of the new feature.

An issue is more valuable than a commit message

I went through a several year phase of writing essays in my commit messages, trying to capture as much of the background context and thinking as possible.

My commit messages grew a lot shorter when I started bundling the updated documentation in the commit - since often much of the material I'd previously included in the commit message was now in that documentation instead.

As I extended my practice of writing issue threads, I found that they were a better place for most of this context than the commit messages themselves. They supported embedded media, were more discoverable and I could continue to extend them even after the commit had landed.

Today many of my commit messages are a single line summary and a link to an issue!

The biggest benefit of lengthy commit messages is that they are guaranteed to survive for as long as the repository itself. If you're going to use issue threads in the way I describe here it is critical that you consider their long term archival value.

I expect this to be controversial! I'm advocating for abandoning one of the core ideas of Git here - that each repository should incorporate a full, decentralized record of its history that is copied in its entirety when someone clones a repo.

I understand that philosophy. All I'll say here is that my own experience has been that dropping that requirement has resulted in a net increase in my overall productivity. Other people may reach a different conclusion.

If this offends you too much, you're welcome to construct an even more perfect commit that incorporates background information and additional context in an extended commit message as well.

One of the reasons I like GitHub Issues is that it includes a comprehensive API, which can be used to extract all of that data. I use my github-to-sqlite tool to maintain an ongoing archive of my issues and issue comments as a SQLite database file.

Not every commit needs to be "perfect"

I find that the vast majority of my work fits into this pattern, but there are exceptions.

Typo fix for some documentation or a comment? Just ship it, it's fine.

Bug fix that doesn't deserve documentation? Still bundle the implementation and the test plus a link to an issue, but no need to update the docs - especially if they already describe the expected bug-free behaviour.

Generally though, I find that aiming for implementation, tests, documentation and an issue link covers almost all of my work. It's a really good default model.

Write scrappy commits in a branch

If I'm writing more exploratory or experimental code it often doesn't make sense to work in this strict way. For those instances I'll usually work in a branch, where I can ship "WIP" commit messages and failing tests with abandon. I'll then squash-merge them into a single perfect commit (sometimes via a self-closed GitHub pull request) to keep my main branch as tidy as possible.

Some examples

Here are some examples of my commits that follow this pattern:

31 Oct 02:29

Throttling

I used to belong to an online group that had a rule: one message per person per thread per day. What we’d seen was that people would wake up in North America to a hundred-message back-and-forth between three people in Germany and say, “There’s no way I can catch up with this.” They would then do exactly the same thing to the Australians in the group, who in turn would–you get the picture.

The throttling rule forced people to write fewer, longer, and more thoughtful messages. By doing that, it created space for others to contribute: the number of people contributing to discussions tripled (at least), and we saw many more messages from people who were newer to the group, naturally quieter, weren’t as fluent in English, and so on.

So here’s my request: enable something like this on Mastodon. I’m naturally verbose [pause for laughter]; I think that setting a quota on my posts would make the site a better place for everyone, and would open the door to other experiments that might make it even better still.

31 Oct 02:14

A Netsplit Unless The Bird Trapper Makes It Permanent

by Ton Zijlstra

It seems some 50.000 people created a Mastodon account since Musk captured the blue bird. Twitter has about 400 million users, and some 200 million daily active ones, so that’s about an 1/80th percent versus 2/80th percent of the total. For Mastodon 50k users represent about 7/8th of a percent, considerably more, and significant change for a single day, but still a small number. It feels more massive in my Mastodon timeline though. This can be a sign that the networks I’m part of are heavily skewed (most likely true), or that it’s more active Twitter users making the switch (not an unreasonable assumption). Some 10% of Twitter users make up about 90% of messages. If the 50k migrants come from that 10%, than as those 10% come by definition from the active users so that they represent 20% of those active users (40 million), they add up to 1/8th of a percent of those.

At those rates, and seeing the peak migration is behind us, it means what passes for #twittermigration is indeed just a wavelet. Especially as those new account holders have not deleted their Twitter accounts. I’ve been an active user of Mastodon for 5 years, and haven’t deleted my handful of Twitter accounts either. I still use them, almost only for broadcasting though, while most of my conversation is indeed on Mastodon.

So if anything this is at the moment less a #twittermigration than a sort of self-induced netsplit (common in the days of peak IRC), which may turn out to be as temporary as the netsplits of old were. Unless the momentum keeps up, for instance because the bird trapper‘s public statements and actions drive more people away. After all bird traps aren’t mostly non-lethal.

And we have of course seen these wavelets of account creation in the Fediverse before, with little in terms of active retention. This renewed wavelet has led me to re-assess whether my own website can serve usefully as a ActivityPub (the protocol behind Mastodon/Fediverse in general) actor. WordPress, through plugins, can ‘speak’ ActivityPub, just not in the way yet I want it to (two issues: current plugins expose my username on my site, and don’t allow for selective sharing of posts on my site through ActivityPub). ActivityPub is just a protocol, and my site should be able to speak it in the way I want, meaning that my presence on Mastodon is likely temporary, even if me communicating through ActivityPub isn’t.

31 Oct 02:09

Sticks and stones (and disinformation)

by Doug Belshaw
AI-generated image of sticks and stones

I guess like most people growing up in the 1980s and 1990s, the phrase “sticks and stones may break my bones, but words will never hurt me” was one I heard a lot. Parroted by parents and teachers alike, the sentiment may have been fairly unproblematic, but it’s a complete lie. In truth, whereas broken bones may heal relatively quickly, for some people it can take years of therapy to get over things that they experience during their formative years.

This post is about content moderation and is prompted by Elon Musk’s purchase of Twitter, which he’s promised to give a free speech makeover. As many people have pointed out, he probably doesn’t realise what he’s let himself in for. Or maybe he does, and it’s the apotheosis of authoritarian nationalism. Either way, let’s dig into some of the nuances here.

Here’s a viral video of King Charles III. It’s thirteen seconds long, and hilarious. One of the reasons it’s funny is that it pokes fun at monarchy, tradition, and an older, immensely privileged, white man. It’s obviously a parody and it would be extremely difficult to pass it off as anything else.

While I discovered this on Twitter, it also did the rounds on the Fediverse, and of course on chat apps such as WhatsApp, Signal, and Telegram. I shared it with others because it reflects my anti-monarchist views in a humorous way. It’s also a clever use of deepfake technology — although it’s not the most convincing example. I can imagine other people, including members of my family, not sharing this video partly because every other word is a profanity, but mainly because it undermines their belief in the seriousness and sanctity of monarchy.

In other words, and this is not exactly a deeply insightful point but one worth making nevertheless, the things we share with one another are social objects which are deeply contextual. (As a side note, this is why cross-posting between social networks seems so janky: each one has its own modes of discourse which only loosely translate elsewhere.)


A few months back I wrote a short report for the Bonfire team’s Zappa project. The focus was on disinformation, and I used First Draft’s 7 Types of Mis- and Disinformation spectrum as a frame.

First Draft - 7 Types of Mis- and Disinformation

As you can see, ‘Satire or Parody’ is way over on the left side of the spectrum. However, as we move to the right, it’s not necessarily the content that shifts but rather the context. That’s important in the next example I want to share.

Unlike the previous video, this one of Joe Biden is more convincing as a deepfake. Not only is it widescreen with a ‘news’ feel to it, the voice is synthesised to make it sound original, and the lip-syncing is excellent. Even the facial expression when moving to the ‘Mommy Shark…’ verse is convincing.

It is, however, still very much a parody as well as a tech demo. The video comes from the YouTube channel of Synthetic Voices, which is a “dumping ground for deepfakes videos, audio clones and machine learning memes”. The intentions here therefore may be mixed, with some videos created with an intent to mislead and deceive.


Other than the political implications of deepfakes, some of the more concerning examples are around deepfake porn. As the BBC has reported recently, while it’s “already an offence in Scotland to share images or videos that show another person in an intimate situation without their consent… in other parts of the UK, it’s only an offence if it can be proved that such actions were intended to cause the victim distress.” Trying to track down who created digital media can be extremely tricky at the best of times, and even if you do discover the culprit, they may be in a basement on the other side of the world.

So we’re getting to the stage where right now, with enough money / technological expertise, you can pretend anyone said or did anything you like. Soon, there’ll be an app for it. In fact, I’m pretty sure I saw on Hacker News that there’s already an app for creating deepfake porn. Of course there is. The genie is out of the bottle, so what are we going to do about it?


While I didn’t necessarily foresee deepfakes and weaponised memes, a decade ago in my doctoral thesis I did talk about the ‘Civic’ element as one of the Eight Essential Elements of Digital Literacies. And then in 2019, just before the pandemic, I travelled to New York to present on Truth, Lies, and Digital Fluency — taking aim at Facebook, who had a representative in the audience.

The trouble is that there isn’t a single way of preventing harms when it comes to the examples on the right-hand side of First Draft’s spectrum of mis- and disinformation. You can’t legislate it away or ban it in its entirety. It’s not just a supply-side problem. Nor can you deal with it on the consumption side through ‘digital literacy’ initiatives aiming to equip citizens with the mindsets and skillsets to be able to detect and deal with deepfakes and the like.

That’s why I think that the future of social interaction is federated. The aim of the Zappa project is to develop a multi-pronged approach which empowers communities. That is to say, instead of content moderation either being a platform’s job (as with Twitter or YouTube) or an individual’s job, it becomes the role of communities to deem what they consider problematic.

Many of those communities will be run by a handful of individuals who will share blocklists and tags with admins and moderators of other instances. Some might be run by states, news organisations, or other huge organisations and have dedicated teams of moderators. Still others might be run by individuals who decide to take all of that burden on themselves for whatever reason.

There are no easy answers. But conspiracy theories have been around since the dawn of time, mainly because there really are people in power doing terrible things. So yes, we need appropriate technological and sociological approaches to things which affect democracy, mental health, and dignity. But we also need to engineer a world where billionaires don’t exist, partly so that an individual can’t buy an (albeit privatised) digital town square for fun.

One thing’s for sure, if Musk gets his way, we’ll be able to test the phrase “sticks and stones may break my bones…” on a new whole generation. Perhaps show them the Fediverse instead?


Main image created using DALL-E 2 (it seemed appropriate!)

The post Sticks and stones (and disinformation) first appeared on Open Thinkering.
31 Oct 02:06

Recognize

by Eugene Wallingford

From Robin Sloan Sloan's newsletter:

There was a book I wanted very badly to write; a book I had been making notes toward for nearly ten years. (In my database, the earliest one is dated December 13, 2013.) I had not, however, set down a single word of prose. Of course I hadn't! Many of you will recognize this feeling: your "best" ideas are the ones you are most reluctant to realize, because the instant you begin, they will drop out of the smooth hyperspace of abstraction, apparate right into the asteroid field of real work.

I can't really say that there is a book I want very badly to write. In the early 2000s I worked with several colleagues on elementary patterns, and we brainstormed writing an intro CS textbook built atop a pattern language. Posts from the early days of this blog discuss some of this work from ChiliPLoP, I think. I'm not sure that such a textbook could ever have worked in practice, but I think writing it would have been a worthwhile experience anyway, for personal growth. But writing such a book takes a level of commitment that I wasn't able to make.

That experience is one of the reasons I have so much respect for people who do write books.

While I do not have a book for which I've been making notes in recent years, I do recognize the feeling Sloan describes. It applies to blog posts and other small-scale writing. It also applies to new courses one might create, or old courses one might reorganize and teach in a very different way.

I've been fortunate to be able to create and re-create many courses over my career. I also have some ideas that sit in the back of my mind because I'm a little concerned about the commitment they will require, the time and the energy, the political wrangling. I'm also aware that the minute I begin to work on them, they will no longer be perfect abstractions in my mind; they will collide with reality and require compromises and real work.

(TIL I learned the word "apparate". I'm not sure how I feel about it yet.)

31 Oct 02:05

I'm a very serious substack journalist who believes any news of Ukrainian victories is western copium propaganda but also that it's imperative the US immediately forces Kyiv into peace talks before the invincible Ukrainian juggernaut overruns Crimea so hard Putin nukes us all.

by Dmitry Grozoubinski (DmitryOpines)
mkalus shared this story from DmitryOpines on Twitter.

I'm a very serious substack journalist who believes any news of Ukrainian victories is western copium propaganda but also that it's imperative the US immediately forces Kyiv into peace talks before the invincible Ukrainian juggernaut overruns Crimea so hard Putin nukes us all.




307 likes, 39 retweets
31 Oct 02:05

Census data shows B.C. is the most secular province in Canada

mkalus shared this story .

Every 10 years, Statistics Canada asks Canadians whether they belong to a religious organization or group. And every 10 years, more and more people in British Columbia say no.

According to the 2021 population census, 34.6 per cent of people in Canada claimed no religious affiliation, while in B.C. that number jumped to 52.4 per cent — the highest it's ever been.

Ian Bushfield, executive director of the British Columbia Humanist Association, says his organization is "thrilled."

"It's monumental to see this threshold crossed of a majority non-religious in B.C.," Bushfield said in an interview.

"One of the things that's really fascinating is that we are seeing a new generation of people whose parents are non-religious and maybe even their grandparents are non-religious," he continued. "These kids ... they're just growing up secular."

Bushfield says B.C. has always been "a bit of a different place" where newcomers are often looking to start over, and in many cases leave things like religion behind.

He says people on the west coast also tend to be big believers in science, which he says was evidenced by the adherence to public health measures during the pandemic and high uptake of COVID-19 vaccines.

Bushfield says the province is also very diverse. While the number of people associating with Christian faiths continues to decline, there are a growing number of people affiliated with minority faiths such as Sikhism, Hinduism and Islam.

"And in that way, secularism is very important," he said.

"As it's a way to represent the neutrality where everyone can feel welcome and included."

Reverend Carmen Lansdowne, the moderator of the United Church of Canada, says B.C. has always been ahead of the curve when it comes to secularisation — across all religious traditions.

As the first Indigenous leader of a religious denomination in Canada, Lansdowne feels the shift away from organized religion can be explained at least in part by negative historical actions.

"We see that in Canada through the legacy of residential schools, and the ways that the state and Christianity paired together to perpetuate cultural genocide against Indigenous people," she said.

"I think people moving away from religious traditions has not so much to do with their spirituality or their faith, but has to do with the rejection of harms caused by religious tradition."

Father Douglas Fenton, executive archdeacon of the Anglican Diocese of New Westminster, has a different take.

He says when he asks people if they pray, have conversations with colleagues about faith or belief in god, many respond affirmatively.

"When we talk about who's religious and who's not, we are often measuring attendance at a place: a church or a mosque or a temple," he said. "And not talking about the relationship that faith plays in an individual's life."

Still, Fenton admits that Christian churches have been seeing a decline in membership in B.C. for years, and he says there are a number of theories from sociologists as to why — one being that church no longer plays the same social role it did in earlier times, and another pointing to the increased consumption of television and social connectivity through the internet and social media.

Beyond the lure of T.V. and computer screens, he says people in B.C. tend to be very active and might not have time for church services.

"In this part of the country, people's lives are lived outside," he said.

Fenton says faith communities in B.C. are still very engaged in important issues like housing, homelessness, reconciliation with Indigenous peoples and climate change, while offering important services such as shelters and food banks.

"The church's role here is no less diminished than it is anywhere else, and that's why I think those numbers sometimes play a different role than they should."

31 Oct 02:05

RT @EwanScottLufc: Give him all the treats.

by Ewan Scott (EwanScottLufc)
mkalus shared this story from dog_rates on Twitter.

Give him all the treats. twitter.com/dog_rates/stat…

This is Dingo. It's his first Halloween as a tripawd. Found the perfect costume. 14/10 #SeniorPupSaturday pic.twitter.com/Jbfg1pos9d





33600 likes, 1862 retweets

Retweeted by WeRateDogs® (dog_rates) on Saturday, October 29th, 2022 5:22pm


967 likes, 51 retweets
31 Oct 02:04

Saturday Morning Breakfast Cereal - Confession

by tech@thehiveworks.com
mkalus shared this story from Saturday Morning Breakfast Cereal.



Click here to go see the bonus panel!

Hovertext:
The trick with the nipple there makes this one an Eisner candidate.


Today's News:
31 Oct 01:59

Enter Sunak, the fifth Brexit Prime Minister

by noreply@blogger.com (Chris Grey)
mkalus shared this story from Brexit & Beyond.

So the brief interruption to his seemingly permanent holidays from the MP’s job he is paid for was all for nothing in the end, as Boris Johnson’s bid to return to the leadership failed. It was yet another testimony to his egotism and entitlement and even in making it added to the long list of damage he has done to the country, this time by making Britain’s political crisis an even greater source of international disrepute than it would otherwise have been. “A country in free fall” as an Austrian paper put it last Sunday.

Little will Johnson care about that, any more than do the media organizations that breathlessly hyped his every word and movement last weekend as if he were the Prince returning from over the water to free his people, rather than a disgraced grifter coming back from the seaside to stick his snout into the trough again. He may yet be back for another go, but his first complacent and then demeaning conduct this time may have made that less likely. If so, it is one blessing. Meanwhile, Liz Truss stomped off with a defiant final speech, suggesting she still doesn’t even begin to understand why it all went so wrong, so quickly, for her.

Had Johnson succeeded, the prospects of immediate political crisis and further economic damage would have been much greater than they are: tellingly, sterling rose and gilt yields (i.e. the cost of government borrowing) fell sharply on the news that Johnson had decided not to enter the contest. That continued as Rishi Sunak began to form his cabinet. He is also likely to enjoy at least as brief period of respite from internal attacks from his MPs, and perhaps a bounce in the opinion polls, although there is very little sign of that yet.

However, as the fifth Prime Minister since the Brexit referendum (and the third in the last seven weeks) takes office, continuing political crisis is assured for the reasons I discussed in last week’s post and several others over the summer. It may not quite be “inevitable that Sunak will be politically ripped apart by the same contradictions that plagued his predecessors”, as Nick Tyrone puts it in his latest Week in Brexitland newsletter, but it’s certainly highly likely, and what is inevitable is that Brexit will play a central role in his administration and its ultimate fate.

Sunak, Brexitism and Brexit

Sunak may well be more ‘realistic’ and more ‘competent’ than either Johnson or Truss, and, low as the bar is, he can hardly fail to be more ethical than the former or less maladroit than the latter. He may also, as Timothy Garton Ash and many others believe, be less prone to ‘Brexitism’ than either of them, with one index of that being his good relations with the civil service (£), in sharp contrast to his predecessors and most of the Brexit Ultras. Nor does he seem especially interested in fighting the Brexitist anti-woke, culture war, although some silly digs during his first PMQs about ‘North London’ and Labour’s supposed attempts to reverse the Brexit referendum suggested he’s not completely immune to it. He also seems fairly free of the vapid boosterism of the two previous incumbents and of their ‘magical thinking’ that true Brexit belief can trump reality. And he made an early, and apparently well-received, phone call to Ursula von der Leyen.

However, ultimately he won’t be exempt from the charge of Brexitism unless he is honest about the damage of Brexit itself, as suggested in a robust intervention this week from long-time Tory donor Guy Hands, and addresses how to reduce or even reverse it. As the leading businessman Juergen Maier also argued this week, that means seeking to rejoin the single market and a customs union. The economic logic is impeccable, especially for a country in desperate need of growth. The costs of being outside are high whilst the benefits are small, if not non-existent. On the customs union, in particular, trade expert Sam Lowe makes it clear that the UK’s ‘independent trade policy’ has faltered having hardly begun. And Maier’s proposal would also effectively solve the Northern Ireland Protocol issue.

The politics are an entirely different matter though. As Maier points out, his proposal involves a “brave shift” to face down the ERG in the way that no Tory leader since, to an extent, John Major has done. It’s true that if Sunak were going to do that then now is the time, since the Tories can hardly depose yet another leader, and he could threaten them with a General Election. But I suspect, and I expect Sunak does too, that there are sufficient ‘Spartans’ who are simply beyond caring about the consequences, and would prefer to crash the government and the Tory Party than accept a reversion to ‘soft Brexit’ (or even some milder easements of Brexit’s effects).

No doubt there will continue to be calls to do so, and Tory MP Tobias Ellwood has been making them for some time now, but it’s all but unthinkable that Sunak will heed them. Even so, in the past, unlike most Brexiters, Sunak has actually admitted to some of the damage to trade. And although in his first ‘address to the nation’ he briefly mentioned ‘embracing the opportunities of Brexit’ he said no more. Arguably, he could hardly have said less. Perhaps the very most that can be expected is that he might stop adding to the damage, for example through pointless and costly regulatory divergence.

The post-Brexit political constraints on Sunak

Of course if Sunak went even that far it would add to the roster of political opposition he faces within his own party. Even before his victory had been announced there were signs of it, with Christopher ‘upskirt’ Chope, conceivably the most odious MP not just of this Parliament but those of many decades, warning that he faced an “ungovernable party”. The reason, at least in the first instance, is that, like rainmakers forecasting the weather, MPs such as Chope will make it so. Indeed there is a sense that, quite apart from any disputes about personality, policy or ideology, there are some Tory MPs now addicted to the drama and chaos of rebellion, plots and coups. Within that, some, most obviously the ludicrous Mark Francois, appear to revel in the pompous self-importance that such drama allows, like a latter-day Captain Mainwaring but with less good scriptwriters.

However, the opposition Sunak will face goes much deeper than that, and the reasons all root back to Brexit. One is the fragile nature of the electoral coalition that delivered Johnson the 2019 ‘get Brexit done’ General Election majority which Sunak inherits, a fragility which feeds through into a highly factionalised body of Tory MPs. Now, those voters, and especially the fabled Red Wall voters, are leaching away from the Conservatives whilst the factions are more entrenched than ever. It is not the case that, just because Johnson assembled this coalition, he and only he could manage the factions it gave rise to. In fact, despite being, on paper, a comfortable majority, right from the outset of the 2019 parliament Johnson faced repeated actual or threatened rebellions, resulting in numerous policy U-turns. So Sunak will have a majority which is large, but is inherently unstable, with many factions able to mobilise the 40-odd votes needed to defeat any particular piece of legislation.

That instability will be all the greater for Sunak because the consequence of Truss’s disastrous mini-budget is to make significant public spending cuts his first priority, whereas part of Johnson’s 2019 pitch was to airily banish ‘austerity’ to the past. It remains to be seen whether the Red Wall MPs, especially, will condone its return. Equally, others will oppose any tax rises he may introduce. It’s even possible Sunak’s government may fall early on, if it cannot pass its finance measures, but that’s the one thing that may force rebel MPs to approve them: the potential rebels on fiscal policy, unlike ‘the Spartans’ on anything Brexit-related, are not immune to reason.

The other reason he will face opposition goes deeper still, and derives from the incoherent and now fissured support for Brexit itself. In particular, although Sunak was himself a Brexiter in 2016, albeit not a very high-profile one, for many of those who were high-profile he is the ‘wrong sort’ of Brexiter. Indeed that is the inevitable corollary of him being less ‘Brexitist’ than the last two Prime Ministers. Thus, already, his premiership, and the demise of Truss, are being represented by Nigel Farage and others on the populist right as being a victory for the ‘globalist Establishment’ and a ‘remainer coup’. Likewise, he is seen as having been too ‘conciliatory’ to the EU when he was Chancellor, especially as regards the Northern Ireland Protocol. Notably, his candidature was not endorsed by the ERG which, despite its pledge of loyalty to whoever became the leader, looks set to pounce on any deviation from what it takes to be Brexit orthodoxy. Yet at the same time as being denounced as an Establishment ‘globalist’, and despite being very much on the free market, deregulatory right, in the bizarre world of Brexiter politics Sunak is regarded as a ‘socialist’.

Everything about this is difficult to decode, since it comes from supporters of Johnson, who was neither a deeply committed Brexiter nor a small-stater, as well as from supporters of Truss and the Patrick Minford-IEA libertarians, from whom Sunak is not very ideological distant except to the extent that he didn’t endorse their ‘anti-Establishment’ idea that borrowing money to cut taxes would promote growth. Indeed he is likely to be closer to Truss’s version of Brexit with respect to being relaxed about immigration levels than to that of Suella Braverman, and this cuts directly across the Farage line that Truss et al were anti-Establishment insurgents and yet not genuine Brexiters on immigration in the way Braverman is. It’s yet another example of the total incoherence of the Brexit project.

Sunak and deregulation

That incoherence also wrongfoots some critics of Brexit, so that the fact that the Trussonomics libertarians despise Sunak and vice versa rather confounds those who, when he was Chancellor, insisted that he was in the vanguard of an extreme libertarian plan whereby Brexit would pave the way to the creation of ‘Charter Cities’ across the UK. Although that idea was always nonsense, it remains the case that Sunak is ideologically committed to deregulation, and that means that it would be wrong to assume that that part of Truss’s post-Brexit agenda has disappeared. In fact, she never even got round to unveiling the ‘supply-side reforms’ that were to be the counterpart of the tax cuts as part of the plan for growth. Sunak may very well do so, even though the tax-cutting part of the plan is dead, as is the idea of ripping up employment rights, which even Truss realised was too extreme (£).

However, as I’ve written about in detail before, those deregulatory reforms are also likely to encounter significant opposition from some groups of Tory MPs, especially as regards planning laws, whilst the ‘bonfire of EU regulations’ to be created by the EU Retained Law Bill will run into major practical problems and has already encountered opposition from business and other lobby groups. This legislation was initially sponsored by Jacob Rees-Mogg until his resignation – which itself provided another instance of his trademark pretentiousness, dated as it was ‘St Crispin’s Day’. It was a suitable end to a Ministerial career which he would never have had but for Brexit, and should never have had – not because of his Brexit views but because his Pooterish didacticism marked him out as the worst kind of middle-management drone, more concerned with exerting petty authority than providing effective leadership.

The Bill continued its passage this week, with Rees-Mogg now on the backbenches spitefully denouncing as anti-Brexit those Tories raising concerns about it. Yet already it is reported that Sunak is considering slowing or even abandoning this legislation, and also that it runs counter to what he promised the ERG. So this a very possible flashpoint for a Brexit-related rebellion.

Another Brexit fissure was re-opened by Sunak’s controversial re-appointment of the politically and morally grotesque Suella Braverman to the Home Office, itself apparently the price of getting her endorsement, as a high-profile ERG Brexiter, of his candidature rather than Johnson’s. This appointment can be seen as his ‘first mistake’ but is really just the first consequence of the necessity for Tory leaders to try to placate the unplacatable ERG. In turn, it will have the consequence either that relaxation of immigration controls to promote growth is off the agenda, or that there’s going to be a reprise of the almighty Truss-Braverman row about it (£) and a wider row with other anti-immigration Brexiters. Another possible flashpoint.

It’s not even clear whether the Sunak government will be able to afford the tax breaks (£) to make meaningful the plans for Investment Zones, assuming he continues with that proposal from the Truss-Kwarteng period. What is clear, from an answer he gave Green MP Caroline Lucas at PMQs on Wednesday, is that he will not continue Truss’s attempt to revive fracking, which had already prompted bitter division amongst Tory MPs.

At all events, despite being elected unopposed by a party under ‘existential threat’ if its dysfunctionality continues, Sunak’s political position is not strong. Indeed, amongst party members, who rejected him as leader during the summer leadership contest, and would prefer to still be led by Boris Johnson, it is decidedly weak. So too is it weak in the country generally, presented with yet another mid-term change of Prime Minister without a general election, raising questions about the legitimacy of his mandate. There may be little they can do, at least directly, but the various factions amongst the MPs certainly can, and there must be every chance that a vengeful Johnson will take every chance to stir the pot. So whether on spending cuts, deregulatory reforms, EU retained law or immigration he may well face significant opposition.

Northern Ireland Protocol: the first crisis for Sunak?

However, it could be the Northern Ireland Protocol (NIP) which creates the first real crisis for his premiership. The dynamics of the NIP situation have actually changed remarkably little since I wrote about them in detail in July, when Johnson was still Prime Minister and the NIP Bill was starting its passage through parliament, which is continuing now. If things are different to how they were then, one reason is just because the passage of time has brought the non-functioning of the Northern Ireland power-sharing institutions to a point of urgency, with fresh Assembly elections now in prospect as of today.

The situation has also changed as regards negotiations with the EU because Truss proved to take a relatively conciliatory approach, and seemed to have managed to get the two ERG hardliners she appointed as NI Secretary and Minister – Chris Heaton-Harris and Steve Baker – on board with that approach. We will never know how that would have developed had she continued in office, and it remains to be seen what happens under Sunak. It is certainly important that he has kept Heaton-Harris and Baker in their posts, but what that importance is remains unclear, as it did under Truss. Does it betoken a refusal to make any compromises with the EU, as their hardliner credentials might imply? Or is it that those credentials are to be used to ‘sell’ a compromise deal to the Brexiters including, conceivably, the DUP?

For the fundamental question for Sunak, as it was for Johnson and Truss, persists: if he does any deal that the EU is remotely likely to accept, will the Brexiters also accept it? Despite Baker’s surprising and potentially game-changing recent apology over how the Brexit process as regards Ireland and Northern Ireland had been handled, last weekend he issued an uncompromising warning to Sunak that the ERG would not accept any role for EU law in Northern Ireland and would collapse the government rather than do so. Yet it seems inconceivable that the EU would, or even could, agree to such an arrangement.

So either there will be no deal, the NIP Bill will pass and be used, causing a crisis in relations with the EU, and with serious implications for relations with the US; or a deal will be done with the EU, the NIP Bill abandoned or its powers not used, and there will be a political crisis within the Tory Party. Moreover, both have economic consequences. A crisis with the EU could ultimately lead to trade sanctions or even a trade war. A fresh political crisis will indicate further instability which impacts on the price at which markets are willing to fund government debt. Plainly either will be damaging to Sunak’s core focus of restoring international credibility and financial stability.

The unfolding legacy of Brexit lies

The NIP situation is the most high-profile reminder that, along with any other problems the government and the country face, those of Brexit persist. Some of these are the now entrenched ones, like the higher costs of trade and disruption to holidays in the EU. Others, like the NIP, are issues still unresolved from the exit process, and reflect both the lies told during the referendum campaign and the dishonesty and incompetence of the agreement made by Boris Johnson and David Frost.

There are numerous examples of the latter sort. One, which has received remarkably little attention, can be seen to symbolise all of them: the UK’s continuing failure to impose post-Brexit import controls. I’ve written in detail before about why this matters, especially as regards animal and public health, primarily because the UK no longer has full access to all the relevant EU databases, but also due to lack of staff with the necessary skills, as highlighted by a recent report from the Public Accounts Committee. The consequences of that were revealed this week when, within a 24 hour period, 21 out of 22 lorries inspected coming in to Dover from the EU were found to be carrying illegal raw meat products.

The reason this example is symbolic is because, like the NIP, it shows the ongoing consequences of the lies and incompetence of the Brexiters since 2016. Repeatedly they denied that (hard) Brexit entailed borders. Repeatedly they declared versions of ‘if the EU want to erect borders, that’s up to them’, demonstrating a total failure to understand the consequences of what they were advocating, not just for Northern Ireland but for all borders with the EU. That in turn meant that preparations were not begun until far too late, and the chance to extend the Transition Period to give more time to prepare was rejected as ‘backsliding’ on Brexit. So here we are now, in 2022, with a whole swathe of persistent, unresolved, ongoing problems, ranging from fishing quotas, to agricultural subsidies, to participation in Horizon, to the introduction or otherwise of the UKCA mark, to, indeed, the introduction of full import controls.

It is important to emphasise this because, as time goes by, it becomes easy to treat Brexit as if it were a past event, at most something with consequences we must now live with. Or to see the NIP issue as the last hanging thread of the Brexit process. But that is not the situation at all. Rather, in all sorts of ways, we are still in the process of ‘doing’ Brexit even though, apart from, sometimes, Northern Ireland, that is no longer headline news. And, in that process, we are still uncovering the criminal irresponsibility of the ways the Brexiters lied.

It will be especially easy to forget this given that the immediate political focus of the Sunak government will be the economic crisis, with the full fiscal statement now scheduled for 17 November. That would be wrong because all these ongoing Brexit problems are also important. But it would be doubly wrong since Brexit is embedded at the centre of the economic crisis itself. Inflation is higher, the trade deficit is larger, the labour shortage is greater and growth is lower than they would have been but for Brexit. To the outside world it is so obvious. As leading French journalist Sylvie Kauffman, writing in the Financial Times (£), puts it “for many Europeans, the only surprise of the British political and economic mayhem of the last few weeks is the lack of debate about its real cause: no one involved seems to blame Brexit”.

TL;DR

For all that Sunak may be hailed as a ‘serious’ and ‘realistic’ Prime Minister, the fact that he cannot admit these obvious facts about Brexit without being destroyed by his own party means that he cannot seriously or realistically address the economic crisis. As I argued at length in last week’s post, the same goes for Starmer unless he does so. And for all that, as also discussed in that post, the ignominious collapse of Truss’s government may mark a turning point in the entire Brexit saga, the corner has not been turned by the arrival of Sunak. Nor will it be until the poison of Brexit lies has been drained from the body politic.