Shared posts

16 Jan 05:25

Our Leaders and the New Morality

by stephen@downes.ca

Today we were witness in Canada to the sight of government and church leaders half-apologizing or non-apologizing for the mass unmarked graves of children who died at their institutes of learning.

These institutes, known as ‘residential schools’, were created with the explicit purpose of erasing the cultural identify of indigenous children by separating them from their families and strictly regulating their learning and behaviour.

Despite being told of the mass graves by witnesses during the Truth and Reconciliation hearings neither government nor religious leaders felt it would be important to search for the children’s remains and acknowledge their deaths.

Now everybody is shocked, but they shouldn’t be. It’s the same pattern of abuse that we’ve come to expect from today’s self-professed guardians of morality.

Police, for example, were first told of the decades of abuse of boys by the Christian Brothers at Mt. Cashel orphanage in 1975, but it was years before anyone heard about it and not until 1989 that some newspapers first began documenting the story.

The abuse by religious leaders was not one of a kind. The story of abusive hockey coaches is well known in Canada and one that continues to surface even this year. There’s missing and murdered Indigenous women. There’s a long list of excessive force incidents by Canadian police. Canadian military leaders have resigned in disgrace after presiding over a culture of sexual abuse.

None of this is meant to diminish the offensiveness of the mass graves and the residential school system. These are in a category of their own (at least in Canada) and are a complete and utter disgrace. It is only to point to a pattern.

It is long past time we stopped looking to government, corporate and religious leaders for any guidance on morality. They have shown us time and again how deeply immoral they have become.

Each time you think there is a line they couldn’t cross, they seem to find a way to sink to new depths of depravity. You would think that scenes of dozens of dead children would have deterred gun rights advocates in the U.S., but they didn’t even slow down. Similarly, the revelation of mass graves has done nothing to deter those who celebrate their authors today.

To be frank, I think the people complaining about ‘cancel culture’ and ‘political correctness’ and saying ‘history is history’ should just shut up.

I, for one, have had it with their fake moralizing. Go peddle your hypocrisy elsewhere. We know who the immoral people are, and it’s not the people calling for diversity, inclusion, equity and reconciliation.

It’s not worth much in the face of such tragedy, but to my Indigenous friends and colleagues, I would like to apologize on behalf of myself and any of my ancestors or compatriots who played any part in this outrage. I’m sorry. Sincerely, genuinely, deeply sorry.

I am committed to genuine truth and reconciliation. At the very least, we can begin with a full and proper investigation, and at the very least, we can stop celebrating the memory and morality of those who perpetuated these crimes. That, at least, would be a start.

04 Jun 18:09

Purism Launches a Privacy-first, Made in USA Smartphone: Librem 5 USA, as an Alternative to Big Tech Offerings

by Purism

Purism’s Librem 5 USA offers consumers a privacy-first smart phone with a secure supply chain CALSBAD, CALIFORNIA, UNITED STATES, June 2, 2021 Purism begins shipping its newest privacy-first smartphone, Librem 5 USA. The smart phone retains the software security and privacy features of the Librem 5 while adding a transparent, secure supply chain with manufacturing in the […]

The post Purism Launches a Privacy-first, Made in USA Smartphone: Librem 5 USA, as an Alternative to Big Tech Offerings appeared first on Purism.

04 Jun 18:09

Manufacturing the Librem 5 USA Phone in the United States of America

by Todd Weaver

Making a phone that avoids Big-Tech spying is one thing (yep, we did that). Making a convergent operating system that is not Android nor iOS is another (yep, we did that too). But manufacturing that phone in the USA is a feat that few thought possible (yep, did that just now). Not only have we […]

The post Manufacturing the Librem 5 USA Phone in the United States of America appeared first on Purism.

04 Jun 18:08

The 3 Questions I Ask When Interviewing Job Candidates

by The NYT Open Team
Illustration by María Medem

By James G. Robinson

Whenever I hire a data analyst for my team at The New York Times, I find myself inundated by a stack of resumes, LinkedIn messages and personal notes from colleagues recommending people they know.

It can be very difficult to sift through an often overwhelming pile of applications, but those candidates who make it through The Times’s screening process and SQL assessment can expect a 30-minute interview with yours truly. I really look forward to that conversation, as it’s the first chance for me to get to know the person behind the paperwork.

If you are one of those candidates, good news: I’m going to tell you what questions I will ask and what I’m looking for as we chat. I have come to rely on these three questions after nearly 15 years of interviewing candidates for analytics jobs at The Times, and I use them for almost every interview.

Why share these questions? One reason is because I think other hiring managers might find them thought provoking and useful, but mostly, I share them because I want you to succeed. My goal in interviews is to find great people to join our team, not to trip you up in some booby-trapped maze.

After all, I’m not just evaluating you as an employee; hopefully, you’re evaluating me as a manager, too.

Tell me a story.

The Times is known for its great storytelling, and I believe that the jobs of an analyst and a journalist are very similar. We both use critical thinking and smart investigative techniques to better understand the world around us, and it’s our job to clearly communicate the insights we uncover in compelling ways.

My first question is: “Tell me a brief story about the most surprising insight you ever developed: how you came to uncover it, how you communicated it and why it surprised you.”

Every word in this question is important. The story you share should be told well, it should be brief and it should grab my attention. Most importantly, it should be surprising.

Why surprising? Two reasons.

For something to be surprising, it must run counter to some existing belief. All analyses should start with a hypothesis — such as an assumption, an existing habit or some piece of conventional wisdom — that we can test with data. To be surprised, you must have given some thought to what you might find, and that means you probably cared enough about the outcome to develop the hypothesis in the first place.

But in addition to your hypothesis, your story must also have an element of discovery. Data analysts are at our best when we uncover hidden truths about the world we inhabit. We do not merely exist to confirm preconceptions — that would be a pretty boring career — we exist to challenge the status quo, to reveal new paths and to bring clarity to obfuscation.

Unfortunately, very few applicants are able to tell a clear and compelling story. They ramble. They try to impress me with complicated technical skills or obscure data science algorithms, which leaves big gaps and often, sadly, lacks the requirement of surprise.

Interviews can be tricky, stressful and exhausting, and I know this question is difficult. That’s exactly why I don’t want to put you on the spot. I want you to nail this question. It’s OK to prepare in advance. Just bring me a story.

I want you to be selfish.

My second question is: “If you take this job, what’s in it for you? What would you like to get out of it beyond a paycheck? How will this help you grow?”

Most applicants give a version of the same answer: that they are motivated by The Times’s mission and the opportunity to contribute. That’s great; it’s one of the reasons I enjoy working here. But, I’m not asking how great The Times is — I’m asking about you.

The best answers I have heard to this question showed that the candidate was curious, ambitious and sought out opportunities that would expand their knowledge. I have also heard candidates say that they want to improve their programming skills or learn more about data science. Those are fine answers, if that’s what you really want. Ultimately, I want to hear that you’re driven to learn and grow — in a way that’s specific and meaningful to you.

Why? Because curiosity is a core characteristic of a good analyst, and ambition for personal growth indicates both an openness to new challenges and a willingness to learn. Most of all, it shows that the job will be rewarding for reasons beyond the paycheck.

After all, none of us should be under any illusions that you will be doing this job forever. My hope is that the role will challenge you to not only deliver great work, but develop the skills that will help you move on to bigger and better things in your career.

My last question isn’t a question at all.

It’s a chance for you to ask questions of me.

I like to leave a lot of time for this. If we can switch to your questions after 15 minutes, we’re doing great: you have told me a succinct story and you have given me a glimpse at your ambitions. It’s your turn to lead the conversation.

In many ways, this is the most important part of the interview. Asking questions is an essential skill any analyst should have.

A candidate who asks good questions reveals an interest and passion for the role that can’t be faked. It shows they care enough about the opportunity to try to understand it fully. Smart, specific questions show that they have done their research in advance; that they are truly curious about what it might be like to work at The Times. And what they ask can help me learn more about them.

I don’t think it’s a coincidence that my best hires have asked the most questions. One even came prepared with three pages of double-spaced questions, and we had to schedule a second interview so I could answer them all. (We hired her. She was great.)

Perhaps most importantly, I want you to approach this opportunity with your eyes wide open. If we’re going to work together, we need to be able to communicate with candor and respect. So, I try to answer every question honestly. Hopefully, by engaging in an open conversation from the start, I’m setting the tone for a great working relationship — one in which we’re both invested in each others’ success.

It’s important to note that this is just one of many interviews you will have if you apply for a data analytics role at The Times. Every one of my colleagues on the hiring panel listens for something specific, and the feedback that we collectively provide informs the decision whether to move forward.

The questions I ask aren’t foolproof and they may not work for everyone, but they work for me. And if we happen to meet for an interview — perhaps for the role I’m hiring for now or maybe another one in the future — I hope they will help us get to know each other a little better.

James G. Robinson (@JamesGRobinson) has spent over 15 years in a variety of analytics roles at The New York Times and he currently leads product development for the company’s internal data visualization team. James is also an adjunct professor at Columbia University’s School of Journalism and the author of “The Audience In the Mind’s Eye: How Journalists Perceive Their Readers”, published in 2019. His essay, “Road To Recovery,” was cited as a notable story in The Best American Travel Writing 2018. He is currently working on a memoir.


The 3 Questions I Ask When Interviewing Job Candidates was originally published in NYT Open on Medium, where people are continuing the conversation by highlighting and responding to this story.

04 Jun 18:07

Our IRC channels have moved to Libera.Chat!

by Diaspora* Foundation

Of our various communication channels, IRC is the one with real-time communication. An "IRC channel" is a simple text-based chatroom - perfect for a quick chat that doesn't need to be stored for others.

IRC is not a new communication tool for diaspora*, we just moved from the freenode network to Libera.Chat. If you have already used our IRC channels in the past, please update your settings to our new location!

If you want to join the chat without downloading anything extra, just click the link below, enter your nickname, and start the chat!

https://web.libera.chat/#diaspora

If you use an IRC client, the new details are:
Server: irc.libera.chat
Port: 6697 (TLS)
Channel: #diaspora

We'd love to see some of you there!

Our primary place for all project discussions is still our Discourse, which is a great location to store all relevant discussions and give people the option to engage regardless of their time zones.

You can find an overview of all our communication channels here.

04 Jun 18:07

2021-06-02 General

by Ducky

Vaccines

This preprint says that in a very small study (26 participants) in Germany, a Pfizer boost after an AZ prime gave fewer side effects than the first dose (AZ). Based on in vitro measurements, AZ+Pf appeared to be at least as good as AZ+AZ. Antibodies were three times higher in AZ+Pf than AZ+AZ, and were good against the scary Beta and Delta strains.


