Shared posts

21 Jan 04:54

TheirCharts

by Doc Searls

If you’re getting health care in the U.S., chances are your providers are now trying to give you a better patient experience through a website called MyChart.

This is supposed to be yours, as the first person singular pronoun My implies. Problem is, it’s TheirChart. And there are a lot of them. I have four (correction: five*) MyChart accounts with as many health care providers, so far: one in New York, two in Santa Barbara, one in Mountain View, and one in Los Angeles. I may soon have another in Bloomington, Indiana. None are mine. All are theirs, and they seem not to get along. Especially with me. (Some later correction on this below, and from readers who have weighed in. See the comments.)

Not surprisingly, all of them come from a single source: Epic Systems, the primary provider of back-end information tech to the country’s health care providers, including most of the big ones: Harvard, Yale, Mayo, UCLA, UChicago, Duke, Johns Hopkins, multiple Mount Sinais, and others like them. But, even though all these MyChart portals are provided by one company, and (I suppose) live in one cloud, there appears to be no way for you, the patient, to make those things work together inside an allied system that is truly yours (like your PC or your car is yours), or for you to provide them with data you already have from other sources. Which you could presumably do if My meant what it says.

The way they work can get perverse. For example, a couple days ago, one of my doctors’ offices called to tell me we would need to have a remote consult before she changed one of my prescriptions. This, I was told, could not be done over the phone. It would need to be done over video inside MyChart. So now we have an appointment for that meeting on Monday afternoon, using MyChart.

I decided to get ahead of that by finding my way into the right MyChart and leaving a session open in a browser tab. Then I made the mistake of starting to type “MyChart” into my browser’s location bar, and then not noticing that the top result was one of the countless other MyCharts maintained by countless other health care providers. But this other one looked so much like one of mine that I wasted an hour or more, failing to log in and then failing to recover my login credentials. It wasn’t until I called the customer service number thankfully listed on the website that I found I was trying to use the MyChart of some provider I’d never heard of—and which had never heard of me.

Now I’m looking at one of my two MyCharts for Santa Barbara, where it shows no upcoming visits. I can’t log into the other one to see if the Monday appointment is noted there, because that MyChart doesn’t know who I am. So I’m hoping to unfuck that one on Monday before the call on whichever MyChart I’ll need to use. Worst case, I’ll just tell the doctor’s office that we’ll have to make do with a phone call. If they answer the phone, that is.

The real problem here is that there seem to be hundreds or thousands of different health care providers, all using one company’s back end to provide personal health care information to millions of patients through hundreds or thousands of different portals, all called the same thing (or something close), while providing no obvious way for patients to gather their own data from multiple sources to use for their own independent purposes, both in and out of that system. Or any system.

To call this fubar understates the problem.

Here’s what matters: Epic can’t solve this. Nor can any or all of these separate health care systems. Because none of them are you.

You’re where the solution needs to happen. You need a simple and standardized way to collect and manage your own health-related information and engagements with multiple health care providers. One that’s yours.

This doesn’t mean you need to be alone in the wilderness. You do need expert help. In the old days, you used to get that through your primary care physician. But large health care operations have been hoovering up private practices for years, and one of the big reasons for that has been to make the data management side of medicine easier for physicians and their many associated providers. Not to make it easier for you. After all, you’re not their customer. Insurance companies are their customers.

In the midst of this is a market hole where your representation in the health care marketplace needs to sit. I know just one example of how that might work: the HIE of One. (HIE is Health Information Exchange.) For all our sakes, somebody please fund that work.

Far too much time, sweat, money, and blood is being spilled trying to solve this problem from the center outward. (For a few details on how awful that is, start reading here.)

While we’re probably never going to make health care in the U.S. something other than the B2B insurance business it has become, we can at least start working on a Me2B solution in the place it most needs to work: with patients. Because we’re the ones who need to be in full command of our relationships with our providers as well as with ourselves.

Health care, by the way, is just one category that cries out for solutions that can only come from the customers’ side. Customer Commons has a list of fourteen, including this one.

The first of these is identity. The self-sovereign approach to that would start with a wallet that is truly mine, and includes all these MyCharts. Hell, Epic could do one. Hint hint.


*Okay, now it’s Monday, and I’m a half-hour away from my consult with my doctor, via Zoom, inside MyChart. Turns out I was not yet registered with this MyChart, but at least there was a phone number I could call, and on the call (which my phone says took 14 minutes) we got my ass registered. He also pointed me to where, waaay down a very long menu, there is a “Link my accounts” choice, which brings up this:

Credit where due:

It was very easy to link my four known accounts, plus another (the one in Mountain View) that I had forgotten but somehow the MyChart master brain remembered. I suspect, given all the medical institutions I have encountered in my long life, that there are many more. Because in fact I had been to the Mountain View hospital only once, and I don’t even remember why, though I suppose I could check.

So that’s the good news. The bad news remains the same. None of these charts are mine. They are just views into many systems that are conditionally open to me. That they are now federated (that’s what this kind of linking-up is called) on Epic’s back end does not make it mine. It just makes it a many-theirs.

So the system still needs to be fixed. From our end.

 

 

 

 

 

21 Jan 04:02

Poly Voyager 4320 :: Die bessere Alternative

by Volker Weber

Ich habe ein Headset gefunden, das ich als gleichwertig zu meiner Empfehlung Jabra Evolve2 65 ansehe. Poly hat unterhalb des Voyager Focus 2 noch ein einfacheres Modell positioniert, das mir ausgesprochen gefällt.

Der Voyager 4320 hat drei Vorteile gegenüber dem Focus 2: Einen kleineren Preis, USB C statt MicroUSB sowie einen längeren Mikrofonarm. Die Abstriche sind gering. Wechselt man das Mikrofon von rechts nach links, geht das Stereobild nicht mit. Aus links wird rechts und umgekehrt. Mute durch Hochklappen des Mikrofonarms entfällt. Weil der Kopfbügel einfacher konstruiert ist, legt sich das Polster nicht ganz so geschmeidig an. Ich finde ihn dennoch bequem. Vor allem aber quietscht der 4320 beim Gehen nicht.

Poly Voyager 4320 (USB-C ), BT700 (USB-A) nur zum Vergleich. Bring your own LEGO.

Ein Feature hat der Focus 2 dem 4320 voraus, genau wie der Jabra Evolve2 75 gegenüber dem Evolve2 65: ANC, aktive Geräuschunterdrückung für die eigenen Ohren. Das ist ein Feature, das mir nur wenig bringt, weil die passive Unterdrückung der weichen Kissen schon prima ist und man während einer Konferenz ohnehin Geräusche über das aktive Mikrofon zugespielt bekommt.

Poly Voyager Focus 2 und Poly Voyager 4320
Jabra Evolve2 65 und Poly Voyager 4320

Wichtig ist bei diesen Headsets vor allem, wie gut die eigene Stimme aufgenommen wird und wie sehr externe Geräusche stören. Ich habe dazu den Dyson-Staubsauger zu Hilfe genommen, der mich unglaublich nervt, und der wirklich alles andere so zudeckt, dass man sein eigenes Wort nicht mehr versteht. Das Ergebnis ist überzeugend, mit leichtem Vorteil für den Focus 2.

Stimmaufnahme mit dem Poly Voyager 4320
Stimmaufnahme mit dem Poly Voyager Focus 2

Die beiden Poly-Headsets musste ich natürlich mit dem Evolve2 65 vergleichen, der 2021 mein meistgetragenes Konferenz-Headset war. In der Sprachaufnahme nehmen sie sich nicht viel. Bis der Dyson kommt. Hört selbst:

Stimmaufnahme mit dem Jabra Evolve2 65

Fazit: Test bestanden. Ich mag den kleinen Voyager 4320 sehr. Am Ende gewinnt er allein schon durch den USB-C Port. Mir ist unbegreiflich, wie Poly 2021 noch mal MicroUSB beim Focus 2 bringen konnte.

More >

21 Jan 04:00

Tracking software evolution via its Changelog

by Derek Jones

Software that is used evolves. How fast does software evolve, e.g., much new functionality is added and how much existing functionality is updated?

A new software release is often accompanied by a changelog which lists new, changed and deleted functionality. When software is developed using a continuous release process, the changelog can be very fine-grained.

The changelog for the Beeminder app contains 3,829 entries, almost one per day since February 2011 (around 180 entries are not present in the log I downloaded, whose last entry is numbered 4012).

Is it possible to use the information contained in the Beeminder changelog to estimate the rate of growth of functionality of Beeminder over time?

My thinking is driven by patterns in a plot of the Renzo Pomodoro dataset. Renzo assigned a tag-name (sometimes two) to each task, which classified the work involved, e.g., @planning. The following plot shows the date of use of each tag-name, over time (ordered vertically by first use). The first and third black lines are fitted regression models of the form 1-e^{-K*days}, where: K is a constant and days is the number of days since the start of the interval fitted; the second (middle) black line is a fitted straight line.

at-words usage, by date.

How might a changelog line describing a day’s change be distilled to a much shorter description (effectively a tag-name), with very similar changes mapping to the same description?

Named-entity recognition seemed like a good place to start my search, and my natural language text processing tool of choice is still spaCy (which continues to get better and better).

spaCy is Python based and the processing pipeline could have all been written in Python. However, I’m much more fluent in awk for data processing, and R for plotting, so Python was just used for the language processing.

The following shows some Beeminder changelog lines after stripping out urls and formatting characters:

Cheapo bug fix for erroneous quoting of number of safety buffer days for weight loss graphs.
Bugfix: Response emails were accidentally off the past couple days; fixed now. Thanks to user bmndr.com/laur  for alerting us!  
More useful subject lines in the response emails, like "wrong lane!" or whatnot.
Clearer/conciser stats at bottom of graph pages. (Will take effect when you enter your next datapoint.) Progress, rate, lane, delta.  
Better handling of significant digits when displaying numbers. Cf stackoverflow.com/q/5208663

The code to extract and print the named-entities in each changelog line could not be simpler.

import spacy
import sys

nlp = spacy.load("en_core_web_sm") # load trained English pipelines

count=0 
        
for line in sys.stdin:
   count += 1 
   print(f'> {count}: {line}')
#
   doc=nlp(line) # do the heavy lifting
#          
   for ent in doc.ents:  # iterate over detected named-entities
      print(ent.lemma_, ent.label_)

To maximize the similarity between named-entities appearing on different lines the lemmas are printed, rather than original text (i.e., words appear in their base form).

The label_ specifies the kind of named-entity, e.g., person, organization, location, etc.