Israel believes that there is a rare but genuine link between the Pfizer vaccine and heart inflammation in young men.


This preprint says that several different single-coronavirus vaccines (SARS-CoV-1, SARS-CoV-2, a “common cold” coronavirus) gave protection against several different coronaviruses. This gives hope for a pan-coronavirus vaccine.


This paper says that no, vaccines do not harm the placenta.


This article says that it looks like Sinovac is pretty crappy, with effectiveness against symptomatic infection right around 50%, at least in Brazil. However, other trials in other places showed an effectiveness of ~83%, and it does a great job of preventing severe illness.


This Letter reports that 2.6% of health care workers with one dose of AZ got COVID recently, and 1.6% with two doses plus two weeks, vs. 3.98% who were unvaccinated.

Variants

More info that the Delta strain (B.1.671.2) is taking over in India (from this tweet thread):

That thread also calculates a transmission advantage of about 78% over Alpha (B.1.1.7) for the Delta strain. Ulp.

Testing

This paper says that an “electronic nose” could sniff out COVID-19 at a better than chance rate (66.7% for symptomatic and 75.8% for non-symptomatic).

Mitigation Measures

It turns out that if everybody stays at home, crime rates drop.


This article says that zoos in Sri Lanka have seen 25% more births in the absence of voyeurs tourists.


If your loved one’s estate got a relief check from the Canadian government, you don’t need to pay it back. NB: My US-citizen mother got a US stimulus check even though she died the year before, and it was a real hassle to return it because the IRS offices were closed due to the pandemic for a while!

Possible Next Pandemics

This article says that a man has fallen ill with a novel strain of bird flu – H10N3. They haven’t seen human-to-human transmission, however. Yet.


Huh. Influenza rates are waaaaaaaay down from two years ago because COVID-19 mitigation measures work even better against influenza. Influenza has different major subgroups (“clades”), and it looks like one of the clades (B/Yamagata) might have just completly died out!

04 Jun 18:07

Support Tickets and Data

by Richard Millington

The Vanilla blog points us to some interesting customer support data:

  • The average support employee can handle 21 tickets per day.
  • The average response time is 7 hours and 4 minutes.
  • The average resolution time is 3 days and 10 hours.

If the goal of your community is solely to provide support to customers, these are the metrics to beat.

The post Support Tickets and Data first appeared on FeverBee.

04 Jun 18:07

Myth of the Asian American model minority, explained with charts

by Nathan Yau

Asian Americans are often viewed as a “model minority”, but when you look, just a little bit closer, the tag doesn’t fit. Connie Hanzhang Jin for NPR breaks it down in a set of six charts.

Tags: Asian, Connie Jin, model minority, NPR

04 Jun 18:07

On the WatchList: VisualPython

by Tony Hirst

A fragmentary note to put a watch on Visual Python, a classic Jupyter notebook extension (note that.. a classic notebook extension) to support visual Python programming:

It’s a bit flaky at the moment — the above screenshot shows multiple previews of the selected function code, and the function preview doesn’t properly render things like the function arguments (nor could I get the function to appear in the list of user defined functions), but it’s early days yet.

At first, a blocker to me in terms of suggesting folk internally have at a look at it right now included the apparant inability to define a variable by visual means (all I wanted to do was set a=1) or clear the notebook cells when I wanted to reflow the visual program into the notebook code cell area.

But then I twigged that rather than trying to create a complete program using the visual tools, a better way of using visualpython might be as a helper to code fragments for me in particular use cases.

In the example below, I created the dataframe manually and then used the editor to create a simple plot command that could be inserted into a notebook code cell. The editor picked up on the dataframe I had defined and used that to prepopulate selection lists in the editor.

If the environment becomes the plaything of devs looking to put complex features into the environment, seeing it as a rich power tool for them (and contra to their beliefs, an increasingly hostile environment to novices as more “powerful” features are added and more visual clutter to the environment to scare the hell of users with things that at irrelevant), then the basic usability required for a teaching and learning environment will be lost if users see it as a tool for creating complete programs visually.

For the developers, it’s all too easy to see how the environment could become as much a toy for adding yet more support for yet more packages that can be demonstrated in the environment but never used (because the power users actually prefer using autocomplete in a “proper IDE”) rather than being simplified for use by novices with very, very, very simple programming demands; (just think of the two, three, four lines of code examples that fill the pages of introductory programming text books).

If folk do want a visual editor for data related programming, wouldn’t they use something like Orange, enso, or the new JupyterLab based orchest?

orchest-0.3.0-demo
orchest: JupyterLab visual pipleine programming environment

But if you see the Visual Python editor as a tool at the side that essentially operationalises documentation lookup in a way that helps you create opinionated code fragments, where the opinion is essentially a by prodcut of the code templates that are used to generate code from particular visual UI selections, then I think it could be useful as a support tool for creating code snippets, not as an authoring tool for writing a more complete program or computational analysis.

So what will I be watching for? User uptake (proxied by mentions I see of it), some simple documentation, and perhaps a two minute preview video tour (I’m not willing to spend my time on this right now because I think it needs a bit more time in the oven…). The usability should improve as novices get confused and raise issues with how to perform the most basic of tasks and as the noosphere finds a way to conceptualise the sort of usage patterns and workflows that VisualPython supports best.

My intial reaction was a bit negative — it’s too visually complex already for novices, and some really basic usability issues and operations are either missing or broken, if you see it as an editor for creating complete programs. But if you view it as a code generating documentation support tool that lets you hack together a particular code fragment with visual cues that you might otherwise pick up from from documentation, documentation code examples or simple tutorials, then I think it could be useful.

Hmmm… Another thing to try to get my head round in the context of generative workflow tools…

04 Jun 18:06

Moby :: Reprise

by Volker Weber

Was für ein fantastisches Album, was für eine fantastische Aufnahme, erschienen bei Deutsche Grammophon, auf Apple Music als Digital Master, bei Youtube werbefinanziert als Playlist. Es lohnt sich, den guten Kopfhörer rauszuholen.

04 Jun 17:54

jupyterlite — “serverless” Jupyter In the Browser Using Pyodide and WASM

by Tony Hirst

Several years ago, a Mozilla project announced pyodide, a full Python stack, compiled to WebAssembly / WASM, running in the browser. Earlier this year, pyodide was spun out into its own community governed project (Pyodide Spin Out and 0.17 Release) which means it will now stand or fall based on its usefulness to the community. I’m hopeful this is a positive step, and it’ll be interesting to see how active the project becomes over the next few months.

Since then, a full scipy stack appeared, runnable via pyodide, along with the odd false start (most notably, jyve) at getting a Jupyter server running in the browser. Originally, pyodide had supported its own notebook client (indeed, had been created for it) but that project — iodide — soon languished.

As I haven’t really been Tracking Jupyter since summer last year, there are probably more a few projects ticking along that I missed the earliest of signs of and that have only now come to my attention through occasional mentions on social media that have passed my way.

One of these is jupyterlite (docs), “a JupyterLab distribution that runs entirely in the browser built from the ground-up using JupyterLab components and extensions”. It’s not classic notebook, but it does suggest there’s a running jupyter server available as a WASM component…

So why is this interesting?

To run a Jupyter notebook requires three things:

  • a client in the browser;
  • a Jupyter server to serve the client and connect it to a kernel process;
  • a computing environment to execute code in code cells (the kernel process).

If you access a hosted Jupyter environment, someone else manages the Jupyter server and computing environment for you. If you run notebooks locally, you need at least a Jupyter server, and then you can either connect to a remote kernel or run one locally.

To run a multi-user hosted server, you need to run the Jupyter server, and potentially also manage authentication, persistent storage for users to save their notebooks, and the compute backend to serve the kernel processes. This means you need infrastructure of the hard kind (servers, storage, bandwidth), and you become a provider of insfrastructure of the soft kind (jupyer notebooks as a service).

With Jupyter running in the browser, using something like Jupyterlite, all you need is a web server. Which you’re probably already running. The notebook server now runs in the browser; the kernel now runs in the browser; and the client (JupyterLab) continues to run in the browser, just as it ever did.

In JupyterLite, storage is provided by the local browser storgae, which means you need to work with a single browser. (With many browsers, such as Chrome, now offering browser synchronisation, I wonder if the local storage is synched too? If so, then you can work from any browser you can “log in” to to enable synchronisation services.)

To my mind, this is a huge win. You don’t need to host any compute or storage services to make interactive computing available to your users/students/learners: you just need a webserver. And you don’t even need to run your own: the jupyterlite demo runs using Github pages.

jupyterlite demo running on Github Pages

For open education, this means you can make a computing environment available, in the browser, using just a webserver, without the overhead, or security concerns, of running a compute backend capabale of running arbitrary, user submitted code.

So that’s one thing.

For learners running things locally, they just need a simple web server (I think this requires serving: clicking on an HTML document to open it in a browser may hit browser issues that expect content served with a particular MIME-type).

A simple web server is the sort of thing that can be easily packaged and distributed, but it still presents something of an overhead in terms os downloading, installing and then running the service.

Perhaps simpler would be distributing the application as a cross-platform electron app? As far as I know, jupyerlite isn’t (yet?!) packaged that way, but there is at least one demo out there of pyodide bundled inside an electron app: inureyes/pyodide-console (presentation). So it’s not hard to imagine bundling and distributing jupyterlite the same way, although the practicalities may prove fiddly. (Or they may not…)

“So what?”, you may say. “If we’re giving students access to anaconda anyway, what benefit does this bring?” Leaving aside the huge questions I have about using things like Anaconda, not least their lack of generality compared to distributing environments using docker containers, for example, and notwithstanding the ability to be able to provide computing environments purely withing the browser as noted earlier, the availablity of a Jupyter server and Jupyter kernel running in the browser makes other things possible, or at least, allows us to entertain the idea of other applications with a view to seeing if they are realisable.

Hmm… maybe chrome can provide the webserver itself?

So what might those things be? Off the top of my head, and without any serious thought at all, several things come immediately to mind.

Firstly, the possibilty of the cross-platfrom electron distribution (which is essentially an application container wrapping a chrome browser and a simple web server).

Secondly, and nosing around a little, there are already VS Code extensions that seem to be riffing on using jupyterlite too; so if you have access to VS Code in the browser, you could perhaps also install a pyodide jupyter kernel and run notebooks using that in VS Code in the browser. (I’m not sure if you can host VS Code using just a simple web server or it needs a nodejs server app?)

Thirdly, it’s not hard to imagine a route towards making interactive books avaliable and served just via a web browser. For example, a jupyter book UI where rather than  having to hook up to a remote jupyter server to run (editable) code cells from the page using thebelab you could just run the cells against the WASM run kernel in the browser. (What would be required to make a thebelab like javaascript package that would allow a Jupyter Book to connect to a jupyterlite server running from the same browser tab?) It would then be possible publish a fully interactive textbook using just a simple web server and no other dependencies. The only piece missing from that jigsaw would be a Jupyter Book extension to allow you to save edited code cells into browser storage; and maybe also add in some means of adding / editing additional html cells (then at a later date adding support for markdown, perhaps).

The availability of a thebelab like package to connect to an “in page” Jupyter environment also means we can support on demand executable code from any code bearing HTML page, such as content pages with code examples in a VLE web page, and without the need for backend server support.

Finally, institutionally, jupyterlite makes it possible to publish a simple Jupyter environment directly from the VLE as a “simple” html page, with no compute backend/traditional Jupyter hosting requirement on the backend. The compute/storage requirement must be provided by the end user in the form of a recent browser and a computer that can cope with running the WASM enviornment inside it.

Related: Fragment – Jupyter Book Electron App.

04 Jun 17:53

My words have meaning, your parrot’s do not. Wittgenstein explains

Stephen Law, Psyche, Jun 03, 2021
Icon

For me the key message of Wittegenstein's slogan 'meaning is use' is that the meaning of a word or sentence is not inherent in the word or sentence, but rather depends entirely on how the reader or listener regards, interprets or recognizes that word or phrase. We might say, defining this externally, that meaning is determined by context or community agreement. This is the approach taken in this article. And there's an element of truth to that. But there is also an element of infinite regress; at some point we have to ask what a word means for me and at that point the externally defined criteria must give way to a story about experience and recognition..

Web: [Direct Link] [This Post]
04 Jun 17:46

Passport

by Ben Thompson

Announcing Passport, the new infrastructure supporting Stratechery.


Seven years ago, when I initially launched the paid Daily Update, there weren’t really any tools designed for independent subscription businesses; my solution has incorporated a number of disparate services tied together, and while new companies have been formed around both paid newsletters and paid podcasts, no one has created a service for a site like Stratechery. So I decided to build it. It’s called Passport.

 

Passport is the new back-end for Stratechery

 

Stratechery, in a literal sense, is a website; you can choose to receive content from that website via email and, as of a year ago, podcast. Stratechery in a figurative sense, though, is my home on the Internet, a spot on the infinite digital frontier that is mine. This speaks to the first reason to build my own solution: while WordPress, the CMS that underpins Stratechery, is open source, and thus something I can control, the various services I used to manage subscriptions and send email were not; I wanted to rectify that.

The second reason to build Passport is to provide a better experience for my subscribers. One of the downsides of relying on a menagerie of different services is that there were both more rough edges exposed to users, and also an inability to provide more personalized offerings. Passport is an improvement on both fronts.

The third reason to build Passport is to expand my capabilities as a creator. It is valuable to make it easy to get started (Passport has a learning curve) but there is room for more powerful tools that let creators do more, from the ability to fully customize a website to a powerful templating system to single sign-on capabilities. Passport is enterprise software for creators.

Integrated Communications via Open Protocols

While Stratechery started as only a blog, the reason why it became strongly associated with newsletters is that folks realized that your email inbox was the only feed users checked daily that wasn’t a closed garden. Sending out posts via email meant that subscribers didn’t need to remember to visit your site; publishers can meet their readers where they are.

Last year Stratechery expanded on this concept with the Stratechery podcast; while the content was the same as the web or email, the medium — spoken word — was not, which meant that Stratechery could fit into that many more places in a subscriber’s day. Podcasts, like email, were also built on an open standard, which meant reaching users on their terms, not a gatekeeper’s terms.

However, as the world becomes increasingly mobile-centric, more and more communication happens via messaging; notifications are the new inbox. And, while many of these notifications come from closed messaging services, there remains one open option: SMS. While SMS isn’t free to use, it does not have any gatekeepers, which makes it an attractive option for the independent creator.

Passport integrates all of these open communications channels into one service, providing a seamless experience for both me as publisher and my readers. Start with the member app, where subscribers can decide which types of content they wish to receive in which medium:

Members can choose what content to receive where

In this case the subscriber has chosen to be notified immediately about Weekly Articles and receive Daily Updates via email, unless they are an interview, in which case the subscriber prefers to listen via podcast (this subscriber’s podcast feed will only contain Interviews, not other episodes). As for the Weekly Article, the link in the text message will load the Weekly Article directly:1

Get notifications about Stratechery articles via SMS

Weekly Articles are of course free to access; a more challenging situation is when the subscriber wants to access subscriber-only content. For example, the subscriber may be listening to a Daily Update Interview, and wish to read the transcript; they can simply go to the show notes, click the link, and view the post on Stratechery:

Links from your feed or emails always log you in automatically

Notice that the user is viewing subscriber-only content within their podcast player, despite the fact they never previously logged-in within that webview; that is because every link is unique to that user, making the integration with the Stratechery website completely seamless. This capability also means that every communication, from podcasts to RSS to email, can be customized to the user:

Passport customizes content to Stratechery subscribers

One of the tenets of subscription-based businesses is that you want to have a one-to-one connection with your users; the reality of Stratechery previously is that I had a relatively dumb paywall, was sending out undifferentiated email blasts, and had a one-size-fits-all podcast. Passport enables true one-to-one communication at scale, across every open protocol available to creators.

Sovereign Creators and Visas

There are two implications to the name “Passport”: first, while sovereign countries issue physical passports, sovereign creators (whether they be individuals or publications) issue online passports to website and communications channels that they own. Secondly, though, is the concept of visas: in the real world visas let you into other countries; in the online world, visas give you access to other sites and services. Stratechery is launching with three real-life examples:

Passport-to-Passport

A Passport-powered site like Stratechery can sell subscriptions to a different Passport-powered sites like Dithering (with permission, of course). For example:

  • Dithering and Stratechery have agreed that Stratechery subscribers can “Add-on” Dithering for $3/month, instead of the normal $5/month
  • Once the add-on is purchased, the subscriber goes to Dithering’s Passport to get their personalized feed; Dithering controls the content relationship
  • However, if the user tries to manage their subscription at Dithering, they are sent back to Stratechery, which owns the billing relationship

How Dithering and Stratechery split the content and billing relationship between a shared customer

These interactions are peer-to-peer, and under the complete control of the sovereign Passport owners.2

OpenID and Discourse

Passport can serve as a single sign-on authenticator for any service that supports OpenID, like, for example, the Stratechery forum, which is based on Discourse. When you want to visit the forum at forum.stratechery.com, you will be presented with a Stratechery Passport login screen; enter your credentials and you are good to go:

Single sign-on with Passport

This required zero interaction with Discourse’s developers; it just worked.

OAuth and Spotify

In April Spotify announced the Open Access Platform:

Are you a creator or publisher who has subscribers elsewhere? We’re also working on technology that will let your listeners hear your content on Spotify using your existing login system. This gives creators with existing subscriber bases the option to deliver paid content to their existing paid audiences using Spotify, retaining direct control over the relationship.

I wrote at the time in Spotify’s Surprise:

For full disclosure, I have been briefed on the Open Access Platform, and Spotify has addressed all of my concerns; no, they won’t support arbitrary RSS feeds, but instead another open technology — OAuth. Some time soon Stratechery and Dithering subscribers will be able to link their subscriptions to their Spotify accounts, and Spotify isn’t going to charge a dime — they will be my customers from email address to credit card. Spotify Chief R&D Officer Gustav Söderström told me, “Having all of audio on Spotify means meeting independent creators on their terms, not ours.”

That “some time soon” is today: you can now select Spotify from your Delivery Preferences page, from whence you will be able to link your Stratechery account to your Spotify account, and listen to the Stratechery Podcast in Spotify (everyone can listen to the free Weekly Articles):3

Listen to Stratechery (and Dithering) on Spotify

In the interest of even fuller disclosure, Spotify first proposed an OAuth-based solution to me in February after the company’s Speak-On event; I had in fact already been working on the OAuth-based Passport for multiple months, so it was a very fortuitous circumstance that we both independently reached the same conclusion about how Aggregators could work with sovereign creators on a technical level. I am hopeful that other Aggregators will take the same enlightened self-interest approach to working with sovereign creators.

Passport’s Future

The other thing that makes Passport distinct from other subscription management services is that Passport isn’t a subscription manager at all; Stratechery happens to be powered by Stripe Billing, but Passport in principle can work with any subscription management service (that is why, for example, one Passport can create visas for another Passport). Passport could work with in-app purchasing, a publication’s existing subscription management system, or even other subscription management services. Remember, Passport’s integration is between member management and open communications tools; everything else attaches via API (including the optional CMS).

This also means that Passport offers a full-fledged experience for free members; you don’t have to be a subscription-based site to use Passport, or if you are (like Stratechery), you can still offer a great experience to folks who haven’t yet pulled out their credit card. And, if free members do decide to subscribe, they don’t have to re-add their feeds or update their contact information; they will instantly start receiving members-only content.

This also means I can offer free-content beyond what is available by default; for example, if you want to stay in the loop about Passport, you can now add a free Passport plan to your membership:

Become a free Stratechery member to get updates about Passport

Sign up for a Stratechery account, then add the Passport plan; this will be the best place to stay abreast of Passport development, including my hope to release an open-source project to ensure that every creator has the same option for total independence that I have now achieved.4

Alan Kay famously said, “People who are really serious about software should make their own hardware”; my variation is that creators who are really serious about building a career on the Internet should own their own software. I can now speak from experience when I say it’s one of the best feelings in the world.

I once again want to thank Jon Thies and Rob Rodriguez for building Passport with me, and to Daman Rangoola for his untold number of contributions to every aspect of both Stratechery and Passport.


  1. Yes, a link shortener is in 1.1 😊 

  2. Stratechery and Dithering are currently cheating and sharing a Stripe account, but that is because that was the only way to support bundling with my previous service; in the very near future this will work across distinct Stripe accounts 

  3. The ‘Email’ field in this screenshot, by the way, is independent of the ‘Account Email’ field; now you can easily send Stratechery to your Kindle, read-later service, or manage an account for someone else. 

  4. And remember, you can turn off all of the Stratechery content if you want to! 


Subscription Information

Member: Roland Tanglao
Email: rolandt@gmail.com

Manage your account

04 Jun 17:45

Beyond COVID: Reimagining Our City Centres 

by Gordon Price

While we don’t know what these next few months will bring, or exactly when our cities will open, there is a growing opportunity now to identify how they will open when they do.

Come join other residents and share your thoughts and ideas about how we can revive our city centres.