This code produced 2,225 unique named-entities (5,302 in total) from the Beeminder changelog (around 0.6 per day), and failed to return a named-entity for 33% of lines. I was somewhat optimistically hoping for a few hundred unique named-entities.

There are several problems with this simple implementation:

  • each line is considered in isolation,
  • the change log sometimes contains different names for the same entity, e.g., a person’s full name, Christian name, or twitter name,
  • what appear to be uninteresting named-entities, e.g., numbers and dates,
  • the language does not know much about software, having been training on a corpus of general English.

Handling multiple names for the same entity would a lot of work (i.e., I did nothing), ‘uninteresting’ named-entities can be handled by post-processing the output.

A language processing pipeline that is not software-concept aware is of limited value. spaCy supports adding new training models, all I need is a named-entity model trained on manually annotated software engineering text.

The only decent NER training data I could find (trained on StackOverflow) was for BERT (another language processing tool), and the data format is very different. Existing add-on spaCy models included fashion, food and drugs, but no software engineering.

Time to roll up my sleeves and create a software engineering model. Luckily, I found a webpage that provided a good user interface to tagging sentences and generated the json file used for training. I was patient enough to tag 200 lines with what I considered to be software specific named-entities. … and now I have broken the NER model I built…

The following plot shows the growth in the total number of named-entities appearing in the changelog, and the number of unique named-entities (with the 1,996 numbers and dates removed; code+data);

Growth of total and unique named-entities in the Beeminder changelog.

The regression fits (red lines) are quadratics, slightly curving up (total) and down (unique); the linear growth components are: 0.6 per release for total, and 0.46 for unique.

Including software named-entities is likely to increase the total by at least 15%, but would have little impact on the number of unique entries.

This extraction pipeline processes one release line at a time. Building a set of Beeminder tag-names requires analysing the changelog as a whole, which would take a lot longer than the day spent on this analysis.

The Beeminder developers have consistently added new named-entities to the changelog over more than eleven years, but does this mean that more features have been consistently added to the software (or are they just inventing different names for similar functionality)?

It is not possible to answer this question without access to the code, or experience of using the product over these eleven years.

However, staying in business for eleven years is a good indicator that the developers are doing something right.

21 Jan 03:59

JavaScript date objects

by Simon Willison

A few notes on JavaScript Date object, based on trying to do some basic things with them in Observable notebooks.

Parsing ISO format strings into a Date object

I had date times that looked like this:

2022-03-05 14:35

Passing this string to the Date() constructor breaks in interesting ways: it assumes they are in the browser's current timezone, and it breaks in Safari producing an Invalid Date error.

This worked instead:

new Date(o.datetime.replace(" ", "T") + ":00Z"))

Safari requires dates to look like this - without the T you get Invalid Date:

2022-03-05T14:35:00Z

Adding the trailing Z causes the date to be treated as if it was UTC. This can be helpful if you plan to work with them in a mostly timezone-unaware fashion, though see the note about using {timeZone: "UTC"} with the formatting methods later in this document.

Timezones

JavaScript date objects REALLY want to be helpful with timezones. Consider the following examples, here using .toString():

(new Date("2021-01-15T14:31:00")).toString()
"Fri Jan 15 2021 14:31:00 GMT-0800 (Pacific Standard Time)"

(new Date("2021-01-15T14:31:00Z")).toString()
"Fri Jan 15 2021 06:31:00 GMT-0800 (Pacific Standard Time)"

In both cases the .toString() method converts to my current timezone, Pacific Standard Time. Note how the one with the Z gets displayed as 06:31:00 while the one without the Z is shown as 14:31:00.

Differences between dates

I wanted to calculate the number of minutes difference between a start date and an end date. Subtracting the two gives you a difference between them as in integer number of milliseconds! So this gives you minutes:

let diff = end.getTime() - start.getTime();
let minutes = Math.round(diff / 60 * 1000);

Displaying dates

The closest JavaScript gets to Python's handy strftime() method is the much more unwieldly toLocaleDateString() method. Some examples:

(new Date).toLocaleDateString("en-US", {
  weekday: "long",
  year: "numeric",
  month: "long",
  day: "numeric",
})
"Sunday, January 16, 2022"
(new Date).toLocaleTimeString("en-US")
"12:12:29 PM"

These are also timezone aware. Passing timeZone: "UTC" to them can be useful, for example:

// This outputs in my timezone, PST:
(new Date("2021-01-22T15:03:00Z")).toLocaleTimeString("en-US")
"7:03:00 AM"
// This keeps the output in UTC:
(new Date("2021-01-22T15:03:00Z")).toLocaleTimeString(
    "en-US", {timeZone: "UTC"}
)
"3:03:00 PM"

MDN documentation:

Discussion

Lots of useful comments on this in replies on Twitter, including recommendations for these libraries:

21 Jan 03:59

A Cacaphony of Explanations

I’m programming for a living for the first time in ten years. I’m enjoying it, but I’m finding some parts of the job more frustrating than I remember, and I think I’ve figured out why.

Mike Caulfield invented the term “a chorus of explanations” several years ago to explain why sites like Stack Overflow are useful. Where a lesson typically explains something once, SO and similar sites present several explanations with different levels of detail, different assumptions about the reader’s background, and quite possibly different solutions to the original problem. Most readers may be satisfied by the top answer, but others can scroll down to find one that’s a better fit for who they are, what they are ready to understand, and what they’re trying to do.

That’s great, but only as long as the underlying problem stands still: if your question concerns something that is evolving over time, many of the “solutions” you find are out of date. It takes some time to figure that out; I’ve only kept sporadic notes, but I’ll bet that the first few answers I do more than skim over are no longer relevant at least half the time.

This is a time-wasting annoyance for me, but a source of real friction for my junior colleagues. What is merely an out-of-tune chorus for me is a cacaphony for them; I’d be curious to know how often those sites send them down a no-longer-productive path.

21 Jan 03:59

Case Study: How FeverBee Tripled A Community’s Retention Rates (scripts, templates, and examples)

by Richard Millington

Here are two statements that seem oxymoronic but actually complement each other:

1) No matter what you do, the majority of your members won’t become more engaged than they are today.

2) It’s possible to double (even triple) the retention rates of your community members.

These are both true because of the huge gap between ‘a majority’ (51%+) and the retention rates most people see in their communities are getting today (5% to 20%).

Last week, I hosted a webinar where we shared the step-by-step process we used to triple a client’s retention rates.

You can find the video here:

 

What We Learned From Our Research

The client sold a fairly popular technology product (but wasn’t a SaaS vendor). The company operated in the $750m to $850m revenue per year range and had a community that had been around for a couple of years before we were invited to help.

We spent 5 weeks evaluating the current community and interviewed 26 members of the community, 17 members of staff, and collected 279 survey responses.

This revealed:

  • The company had no capacity for major technical changes.
  • Members only visited when they had a problem.
  • Newcomers didn’t find “any reason” to keep coming back.
  • Newcomers weren’t aware of many of the benefits the community offered.
  • Superusers felt increasingly ignored.
  • Members disliked receiving countless notifications.

As you can see below, member retention rates were poor and had been relatively static for months.

Step One – Reducing The Noise

We began with small optimisations. We know members hated receiving countless automated messages (especially those from the gamification system), so we stopped almost all of them.

Removing automation rules didn’t significantly increase or decrease participation.

Lesson: Automation rules don’t seem to increase participation much at all (probably because most people ignore them)

 

Step Two – Improving the First Impression

Next we changed the default setting to show the ‘latest posts’ rather than ‘top posts’.

i) Changed default settings to show latest posts
I’ve consistently found when members make a post, they want to see it appear at the top of the page (i.e. not be crowded out by popular posts). We also found in our research most members had already seen the top posts in the community. They wanted fresh questions to answer.

ii) Remove survey pop-up
We removed an irritating survey pop-up asking members to share what they think of the community. Newcomers were being hit with three pop-ups upon visiting, so removing one helped.

Aside, if you want a good non-intrusive example of a pop-up, the UiPath community (a client) is a great example below:

iii) Created a list of suggested questions

Because many newcomers reported not knowing what questions to ask, we created a list of suggested questions, shared examples of good questions, and helped them become as familiar as possible with what a good question looks like.

iv) Send direct messages from the community manager’s name

We replaced the generic messages from community@companyname.com (which were often ignored or found their way into spam filters) with emails from the community manager’s name.

We wanted members to know the community managers’ name and begin a direct discussion with them. A few months ago, we worked with Shuning at Veracode on this message which is both personal and shares the benefits of community.

v) Repositioned the community (and changed its messaging)

Much of the previous messaging focused on people joining a group of peers like themselves.

Our research showed members wanted quick responses to long-tail questions first (but might join peer groups later).

We changed the messaging from getting personal questions to getting personalised responses to difficult/niche questions. This was reflected in the banner, CTA, etc…

At this point we began to see some noticeable improvement. It’s hard to say which changes had the biggest impact, but the metrics were definitely heading in the right direction.

Step Three: Personalising The Community Experience

i) Created a ‘members to follow’ list

A frequent problem on the Salesforce platform is people were encountering blank feeds as they hadn’t followed any members or topics.

We tackled this in two stages. First, we created a list of members to follow. These were verified experts endorsed by us. The second step was to create a more custom onboarding journey.

You can see an example using the 7Summits onboarding tool in the image shown below.

ii) Created Personalised Responses To Every Poster

Alongside the onboarding tool, we built out a system to get personalised responses to everyone that contributed a post in the community.

This required the use of a Zapier integration to Slack identifying superusers, moderators, and the community team to members who had made a post more than 30 days ago and not participated since.

We created the standardised framework below to ensure each of them received a response to their discussion.

iii) Newcomer meetings and newcomer groups

We knew newcomers wanted to engage with product managers as they were getting started. So we tried to do this in the community.

This turned out to be too much work for too little reward. So we replicated this with a newcomer group supported by superusers who could answer most of the common questions in the community.

 

iv) Used Asset-Based Community Development Approach

We tried to find everyone a unique role in the community. We know when members feel they can make unique, useful, contributions to the community, they tend to stick around and participate.

This involved a lot of training and we created a few standardised messages to help as you can see below.

Rapid Improvement!

This is the point where we began to see huge impact from our work.

We saw major increases in each of the metrics we were tracking.

This wasn’t a spike either, it was a sustained increase.

Step Four: Support Superusers

i) Created Standard Templates

We began working with superusers in this phase to get them engaged in creating standard templates and responses for responding to most members’ queries.

We used a similar flow-chart to the one above to give every superuser an easy process they can follow to respond to almost any post.