Hosted by the SFU Morris J. Wosk Centre for Dialogue, SFU Public Square and our community and campus partners, Beyond COVID: Reimagining Our City Centres will be a fun, creative virtual dialogue, where you get to play the role of city planner and share ideas for restoring and revitalizing your city centre.

This is a chance to dream the possible—for ourselves and for generations to come.

This event is free, and no experience is necessary. Just bring your imagination! Don’t want to join alone? Bring a friend.

 

You will be prompted to select your session during registration.  Click here.

Vancouver: Monday, June 14 from 10:00 a.m.–12:00 p.m.

Surrey: Tuesday, June 15 from 10:00 a.m.–12:00 p.m.

Burnaby: Wednesday, June 16 from 10:00 a.m.–12:00 p.m.

 

 

04 Jun 17:44

Going to the Office Is So Over. Here Are Five Remote Jobs

by Christina X. Wood

Not ready for the office? Here are five interesting jobs you can do from home

As the economy gears back up, the news is full of reports that people don’t want to go back to the office. In fact, one in four people is considering quitting their job, mostly because they want work that’s more flexible. One study found that the emerging workforce considers flexibility a “right” and won’t consider any job that isn’t flexible.

So if you are faced with an imminent return to your office, and you are dreading it, know that you have options. Having a schedule that meets your family’s demands and that lets you be there for your kids, teens, or pets is totally reasonable. And many companies spent the last year learning this and are rising to the occasion and creating work that works for people who have lives outside of work.

Flexjobs always has jobs that fit this description. But here are five that are fun and that you might never have thought of.

Stylist for Amazon

Are you the person everyone calls during a fashion crisis? That’s a career, now, apparently. And Amazon is hiring for this role because who doesn’t need help deciding what clothes to buy there? This remote, part-time job will have you offering fashion advice to shoppers and curating outfits.

TikTok Content Creator

Are you killings it on TikTok? Did you know that people will pay you to do that? In this part-time, remote job, you will develop content to grow TikTok audiences for a brand, respond and engage in real-time to posts, and make sure the content follows the brand’s identity.

Home Stylist

Is your home so Pinterest ready that you can’t leave it to go back to your interior designer or home furnishings job? This remote job will let you work online through the company’s platform to create designs for clients and source furnishings and décor from retail, trade, and wholesale vendors.

Graphic Designer

Not ready to go back to your agency job? Go remote. These remote graphic design jobs will have you designing app storefronts and banners for global campaigns while you work as part of a remote team.

Curriculum Developer

It’s been a rough year for teachers. But, on the plus side, you have remote teaching experience now and that’s probably something you can turn into a remote job like these, developing curriculum for online course work.

04 Jun 17:34

How to buy a used car or a house — managing risk with online and offline resources

by Josh Bernoff

I just bought a used car and I’m on the verge of buying a used house. Making such purchases requires lots of information. You can’t collect it all online, but it sure helps. Because I’ve been alive for more than 60 years, I am used to making big purchases with lots of personal hand-holding and … Continued

The post How to buy a used car or a house — managing risk with online and offline resources appeared first on without bullshit.

04 Jun 17:33

Paying for Drinks

A lot of my stories aren’t true, but this is a true story. In the summer of 1985 I was at a bar in Ottawa with a couple of people I knew and a few others I didn’t. One of the guys at our table had been reading Ayn Rand and started going on (and on) about the evils of the welfare state and how people should look out for themselves rather than relying on government coddling.

As he was talking, one of the women in the group slipped his wallet out of his jacket (which was hanging on the back of his chair), emptied it of cash, and then called the waitress over and ordered a round of rather expensive drinks. She waited until the drinks arrived to tell the guy that he’d bought them. He became rather irate, but every time he told her she had to pay him back she calmly said, “Oh yeah? Make me.”

I’m pretty sure that if it had been another guy he’d have gotten physical. I’m equally sure that he didn’t really get the point she was making, and I wonder sometimes if he ever did.

I think about that incident every time I hear that conservatives are going to cut education or health care or public transit or voting rights. They know that when push comes to shove, they will be looked after: they know that if hardship ever touches them the government will step in with farm subsidies and bank bailouts. It won’t be called welfare, because welfare’s for the weak, but they will always get help when they need it.

04 Jun 17:32

The Ghosts in the Debugging

A couple of days ago I tweeted:

I would trade my left nostril for a decent book on debugging. (I realize that’s not much of an incentive for potential authors, but I hope it’ll be taken as a sign of how desperate I am.)

An hour or so later I followed up with:

My apologies to people who have written good books on debugging - there are several, and I shouldn’t have implied there weren’t. What I should have written was “another dozen good books on debugging” and specified what I meant by “good”. My bad.

Before I go on to the main point of this post I’d like to reiterate that apology and point at the books I know of:

I reviewed all four of these for Doctor Dobb’s Journal when they first came out; I apologize again to their authors. But these books are all more than a decade old; I don’t know of anything useful that’s appeared more recently except for The Fuzzing Book and The Debugging Book (both of which are works in progress from Andreas Zeller and colleagues). A quick check on an online bookstore tells me that in the time it’s taken our profession to write six books on debugging, we have written over a hundred on compilers and a roughly equal number on operating systems. Again on Twitter:

I used to think the reason there are several hundred books on parsers and compilers in print but only a handful on debugging stems in part from the fact that debugging doesn’t have a mathematical foundation (i.e., there are no theorems to prove). But I no longer think that’s the case - there are lots of good books on the practical aspects of operating systems and network stacks, for example. My current theory is that debugging is mostly about verbs rather than nouns, and we’re just not very good at teaching verbs. We do a much better job of teaching code than teaching coding: for example, there are a gajillion tools for checking style, but I don’t know of any that watch the order in which you write things and says, “Maybe you should have written this before that.”

Mark Guzdial replied:

I have a hypothesis that we can’t teach debugging. We can teach a debugging process as rules (“When you see this, do that”), but we can’t teach [students] to be successful debuggers. Debugging is a process of looking at a situation, noting that it’s wrong, and developing a theory for why… You have to know enough patterns/situations to see what’s wrong and to match to a known pattern, re: Marton’s Variation Theory. The more you know, the more you realize what can go wrong, and better you are debugging… You become better at debugging by knowing more ways to do things and learning more ways that things can go wrong. So we become better at debugging by developing more domain knowledge, not by studying debugging.

While I’m reluctant to disagree with Mark (who knows more about education than I ever will), I’ve helped people debug systems in languages I didn’t speak and in domains I’d never worked in, so I think there is some useful generic skill there. I’ve also seen people teach others how to analyze chess positions or criticize a literary work; rather than enunciating rules, they carefully select interesting cases and draw attention to features of interest. They’re not trying to pass on algorithm: they’re training the neural network between the student’s ears.

The best example of this approach I know of in computing is Jeff Johnson’s wonderful book GUI Bloopers. Rather than trying to teach user interface design directly, Johnson thinks through the shortcomings of some real-world interface elements (e.g., the font selection dialog in Microsoft Word) and shows readers what he would do instead. Of the debugging books I mentioned earlier, only Barr’s Find the Bug makes this approach central: with apologies for the generalization, the other books use examples to illustrate big ideas, while Johnson and Barr derive big ideas from examples.

All of which brings us to a great blog post from Vicki Boykis about the difference between implicit and explicit knowledge and about what she calls “ghost knowledge”: the implicit knowledge that nobody in your field ever writes down. Her focus is data science, but what she says applies to debugging as well. I believe that indiviual practitioners know a lot that could be taught explicitly—they just don’t write it down. More specifically, I hypothesize that:

  1. The more domain knowledge you have the more effectively you can debug, but there is a domain-independent “how to find and fix the problem” skill and people can learn it.

  2. The best way to teach that skill is to think aloud through carefully-selected case studies. Learners can only apply general rules about debugging after seeing a large number of case studies. (I say “apply” rather than “understand” because I think it’s possible to understand something in the abstract but not know how to use it in the concrete.)

  3. Debugging is not taught in most college and university computer science programs because case-based instructions feels like stamp collecting to people who aren’t used to it and whose discipline looks to mathematics rather than medicine for pedagogical inspiration.

The first two are testable (I’m exploring the first one with some colleagues right now). I think, or at least I hope, that the third is fixable, which is part of why I’m reading everything I can find on implementation science and its application to higher education. I’ll let you know what I find…

04 Jun 17:31

And Another Bibliography

I've actually been working on two books to take advantage of my unexpected leisure. This one is about software design, and you can read it at <https://stjs.tech>; its bibliography is shorter than yesterday's, but I hope it's just as useful.

  • Dave Binkley, Marcia Davis, Dawn Lawrie, Jonathan I. Maletic, Christopher Morrell, and Bonita Sharif: "The Impact of Identifier Style on Effort and Comprehension". Empirical Software Engineering, 18(2), 2012, 10.1007/s10664-012-9201-4.
  • Stewart Brand: How Buildings Learn: What Happens After They're Built. Penguin USA, 1995, 978-0140139969.
  • Amy Brown and Greg Wilson (eds.): The Architecture of Open Source Applications: Elegance, Evolution, and a Few Fearless Hacks. Lulu, 2011, 978-1257638017.
  • Amy Brown and Greg Wilson (eds.): The Architecture of Open Source Applications: Structure, Scale, and a Few More Fearless Hacks. Lulu, 2012, 978-0201103427.
  • Amy Brown and Michael DiBernardo (eds.): 500 Lines or Less: Experienced Programmers Solve Interesting Problems. Lulu, 2016, 978-1329871274.
  • Mario Casciaro and Luciano Mammino: Node.js Design Patterns (3rd edition). Packt, 2020, 978-1839214110.
  • Rob Conery: The Imposter's Handbook: A CS Primer for Self-Taught Developers. Independently published, 2021, 979-8708185266.
  • Ashley Davis: Data Wrangling with JavaScript. Manning, 2018, 978-1617294846.
  • Michael C. Feathers: Working Effectively with Legacy Code. Prentice-Hall, 2004, 978-0131177055.
  • Davide Fucci, Giuseppe Scanniello, Simone Romano, Martin Shepperd, Boyce Sigweni, Fernando Uyaguari, Burak Turhan, Natalia Juristo, and Markku Oivo: "An External Replication on the Effects of Test-driven Development Using a Multi-site Blind Analysis Approach". Proc. ESEM'16, 10.1145/2961111.2962592.
  • Davide Fucci, Hakan Erdogmus, Burak Turhan, Markku Oivo, and Natalia Juristo: "A Dissection of the Test-Driven Development Process: Does It Really Matter to Test-First or to Test-Last?". IEEE Transactions on Software Engineering, 43(7), 2017, 10.1109/tse.2016.2616877.
  • Brendan Gregg: Systems Performance: Enterprise and the Cloud (2nd edition). Pearson, 2020, 978-0136820154.
  • Daniel Jackson: Software Abstractions: Logic, Language, and Analysis (revised edition). MIT Press, 2016, 978-0262528900.
  • John Johnson, Sergio Lubo, Nishitha Yedla, Jairo Aponte, and Bonita Sharif: "An Empirical Study Assessing Source Code Readability in Comprehension". Proc. ICSME'19, 10.1109/ICSME.2019.00085.
  • Brian W. Kernighan and P. J. Plauger: The Elements of Programming Style. McGraw-Hill, 1979, 978-0070342071.
  • Brian W. Kernighan and P. J. Plauger: Software Tools in Pascal. Addison-Wesley Professional, 1981, 978-0201103427.
  • Brian W. Kernighan and Rob Pike: The Unix Programming Environment. Prentice-Hall, 1983, 978-0139376818.
  • Brian W. Kernighan and Dennis M. Ritchie: The C Programming Language. Prentice-Hall, 1988, 978-0131103627.
  • Ron Kohavi, Diane Tang, and Ya Xu: Trustworthy Online Controlled Experiments: A Practical Guide to A/B Testing. Cambridge University Press, 2020, 978-1108724265.
  • Gerard Meszaros: xUnit Test Patterns: Refactoring Test Code. Addison-Wesley, 2007, 978-0131495050.
  • Anne Minahan: "Martha's Rules". Affilia, 1(2), 1986, 10.1177/088610998600100206.
  • Andy Oram and Greg Wilson (eds.): Beautiful Code: Leading Programmers Explain How They Think. O'Reilly, 2007, 978-0596510046.
  • Addy Osmani: "Learning JavaScript Design Patterns".
  • David A. Patterson and John L. Hennessy: Computer Organization and Design: The Hardware/Software Interface. Morgan Kaufmann, 2017, 978-0128122754.
  • Marian Petre and André van der Hoek: Software Design Decoded: 66 Ways Experts Think. MIT Press, 2016, 978-0262035187.
  • Charles Petzold: The Annotated Turing. Wiley, 2008, 978-0470229057.
  • Donald A. Schon: The Reflective Practitioner: How Professionals Think in Action. Basic Books, 1984, 978-0465068784.
  • Peter Smith: Software Build Systems: Principles and Experience. Addison-Wesley Professional, 2011, 978-0134185965.
  • Morgan Taschuk and Greg Wilson: "Ten Simple Rules for Making Research Software More Robust". PLoS Computational Biology, 13(4), 2017, 10.1371/journal.pcbi.1005412.
  • Cătălin Tudose: JUnit in Action (3rd edition). Manning, 2020, 978-1617297045.
  • Hillel Wayne: Practical TLA+: Planning Driven Development. Apress, 2018, 978-1484238288.
  • Andreas Zeller: Why Programs Fail: A Guide to Systematic Debugging (2nd edition). Morgan Kaufmann, 2009, 978-0080923000.
04 Jun 17:30

Lesson Maps

One of the silver linings of unemployment is that it has given me time to explore a few ideas that have been living rent-free in my head for a while, like adapting use case maps for lesson design. Here’s a concept map for a for loop in a language like Python:

Concept map for a 'for' loop

This shows what the lesson is going to cover, but doesn’t explain how. The latter is inherently sequential, so let’s trace the order in which ideas would be introduced:

Lesson map for a 'for' loop

The gray overlay shows that the lesson introduces the ideas in the following order:

  1. A for loop is used to process the values in a collection.

  2. A for loop has a loop variable, which gets items from the collection one by one.

  3. The loop also has a body, which is run once for each item in the collection.

  4. The loop variable holds a different value each time the loop body runs.

  5. The collection may be empty, in which case the loop body doesn’t run.

The diamonds show the start of a stanza (i.e, a paragraph or sub-topic). The solid circles show the ends of stanzas, while the open circles show where the flow of the lesson passes through an idea.

This isn’t the only way to teach loops: many other orderings would work just as well. And my made-up notation sucks, but I think the idea of tracing the flow of a lesson over the unordered relationships between its key ideas is an intriguing one. In my dreams, the phrases making up the lesson would be attached to the arcs so that (for example) clicking on the number “3” would bring up a sidebar showing the paragraph corresponding to that stanza. That way, if someone moved the arcs around (i.e., changed the path through the lesson) we’d be able to see which parts of the text needed to change.

It’s quarter-baked if that, but the idea won’t leave me alone. As always, I’d be grateful for feedback or for pointers to similar work.

04 Jun 17:30

Indexing

One of the silver linings of unemployment is that it’s given me time to make progress on a couple of book projects. I’ll share them both once I’ve made a few more revisions (hopefully by month’s end), but I hope their indexes give you an idea of what they cover:

Software Tools in JavaScript Building Software Together
abstract syntax tree 90-9-1 rule
Accumulator pattern accessibility
Acorn accessibility - WebAIM WAVE
actual result (in unit test) active bystander
Adapter pattern active listening
algorithm - greedy actual result (in unit test)
alias - during import ADHD
Alloy agile development
anonymous function agile development - conditions for success
ANTLR all-nighters
API - as protocol allocating work - chaotic decomposition
Application Binary Interface allocating work - confirmation loop
Armstrong, Tavish allocating work - effect of social status
array - implementation of allocating work - feature decomposition
Array.filter allocating work - functional decomposition
Array.forEach allocating work - in teams
Array.reduce allocating work - modular decomposition
ArrayBuffer allocating work - rotating decomposition
assembler Alloy
assembly code ally
assertion - as runnable documentation already invented here syndrome
assertion - in unit test analysis & estimation
assignment - destructuring analysis paralysis
async keyword Ant
asynchronous execution Apache Software Foundation
automatic variable (in build) APT
await keyword assertion
Babel authentication
backward compatibility authentication - two-factor
Bajel auto-completion
bare object automated program repair
bind method to object automation
bitwise operation automation - as programming
block comment Automattic - hiring process
Brown, Amy Baldwin, James
Brubeck, Matt Baxter, T. Carter
build - automatic variable bias
build - clock synchronization big bang integration
build - dependency Bitbucket
build - hash code Black
build - pattern rule Blackbox project
build - recipe blog - as team journal
build - rule blog - automatically generated
build - stale Boehm Curve
build - timestamp Borland
build manager branch (in Git)
build target breakpoint
C breaks (importance of regular)
C++ Brook's Law
cache - calculated values Brown, Neil
cache - modules browser automation - for testing
cache - of loaded files browser automation - record and playback
call stack - environment BSD License
call stack - stack frame bug tracker
callback function build manager
callback function - conventions for build manager - and version control
caller module build manager - Ant
chain of inheritance build manager - Make
Chain of Responsibility pattern build manager - Rake
character encoding build manager - rules for using
character encoding - UTF-8 build manager - Snakemake
circular dependency build number
clock synchronization (in build) Burns, Heather
closure C
code - as data C++
code completion Carnac
code coverage casual threat
Code of Conduct catch exception
coding style - importance of consistency CC-BY license
coding style - linter CC0 license
cognitive load chaotic decomposition
collision (in hashing) checklists - benefits of
column-major storage order checklists - use in code review
combinatorial explosion Checkstyle
command-line argument chorus of explanation
comment - block chunking
comment - doc co-op
comment - line code browser
compiled language code clones
compiled language - linking code comprehension
Comprehensive TeX Archive Network code coverage
confirmation bias code metrics - ineffectiveness of
console.log Code of Conduct
const declaration - advantages of Code of Conduct - responding to violations
Cook, Mary Rose code review
coordinate system code review - effectiveness of
coupling code review - for security
cryptographic hash function code review - procedure
CSS code review - responding to
CSS - struggles with cognitive bias
DAG cognitive dimensions framework
data frame cognitive load
DataForge cognitive load - extraneous
debugger cognitive load - germane
debugger - source map cognitive load - impact of checklists
Decorator pattern cognitive load - in debugging
delta debugging cognitive load - intrinsic
dependency (in build) cognitive load theory
depth-first search cognitive transition
design by contract collective action
design pattern - Accumulator comments - as communication
design pattern - Adapter commit (version control)
design pattern - Chain of Responsibility commit message (version control)
design pattern - Decorator common programming errors
design pattern - Iterator commons
design pattern - Singleton communication - asynchronous
design pattern - Template Method communication - blog
design pattern - Visitor communication - comments
destructuring assignment communication - email
DiBernardo, Mike communication - instant messaging
directed acyclic graph communication - synchronous
directed acyclic graph (DAG) communication - wiki
directed graph community of practice
doc comment competent practitioner
Document Object Model competent practitioner - documentation needs
DOM Comprehensive TeX Archive Network (CTAN)
dynamic loading conceptual architecture - diagram
dynamic lookup concrete examples
dynamic scoping concurrent systems - difficult of debugging
eager matching CONDUCT file
EJS configuration - layered
encapsulation configuration - parameters
entry point (of module) confirmation loop - allocating work
environment (to store variables) conflict (in Git)
error (in unit test) conflict (in Git) - repeating
Escodegen conflict (interpersonal)
ESDoc conflict (interpersonal) - escalating
ESLint conflict (interpersonal) - handling
Esprima format confounding variable
eval - insecurity of console
event handler - streaming API continuous integration
event loop continuous integration - GitHub Actions
exception - for control flow continuous integration - Travis CI
exception - handler contrarian (why not to be)
exception - in promise CONTRIBUTING file
exception - throw control group
exception - with await controlled experiments
execution - asynchronous Conway's Law
execution - event loop copyright
execution - non-blocking coverage - code
execution - single-threaded coverage - path
execution - streaming Creative Commons
Expect Creative Commons - CC-BY license
expected result (in unit test) Creative Commons - CC0 license
experiments Creative Commons - ND clause
experiments - test harness Creative Commons - no commercial use
exploratory programming Creative Commons - share-alike
fail (in unit test) crunch mode
filesystem operations CSS selector - use in testing
finite state machine - correspondence with regular expressions cultural fit (as unconscious bias)
fixture (in unit test) cutting corners
fluent interface CVS (version control)
formal verification dark matter developer
formal verification - Alloy data mining
formal verification - TLA+ data structure diagrams
fs.stat dead code
function - anonymous debugger - breakpoint
function - inner debugger - single-stepping
function - nested debugging - concurrent systems
function signature debugging - importance of good habits
fuzz testing debugging - rubber duck
generator function debugging - symbolic debugger
Git debugging - why schools don't teach
GitHub Pages defensive programming
globbing delta debugging
globbing - filtering results demotivation
greedy algorithm design by contract
hash code design for test
hash code - in build design pattern - model-view-controller
hash code - SHA-1 development process
hash function DevOps
hash function - collision diagnostic power (of formative assessment)
hash function - cryptographic diagrams - conceptual architecture
header file - in C and C++ diagrams - data structure
header file - static site generator diagrams - entity-relationship
helper function diagrams - physical architecture
heterogeneous storage diagrams - use-case map
homogeneous storage diagrams - workflow
Hoye, Mike dictionary attack
HTML5 specification digital signature - for activity logs
Huffine, Trey discoverability - of issues
Human Resource Machine discovery-based learning
immediately-invoked function expression discrimination
immutable data do-ocracy
import - alias Docker
import module documentation - as communication
import vs. require documentation - embedded
inner function documentation - for competent practitioners
instruction pointer documentation - for experts
instruction set documentation - for novices
interpreted language documentation - what to include
intrinsic complexity documentation generator
introspection - in unit testing documentation generator - JSDoc
introspection - of methods doi2bib
Istanbul Don't Repeat Yourself
Iterator pattern double blind experiments
Iterator pattern - generator function dual coding
Jake dumpster diving
Java Dunning-Kruger effect
JavaScript - hurried design of dynamic analysis
Jekyll dynamic analysis - Valgrind
Jest dynamic typing
JSDoc easy mode (as a metaphor for privilege)
Kernighan, Brian editor - Emacs
Knuth, Donald editor - Notepad
label (on address) effort-importance grid
language - compiled effort-importance grid - helping triage
language - interpreted Eiffel
layout engine elaboration
lexical scoping Elbakyan, Alexander
lifecycle - of file interpolation elevator pitch
lifecycle - of unit test Emacs
line comment email (for team communication)
linking (compiled language) email - filters
linter embedded database - use in testing
Liskov Substitution Principle engineering tradition in computing
literal (in parsing) entity-relationship diagram
literate programming error - common
macro error - external
Make error - internal
manifest (of package) error - misperception of frequency
Markdown error - root cause analysis
Markdown - parser error message - internationalizing
matching - eager error message - writing helpful
method chaining ESLint
Mocha Evans, Julia
Mocha - afterEach Excel
Mocha - beforeEach exception
mock object - for testing exception - handling
module - entry point exception - raise
module bundler exception - under-used and abused
module loader exception - when to check
mutual references exfiltrate
namespace expected result (in unit test)
nested function experimenter bias
Nison, Maël expert
non-blocking execution expert - code comprehension
Nystrom, Bob expert - documentation needs
OAuth expert blind spot
op code external error
Open-Closed Principle extraneous load
operator precedence - implementing extrinsic motivation
Oram, Andy failure
package manifest fairness
Pandas FAQ
parser fault
parser - check-and-combine feature boxing
parser - post-hoc compression strategy feature creep (danger of)
parser - reasons not to write feature decomposition
parser - shunting-yard algorithm feedback loops
pass (in unit test) final report
patch number finite state machines - use in software design
pattern rule (in build) fixture (in unit test)
PHP floating-point arithmetic - difficulty of testing
plugin architecture Flon's Axiom
polymorphism (in software design) flow
process.argv flow graph - abstract interpretation
programming style - fluent interface flow graph - actual
promise - as alternative to callback flowchart
promise - automatic creation of Ford, Henry
promise - behavior formative assessment
promise - catch functional decomposition
promise - reject fuzz testing
promise - resolve garbage collection - generational
promise - then Gender Decoder
Promise.all GenderMag
protocol - API as General Data Protection Regulation (GDPR)
protocol - for unit testing generational garbage collection
prune (a search tree) germane load
Python Gilliam, Terry
query selector Git
query selector (for HTML) Git - basic commands
R Git - branch
race condition Git - branch names
race condition - time of check/time of use Git - cloning project
recipe (in build) Git - commit
recycling data Git - commit ID
Redux Git - commit message
register (in computer) Git - configuring
regular expression Git - conflict
reject promise Git - creating project
require - caching modules Git - difference between add and commit
require vs. import Git - graphical interface
resolve promise Git - HEAD
row-major storage order Git - history
rule (in build) Git - ignoring files
runnable documentation (assertions as) Git - interface (indistinguishable from hoax)
sandbox (for safe execution) Git - merge
SAT solver Git - post-commit hook
satisfiability Git - pre-commit hook
scope - of variable definitions Git - pull request
scope creep - when writing lessons Git - pull request - comments
scoping - dynamic Git - reasons for popularity
scoping - lexical Git - rebase
search - depth-first Git - recovering old files
search path Git - remote
search path - shell variable Git - saving changes remotely
semantic versioning Git - showing status
semantic versioning - patch number Git - viewing differences
setImmediate Git - workflow
setTimeout GitHub Actions
SHA-1 hash code GitHub Pages
shell variable (for storing search path) GitLab
shunting-yard algorithm GNU Public License (GPL)
side effect - for module registration Goal-Question-Metric
signature - of function Goodhart's Law
sin - using regular expressions to parse HTML Google - unfair hiring practices
single-threaded execution Google Summer of Code
Singleton pattern governance
slug (unique identifier) Graf, David
software design - bare object Grand Perspective
software design - coupling GUI designer
software design - deferring problems harassment
software design - design by contract Hippocratic License
software design - driver hiring process
software design - encapsulation hiring process - Automattic
software design - generic function hiring process - healthy
software design - Liskov Substitution Principle hiring process - mistakes
software design - Open-Closed Principle history of computing
software design - plugin architecture hitchhiker
software design - polymorphism Homebrew
software design - testability Hoye, Mike
source map human rights
spread - function arguments humanist tradition in computing
SQL hypercorrection effect
stack frame IDE
stale (in build) IDE - console
Standard JS IDE - in browser
static site generator IDE - under-used and abused
static site generator - header file IDE - VS Code
storage - heterogeneous implicit bias
storage - homogeneous in-memory database - use in testing
storage order - column-major inequality
storage order - row-major insider threat
streaming API instant messaging - inevitable use of
streaming API - event handler institutional priorities
string interpolation intellectual property
tagged data structure intellectual property - copyright
target - build intellectual property - patent
TDD intellectual property - trade secret
Template Method pattern intellectual property - trademark
term interleaving
test harness internal error
test runner internship
test subject (in unit test) interruption bingo (in meetings)
test-driven development interruptions
testability - as design criterion intimate threat
tidyverse intrinsic load
time of check/time of use intrinsic motivation
timestamp - in build introspection
TLA+ issue
token (in parsing) issue - classifying
topological order issue - description of
transitive closure issue - fields
Turing Machine issue - good titles
two hard problems in computer science issue - timestamps
unit test - actual result issue tracker
unit test - error issue tracker - as course deliverable
unit test - expected result issue tracker - helping triage
unit test - fail issue tracker - Jira
unit test - fixture issue tracker - milestones
unit test - interactive application issue-tracking system
unit test - lifecycle Java
unit test - pass Java - build manager
unit test - requirements for Java - style checker
unit test - test runner JavaScript
unit test - test subject JavaScript - style checker
unit test - using mock object Jekyll
University of Toronto Jira (issue tracker)
UTF-8 JSDoc
variable definition - scope just-in-time compiler
version control system Kaplan-Moss, Jacob
version control system - Git Kendzior, Sarah
virtual machine LaTeX
virtual machine - op code learned helplessness
Visitor pattern learner persona
walk a tree learning strategies
WebAIM WAVE learning strategies - concrete examples
Whitehead, Alfred North learning strategies - dual coding
Wilson, Greg learning strategies - elaboration
Wolfram Alpha learning strategies - interleaving
learning strategies - retrieval practice
learning strategies - spaced practice
learning styles
legitimate peripheral participation
Lehrer, Tom
lending privilege
LibreOffice
license - software
license - why not to write your own
LICENSE file
linter
Linux
Linux - toxic leadership
logging
logging - during debugging
logging - for security
logging - levels
logging - output format
logging - rotating files
long-term memory
Lua
MacOS
macro
major version number
Make
Make - pattern rule
Make - shortcomings
Markdown
Markdown - for final report
marketing
Martha's Rules
mathematical tradition in computing
MathML
MATLAB
meetings
meetings (online)
meetings - discussion
meetings - decision
meetings - extra rules for post mortems
meetings - interruption bingo
meetings - three sticky notes
Mencken, H.L.
mental health
mental health (stigma associated with)
mental model
mental model - Git
mentoring
Mercurial (version control)
merge (in Git)
microphone
microservice
Microsoft Project
Microsoft Visual Studio Code
Microsoft Word
milestone (in issue tracker)
minor version number
minutes (of meetings)
MIT License
mock object
model - of software development
model-view-controller architecture
model-view-controller architecture - testing
modeling tools - Alloy
modeling tools - TLA+
modular decomposition
motivation - extrinsic
motivation - intrinsic
motivation - self-efficacy
multitasking
Myers-Briggs Type Indicator
negative results (failure to publish)
neurodivergent
neurotypical
Node.js - package.json file
non-disclosure agreement
non-disclosure agreement - abuse of
not invented here syndrome
note-taking (as a learning strategy)
Notepad
novice
novice - code comprehension
novice - documentation needs
NPM
NPMS
onboarding checklist
open offices (evils of)
Open Source Initiative
Open-Closed Principle
org chart - importance of
overwork
package - as course deliverable
package - building
package manager
package manager - APT
package manager - Homebrew
package manager - NPM
package manager - package ratings
package manager - pip
package manifest
packaging
pair programming
pair programming - effect of personality
paradox of tolerance
patch (software)
patent
path coverage
peer evaluation
PEP8
performance review - importance of written criteria for
performance testing - manual
Perl
persuasion
Petre, Marian
Petrov, Andrey
phishing
physical architecture - diagram
pip
placebo
PLOS
plugin - for IDE
post mortem
post-commit hook
post-condition
post-condition - strengthening
Pratchett, Terry
pre-commit hook
pre-condition
pre-condition - weakening
pre-registration of experiments
process - waterfall
Proctorio (invasive surveillance)
product manager
productivity
productivity - comparative
productivity - SPACE framework
profiler
programmers - happiness
programming - innate ability
programming in the large
programming language - compiled
programming language - dynamically typed
programming language - ease of learning
programming language - interpreted
programming language - statically typed
project course - characteristics of
project manager
project organization - standard files
pseudoscience - learning styles
pseudoscience - Myers-Briggs Type Indicator
pull request
pull request - serial number
Python
Python - PEP8 style guide
Python - style checker
qualitative methods
quasi-experiment
Quorum
R (programming language)
radical candor (as bullshit)
radicalization
raise exception
Rake
reading code
reading code - effect of variable names
reading code - eye tracking studies
reading code - fMRI studies
README file
rebasing (in version control)
refactoring
refactoring - for code review
remote (in Git)
reporting - to your manager
repository (version control)
Representational State Transfer
reproducible example (reprex)
requirements error
REST
retrieval practice
Robinson, Evan
rotating decomposition
rubber duck debugging
Ruby
sanitizing data
Scalzi, John
Schneier, Bruce
Sci-Hub
scientific tradition in computing
Scottish verdict
Scratch
scriptability
Scrum
secure deletion tool
security theater
self-confidence (lack of)
self-efficacy
semantic versioning
sense vote
Shopify - support for alt-right sites
short-term memory
short-term memory - chunking
short-term memory - limited capacity of
significance hacking
single-stepping
Snakemake
Snowden, Edward
social engineering
sociotechnical congruence
software design - accessibility
software design - evolution
software design - influence of testability
software design - role of diagrams
software design - scriptability
software license
software license - BSD License
software license - GNU Public License (GPL)
software license - Hippocratic License
software license - MIT License
software license - open
software license - why to use the MIT License
software patch
software portal - Bitbucket
software portal - communication tools
software portal - GitHub
software portal - GitLab
SPACE framework
spaced practice
spearphishing
sprint
SQL injection attack
Stack Overflow
stand-up meeting
standard project files
static analysis
static site generator
static site generator - Jekyll
static typing
string I/O
style checker
style checker - Black
style checker - Checkstyle
style checker - ESLint
Subversion (version control)
surveillance
symbolic debugger
Taylor & Francis
team contract
teams - allocating work
teams - benefits of diverse ability levels
teams - dissolving
teams - effect of having friends on
teams - effective size of
teams - isolating at-risk students
teams - learning benefits of
teams - selecting
teams - taking schedules into account
Tech Solidarity
technical debt
term
test framework
test runner
test suite
test-driven development
testability - influence on software design
threat - casual
threat - insider
threat - intimate
three sticky notes (in meetings)
throw low, catch high
ticketing system
time boxing
time management
timestamp - of Git commit
TLA+
to-do list
tone policing
toxic people - misperception of
toxic people - rarity of
trade secret
trademark
Travis CI
treatment group
triage
triage - using issue tracker
Turbo Pascal
two-factor authentication
type declaration - effect on readability
type declaration - effectiveness at catching bugs
type declaration - use in software design
TypeScript
typing - dynamic
typing - static
Uber
UCOSP
unconscious bias
Unified Modeling Language
unit test
unit test - actual result
unit test - browser automation
unit test - code coverage
unit test - expected result
unit test - fixture
unit test - floating-point arithmetic
unit test - fuzzing
unit test - influence on software design
unit test - path coverage
unit test - performance
unit test - profiling
unit test - test framework
unit test - test suite
unit test - visualization
Universal Declaration of Human Rights
University of Toronto
Up & Go
use-case map
user story - use in software design
Valgrind
variable naming
version control
version control - and build manager
version control - centralized
version control - collaboration
version control - collaboration - using a shared repository
version control - collaboration - using forked repositories
version control - CVS
version control - decentralized
version control - Git
version control - inability to handle office documents
version control - Mercurial
version control - reasons to use
version control - repository
version control - Subversion
version control - systems
version control - when to commit
version numbers
version numbers - build
version numbers - major
version numbers - minor
version numbers - patch
version numbers - semantic versioning
Vim editor - exiting
virtual machine
virus scanner
Visual Basic
visualization - difficulty of testing
VS Code
Wales, Jimmy
waste (in software development)
waterfall model
WebAIM WAVE
WEIRD
whiteboard coding questions
wiki
Wikipedia
Wilson, Greg
Wilson, Robert
Windows
workflow (in Git)
workflow diagram
working memory
YubiKey
04 Jun 17:30