This involved sharing a lot of examples of good and bad. The more examples you can share (and highlight what’s good or bad about them), the better the outcome will be.

 

ii) Curated the best resources

A common problem facing newcomers was quickly getting up to speed so they don’t have to ask the same repetitive questions over and over again.

If you’ve been in the community a while, you’ve already seen the best resources and participated in the best discussions. But newcomers didn’t have that.

So we created a list of curated resources ‘which every newcomer should read’.

Aside, the Digital Ocean community does this extremely well.

 

Step Five: Banner Relaunch and Follow-up Messages

i) Redesigned the banner

The previous community banner lacked a clear call to action and didn’t explain what made the community unique. We revamped this to focus on three actions visitors could take right now within links.

This focused specifically on ‘solve problems’, ‘top tips’, and ‘find a group’.

One of my favourite examples of banners was the former CodeAcademy community banner below:

ii) Follow-ups to check progress

Using a Zapier/Slack integration to top members again, we created a list of members for superusers to reach out to after they had been members for 3 months.

Around 65% (it wavered a lot) of FTPs (first-time posters) received a follow-up message after 3 months. If they were still highly engaged, they were invited to join a group of veterans.

 

iii) Automatically assigned members to roles

Finally, we tested something new (similar to the ABCD approach).

We sent emails to members assigning them to a role within the community (usually something like ‘topic reporter’ or ‘topic facilitator’) based upon their past contributions.