Choose Your Own Adventure

Julia Evans recently posted a description of the “choose your own adventure” network debugging tutorials that she has been creating with Twine. It’s a very cool idea, and a very welcome innovation: I think we’re all getting a bit tired of “read these paragraphs/watch this video and now do this auto-graded drill exercise”. If you’re a CS education grad student in search of a cool project, you could do worse than building a plugin for Scratch or VS Code that enabled people to choose their own debugging adventure within their actual programming environment. (This is not the same as building a tool for authoring Twine, though I imagine the former could use the latter.)

For example, one passage could give the learner the option “set a breakpoint on line 26”. Instead of clicking on a link directly to take that action, the learner would actually set a breakpoint; the IDE plugin would detect and verify that action and move to the next passage, or put up an I’m sorry Dave message if the user tried to do something unanticipated.

I can imagine a boatload of studies someone could do with a tool like this. I can also imagine something similar for teaching people how to build sophisticated SQL queries or tidyverse pipelines step by step. If you know of something like this, or are working on it, I’d enjoy hearing from you.

04 Jun 17:30

Nine Weeks Off

I’m starting a new job on Monday; what have I done with the nine weeks since RStudio laid me off?

  • Published a short story that I wrote after my brother died and “Ten quick tips for staying safe online” that I co-authored with Danielle Smalls. (All the work for both was done before I was canned, but seeing them in print was still a nice boost.)

  • Wrapped up Research Software Engineering with Python: it should be on the shelves this quarter.

  • Finished the first usable draft of Software Tools in JavaScript, which teaches software design by building small versions of the tools programmers use themselves. Comments and feedback would be very welcome.

  • Turned a pile of notes into a rough draft of Building Software Together, which is a guide for undergraduates embarking on their first team software project. The sections on security and fairness are still unsatisfying, but I hope it’s useful, and feedback would be even more welcome.

  • Built yet another Jekyll template for writing books like these. It relies on a bunch of Python scripts to make up for Jekyll’s inadequacies, and I use another Python script to convert the generated HTML to LaTeX so that I can produce a PDF (because that’s easier to maintain than customized Pandoc), but it’s working well enough that I might get around to documenting it for others to use as well.

  • Discovered the hard way that if you don’t use WordPress for 20 years, you forget everything you once knew about PHP.

  • Gave a couple of talks and signed up to give a couple more.

  • Read about two dozen papers. (Thank you, Alexandra, for making this possible.)

  • Added about 20,000 words to the novel I’m working on. I’m 4800 words short of my target for the nine weeks, so I did well or poorly depending on how you look.

  • Exercised and played guitar four or five times a week. My blood pressure and BMI are still higher than they should be for someone with my family history of heart disease, and progress on guitar is still frustratingly slow, but I’m mostly satisfied.

  • Built some lids for our garden boxes and generally got the back yard ready for another spring. It’s unlikely we’ll do any house renos this summer (Ontario is going into another lockdown thanks to the Ford government’s cowardice and incompetence), but I’m hoping we can take advantage of working from home the way we did last year.

  • Played several hundred games of Hive and lost most of them. I do all right if I survive the opening, but that’s a big “if” right now. If you’d like to trounce me, I’m gvwilson on Board Game Arena.

04 Jun 17:18

Two Books

Hi - I'm Greg Wilson, and this short talk describes two new open access resources you might want to use in undergraduate software engineering classes.

The first, called Software Tools in JavaScript, teaches software design by showing students how to build simple versions of twenty widely-used software development tools. The second, called Building Software Together, is a guide to workng in a small team for a single term. Both books are freely available under a Creative Commons license.

Here's how it all started. Back in the early 2000s I taught a course on software architecture three times at the University of Toronto and then told the department they should cancel it. The problem was a lack of material: between them, the eight books I had on my shelf with "software architecture" in the title spent a total of less than 30 pages describing actual systems. They explained how to gather architectural requirements, how to maintain them, and how to communicate them, but didn't show readers what real systems looked like.

In frustration, I mailed 200 programmers and asked them to write a chapter each describing the most beautiful piece of software they'd ever seen. We wound up with 34 contribution, which were published as a book called Beautiful Code. It won a Jolt Award and raised quite a bit of money for charity, but it wasn't useful as a textbook: the pieces of software contributors described ranged in size from a few lines of code to multi-million line systems, and required far more background knowledge than undergrads were likely to have.

Our second attempt was a pair of books called The Architecture of Open Source Applications. The entries were much more uniform in level, but the contributors used such a wide range of languages that once again most students would have struggled to follow along. On the upside, all of the content was (and is) open access.

The irony is, I learned most of what I know about software design from a series of books that avoided all of these problems. The trilogy that Brian Kernighan and colleagues wrote in the early 1980s didn't just teach people C and Unix: they taught my generation how to think about programming by showing us how to build the tools we used to program.

Which brings us to Software Tools in JavaScript. Its aim is to teach software design by walking readers through the construction of simple versions of tools they actually use. The book uses JavaScript rather than Java, Python, or something more modern because JavaScript is the one unavoidable language - and these days, it's actually not bad.

The material covers twenty tools, ranging from a very (very) simple version control system to a browser layout engine, an interactive debugger, and a style checker.

Each entry is short enough to cover in one or two lectures. Together, they introduce some common design patterns, show students how to test complex systems by mocking or stubbing components, and introduce them to tools they should probably be using anyway.

There are lots of starting points for homework exercises, mostly of the form "add this feature to tool X" or "build a very simple version of tool Y from scratch". If your students do the latter, we'd be very happy to include their work - with full attribution - in Volume 2. And if you think of a tool that we haven't covered but should, like a fuzz tester or accessibility auditor, please dive in.

Meanwhile, whenever I run into one of my former project students, they tell me that the most useful thing I taught them wasn't about code: it was about how to work in a team. I think this is more important with each passing year: we used to say, "Move fast and break things," and while I don't know if we did the former, it's pretty clear at this point that we've done a lot of breaking.

The second book, Building Software Together, is what a small team of undergrads needs to know to get through their first semester-long project. It talks about version control and continuous integration, but it's mostly about the human side of software engineering. How do you run a meeting? How do you review someone else's code? How to handle deadlines when you're juggling assignments in several different courses whose lecturers don't seem to talk to each other?

I'm still dissatisfied with some parts of this book. In particular, I don't think the chapters on security and inclusivity are going to persuade someone who doesn't already care about these things that they should. I've taught ethics to engineers, and I think that in a lot of cases, they tune out while we're talking, tell us what they think we expect to hear, and carry on as before. If you or your students can think of better approaches for these important topics, please let me know - I'm happy to rewrite.

To wrap up, these two books don't have to be used together, but they are designed to complement one another. They are both free to use under a Creative Commons - Attribution - NonCommercial license, which means you can copy or modify them however you want as long as you link back to the originals and don't try to make any money from it. (If print editions do appear, 100% of the royalties will go to support the Red Door Shelter in Toronto.) Contributions are very welcome, and all contributors will be acknowledged.

You can find the books online at https://stjs.tech/ and https://buildtogether.tech/...

...and you can reach me at gvwilson@third-bit.com. Thank you for listening.

04 Jun 17:14

A delicious Thursday

by Michael Kalus
04 Jun 17:14

2021-06-03 General

by Ducky

Vaccines

In general, I try not to post about things that people SAY are going to happen, preferring to wait until it actually happens. However, I am and have been quite excited about Novavax for a long time, so I am really pleased to hear that they are finally going to announce the results of their big clinical trial.

The Novavax vaccine had results rivaling the mRNA vaxes against COVID Classic and Alpha (“UK”) (although not so great against Beta (“South Africa”)), and it’s a neat technology. Instead of a payload of mRNA which tells the body to make spike proteins, it has a payload of spike proteins assembled into a little ball (sort of like the pan-influenza virus I talked about on Tuesday).

Variants

A very detailed Technical Briefing from Public Health England says that not only is the Delta strain significantly more contagious, it’s also more severe. It cites a study in England which puts the risk of hospitalization at 2.61 times that of Alpha, and a study in Scotland which says it’s 2.39. Ow.


This Letter says that Pfizer is much less effective against the Delta strain than the Alpha strain, and is more like Gamma in that regard. This was in a test population that was young(ish) and healthy; they found that the antibody response was inversely correlated with age. Ulp.

04 Jun 17:14

2021-06-03 BC

by Ducky

Vaccinations

A friend of mine who lives in Surrey got his invitation to book his second dose, and everywhere in Fraser Health was booked through the end of JULY! (He ended up getting a slot on 20 June at the Convention Centre in downtown Van.) It’s not clear, however, if there were appointments which got full or if they just aren’t scheduling so far into the future.

Press Briefing

Dr. Henry said:

  • 71.8% adults have gotten one dose; 68.9% of people over 12 have gotten 1 dose.
  • On Tuesday, NACI said it was okay to mix and match. If you got Moderna for #1, we’ll try to get you Moderna for #2, but you might get Pfizer instead. It’s cool, really.
  • If you got AZ, you get to choose if you want AZ or mRNA. Starting Monday, your pharmacy will phone you to book an appointment. (Please don’t call them, they will call you.) If you don’t want AZ, tell them, and then follow the invitation you’ll eventually get from the registration system.
  • The risk of blood clots from AZ are much lower for the second dose.
  • The side effects of AZ+Pfizer might be worse than AZ+AZ (but they are still mild). NB: “Mild” to doctors means “no long term harm”, but it might still suck for a day.
  • There’s some limited info that says that AZ creates a slightly stronger cell response for long-term protection.
  • Myself, I would prefer to get a second shot of the same as the first, but I could understand if someone wanted something different for the second shot.
  • Our clinics are very busy and we use up the vax we have with very little slack. Fortunately, Pfizer has been really reliable, and their shipments almost always start showing up on Monday afternoons.
  • We could give another 100K doses per week if we had the supply.
  • Parents, you can bring your kids to clinics — just showing up — but it would help us if you would book everybody.
  • Don’t worry, we WILL have enough vax for two doses for everybody by the end of summer.
  • We still have transmission, so we have to keep Doing The Things.

Dix said:

  • A bunch of fast boring stats about surgical renewal and how everybody is doing really great work, he so appreciates it. There’s one hospital which is having an outbreak so won’t be back online really fast, but all the other surge hospitals will be back on the promised schedule.
  • REGISTER REGISTER REGISTER!

Q&A

Q: With so many COVID patients on Extracorporeal membrane oxygenation (ECMO) machines, what about people with heart patients who need ECMO? What are you doing about the ECMO shortage? A: (Geeks out about ECMO machines for a moment.) I am not aware that there are people who have had issues because of lack of access to ECMO, and that’s a testament to the teams working across the province.

Q: What about AZ expiring at the end of June? A: You’re thinking of Ontario, which had doses expiring at the end of May. As we use vax, we get more info about stability, and Health Canada got more data from the company and found that they could extend the shelf life of that lot. We don’t have any of that lot, we used it up. We have about 20K doses that are expiring on June 27th and June 30th. We are quite confident that we’ll use it up fast.

Q: We’ve already gotten to 70%, does that mean we can go straight to Stage 3? A: No. All the criteria matter, not just vax %. That was a MINIMUM.

Q: The Delta variant is taking off in Peel, is it taking off in BC? A: We have had about 300 cases, that’s posted every week. We aren’t seeing it replace the more common Alpha and Gamma. As the cases come down, the VOCs come down too.

Note that we have switched our screening tests. The SNP tests couldn’t distinguish between Delta and Gamma, so we are now doing whole-genome sequencing on all of the new cases every day. It has been transmitted in a number of clusters, including one care home, but the measures we take for any of the variants work for all of them. And note that two doses are still really effective against Delta. NB: She did not mention that one dose kind of sucks against Delta.

Q: Are you targeting second doses to Fraser Health? A: We’re going by when you got your first dose, and because Fraser tended to get first doses earlier, they will tend to get their second doses earlier.

Q: Do you believe AZ from pharmacies will be available to people before mRNA through clinics. A: It will depend on where you are, but yeah, probably. Ed: until they run out. There’s only enough AZ right now for about half of Team AZ. There’s another shipment coming by the end of June which will be enough for almost everybody.

Q: Are you happy about how things are going in Surrey? A: Oh, absofuckinglutely. NB: Not a direct quote.

Q: We’re going to hit 80% of adults vaxxed by next week, what do we need for herd immunity? A: I wish we knew. NB: Not approaching anything like a direct quote. It depends upon which strains show up. But the important thing is that if we get cases down low enough, then we can manage it with all the normal things that pub health always does, like test/trace/track. We do know that the risk of widespread infection goes way down at 75%, and even farther at 90%. 100% is even better, so we’d like to get everyone vaccinated! With their second doses, those are important!

Q: Some people are vax hesitant, how will you reach them? A: That’s something that pub health has studied for years and years even before the pandemic. It boils down to the three C’s: Complacency, Confidence, and Convenience. We hit Complacency by doing outreach. We hit Confidence by sharing as much data as we can about safety of the vax (and make sure that healthcare providers also have this information). We hit Convenience by taking away as many barriers as possible, e.g. providing in languages people understand, doing clinics where people are, etc.

Q: What is the province doing to get the 70+ to register? A: We have been getting the word out. We have snailmail addresses for everybody (and their vax history) even though we don’t always have phone numbers or email addresses. We are going to snailmail info to everybody who got a first dose. If you are over 70, call the registration number and we will help you.

Yesterday, the biggest group which registered was the over-70s. Currently, the second-highest registered is the 70-74 year-olds. So people are getting the message.

Q: If a whole family went to a pop-up clinic, are they all registered? A: Yep!

Statistics

+199 cases, +2 deaths, +40,101 first doses, +21,440 second doses.

Currently 224 in hospital / 62 in ICU, 2563 active cases, 140537 recovered.

Charts

04 Jun 17:13

Why We Love the Jabra Elite 45h

by Lauren Dragan
Why We Love the Jabra Elite 45h

In eight years, we haven’t found better Bluetooth headphones under $100.

04 Jun 17:12

Twitter Favorites: [Walk_TO] It's distressing that the City of Toronto's "ActiveTO" program is becoming something of a joke. Lake Shore West is… https://t.co/UmNhwSWePy

Walk Toronto @Walk_TO
It's distressing that the City of Toronto's "ActiveTO" program is becoming something of a joke. Lake Shore West is… twitter.com/i/web/status/1…
02 Jun 20:02

Huawei unveils the HarmonyOS-powered Watch 3 and Watch 3 Pro

by Karandeep Oberoi

Huawei has unveiled two new watches running its new in-house HarmonyOS — the Huawei Watch 3 and Huawei Watch 3 Pro.

The 3 series is Huawei’s third offering in its smartwatch line. The China-based company launched its first smartwatch in 2015, followed by the Huawei Watch 2 in 2017.

Huawei Watch 3

The Huawei Watch 3 features a 60Hz 1.4-inch AMOLED display capable of pushing out 1,000 nits of brightness for ample outdoor visibility.

Huawei also trimmed down the watch’s bezels around the display. The watch is made of stainless steel and ceramic, weighs 63g without the strap, and measures 48mm x 49.6mm x 14mm.

Additionally, the smartwatch features all-day health monitoring with support for heart rate and blood oxygen tracking along with 24/7 stress and sleep tracking.

Here are all the sensors that the Huawei Watch 3 includes:

  • Acceleration sensor
  • Gyro sensor
  • Geomagnetic sensor
  • Optical heart rate sensor
  • Ambient light sensor
  • Barometric pressure sensor
  • Temperature Sensor

The watch also features eSIM compatibility that enables 4G connections to make or receive calls in addition to streaming music and more.

Huawei has also integrated its AppGallery into the watch. This means that users will be able to download HarmonyOS apps directly onto the watch, eliminating the need for a smartphone.

The Huawei Watch 3 has a three-day battery life when 4G is enabled. It also features an ‘Ultra-Long Lasting Mode,’ which limits some functionality but delivers up to 14 days of battery life.

Huawei Watch 3 Pro

With the Watch 3 Pro, Huawei is going for a more premium look. The watch body is composed of titanium and ceramic, while the display is shielded by sapphire glass. The watch weighs 54g without the strap and measures 46.2mm x 46.2mm x 12.15mm with a 60Hz 1.43-inch AMOLED display.

Similar to the Watch 3, the Pro model also features all-day health monitoring with support for heart rate and blood oxygen tracking along with 24/7 stress and sleep tracking.

Here are all the sensors the Huawei Watch 3 features:

  • Acceleration sensor
  • Gyro sensor
  • Geomagnetic sensor
  • Optical heart rate sensor
  • Ambient light sensor
  • Barometric pressure sensor
  • Temperature Sensor

Additionally, the Pro watch features an upgraded GPS tracking system that ensures more accurate results and includes a bigger battery Huawei says will last five days with 4G enabled and 21 days with the aforementioned Ultra-Long Lasting mode.

Availability

The Huawei Watch 3 will be available in Active, Classic, and Elite Editions, while the Huawei Watch 3 Pro will be available in Classic and Elite Editions.

The Huawei Watch 3 will be on sale in the United Kingdom on June 18 via the Huawei Store for £349.99 (about $597.70 CAD).

The Huawei Watch 3 Pro, on the other hand, will be available in the UK from June 28 through the Huawei Store and select retailers, with prices beginning at £499.99 (about $854 CAD).

MobileSyrup has reached out to Huawei about information regarding Canadian availability and pricing.

Image credit: Huawei

Source: Huawei

The post Huawei unveils the HarmonyOS-powered Watch 3 and Watch 3 Pro appeared first on MobileSyrup.