They had a choice about whether or not to accept the role. Acceptance rates varied from 10% to 20% (which is high when emails had an open rate of 20% to 30%.

 

What Worked And What Didn’t?

In an ideal world, we would make one single intervention at a time and measure the impact of each.

In the consultancy world, we don’t have the time for that. Instead we make a number of changes at once and assess which worked.

However, as you can see below, you can draw your own conclusions about what had the biggest impact.

I suspect the biggest wins were:

  • Improving the banner design.
  • Sending personalised messages.
  • Using the ABCD approach to newcomers can make a unique impact.
  • Suggested questions

 

Improving Retention Rates Isn’t Easy

The best thing you can do is deep research of your target audience (like, really go through the community site with them), embrace best practices in the community design, identify and prioritise the highest impact activities and build from there.

 

Resources

These resources might help:

If you want more help increasing retention, I strongly recommend my book, Build Your Community which has lots of advice and examples.

You can also reach out to FeverBee about consultancy support.

The post Case Study: How FeverBee Tripled A Community’s Retention Rates (scripts, templates, and examples) first appeared on FeverBee.

21 Jan 03:59

Morning Light Kept Ruining My Sleep. Then I Discovered This Mask.

by Anna Perling
An eye mask with an illustrated border around it.

I have always been a night owl. When others are dreaming away, deep in a rich REM cycle, I am printing photos on my Canon Selphy in a onesie, munching on my third pickle of the night. As the early birds toss on their side, drool delicately dancing across their cheek like a raindrop on a car window, I am Zillowing how much my crush’s parents’ house is worth. Yes, some people go to bed too late sometimes. But I was born in the dark.

That means I (a sleep editor, ironically) need a sleep mask to help me block out any rude morning rays that might disrupt my sleep. I have tried several masks over the years, but none have stayed in place as snugly or felt as comfortable as the Nidra Deep Rest Eye Mask, a pick in our guide to the best sleep masks.

If you are like me and are constantly at war with your routine, you’re a shift worker who needs to block out daytime light from your sleep environment, or you just need a little something to help trigger your mind’s “sleep now” response, the Nidra sleep mask might be for you, too.

21 Jan 03:59

Gemini

by Rui Carmo

I stumbled upon the gemini:// protocol the other day, and went down that particular rabbit hole over the weekend so you wouldn’t have to (although I might actually recommend it).

If you’ve never heard of it, it’s meant to be a modern middle-ground between gopher and HTTP, and uses a space-centric, whimsical terminology: sites are “capsules”, there’s a nice aggregator called Antenna, and many related tools, software packages and the like borrow from familiar space exploration terms.

The Good Bits

  • It uses an extremely simple TLS-wrapped protocol on (unprivileged) port 1965 (which is when the first Gemini mission went to space) that essentially only supports fetching a piece of content at a time.
  • It relies on a very simplified Markdown-esque text format instead of HTML.
  • There is no Javascript. No CSS, nothing beyond the raw markup. No cookies, either.
  • The experience is really good in polished clients like Lagrange, and there are plenty of terminal-based clients (which are a natural fit).

Overall, I like the experience of reading unfettered markup that is not part of the noisy, ad-ridden, mainstream Internet, and I’ve found a few aggregators, search engines and reverse proxies that make it easy to find interesting content even if a lot of it has an idealistic “undernet” feel to it.

For someone like me who mostly consumes news via RSS feeds and uses Reader Mode to declutter news sites whenever possible, it is quite pleasant to wander through Gemini sites.

As usual, there are lists of all kinds of resources. But Lagrange, in particular, makes it very pleasant to read Gemini sites on my iPad mini, and is a fully cross-platform app for handling gemini:// URLs that I would recommend as a starting point.

From a server perspective, you can serve Gemini in around 170 lines of Go, which is quite remarkable and makes me want to take a stab at writing a server myself (although I don’t relish the notion of having to deal with TLS, and you can forget about CDNs and DDoS protection).

The Annoying Bits

  • Sessions and authentication are largely MIA (you can use cllient certificates, but that isn’t all that flexible), with some clever hacks in some servers and clients.
  • text/gemini markup is very limited from an authorship perspective. It does not support inline links or any text emphasis/formatting whatsoever (up to and including tables), which I don’t think is ideal for either long form or documentation. Nor is there any provision for frontmatter, everyone seems to be serving raw static files without much in the way of organization.
  • There are no inline images or any sort of rich media besides links. Some browsers do render media inline (upon clicking), so you can sort of work around it, but in the end it feels just… Too cut down.
  • There is essentially zero page content metadata (no Last-Modified, nothing you can use for caching, even), which feels like a lost opportunity to make some things (like blogs) a lot easier.
  • The protocol does not have the concept of byte ranges or pipelining (i.e., getting specific byte indexes out of the content or issuing multiple requests over the same socket connection), which makes it very slow (TCP handshake + TLS handshake for each page). OK, fine, most capsules are likely hosted in tiny machines and you don’t have inline media and hence no sub-requests, but…

Overall, I think they’ve gone too far in simplifying the protocol.

The absence of a Content-Length header, for instance, is just asking for trouble (Gemini’s sister protocol, Titan, hacks that into URLs), plus I’d like to have some pre-fetching for tackling slow networks, and the provision for zipped bundles of content as “books” isn’t exactly it.

Since I’m currently around halfway through converting all of this site’s content from Textile to Markdown (which means I’ve yet to slog through around 4500 pages), I am particularly attuned to the idea of simpler, “lesser” formatting for the sake of maintainability and readability (and this site’s design is already pretty minimalist), but I wish they’d trimmed less things down.

Otherwise I might even adopt it and put up a test server, if only for the thought experiment (although it would be a massive step back now that I’ve migrated to a static site hosted off Azure storage).

But it is certainly intriguing, and I will be keeping an eye on it.


21 Jan 03:58

The Beat of a Different DRM

by Kyle Rankin

Canon made big news this past week when it started telling customers how to defeat the Digital Rights Management (DRM) in its toner cartridges because of supply chain issues with the chips they normally use to enforce it. That Canon explained how to bypass the DRM when it suited them, and that it didn’t negatively […]

The post The Beat of a Different DRM appeared first on Purism.

21 Jan 03:57

One big wish for CircuitPython in 2022

by charlie

I thought I could add my voice to the folks sharing their wishes for CircuitPython in 2022.

Boards I like
I was really pleased with how many boards came out last year that run CicruitPython, particularly those built on ESP32-S2 and RP2040.

For this year, the tease at the start of 2021 for a ESP32-TFT combo has finally turned into reality. Want. No, I have no idea what I am going to do with it. But it’s bonkers. That’s gotta be good, no?

And the recent Adafruit brain wave of different QtPys, especially those built on ESP32 (catching a theme?) have my head abuzz. Especially with the LiPo BFF-Sprinkle-Topping. I like smol, wireless, and battery-powered for lots of the things I mess with. But I’ve been usually going to a Feather S2 or TinyPICO, devices WAY overpowered and expensive for the things I usually do. Usually if I go for those, I want to GO BIG.

In any case, a QTPy ESP32 with LiPo feels like it changes these calculations. Let’s see.

Coding I love
As for CircuitPython itself, I’m impressed with how many new features have showed up in the past year, such as deep sleeping and asyncio (so new!). For sure I will be exploring asyncio, as most of my projects have various things going on in parallel and I have to manually manage all that.

Looking forward
There are a few areas that I struggled with CircuitPython, wanting it to do something and then having to turn to Arduino to do it.

UDP – alas, I had a project that used UDP that I just couldn’t get to work on CircuitPython. UDP is common in connected devices to send data to an endpoint without the chattiness of TCP. Alas, this isn’t a biggie for me in 2022, as I don’t think I’ll have a project with that.

So sleepy – this wish might have already been answered, but I want to see deep sleep spread to all the CircuitPython chips. In the small boards I use, they don’t have deep sleep (last I checked), only the hefty chips do. Tho, with the ESP32 line spreading to other formats, perhaps I won’t care the M0s are left out.

AudioIn – this one is the biggest for me at the moment. I have had many rounds using sound with various CircuitPython boards. Oh, CircuitPython might be great for MIDI, or for generating or mixing waveforms (yay, Winterbloom), or for playing snippets stored in memory or an SD card. But (and maybe it’s me) CircuitPython really isn’t designed for AudioIn, say, for recording someone and then doing something with it. Well, at least I’ve not had any luck trying to do that.

CircuitPython Audio Mixer – with that in mind, I would really be happy if we could design audio systems for CircuitPython like Teensy folks can do with the Audio System Design Tool. I’m trying really hard not to spring for a Teensy. But something like this could be really powerful, even if it were for the RasPi and a voice bonnet.

This AudioIn issue has been plaguing me in general, so it’s not a fault of CircuitPython. But, since we are making wishes, my biggest wish for 2022 is more AudioIN tools for CircuitPython.

Ok, so maybe part of the list above is just indicative of my skillz (or lack thereof). So, do let me know if you agree the list above needs to be added to CircuitPython, or if I just need to up my skills. 😁

Image shamelessly snagged from MasterTheHandpan (don’t judge, it’s the image I was looking for)

The post One big wish for CircuitPython in 2022 first appeared on Molecularist.
21 Jan 01:24

Writing A Personal Micropub Client

by Ton Zijlstra

I’ve started to write a Micropub client. Not a generic one (there are a range of them out there), but one for my personal use case(s) and specific set-up. For instance so that I can prepare a short blogpost within my everyday note taking system, and then post it to my website here.

I’m doing this because I found that my personal use cases don’t fit well with the clients that are out there. I want something that is local first. Something that stays within my workflow, does not require me to switch context or tools (not having to go to my WordPress back-end or a separate app to post e.g.). Positioning blogging as something that isn’t a separate task, where posts get prepared as a regular by-product of my other tasks, just needing me to finish them and hit post.
A personal software tool in short.

The upside compared to more generic existing Micropub clients is, that I know my own specific use cases and set-up. A personal tool does not have to cater for every option of eventuality, just needs to cater to something very specific. That should make it easier to build as a ‘narrow band’ tool, not requiring many ‘what ifs’ to be covered. This because, as I wrote in the linked blogpost, in narrow band tools, my context and preferences are the default inputs, and my tasks are predictable, allowing them to be put together into the equivalent of a function that you pass a few parameters. The result basically is code.

I’m writing it from scratch and now am trying my hand at writing the most minimalistic script that can take some content and post it to my blog, focusing on sending something from my php script to my website through its Micropub endpoint.Using the helpful suggestions of Jan Boddez on where and how to start, reading up on Jamie Tanna’s experience doing the same, and using his tool to manually generate the right authorisation tokens for Micropub (found here).

I’ve hit my first snag to solve, which is that my calls to the Micropub endpoint fail because there’s an issue with the HTTPS encryption (certificate verify failed). Procrastinating on solving that, I’ve written this post, and opened a page here to track progress.

21 Jan 01:23

Termination Shock by Neal Stephenson

by Ton Zijlstra

At over 700 pages another one of Stephenson‘s books asking for a significant amount of time. The last time I read a book by him was almost exactly a year ago*, Fall or Dodge in Hell. This one is all about near future climate urgency responses, where one Texas billionaire takes it upon himself to start doing geo-engineering by launching sulfur into the stratosphere to create a veil, cool the planet and prevent sea level rise. The creation of such facts, and the termination shock tied to abandoning it again before there are more such projects in place, makes it into a new geopolitical reality. That geopolitical reality doesn’t play out in the US but in the Sino-Indian relationship, and the countries making up ‘Netherworld’, all those places around the world that have sealevel rise as an immediate concern. No wonder then that a Dutch royal is one of the characters, making a crashing entrance in Waco, Texas. While the geo-engineering is along the lines of Eliot Peper’s Veil, the various layers of narrative are more along the lines of Kim Stanley Robinson’s Ministry for the Future. Nice appearance of the performativity of war. With the geo-engineering backdrop informing the geopolitical narrative lines, it remains a humane and human centered story. It grabbed me quickly, and I enjoyed it a lot.

* This is a first post in the Books section in a year as well, so that previous Stephenson book is almost the previous posting. In between I have been looking at publishing book lists as a way of federating bookshelves. I aim to post more frequently about the books I enjoyed in a few more words than I put in those book lists. Following the book lists will give you a more complete (and timely) overview though.

21 Jan 01:00

‘Beware of an old man in a profession where men usually die young.’

nordicvice:

‘Beware of an old man in a profession where men usually die young.’

16 Jan 11:06

Wie schlimm ist die Lage? So schlimm: Der österreichische ...

mkalus shared this story from Fefes Blog.

b'Wie schlimm ist die Lage? So schlimm: Der \xc3\xb6sterreichische Verfassungsschutz r\xc3\xa4t \xc3\x84rzten, ihren Beruf nicht \xc3\xb6ffentlich erkennbar zu machen. Nicht in Krankenhauskleidung raus, keine Logos an der Kleidung, etc.

Aus Sicherheitsgr\xc3\xbcnden.

Damit sie nicht von Impfgegnerterroristen ermordet werden.'

16 Jan 05:33

Twitter Favorites: [dethe] My first vax was Astra-Zenica, second was Moderna. Today I got the booster with Pfizer so now I HAVE THE TRIFORCE!

Dethe Elza @dethe
My first vax was Astra-Zenica, second was Moderna. Today I got the booster with Pfizer so now I HAVE THE TRIFORCE!
16 Jan 05:33

Russia’s Possible Invasion of Ukraine | Center for Strategic and...







Russia’s Possible Invasion of Ukraine | Center for Strategic and International Studies

The scheme of maneuver of a Russian military invasion of Ukraine will likely be influenced by which of the above political goals the Kremlin wishes to achieve, the geography of the land and cities to be fought over, and the transportation routes to bring up logistics. If the Kremlin wishes to exercise options three, four, or six, and taking into consideration primary geography and logistics, there are three likely axes of advance to seize Ukrainian territory east of the Dnepr River, with the river as either a limit of advance or the first phase line of a larger invasion.

  • Northern Route: Russia could advance toward Kiev along two routes. The first would be 150 miles by road through Novye Yurkovichi, Russia; Chernihiv, Ukraine; and into Kiev, Ukraine. The second would be a 200-mile thrust through Troebortnoe, Russia; Konotop, Ukraine; Nizhyn, Ukraine; and into Kiev.6 If Minsk were to acquiesce to the use of its road and rail networks, the Russian army could outflank Ukrainian defenses around Kiev and approach them from the rear via a 150-mile axis of advance from Mazur, Belarus, to Korosten, Ukraine, and finally to Kiev.
  • Central Route: Russia could also advance due west along three routes. The first might include a 200-mile axis that moves through Belograd, Russia; Kharkiv, Ukraine; Poltava, Ukraine; and finally to Kremenchuk, Ukraine. The second might include a 140-mile axis thrust through Donetsk, Ukraine to Zaporizhzhia, Ukraine; and possibly also another thrust from Donetsk to Dnipro, Ukraine. The third might involve Russian forces advancing along the coastline toward Mariupol, Berdyansk, and the Perekop isthmus connecting Crimea to Ukraine.
  • Southern Route: Russia could also advance across the Perekop isthmus to take Kherson and the source of freshwater for Crimea and simultaneously toward the vicinity of Melitpol to link up with Russian forces advancing along the coast of the Sea of Azov. If Russia was to attempt option five, this would be the main attack coupled with the assault along the coastline toward Mariupol and Berdyansk. But it would be hardest to sustain logistically due to the lack of a railway running along the Sea of Azov coast and the main direction of advance.

Figure 2 highlights possible invasion routes. All of these routes, except the coastal one, parallel existing rail lines. This is essential since Russian army logistics forces are not designed for large-scale ground offensives far from railroads. If Russia’s objectives include denying Ukraine future access to the sea, it will have to seize Odessa. Some predict that this would be accomplished via amphibious and airborne landings near Odessa, which link up with mechanized forces approaching from the east. If Russia intends to conquer the entire country, its forces would need to seize Odessa (whose port facilities would ease Russian logistics) and also cross the Dnepr River at several points to march and fight an additional 350 to 700 miles further west to occupy all of Ukraine up to its borders with Poland, Slovakia, Hungary, Romania, and Moldova.

16 Jan 05:32

Challenges of fragmented writing

by Lilia

Next to all other issues on getting back to writing, I struggle with cross-platform issues. Some things I write where it is prompted and a reply is likely to be seen – on Twitter or in FB comments. Others go into their habitual places, with an audience in mind and access in place – posts on FB and LJ are such. Some texts I cross-post between spaces – some of FB stuff goes here (in English), others go to LJ (in Russian). Twitter is more complicated – I use it as a back-office tool for annotated readings and short thoughts, but often don’t get into synthesizing it into bigger texts. That “lack of convergence” is also platform-dependent. FB is horrible with linking, visuals, tools for emphasis and structure, as well as overall censorship.

And, of course, this blog is a neglected space, like a house that used to be full of life, but is now abandoned and dated. Here there is freedom and track record, but hardly any readership, feedback, easy-to-manage ways to post in two languages and with different access rights.

At the moment I have no idea how to put it all in a system that works, but it is something that is on my priority list for 2022.

The post Challenges of fragmented writing appeared first on Mathemagenic.

16 Jan 05:32

A personal anecdote: hot wheels

by kchodorow

Last night I was walking Domino and a woman passed us pulling a wagon of obviously-just-bought stuff from Home Depot. A guy behind her leaned down to adjust one of the items and I thought “Oh, I guess they’re together.” Then he picked it up, did a 180, and started walking away.

I realized what was happening and shouted “Hey!” and made a half-hearted attempt to grab the guy. He took off and the woman dropped the wagon handle and ran after him. I took up a post guarding the wagon, since apparently it needed guarding. A minute later she returned, her chase unsuccessful.

“It was just wheels,” she told me. “Not anything too important.”

“That’s good,” I replied.

Still, it’s the first time in years I’ve witnessed such blatant theft.

16 Jan 05:32

A visual and audio tour of sound at Nap Nap Swamp

by Nathan Yau

When I think swamp noise, I imagine a blob of sound that’s some mix of water and wildlife, but that’s because I don’t know anything. Mitchell Whitelaw, in collaboration with ecologist Skye Wassens, used recordings of Nap Nap Swamp in New South Wales, Australia to show you a breakdown of what the individual sounds are.

You hear the sounds of running water, wind, and different animals with various patterns. This is all framed over time and a subtle visualization to show water levels. The sound profile at the swamp changes as the water rises. Nice, calming work.

Tags: Mitchell Whitelaw, Nap Nap Swamp, nature, Skye Wassens, sound, water

16 Jan 05:31

Video: Q&A

I tweeted asking if anyone would be interested in a Q&A, and to my surprise, I got many Qs to A.

Video notes:

  • Do you have a day job? ()
  • How was VCF Midwest? ()
  • How’d you get started with OpenBSD? ()
  • How’d you end up at your terminal color scheme? ()
  • What’s the point of using super old Macs/PCs running super old operating systems? ()
  • I’m curious why you switched from modern Mac to OpenBSD / old Mac ()
  • What are some things that past development environments did better than modern ones do? ()
  • Would love to hear about your recording set up ()
  • When you have a problem to solve, what are your primary sources? ()
  • What do you think about Mini vMac? ()
  • How much of your computing do you do on [OpenBSD]? What things you think it does well, what things that are hard? ()
  • What version of OpenBSD/m68k are you running? ()
  • Are you working on OpenBSD on the M1 Macs? ()
  • Did you see this? ()
    • 12” PowerBooks and nerd BO
  • Why do my fonts suck? ()
  • Differences in initial ThinkPad Carbon audio setup and dialing in(?) ()
  • Differences between FreeBSD and OpenBSD ()
  • Tutorial on OpenBSD IKEv2 setup with Fedora client is nice to see ()
  • What do you think about importing OpenZFS on OpenBSD? ()
  • Is there anything in the OpenBSD ecosystem close to/similar to NixOS? ()
    • I meant “cattle vs. pets”, not sheep. I guess you could have sheep as pets though.
  • I would like to understand better what the adventure of porting a driver to OpenBSD is like ()
  • What advice would you give to somebody who wanted to get invovled in writing drivers for OpenBSD? ()
  • How to install and use OpenBSD on a machine with Nvidia card ()
  • What is your specific workflow with Git and CVS for OpenBSD? ()
  • If you had to pick one machine/OS to use for the next 10 years, what would it be and why? ()
  • If you had to switch to a Linux distribution, which one and why? ()
  • How would you sell OpenBSD to someone who would otherwise have no interest in it? ()
  • What project of yours do you wish you had more time to work on? ()
  • What do you think would have been necessary to decide Garbage was delivering on your expectations when you started that podcast? ()
  • What software do you use to drive your 3D printer? ()
  • I love your desk set up, but I think the angle in the few photos I have seen confuse me ()
  • What features do you think would be awesome to add to sdorfehs/ratpoison style window managers? ()
  • Who would win in a fair fight: a horse sized duck or the equivalent weight of duck sized horses? ()
  • After your BBS and System 6 series, what’s next? ()
16 Jan 05:29

Unravelling subscriptions in Python

by Brett Cannon

For the next post in my syntactic sugar series I want to cover subscriptions. It's quite possible you're not familiar with this formal term, but you are probably familiar with the syntax: the square brackets used for indexing lists and tuples (sequence[4]), accessing the value of a specified dictionary (dictionary["key"]), etc. To cover this topic we will break up into three parts: general subscriptions, slicing, and multiple arguments.

General subscriptions

A subscription can get, set, or delete items from a collection. These three operations have equivalent special methods called __getitem__, __setitem__, and __delitem__, respectively. Due to the fact that if a subscription is done on an object that does not have an appropriate special method, we will re-implement the appropriate functions from the operator module. All three functions take a similar approach, so I will just show how __getitem__ works and let you look at the source code for the other two functions.

def __getitem__(container, index, /):
    """Return the item in the container at the specified index."""
    container_type = type(container)
    try:
        getitem_method = debuiltins._mro_getattr(container_type, "__getitem__")
    except AttributeError:
        raise TypeError(f"{container_type.__name__!r} object is not subscriptable")
    return getitem_method(container, index)
Implementation of operator.__getitem__

The code:

  1. Gets the type of the container.
  2. Gets the __getitem__ method from the type.
  3. If the method doesn't exist, raise TypeError.
  4. Otherwise call the method appropriately.

Slicing

The syntax for slicing maps to the slice class' constructor where any empty value is represented by None.

  • :: maps to slice(None, None, None)
  • 1:2:3 maps to slice(1, 2, 3)
  • 1:2 maps to slice(1, 2)
  • : maps to slice(None, None)
  • 1: maps to slice(1, None)
  • :1 maps to slice(None, 1) (maps to slice(1) as well)

The slice object then gets passed into the appropriate special method, so x[1:2:3] is the equivalent of type(x).__getitem__(x, slice(1, 2, 3)).

Multiple arguments

If you don't work with the scientific stack and use packages like NumPy, you may not know that you can actually pass in multiple arguments when using the subscription syntax: [1, 2, 3]. The key difference to a function call, though, is all of the values get bundled up into a tuple that gets passed in as the first argument to the appropriate special method. This translates x[1, 2, 3] to type(x).__getitem__((1, 2, 3)). This also means that passing in a tuple with the same values is no different: x[1, 2, 3] == x[(1, 2, 3)].

16 Jan 05:29

2022-01-14 BC

by Ducky

Press Briefing

Today’s presser was more interesting than some recent ones (video, slides).

DrH presented some good evidence that cases are dropping. She said she thought we peaked last weekend.

Something I thought was interesting about this figure was they called out how VCH’s peak and London’s peaks were not pointy, saying it was because both places were maxxed out on testing. That, coupled with the decline suggests that testing is back to close to normal now. (It’s not a guarantee. People might still be avoiding getting tested. But it does mean that it is lower than at its peak.)

But! Even better! The wastewater surveillance says that the levels are on a downswing!


DrH said that Omicron was legit milder than Delta. Somewhat to my surprise, there are still a fair amount of Delta cases in hospital, and they are more severe:

(Note, however, that this was in December, and Omicron just might not have been enough time to incubate to get its patients into the ICU.)


Dr. H mentioned that they have seen an increase in the number of hospitalized kids (nine this week in under-5 and two in 5-11), but it’s been thankfully mild: none have gone to ICU and none have died. There has only been one case of a vaccinated child getting admitted to hospital.


Dr. Henry said that there’s a fair amount of Respiratory syncytial virus (RSV) — one of the “common cold” viruses — out there right now. I thought she said there were more pediatric RSV hospitalizations than pediatric COVID cases, but I can’t find that now so I might have imagined it. She did say that the most severe outbreak in LTCH in the past month was an RSV, not a COVID-19.


They are changing how they report hospitalizations. What did they change? I have no f clue. I couldn’t figure it out. Maybe it has to do with counting by what HA the people are in vs. where they live, or vice versa. Maybe it has to do with counting all hospitalizations instead of not counting incidental COVID-19 (though I thought they were counting all COVID-19). Regardless, Dr. H warned that the count would go up. 🤷


From Jan 3-9, about 11% of health care workers were sick. This is roughly double what it was at the same week in 2020 or 2021. Hospitals are noticing. 🙁

Transmission Calculations

From UK data, the Case Hospitalization Rate (CHR) for Omicron is about a third that of Delta. If BC’s Omicron CHR is about a third of the Delta CHR, then Omicron the hospital-bed-days ought to be about 17% of the Delta hospital-bed-days (from the data above which says stays are half the length). The Delta case rate before Omicron hit was about 350 cases per day. Now, the official daily case count (which we know is too low) is about seven times higher, so effectively, the strain on hospitals ought to be about 1.2x as bad. Ulp.

The BC Data Modelling Group thinks that the actual case rate is ~5x higher than the official rate, which means that hospitalization strain would be 6x what it was in December. Ulp ulp ulp ulp ulp!

Caveat: CHR will be affected by (partial) immunity rate, which is not equivalent. They have ~77% of total population fully vaxxed, versus BC’s ~80%; they have almost 55% of the population boosted, vs. less than 30% in BC; they don’t vaccinate their kids; they have higher rates of infection-acquired immunity. All in all, the UK (partial) immunity will be slightly higher, so their CHR will probably be slightly lower than BC’s.

This is what Dr.H presented as a high-transmission scenario today:


I found the Q&A to be unenlightening today.

Statistics

Today: +2,275 cases, +6 deaths, +3,032 first doses, +1,577 second doses, +59,876 other doses. 

Currently 646 in hospital / 95 in ICU, 35,943 active cases, 251,846 recovered.

Positivity rate of 16.6%.

first doses second doses third doses
of adults 92.7% 90.0% 32.6%
of over-12s 92.3% 89.6% 30.5%
of over-5s 89.0% 83.3% *
of all BCers 86.6% 81.0% 27.7%

Charts

From the Federal Vaccine page, doses by age in BC over time:


From this Twitter thread:


16 Jan 05:25

What's Wrong To Me

by Stephen Downes

I have a political blog, Leftish, where you're get an idea of my sense of right and wrong on a range of political issues. But I want to take a few moments here to talk about what I feel is wrong at the most deep and fundamental level. 

This is important to me because I have a feeling that my sense of morality is very different from that which prevails generally. Perhaps it's because I went for so many years without a television. Perhaps it's because I would read newspapers cover to cover and explored topics in depth in my own experience as a journalist. Perhaps it's because of my personal struggles as a child and young adult. It's likely a combination of all those things and more.

Anyhow, these are the things that are wrong.

Death

I think life is the greatest gift in the world and death is its cruelest irony. To me, death is the end of everything. Any person's death, from the youngest infant to the oldest centenarian, is a tragedy. My feelings extend to animals, including insects, and even to plants. Any death is an irreplaceable loss; all death should be avoided.

And yet death is central to everything we do. As humans, we need to eat, and we can't eat rocks and dirt. We raise crops, we breed animals, we catch fish. We use plants and animals not just for food but for housing, clothing, and virtually everything else we do. A house lined with wood, as mine is, feels warm, familiar and comforting. All animal life lives on the death of plants and animals. There's no way around that.

And to be clear, I'm not vegan or even vegetarian. I embrace my humanity, flawed though it may be. Nor do I feel any requirement to meekly submit to be killed. If the gunships appear over the horizon, well, in the words of Bruce Cockburn, "If I had a rocket launcher...."

So I feel keenly the contradiction of this. Perhaps our need to kill in order to live is the Original Sin. To live ethically, though, we should seek to minimize this where possible and absolutely refrain from unnecessary and pointless death. This includes pretty much all human-caused human death. I oppose things like the death penalty, I take a strong pacifist stance in global affairs, and I think that policies that result in needless death are wrong.

I feel especially strongly about the death of children. Children are no threat to us, unless they have been weaponized as child soldiers. Children have their whole lives ahead. A policy that results in the death of children is wrong.

This - the death of Alan Kurdi - epitomizes pointless death. Everybody involved in this should hang their heads in shame. Any policy that results in this as a consequence is wrong.

I think we should be working to eliminate death. The ongoing study of mind and medicine, the development of alternative nutrition sources, peace and conflict resolution studies, education for personal development and flourishing - these are the highest ambitions. People who simply seek power and wealth operate in the service of death, not against it.

A short digression: for a long time I wondered: why do we die at all? The answer is apparent: so that others may live. So that we, as a species, can adapt and grow. Each person, albeit unwillingly, sacrifices their entire existence for the good of the species. But I don't view this as some higher purpose; it's just the way life is. There's nothing noble about it. Death is banal, pointless.

Pain and Suffering

Everything I have said about death also applies to pain and suffering.

Deliberately causing pain and suffering, no less than deliberately causing death, is as wrong as someone can get. Torture, deprivation, policies of oppression and fear: these are wrong. I will resist them whenever I can.

At the same time, pain is as necessary for the growth and development of an individual as death is for the species. Pain teaches us in a non-lethal way what things to avoid. It is a psychological response to things that damage the body. 

That's why people think that pain is such an effective teacher and motivator. But people are easily able to see the difference between pain that is caused by naturally occurring illness and injury, and pain that is being deliberately caused as a matter of policy. We will at once do whatever it takes to get the pain to stop, and at the same time, refuse to yield to the politics and morality of whomever causes the pain.

Wealth and Power

I think most people were probably with me for the first two sections of this post, but this is probably where I part with most people's sense of morality. I believe wealth and power are wrong.

To be clear about what I mean: wealth is the accumulation of resources far beyond your personal need, and power is the application of those resources, typically by causing death and suffering, in order to gain personal or material advantage (usually for the end of amassing more wealth and power).

As I've often said: great wealth is prima facie evidence of criminality. It's not generally possible to honestly obtain great wealth and power. Yes, there are exceptions. You could be lucky and win the lottery. You could leverage an advantage given to you by your parents. 

Even so, there's a difference between the person who finds themselves wealthy and tries to do good, and the person who finds themselves wealthy and uses that as leverage to become even more wealthy. We can all see the difference. We can all see the sort of behaviour that evolves in the wealthy with an attitude that the rules of society and basic morality no longer apply. People who think nothing about treating the lives and livelihood of people with blatant disregard.

Again, we can see the contradiction here. We all need some wealth and some power in order to live comfortable lives free of stress and fear. But beyond that, if power and wealth continues to accrue, then there's something wrong. Often, this continued accumulation of wealth is at the expense of someone else. It is the result of a society that has been rigged to favour the wealthy, and therefore to cause needless pain and death in those who are not wealthy.

Since we're all pretty much agreed on the wrong of pain and death, I see this as the fundamental moral issue of our time. In the past the people we considered 'great' waged useless wars of conquest and owned slaves and serfs, and we rightly condemn their ethics. In the future we will look back with the same revulsion at the accumulation of power and wealth by the scions of today.

Selfishness

I'm not sure where exactly to put this in the list. Selfishness is often the cause of wealth and power, as the expression of the mantra "greed is good". As in the case of the accumulation of wealth and power, greed expresses itself at the expense of others. It legitimizes in the greedy other unethical behaviours. 

Again, each of us need to look out for ourselves. We need to eat and stay healthy, to feel good about ourselves, to have and care for friends and family. As the airlines tell us, "Should an emergency situation occur, you need to put your own oxygen mask on first, before attempting to help those around you."


Selfishness is when, after putting on your own oxygen mask, you begin to collect other oxygen masks around you, so that other people can't use them. And that's what's wrong.

There's an old adage about virtue being the medium between excess and privation. As Aristotle writes "There are three kinds of disposition, then, two of them vices, involving excess and deficiency respectively, and one a virtue, viz. the mean." And there's wisdom in that. But it isn't the mean (in the sense of 'middle') that we're aiming for. It is the sense of enough.

Selfishness is not knowing when enough is enough.

That's why I've classified it separately from wealth and power. These are special cases, because their impact on others is so great. But there are many ways to be selfish, and mean and petty forms of selfishness are wrong as well. 

Dishonesty

Being 'honest' isn't the same as telling all and only the truth and I think people (mostly) understand this. Sometimes it's just a way of being mean (as Taylor Swift writes, "so casually cruel in the name of being honest"). Dishonesty similarly references a deliberate attempt to misinform through the provision of false or misleading information. 

You can tell the truth, and still be dishonest. There are many ways to do this. What's key about dishonesty isn't the literal semantics of the information involved, but rather, the intent to sway a person's beliefs about the world to their disadvantage and/or to your advantage.

If you think about this way of putting it, it makes sense. A person telling us a story isn't telling us the truth, but they're not being dishonest, they're just telling a story. Meanwhile, a person saying something true while knowing it will be misinterpreted by the listener is being dishonest. 

Dishonesty is the standard operating procedure in business, media and politics. Our economy is based on dishonesty. And it's wrong. 

While I could write a book on dishonesty, I want to take one of the precious few paragraphs I have here to talk about advertising. As I have often said, advertising is the original fake news. While it is undeniably a good idea to advise people of goods and services you may have to sell, it is unquestionably a bad idea to mislead them about the nature or efficacy of those goods and services.

Advertising and propaganda are especially pernicious when they play the long game, creating (as it is said) a demand where none exists. There are many ways to do this - creating status symbols, for example, or creating conditions of managed scarcity. Advertising aimed at children is especially wrong, because children have no defenses, and advertisers can manipulate desires (for cigarettes, say) that last a lifetime.

Disempowerment

I think this pretty much wraps up the big set of wrongs for me (if I think of more I'll add them). A lot of things that are wrong are wrong, at least to me, because they result in one or more of these. Slavery and colonialism, oppression, discrimination, etc. are on my reading applications of power and wealth in the name of selfishness and cause pain, suffering and death.

I think that I should be clear that there's an awful lot that can be covered under the heading of 'pain and suffering'. It's not some abstract idea that we can measure say say (for example) "you may think you were suffering but in fact you were not." That's not how pain and suffering work.

People suffer for many reasons. They suffer because of social stigma. They suffer if they're deprived of sunshine, the outdoors and nature. They suffer if they are afflicted with fear, reasonable or not. They suffer if they lose close friends or family. They suffer sometimes if other people suffer. They suffer when their word is doubted, if their opinions are treated as foolish, or if they are treated as inferior.

Human psychology and physiology are incredible complex. Each person is unique in a multitude of ways. As Tolstoy says, "Happy families are all alike; every unhappy family is unhappy in its own way." We can't presume that our own forms of pain and suffering are the same for others. The Golden Rule is wrong precisely because it presumes that if we don't feel pain and suffering, others don't either.

That's why it's so important that each person be able to determine for themselves as much as possible the terms and conditions of their own lives. It's one thing for a person to go on a fast for religious reasons, quite another to go on a hunger strike, and yet another to go hungry for lack of food. The physical condition may be the same, but the description of the pain and suffering in each case is very different.

For me, this sense of personal freedom is fundamental. I react strongly when people try to tell me what to do or what not to do. I sometimes say in jest that it's the Irish in me.  But I do know that these expressions of power are rarely for my own benefit. They are attempts to manipulate me or to force me to serve the often illegitimate interests of someone else. To respect their power. To fear their wealth.

Not everybody else is like this, and it probably reflects my upbringing, my acculturation, and my privilege. I get that. But I'm not going to stop feeling the way I feel, and wishing everybody who wants to could feel the same sense of freedom that I do.


16 Jan 05:23

Weeknote 02/2022

by Doug Belshaw
Birthday cards

WAO kicked off four projects this week, one of them completely new, and the other three a continuation of previous work with clients. I had a fun chat with Stephen Downes about some potential work we might do around critical literacies. Team Belshaw celebrated our youngest’s 11th birthday, and normal(ish) life resumed after the festive period.

Hannah, quite rightly, has asked to spend more time in the home office separate to our house. This makes sense as not only is there a sit/stand desk in there but also she tends to work until 17:00 most days, whereas I’m usually done by 16:00. Her office, such as it is, sits next to our bedroom in the loft conversion. It’s very light and warm, but when the kids are home from school unavoidably suffers from the noise of the house.

Laptop musings

While I was up in that office room at the top of the house earlier this week I tried connecting my laptop to her 4K screen. While it technically worked, everything was so slow. It didn’t matter whether I used my beloved 2017 Google Pixelbook or trusty 2012 Lenovo ThinkPad X220. As a result, I realised it was probably past time that I bought myself a new laptop.

I bought Hannah a MacBook Pro M1 last year through my business, but I much prefer using Linux to macOS. So I was looking for something that ticked various boxes. Long story short, the one that ticked all of them was the Lenovo ThinkPad X1 Nano. Unfortunately, the prices for that currently start at about £1,700. As I’ve already got a desktop and two other laptops, this felt a little extravagant.

Some research and the inevitable spreadsheet later, I’d realised that a refurbished MacBook Air M1 is currently £850 on the Apple store. While the work of the Asahi Linux team (and others) means that great strides are being made towards making Linux work on M1 Macs, it’s not ready for primetime. And virtualising Linux would just feel janky.

What this did do, however, was reset my expectations on how much a machine should cost that can do what the MacBook Air M1 does. Some more investigation led me to the Asus Zenbook 13 UX325 which I ended up ordering yesterday and, serendipitously, arrived at our house just as I started this paragraph!

I’ve ended up sacrificing a UHD screen, but the Zenbook at least has an OLED full-HD display. The rest of this weeknote is going to be written later, because despite being 41 years old, I also have no self-control and absolutely must open this parcel right now…

<sometime later…>

OK, I’m back. It’s nice. Pop!_OS, my distro of choice, works like a charm. I’ll have to make some typing adjustments, but it seems the laptop is going to be pretty great for how I’m expecting to use it. Regarding the screen, it’s pretty amazing and I can’t really tell the difference between the resolution on it and an external 4K screen. I guess it’s all about the DPi.

I particularly like that I’ve got the Linux equivalent of Windows Hello (called Howdy) working. This means that in reasonably-lit environments I can unlock the laptop and run sudo commands by authenticating using my face instead of a password. It’s great.

Next week

It’s time to dive properly into all of the work projects next week. We’re trying to ensure that we schedule half-days for each of them. I’m also going to plan a potential walking-and-camping trip along Hadrian’s Wall in April, as I’ve scheduled the first three weeks of the month off.

The post Weeknote 02/2022 first appeared on Open Thinkering.
16 Jan 05:22

“Let’s stop pissing off the French”

by Drunk Engineer
mkalus shared this story from Systemic Failure:
Why is nobody ever proposing walking, climbing on chairs / ladders, going up or down stairs helmets? Or even better, car helmets, considering how many serious head injuries happen in cars?

b'

The Senate in France has once again debated a bill to mandate bike helmets, with violators receiving a fine of 135 Euros and possible impoundment of their bikes:

\n\n\n\n

While the practice of cycling is exploding, a group of centrist senators led by Fran\xc3\xa7ois Bonneau proposes to make the helmet compulsory for \xe2\x80\x9cany driver of a vehicle with one or more wheels, whether motor or electric assistance, as well as \xe2\x80\x98to any cycle driver\xe2\x80\x99, under penalty of a fine of 135 euros. \xe2\x80\x9cNearly two-thirds of fatally injured cyclists were 55 years and over in 2019\xe2\x80\x9d and \xe2\x80\x9chead trauma is the main cause of death among cyclists,\xe2\x80\x9d said the senator in his proposal.

\xe2\x80\x9cIt seems that this is a false good idea,\xe2\x80\x9d reacted Fran\xc3\xa7oise Rossignol, president of the Club of cycling towns and territories, Tuesday at a press conference. \xe2\x80\x9cSo that there are more bikes, we must not put the brakes on practice\xe2\x80\x9d. \xe2\x80\x9cSafety is linked to the speed of other vehicles, to visibility (of the bikes), and to a number of essential arrangements for safety on the course\xe2\x80\x9d, underlined Fran\xc3\xa7oise Rossignol. \xe2\x80\x9cForeign studies which have looked at behavioral changes following the obligation to wear a helmet all conclude that the number of cyclists has decreased\xe2\x80\x9d, underlines the FUB, citing the examples of Canada, Australia and New Zealand. On the other hand, the number of injured is not decreasing as much as we expected.

\xe2\x80\x9cThe French are fed up with having obligations imposed on them,\xe2\x80\x9d said Elisabeth Borne, then Minister of Transport. \xe2\x80\x9cWe recommend wearing a helmet and everyone takes their responsibilities.\xe2\x80\x9d \xe2\x80\x9cLet\xe2\x80\x99s stop pissing off the French,\xe2\x80\x9d Bruno Millienne, MoDem co-rapporteur, argued, believing that with a helmet one could falsely feel \xe2\x80\x9csafer\xe2\x80\x9d.

\n\n\n\n

Thankfully, the proposal was rejected by the Senate Law Commission. However there is still the possibility of a helmet mandate for riders of electric scooters.



'
16 Jan 05:20

Canadian COVID-19 vaccine study seized on by anti-vaxxers — highlighting dangers of early research in pandemic

mkalus shared this story .

b'

Subscribe to\xc2\xa0Second Opinion\xc2\xa0for a weekly roundup of health and medical science news.


A Canadian study that vastly underestimated the protection COVID-19 vaccines provide against the Omicron variant is being revised \xe2\x80\x94 but not before it spread widely on social media by anti-vaxxers, academics and even the creators of the Russian Sputnik V vaccine.

The Ontario preprint study, which has not yet been peer reviewed, suggested that any three doses of mRNA COVID-19 vaccines were just 37 per cent effective against Omicron infection, while two doses actually showed negative protection.

The preprint has been shared on Twitter more than 15,000 times in the two weeks since it\'s been published, according to Altmetric, a company that tracks where published research is posted online. That\'s in the top five per cent of all research it\'s ever tracked.

The group behind Sputnik V shared the results to its one million Twitter followers earlier this month, saying the study showed "negative efficacy" of two mRNA vaccine doses and "quickly waning efficiency" of a booster. The group did not respond to questions from CBC News.

Dr. Vinay Prasad, an associate professor of epidemiology at the University of California-San Francisco, also shared it on Twitter, asking\xc2\xa0why the U.S Food and Drug Administration (FDA) and Centers for Disease Control (CDC) would advise a booster for Omicron at all.

Study updating findings with totally different results

But the paradoxical findings were later found to have been influenced by behavioural and methodological issues, such as the timing of the observational study, the way in which vaccine passports altered individual risk and\xc2\xa0changes in access to COVID-19 testing.

The results are currently being updated with additional data that showed completely different results, said Dr. Jeff Kwong, the study\'s lead author and an epidemiologist and senior scientist at the Institute for Clinical Evaluative Sciences (ICES) in Toronto.

"We\'re in the process of adding two more weeks of data and it looks like there\'s no more negative VE (vaccine effectiveness). Our results are now more in line with the data from the U.K. where it\'s lower, for sure, compared to Delta, but never getting to negative," he told CBC News.

"And then higher VE with the boost. So I think that\'s good news and we\'re just in the process of running those analyses and we hope to have an updated version,\xc2\xa0a version two, by sometime next week."\xc2\xa0

A recent report from the Imperial College London COVID-19 response team found that while Omicron largely evades immunity from prior infection and two doses provided just zero to 20 per cent protection,\xc2\xa0three doses increased that to between 55 and 80 per cent.\xc2\xa0

That means the updated preprint could end up showing that protection against Omicron infection is more than twice as high as initially reported. As of Friday, the preprint study remained unchanged on the medRxiv website\xc2\xa0where it was posted.\xc2\xa0

CBC cited the study in an analysis story last week, but has since removed reference to it until the data is updated.\xc2\xa0

The study was also highlighted by the federal government\'s COVID-19 Immunity Task Force earlier this week, before the discrepancies in the data were discovered.

"We\'ve touched base with Dr. Kwong and indeed he informed us of new data as of Monday night," a spokesperson said in response to CBC News raising concerns about the study\'s accuracy.\xc2\xa0

"As the data from this week does change things, we\'ve pulled the preprint from our magazine that\'s being sent out today."\xc2\xa0

Dr. Danuta Skowronski, a vaccine effectiveness expert and epidemiology lead at the B.C. Centre for Disease Control, who developed the vaccine study design used in the preprint, posted a commentary urging "extreme caution" with the results last week.

"If you have a negative estimate, you want to start looking at, OK, well, which subgroup is driving that and why?\'" she told CBC News.

"Is it the asymptomatic? Is it the symptomatic? Is it people who were screened for work? Is it people who had a rapid antigen test? Which group is it that\'s driving that paradoxical finding?"\xc2\xa0

Skowronski said until those questions have been resolved, "all bets are off" on the interpretation of the results and "the validity of the study has to be questioned."\xc2\xa0

"In the real world, we cannot control the behaviour of people, and so these studies are susceptible to lack of comparability between the vaccinated and the unvaccinated," she said, adding that vaccine passports dramatically changed the risk of exposure in Ontario.\xc2\xa0

"There are good reasons to believe that the very slim fraction of people who remain unvaccinated \xe2\x80\x94 that group are quite different now from vaccinated individuals."\xc2\xa0

Study spread like wildfire with anti-vaxxers\xc2\xa0online

The study highlights the speed in which early study results that have not undergone peer review can spread online in the pandemic and the way in which inaccurate findings can be weaponized to fit an agenda before they can be corrected.\xc2\xa0

Many who shared the study on Twitter used anti-vaccination rhetoric to allege boosters\xc2\xa0didn\'t work against COVID-19, while others posited the vaccines\xc2\xa0should not have been approved for emergency use by the FDA in the first place because they did not meet its initial\xc2\xa050 per cent efficacy threshold.

"This will definitely be used by bad actors to consolidate support for their views about the lack of COVID-19 vaccination effectiveness," said Ahmed Al-Rawi, an assistant professor at Simon Fraser University\'s School of Communication who specializes in disinformation.

"I would immediately take it down and make some public statements about the inaccurate findings of the study, because this has been shared widely on social media and it will only confuse people more."\xc2\xa0

WATCH |\xc2\xa0Ontario ICU overwhelmed by mostly unvaccinated patients:

The mostly unvaccinated patients overwhelming an Ontario ICU

Mostly unvaccinated patients are overwhelming the ICU at a Sarnia, Ont., hospital and some will head home with a new perspective on COVID-19, the vaccine and life. 3:39

The study also notably did not look at the protection vaccines offered from severe COVID-19, which has been shown to be much higher than against Omicron infection alone\xc2\xa0\xe2\x80\x94\xc2\xa0something Kwong says he and his colleagues will be adding in a future version.

While COVID-19 vaccines don\'t provide total protection from infection, they do work well at preventing serious disease. New data from the Public Health Agency of Canada found Canadians with two doses were 19 times less likely to be hospitalized than those unvaccinated.

"Several studies have shown modest protection from two doses against Omicron infection, but better protection against severe outcomes such as hospitalization," said Marc Lipsitch, an epidemiologist at the Harvard T.H. Chan School of Public Health in Boston.

"This benefit is over and above any possible benefit of preventing infection or transmission."

Lipsitch said Skowronski\'s criticisms of the study are valid. He has cautioned against comparing positive cases among those with symptoms with those not tested for different reasons, adding he very much agrees this approach can be a source of "substantial bias."

"When investigators try to share early results in the interests of public health, as these folks did, there\'s often a lot of uncertainty in those estimates," said Dr. David Fisman, an epidemiologist at the University of Toronto\'s Dalla Lana School of Public Health.

"But it\'s very hard to reel in once people start using early versions of your work in support of misinformation."

Skowronski said the rapid sharing of COVID-19 vaccine studies on social media has completely changed the research landscape, adding more pressure to get early results right.

"You need to ask yourself, why do we need to post it now? Why can it not wait the one or two weeks? How will this impact public and policy decision-making?" Skowronski said.

"And if you can\'t answer that, then we really should be asking ourselves: Why are we rushing to preprint?"

WATCH |\xc2\xa0Canadians urged by health experts to take first available\xc2\xa0vaccine:

Health experts urge Canadians to take whichever vaccine is available

Health experts across the country are urging Canadians to stop shopping around for their preferred brand and take whichever COVID-19 vaccine is available. 2:13

Skowronski released a study in 2010 showing paradoxical negative vaccine effectiveness during the 2009 H1N1 pandemic that found those who had a flu shot were more likely to get infected with the influenza strain than people who hadn\'t,\xc2\xa0which was later proven right.

But she first assumed the findings were methodologically inaccurate, reached out to outside experts around the world, conducted multiple different studies and worked with an international panel of experts.

"I learned the lesson the hard way back in 2009 in dealing with paradoxical findings and the level of rigour required," she said. "You don\'t approach this in a casual way \xe2\x80\x94 it does require lots of thinking, lots of worry \xe2\x80\x94 before you can arrive at this."

Dr. Ivan Oransky, co-founder of Retraction Watch, a website that tracks errors in science journals, said because the study turned out to be "flawed," the researchers should move fast to update their findings.

"They\'re doing the right thing. The question is how quickly will they do it?" he said. "I mean, they\'re talking about next week \xe2\x80\xa6 but that is a bit of an eternity in this day and age."

'
16 Jan 02:29

Writing a minimal Lua implementation with a virtual machine from scratch in Rust

Writing a minimal Lua implementation with a virtual machine from scratch in Rust

Phil Eaton implements a subset of Lua in a Rust in this detailed tutorial.

16 Jan 01:55

A volcano eruption, as seen from space

by mathewi

This is a shot of the shock wave from the eruption of the Hunga Tonga-Hunga Haʻapai volcano, which caused a tsunami in the South Pacific. The video comes from the Himawari 8 satellite, operated by Japan’s Meteorological Agency

16 Jan 01:55

Twitter Favorites: [theJagmeetSingh] Today is a sad day for Canada. Alexa Mcdonough was the first woman to lead a major political party in Canada. She… https://t.co/JaColT6BCK

Jagmeet Singh @theJagmeetSingh
Today is a sad day for Canada. Alexa Mcdonough was the first woman to lead a major political party in Canada. She… twitter.com/i/web/status/1…
14 Jan 06:52

Predictions 2021: How’d I Do? Pretty Damn Well.

by John Battelle

As has been my practice for nearly two decades, I penned a post full of prognostications at the end of last year.  As 2021 subsequently rolled by, I stashed away news items that might prove (or disprove) those predictions – knowing that this week, I’d take a look at how I did. How’d things turn out? Let’s roll the tape…

My first prediction: Disinformation becomes the most important story of the year. At the time I wrote those words, Trump’s Big Lie was only two months old, and January 6th was just another day on the calendar.  A year later, that Big Lie has spawned countless others, culminating in one of the most damaging shifts in our nation’s politics since the Civil War. The Republican party is now fully captured by bullshit, and countless numbers of local, state, and national politicians are busy undermining democracy thanks to the Big Lie’s power.  A significant percentage of the US population has become unmoored from truth – and an equally significant group of us have simply thrown our hands up about it. Trust is at an all time low. This Barton Gellman piece in The Atlantic served as a wake up call late in the year – and its conclusions are terrifying: “We face a serious risk that American democracy as we know it will come to an end in 2024,” Gellman quotes an observer stating. “But urgent action is not happening.” I’m not happy about getting this one right, but as far as I’m concerned, this is still the most important story of the year – and the most terrifying.

My next prediction: Facebook’s chickens come home to roost…2021 will be a dismal year for Facebook.  Oh my, was it ever. Facebook’s year was so terrible, the company decided to change its name as a result. Because I took notes all year, here’s a brief review of Facebook’s 2021:

I’ve left off dozens of ugly narratives while compiling this list – and admittedly, I’ve also left off a fair number of pro-Facebook responses  as well.  But overall, I think this particular prediction was pretty spot on. Let’s call it a win and move on…

My third prediction: AI has a mid-life crisis. This one bears a bit more explanation. From my post: “2021 will be the year society takes a step back and thinks hard about where this is all going … by year’s end, the AI narrative will be as much about hand wringing and regulatory oversight as it is about revolutionary breakthroughs.” I think I got this right as well, but I can’t prove it. The year started with a leading AI researcher calling the entire space a “dumpster fire.” Numerous fatal crashes with Teslas in self driving mode gave observers pause – perhaps this technology was not as ready as Elon Musk had claimed (and who the fuck is stupid enough to sleep in the back seat of a driverless Tesla, but…people are stupid sometimes). Furthermore, AI’s great proof – that it was better at reading X-rays than trained radiologists – was debunked. Academic journals continued to question whether “super intelligence” can ever be contained. Meanwhile, the bloom came off the “smart home” rose – “Alexa has turned out to be a voice-activated clock/radio with low retention” quips noted tech analyst Benedict Evans.  This AI stuff is hard – and while the tech is hard enough, the policy issues are even harder. 2021 was the year legislators were pummeled with Silicon Valley lobbying around how China is about to kill the US with its insurmountable lead in artificial intelligence. (And hey, China’s got the Minority Report market in the bag!) But it certainly wasn’t the year legislators did anything about AI, other than voice concerns. So, yes, we got the hand wringing and the focus on policy, but it’s a bit of a push on the prediction overall. Not enough proof points to give myself either a passing or a failing grade.

Prediction #4: A wave of optimism around tech-driven innovation takes root. Yep, it’s pretty bold to predict a rebound in tech optimism when Big Tech is taking heavy fire, but I think I got this one right as well, thanks in large part to the world of crypto. It’s been three decades since I’ve seen an outburst of pure technology euphoria like the vibes coming off the crypto/web3/blockchain space. I’ve been monitoring crypto for years (one of my 2018 predictions was “Crypto/blockchain dies as a major story”), and went pretty deep this past 18 months or so. I am a cautious proponent of crypto’s technology,  philosophy, and new governance models, but there’s a hell of a lot of bullshit in there as well. Then again, the same was true three decades ago, back when the web was young. The difference this time? Scale. In the early 1990s, the web was an anomaly, and you could count its adherents in the tens of thousands. It took five years for that to scale to tens of millions, and the industry represented a tiny percentage of overall GDP. But in 2021, web3 scaled to impressive (some might say scary) numbers. Total cryptocurrency holdings rocketed from roughly $500 billion to more than $3 trillion this year. Crypto wallet Metamask, often (roughly) compared to the Netscape browser of Web 1, zoomed from half a million monthly active users to more than 21 million.  And NFTs – the web3 equivalent of dot com stocks – grew into a massive market as well, clocking more than $10 billion in purchases last quarter. The overall vibe of the crypto space is summed up in one catchphrase: “We’re all going to make it (WAGMI).” Perhaps (and yes, I do see a crash in our future), but if WAGMI doesn’t reflect a “wave of optimism,” I don’t know what does.

Prediction #5: Google does in 2021 what I predicted it would in 2020: It zags. And what does a zag look like? From my piece: “Google will make a deeply surprising and game changing move.” And in fact, Google made two game changing moves in 2021, either of which might defend my assertion. In March, the company announced it would, as the WSJ covered it: “stop selling ads based on individuals’ browsing across multiple websites, a change that could hasten upheaval in the digital advertising industry.” This was a major shift in how the world’s largest advertising platform plied its trade, and while I’ll leave it to others to opine on the impact (and timing, which remains in flux), the reasoning behind it is crystal clear. As I wrote in my prediction “Google is fighting off a terrifying array of massive regulatory actions, and desperately needs to avoid looking like Facebook in the eyes of its employees, consumers, and business partners.” Changing the core of its data policies is a move designed to do just that.

The second big move targeted Apple. In March the company lowered some fees that developers pay to use its Play store. And in October, it slashed all fees in half, effective next week. This is a major ecosystem shift – one that may well drive new and existing developers into building for Android first. And again, it positions Google to be the good guy in the eyes of developers, customers, and critically, regulators, who have been sizing up Apple for its monopolistic control of the iOS app store.

My sixth prediction? Nothing will get done on tech regulation in the US. This one was far too easy to get right – with a pandemic raging, Congress deadlocked, and an agenda that included multiple trillion-dollar pieces of legislation, there was no way tech legislation would have passed this year. The Biden administration did heavy up on anti-Big Tech talent (Khan, Wu, et al), but they’ve not had either the time or the support to get much done, yet.

Lucky #7:  A “new” social platform breaks out in 2021. I’ll admit, I was scratching my head around this one for months, nervous I’d take a whiff here. But then I got on Discord. From my original prediction: “Given the handcuffs 2021 will place on the traditional players in Big Tech, this coming year presents a perfect opportunity for a breakout player to redefine the social media category… It won’t be some ripoff version of what already exists. I’d either look to something like an evolved Signal, an app that already has a growing user base, or a from-nowhere startup that gets super hot, super fast.” Discord is kind of a combination of the two – a six-year-old startup with a dedicated user base that is focused on communications. The platform rethinks nearly everything about the “social graph,” and yes, it’s kind of a hot mess. But by summer of this year, Discord had reached 150 million daily users, putting it within spitting distance of Twitter (200m+) in terms of size. Discord is now valued at $15 billion – and it does not take advertising. For a deep dive on the company, I recommend reading Casey Newton and Packy McCormick.

Unlucky #8: The markets take a breather, and SPACs get a bloody nose. Well, I was right on the latter, but wrong on the former. The markets only got hotter all year long, taking only the shortest of breaks to dip and then roar right back. But SPACs most definitely got bloodied – as early as as February, I noticed the concern in the financial press, and that narrative built all year long, with many high profile SPACs either failing or limping across the finish line. When the bright spot in the SPAC world is Donald Trump’s mostly fictional “social media company” – and that deal draws the interest of the SEC – well, the space ain’t exactly crushing it. But as I said, the markets did not take a breather – the Dow Jones and the S&P delivered nearly 20 percent gains. So I got one part right, and one part wrong. A push.

Prediction #9: 2021 will be prove to be the last year of growth in gas-powered automobiles. Well, there’s no way I can prove this until the numbers come in for 2022, so I won’t bother trying to grade myself on this one. Call it a push, but I’ve been monitoring related news, and I’d say the prediction is certainly on trend. As usual, the Nordic countries led the way. In Norway, EV sales now account for an astounding 90+ percent of new car sales. Cities around the world are banning new gas stations. And GM, one of the largest automakers in the world, announced it will phase out the combustion engine by 2035.  NB: One of the best places to get and stay smart on EVs and de-carbonization in general is Azeem’s Exponential View. 

Proving I should really stay away from geopolitics, Prediction #10: Africa rising, China…in question. I got the headline right – Africa is certainly rising, and China is a big question mark – but my detail was very wrong: “the breakout continent of 2021 will be Africa, home to many of the fastest growing countries in the world, and the focus of years of Chinese investment and diplomacy. After four years of US neglect, the Biden administration will realize it’s dangerously close to losing Africa altogether, and announce a massive investment in the continent.” Nope, did not happen. In fact, Biden decided to counter China in Africa with…an initiative in South America. Whiff. Moving on to my last, and possibly most depressing prediction:

Prediction #11: Everyone loses their shit, in a good way. This was my way of saying that we’d get through the pandemic, and we’d all party like we deserve to party after 18 months of isolation and fear. We had the “hot vax summer” memes but….Delta and vaccine hesitancy killed that cold, then Omicron smacked us once more, even as we looked forward to what could have been a relatively normal holiday season. Ending on a rough note, but – this one was a whiff as well. I’m optimistic we’ll get through this, but I’m done trying to predict the course of this wily virus.

So that’s the scorecard: Two whiffs, three pushes, and six scores. Not bad, in fact better than my average over these past 17 years. Maybe I should do this again. Look for my 2022 musings sometime later this week. And have a happy, safe, and sane New Years everybody. Thanks for reading.

 


 

Previous predictions:

Predictions 2021

Predictions 2020

2020: How I Did

Predictions 2019

2019: How I did

Predictions 2018

2018: How I Did

Predictions 2017

2017: How I Did

Predictions 2016

2016: How I Did

Predictions 2015

2015: How I Did

Predictions 2014

2014: How I Did

Predictions 2013

2013: How I Did

Predictions 2012

2012: How I Did

Predictions 2011

2011: How I Did

Predictions 2010

2010: How I Did

2009 Predictions

2009 How I Did

2008 Predictions

2008 How I Did

2007 Predictions

2007 How I Did

2006 Predictions

2006 How I Did

2005 Predictions

2005 How I Did

2004 Predictions

2004 How I Did