Shared posts

19 May 03:20

The AI and the Tree

by James Bridle

Here’s something that popped into my head recently, and seems worthy of a blog post, to see what comes back…

We’re using machine learning for all the wrong things, as I write about extensively in Ways of Being: to make things that beat us at games, deplete the planets resources more efficiently, confuse images and art, and so on and on. What we need are intelligences that help us do useful things in new and better ways, ways which we could not have imagined alone. AIs which are colleagues and collaborators, rather than slaves and masters.

Here’s one idea: an optimisation engine for woodworking: an AI Carpenter – except that the human is the carpenter, AI is the planner / assistant. (Gepetto? Jiminy Crickett? Kricket, like in Douglas Adams. They could have carved a Wicket and Bails.)

Given the dimensions of some wood – or even of a tree – but preferably a bunch of surplus or recycled wood, whatever materials and shapes and planes you have lying around, and a sketch of the desired structure, the machine outputs a complete guide/spec for building.

Where it gets interesting is when you see it doing some of the deeply weird stuff AI is really good at, optimising for strength and structure no human would conceive of, like (via):

A non-human understanding of grain, lignin, knots, and bark, of joints, pressure, loads. Structural properties in new configurations

It could get into wooden pegs and joints, no nails, like Japanese carpentry – if Japanese carpentry were performed a thousand years from now, on Mars.

What are the steps? (Not necessarily in this order)

– Understanding the sketch/needs

– Evolving and optimising a design

– Matching with available materials

Is this being done with anything? Feels very Walkaway. Not a Universal fabber, but a scarcity one. All the machine 3d printing fabrication stuff seems to be focussed on things that humans are already good at – or can learn – and on weird, expensive, complex materials which are hard to obtain and work with.

What we need from machines is things we’re not very good at. Planning, optimisation, novel strategy. New ways of thinking about problems. Pushing the problem space in strange, novel directions, but making solutions which are affordable, sustainable, educative and generative.

Also: machine learning at the grain of human craft. An AI optimised not for precision, but for hand-tooling. Not for CNC-levels of fit, but for Segal affordances and tolerances. A tolerant AI. A colleague in the wood shop. Hammer time.

19 May 03:02

Three ways EU could retaliate if UK ditches Northern Ireland protocol | Brexit

mkalus shared this story from The Guardian.

The EU could impose tariffs on UK fish and agricultural goods in just seven days if Boris Johnson goes ahead with moves to disapply parts of the Northern Ireland Brexit protocol, legal experts have said.

The short, sharp shock is one of the three key retaliatory weapons available through the trade agreement, according to Catherine Barnard, a professor of EU law at Cambridge University.

1. The nuclear option – end the trade and cooperation agreement (TCA) using articles 770 and 779

These clauses allow the EU to terminate the entire trade agreement, spelling the end of tariff-free trade in both directions along with all the other elements of the deal, including 90-day visa-free holidays, and the fishing agreement.

It would essentially return the UK to a no-deal Brexit scenario, with damaging consequences including the suspension of police and security cooperation, a serious move with long-term consequences for EU-UK relations.

As this requires a year’s notice, it may not appeal to member states who want to show they have real teeth in the face of what they consider an act of bad faith by the UK.

2. Finger-on-the-button option – article 521

This would allow the EU to suspend the trade parts of the TCA, leaving all the other areas agreed last December, including visa-free holidays and police cooperation, intact.

Again, this option may not appeal to member states as it would not deliver the practical objectives to demonstrate that the EU has teeth.

“It seems to me unlikely that they would do this because, frankly, if things have got so bad that the EU is talking about terminating part of the treaty it seems unlikely that they carry on cooperating in the other areas,” says Barnard.

3. Trade war in a week – article 506, paragraph 2

This allows the EU to “suspend, in whole or in part”, access to its waters.

Such a response may have nothing to do with Northern Ireland, but Barnard says: “The advantage from the EU’s point of view is that you only have to give seven days’ notice,” so a trade war could be started within a week.

Moreover, article 506 allows for wider retaliation if deemed necessary. If the EU considers a suspension of fishing around the Channel Islands or the Isle of Man “commensurate to the economic or societal impact of the alleged failure” of the UK to comply with the threat, it can suspend tariff-free trade “in whole or in part”.

In other words, it could slap tariffs on fish and other goods within seven days.

But is it an either/or situation?

The treaty governing current trading arrangements – the trade and cooperation agreement – gives considerable powers to either side to terminate the relationship. Barnard says: “They [the EU] could do them all at the same time but it is more likely that they may try to escalate matters.”

For the EU to be considering pressing the button on any of the options just 18 months after the UK left the bloc with a trade deal is remarkable in the history of trade disputes.

“If you look at the World Trade Organization, the number of disputes between states is relatively small,” Barnard says. “The whole purpose of dispute resolution mechanisms is to resolve arguments, and that’s why you have those provisions in the withdrawal agreement and the TCA. But instead of talking about resolution, we are talking about ratcheting up the arguments to the point of terminating the treaty. It is extraordinary.”

18 May 00:18

How Many Canadians Have Died From CoVid-19?

by Dave Pollard

The enormous inconsistencies and dubious premises underlying some recent reports about actual vs reported CoVid-19 death rates in Canada cast serious doubt upon the reliability of the findings and conclusions in several of these reports, which are in some cases being used to make critical decisions about the pandemic.

They also raise serious questions about the competence of journalists reporting on health issues, and in particular their capacity to think critically and ask appropriate questions about the data and assumptions behind the reports they are publicizing. Just because an “expert” says something is true, doesn’t make it so, and when the claims of various authorities diverge wildly (and hence make easy headlines), this lack of journalistic capacity, IMO, borders on professional negligence.

The chart above shows cumulative reported Canadian CoVid-19 deaths (in green); the total to date is about 40,000. Because the estimated actual number of deaths according to IHME (yellow) has whipsawed all over the place since the pandemic began, I became curious, and concerned, about what methodology they were using. It turns out that over the past two years they have used a whole series of completely inconsistent methodologies, abandoning several entirely in favour of other models with wildly different assumptions.

Some of these models concluded that Canadian CoVid-19 deaths were being underreported by a factor of up to four times. Why? Because those are the only death data they could get to ‘fit’ with their assumptions about IFR, CFR, and other factors in their models. They apparently made no attempt to understand how, given the history of thoroughness, skill and depth of data collection and analysis of Canada’s very accomplished and long-established epidemiologists, they could be so utterly incompetent at such a straight-forward task. So rather than question their assumptions, or attempt to resolve how such extreme underreporting could have occurred, they just disregarded the incongruity and went with the models. Until the models were proved preposterous, when they switched, without explanation or apology, to completely different models. In many professions, this would justifiably be described as misconduct.

Knowing that the Canadian professionals could not have been so incompetent in their data-gathering, I looked at some evidence that would either support or contradict these models. I used Statistics Canada’s excess deaths data — its report on total deaths from all causes, and the variance from previous years’ averages. This data is notoriously slow to compile, because the data has to come from the provincial authorities and local hospitals and facilities, which are in some cases seriously backlogged. But once it is in, it is good data. It is in, now, for the period up to December 31, 2021, and that data is shown in grey on the chart above.

This data has consistently confirmed what has also been found in many European countries with advanced health-care systems — that the reported CoVid-19 deaths were remarkably consistent with excess deaths in the same period. In some cases, there were other causes for excess deaths (like the heat dome in the Pacific Northwest last summer), but for the most part, health measures that had been put in place have actually reduced the number of deaths from non-CoVid-19 causes (influenza, accidents etc.) below historical normals, such that, even given that data collection is not perfect, and suffers from considerable lags, the reported number of CoVid-19 deaths in Canada and many Western European countries aligns very closely with excess deaths totals over the same period.

Disgruntlement with wildly inaccurate, whipsawing models based on flawed and quickly-abandoned assumptions, led a group of statisticians to try to develop a global database of normal and excess deaths, so that actual death tolls could be more accurately, and consistently, assessed. The World Mortality Database (WMD) was born, and many health authorities began using its data in place of those based on fragile and flip-flopping models like IHME’s.

Within a couple of months, IHME again abandoned its most recent model and switched to using WMD or equivalent excess deaths data for its new estimates, but only for the US and selected Western European countries where the new data still ‘fit’ its previous assumptions about IFR and CFR.

So, for example, in May 2021, IHME’s old model said that actual deaths to that date were 905,000 in the US,  50% more than had been officially reported. By September 2021, they claimed actually US deaths had already exceeded one million, again 50% more than officially reported. But two months later, in November 2021, they estimated, using their new model, that  deaths to date were just 900,000 — less than they had estimated they had been six months earlier, despite the intervening Wave 4 toll, and now only about 10% more than had been officially reported.

Meanwhile, the WMD excess deaths data for Canada and some other countries just didn’t fit their new model assumptions, so IHME continued to estimate that Canada, unlike the US, must be incompetent in tracking CoVid-19 deaths, since to fit their model actual deaths must have been at least 35% higher than reported deaths, and would continue to be do in future. So they continue to claim 54,000 Canadians have died so far, not the 40,000 that have been officially reported, or which track excess deaths data.

The hapless and hopelessly-underfunded WHO, which has bounced from blunder to blunder, finally got on board with using excess deaths as a base-line for their estimates last month. But they seem to continue to have problems with numbers, since the excess deaths data for Canada they are using (which I have copied carefully from their new database) is shown in blue above. Their report doesn’t talk about Canada, other than to say that Canada’s reported numbers are reasonably accurate, while the actual numbers for the US are 75,000 deaths (about 8%) more than officially reported.

Because neither the IHME nor the WHO data make sense, I looked at one more source to see if I could substantiate the reasonableness of the data Canada’s hard-working health professionals, who have no earthly reason to lie about it, have been providing.

Sadly, the Canadian model I next examined was even more ridiculous. I read a CBC report based on this model that claimed that some provinces’ death data (including that of my home province of BC) was low by a factor of 3-4x (and had earlier been low by a factor of 5-7x). The model also claims that Québec has vastly over-counted its CoVid-19 death toll (but why?).

The modellers included a link to their data tables, and the links on those tables took me to more detailed tables. And it appears they are still making the assumptions that the IHME model has, at least for selected countries, abandoned. They assume that, from other data, they ‘know’ the IFR and CFR, and based on that, and based on further assumptions about what proportion of the population has been infected, they have ‘backed in’ to an estimate of how many have actually died. Suffice it to say that their estimates, which even exceed IHME’s preposterous numbers, are alarming, eye-catching to lazy journalists, and completely incompatible with any understanding of how epidemiological data is rigorously collected in this country. Their forecasts for the future, which hopefully aren’t being taken seriously by decision-makers, project that in the months ahead nearly half of actual Canadian CoVid-19 deaths will continue to go uncounted. Their wacky model also claims that over 300,000 Canadian CoVid-19 deaths have been averted by vaccines alone, almost 10x the official death toll.

So, how many Canadians have actually died from CoVid-19? The data suggests that the reported 40,000 death toll is not far off. It also suggests that the precautions we took for the pandemic (which we have now been encouraged to abandon) have modestly reduced deaths from other causes, such as influenza, and probably cut the death toll to a third of what it could otherwise have been.

There is something else that seems to have been overlooked in the myopic reporting in most of the Canadian media — the slope of the green line in the chart above. It’s basically unchanged over the past 16 months, and not sloping down at all. That slope represents 1,250 avoidable Canadian deaths every month, about 42 every day.

If only the politicians, of every stripe, were half as diligent at collecting and using the evidence at hand to make policy decisions in the best interest of their citizens (rather than their popularity), as our health care professionals were, until the decisions were wrenched from their hands.

18 May 00:17

Escaping Groundhog Day

by hrbrmstr

Before digging into this post, I need to set some context.

Friday, May 13, 2022 was my last day at my, now, former employer of nearly seven years. I’m not mentioning the company name1 because this post is not about them2.

This post is about burnout and the importance of continuous monitoring and maintenance of you.


Occasionally, I mention3 that I’m one of those Peloton cult members. Each instructor has a pull-list of inspirational quotes that they interject in sessions4, and I’ve worked pretty hard across many decades curating mental firewall rules for such things, as words can have real power and should not be consumed lightly.

Like any firewall, some unintended packets get through, and one of Jess King’s mantras kept coming back to me recently as I was post-processing my decision to quit.

My biggest fear is waking up tomorrow and repeating today.

Many events ensued, both over the years and very recently, prior to giving notice, which was three weeks before my last day. Anyone who has built a fire by hand, by which I mean use a technique such as a bow drill vs strike a match, knows that it can take a while for the pile of kindling to finally go from docile carbon to roaring flame. For those more inclined to books5 than bivouacs, it’s also a bit like bankruptcy:

“How did you go bankrupt?” Bill asked.
“Two ways,” Mike said. “Gradually and then suddenly.”

That’s how I’d describe finally making the decision.

Personal Observability Failures

Observability is a measure of how well internal states of a system can be inferred from knowledge of its external outputs.6 I’m using that term as many folks reading this will have come from similar technical backgrounds and it has been my (heh) observation that technically inclined folks seem to have a harder time with emotional language than they do with technical language. I certainly do.

The day after officially giving notice, I went — as usual — to the DatCave to begin the day’s work after getting #4 and $SPOUSE ready for school(s). After about an hour, I looked down and noticed I wasn’t using my wrist braces.

I should probably describe why that was a Big Deal™.

For the past ~2.5 years I’ve had to wear wrist braces when doing any keyboard typing at all. I’ve had a specific RSI7 condition since high school that has, on occasion, required surgery to correct. Until this flare-up started, I had not needed any braces, or had any RSI pain, for ages8.

But, ~2.5 years ago I started to have severe pain when typing to the point where, even with braces, there were days I really couldn’t type at all. Even with braces, this bout of RSI also impacted finger coordination to the extent that I had to reconfigure text editors to not do what they usually would for certain key combinations, and craft scripts to fix some of the more common errors said lack of coordination caused. I could tell surgery could have helped this flare-up, but there’s no way I was going for elective surgery during a pandemic.

Seeing full-speed, error-free, painless typing sans-braces was a pretty emotional event. It was shortly thereafter when I realized that I had pretty much stopped reading my logs (what normal folks would might say as “checking in with myself”) ~3 years ago.

Fans of observability know that a failing complex system may continue to regularly send critical event logs, but if nothing is reading and taking action9 on those logs, then the system will just continue to degrade or fail completely over time, often in unpredictable ways.

After a bit more reflection, I realized that, at some point, I became Bill Murray10, waking up each day and just repeating the last day, at least when it came to work. I think I can safely say Jess’ (and Phil11‘s) biggest fear is now at least in my own top five.

Burnout, general stress, the Trump years, the rise of Christian nationalism, the pandemic, and the work situation all contributed to this personal, Academy Award-winning performance of Groundhog Day and I’m hoping a small peek into what I saw and what I’m doing now will help at least one other person out there.

Personal Failure Mode Effects And Mitigations

There’s a process in manufacturing called “failure mode and effects analysis”12 that can be applied to any complex system, including one’s self. It’s the structured act of reviewing as many components, assemblies, and subsystems as possible to identify potential failure modes in a complex system and their causes and effects.

Normal folks would likely just call this “self-regulation, recovery, and stress management”13,14.

My human complex system was literally injuring itself (my particular RSI is caused by ganglia sac growth; the one in my left wrist is now gone and the right wrist is reducing, both without medical intervention, ever since quitting), but rather than examine the causes, I just attributed it to “getting old”, and kept on doing the same thing every day.

I’ll have some more time for self-reflection during this week of funemployment, but I’ve been assessing the failure modes, reading new recovery and management resources, and wanted to share a bit of what I learned.

Some new resources linked-to in the footnotes, and found in annotated excerpts below, that I have found helpful in understanding and designing corrective systems for my personal failure modes are from Cornell.

  • Don’t be afraid of change: For someone who is always looking to the future and who groks “risk management”, I’m likely one of the most fundamentally risk-averse folks you’ve encountered.

    I let myself get stuck in a pretty unhealthy situation mostly due to fear of change and being surface-level comfortable. If I may show my red cult colors once again, “allow yourself the opportunity to get uncomfortable” should apply equally to work as it does to watts.

    Please do not let risk aversion and surface-level comfort keep you in a bad situation. My next adventure is bolder than any previous one, and is, in truth, a bit daunting. It is far from comfortable, and that’s O.K.

  • Take care of your physical needs: Getting a good night’s rest, eating well, and exercising are all essential to being able to feel satisfaction in life. They’re also three things that have been in scarce supply for many folks during the pandemic.

    I like to measure things, but I finally found the Apple Watch lacking in quantified self utility and dropped some coin on a Whoop band, and it was one of the better investments I’ve made. I started to double-down on working out when I learned I was going to be a pampa15, as I really want to be around to see him grow up and keep up with him. I’ve read a ton about exercise, diet, etc. over the years, but the Whoop (and Peloton + Supernatural coaches) really made me understand the importance of recovery.

    Please make daily time to check in with your mental and physical stress levels and build recovery paths into your daily routines. A good starting point is to regularly ask yourself something like “When I listen to my body, what does it need? A deep breath? Movement? Nourishment? Rest?”

  • Engage in activities that build a sense of achievement: The RSI made it nigh impossible to engage with the R and data science communities, something which I truly love doing, but now realize I was also using as a coping mechanism for the fact that a large chunk of pay-the-bills daily work was offering almost no sense of achievement16. I’m slowly getting back into engaging with the communities again, and I know for a fact that the it will be 100% on me if I do not have a daily sense of achievement at the new pay-the-bills daily workplace.

    It’d be easy for me to say “please be in a job that gives you this sense of daily achievement”, but, that would be showing my privilege. As long as you can find something outside of an achievement-challenged job to give you that sense of achievement (without falling into the similar trap I did) then that may be sufficient. The next bullet may also help for both kinds of work situations.

    You can also be less hard on yourself outside of work/communities and let yourself feel achieved for working out, taking a walk, or even just doing other things from the first bullet.

  • Changing thoughts is easier than changing feelings: Thoughts play a critical role in how we experience a situation. When you notice yourself first becoming frustrated or upset, try to evaluate what you are thinking that is causing that emotion.

    This is also known as cognitive re-framing/restructuring17. That footnote goes to a paper series, but a less-heady read is Framers, which is fundamentally about the power of mental models to make better decisions. I’d note that you cannot just “stop caring” to dig yourself out of a bad situation. You will just continue to harm yourself.

    Note that this last bullet can be super-hard for those of us who have a strong sense of “justice”, but hang in there and don’t stop working on re-framing.

FIN

I let myself get into a situation that I never should have.

Hindsight tells me that I should have made significant changes about four years ago, and I hope I can remember this lesson moving forward since there are fewer opportunities for “four year mistakes” ahead of me than there are behind me.

Burnout — which is an underlying component of above — takes years to recover from. Not minutes. Not hours. Not days. Not weeks. Not months. Years.

I’m slowly back to trying to catch up to mikefc when it comes to crazy R packages. I have more mental space available than I did a few years ago, and I’m healthier and more fit than I have been in a long time. I am nowhere near recovered, though.

If you, too, lapsed when it comes to checking in with yourself, there’s no time like the present to restart that practice. The resources I posted here may not work for you, but there are plenty of good ones out there.

If you’ve been doing a good job on self-care, make sure to reach out to others you may sense aren’t in the same place you are. You could be a catalyst for great change.


  1. I mean, you do have LinkedIn for discovering things like that 
  2. Though you’d be hard-pressed to not think some folks there only listen to Carly Simon 
  3. Usually on Twitter (b/c ofc) 
  4. Which is part of what makes it a bona fide cult 
  5. The Sun Also Rises 
  6. Observability 
  7. RSI 
  8. RSI wasn’t the only negative physical manifestation, but listing out all the things that manifest and got better isn’t truly necessary. 
  9. Software systems observability 
  10. Groundhog Day 
  11. I’m a billion years old, have seen Groundhog Day far more than a few times, and just got the joke (as I was writing this post) that Murray’s character was named “Phil”. 
  12. FMEA 
  13. Cornell: Emotional regulation [PDF] 
  14. Cornell: Stress management strategies [PDF] 
  15. Belter creole for granddad (et al) 
  16. I feel compelled to note that I was able to perform many, many work activities over the course of nearly seven years that brought a great sense of achievement. For a host of reasons, they went from a stream to a trickle. 
  17. Cognitive Restructuring 
18 May 00:10

A new career in software development: advice for non-youngsters

by Derek Jones

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

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

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

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

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

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

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

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

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

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

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

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

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

18 May 00:09

GitHub Actions job summaries

by Simon Willison

New feature announced here. Here's the full documentation.

These are incredibly easy to use. GitHub creates a file in your workspace and puts the filename in $GITHUB_STEP_SUMMARY, so you can build the summary markdown over multiple steps like this:

echo "{markdown content}" >> $GITHUB_STEP_SUMMARY

I decided to try this out in my simonw/pypi-datasette-packages repo, which runs a daily Git scraper that records a copy of the PyPI JSON for packages within the Datasette ecosystem.

I ended up mixing it with the Git commit code, so the step now looks like this:

    - name: Commit and push
      run: |-
        git config user.name "Automated"
        git config user.email "actions@users.noreply.github.com"
        git add -A
        timestamp=$(date -u)
        git commit -m "${timestamp}" || exit 0
        echo '### Changed files' >> $GITHUB_STEP_SUMMARY
        echo '```' >> $GITHUB_STEP_SUMMARY
        git show --name-only --format=tformat: >> $GITHUB_STEP_SUMMARY
        echo '```' >> $GITHUB_STEP_SUMMARY
        git pull --rebase
        git push

This produces a summary that looks like this:

Screenshot of the summary

Two things I had to figure out here. First, the backtick needs escaping if used in double quotes but does not in single quotes:

echo '```' >> $GITHUB_STEP_SUMMARY

I wanted to show just the list of affected filenames from the most recent Git commit. That's what this does:

git show --name-only --format=tformat:

Without the --format=tformat bit this shows the full commit message and header in addition to the list of files.

I'm running this in the same block as the other git commands so that this line will terminate the step early without writing to the summary file if there are no changes to be committed:

git commit -m "${timestamp}" || exit 0
18 May 00:08

Respectfully Fire Me Please!

I was brought onto a six-month project at an organization that needed to meet EU and USA requirements around listing all manufacturing material elements that went into handheld scanners. It was a short term project with a hard deadline. It wasn’t a large complex project, but it was a very important one for the company.

The company used an external vendor (we’ll call them “ExVen”) to get the Bill of Materials (BOM), the raw chemical elements that make up components for their handheld scanners (resistors, chipsets…etc). “ExVen” would charge $10,000 for the investigation needed to get the materials for a component that had never been researched. If the component had already been researched they charged $2,000 for the complete materials list. After hearing about “ExVen” multiple times I snidely remarked, “this company should provide a service that does this.” To which folks answered “They do have one but it costs $20,000/year!”

I did some quick back-of-the-napkin calculations on project costs (which equated to 6 people for 6 months) that told me the project would cost about a million dollars. That million dollars could pay for 50 years of “ExVen’s” service!

I take my job very seriously, and I believe that it’s my duty to save the client money, time, and effort, if at all possible. In that very same meeting where I heard about this other company’s service, I asked, “Why aren’t we just using them? It would save you a lot of money.” I was immediately shot down by the Project Manager and the Product Owner in the group with reasons like, “They don’t have all the materials listed that we need.”, “We want to be able to control our own BOM data.” and “We’ve already spent a million dollars on this already.” My initial response was, “Yes, I get that, except you could save yourself a million dollars and still offload all that responsibility. ExVen will do the research on missing components for you!” Surprisingly I was shot down. The project, once started, will continue!

After that meeting, one of the internal developers came up to me and shook my hand and said “Thank you for saying what’s been on all our minds. Sorry you got shot down.” Using that service was the right thing to do. I decided to go up the ladder and talk to the PM’s boss. I tactfully brought this up, but they too were unresponsive to this request. I went to my sponsor at the company, who’s above the others, and mentioned it to him. He understood my frustration, but said the decision had already been made. He talked about what equates to the Sunk Cost Fallacy. That they’d already spent money and time to get to where they are and that they needed to just finish it. Also, they’d signed a contract for my work and that using another company would be complicated. I assured him that I had checked with my consulting company and canceling the contract would be easy and no cost for them. They’d save a million dollars using ExVen. However, again I was denied the ability to save them money!

I still really couldn’t let this go though. About a week later while in a whiteboard session with the team, I ended up putting a 1-inch green dot in the upper right of “The Big Board” whiteboard, because oddly enough it was a sort of close proximity to the 3rd party company’s name. From then on, for the next 4 months, when appropriate, I’d respectfully point to that green dot and say, “Fire me and use them!” I’d get some chuckles and eye rolls, and then they’d continue to trudge along the development path. It stayed up there throughout the whole rest of the project including the below picture of the final deployment steps.

Hand drawn image of four people looking at a whiteboard, and one presenter at the whiteboard pointing to a green dot.

We completed the application for the company on time and deployed it without issues. I got to teach their developers how to do TDD, the power of pair programming, benefits of Continuous Integration, and delivered a product that exceeded expectations on project on time. Six months later one of those developers reached out to me and said that the company had shut down the application/service we’d worked on and was using ExVen. We had a good laugh and I’m in contact with that developer to this day.

18 May 00:08

Saturday Morning Breakfast Cereal - Trolley Realism

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



Click here to go see the bonus panel!

Hovertext:
There's nothing on the chalkboard, because you wouldn't pay attention anyway.


Today's News:
17 May 23:51

Why We Relaunched Code as Craft

by Najla Elmachtoub

A few weeks ago, we relaunched our engineering blog, Code as Craft, and I want to share the story of why we did that. If you’re new to Code as Craft, here’s a quick before and after:

In the very first Code as Craft post, written about twelve years ago, former Etsy CEO Chad Dickerson wrote:

“At Etsy, our mission is to enable people to make a living making things. The engineers who make Etsy make our living making something we love: software. We think of our code as craft – hence the name of the blog.”

I was still a college student when the blog was first published. In the sea of tech companies that I would be applying to for internships, “Code as Craft” made Etsy stand out. I had loved how wonderful and weird the marketplace was, and that same spirit seemed to be celebrated in the engineering culture. I didn’t get the Etsy internship at the time, but I kept following the company and came to work here years later.

About a year ago, looking at Code as Craft with my colleague and friend Erica Greene, we noticed that our blog – which at one point felt innovative, enticing, and unique – didn’t really feel fresh or aspirational to us anymore. Opening the site felt like stepping back into those college days, and I recalled the anxiety of preparing to enter a workforce that mostly didn’t look like me. Only about 12% of my graduating computer science class identified as women, a situation mirrored in the branding of many major tech companies at the time. Engineering blogs – including Code as Craft, whose look was unchanged since its creation – tended to be committed to abstraction and devoid of personality, catering to a version of the tech world unwilling to see diversity or honor its member’s lived experiences.

Now, at Etsy, 36% of our US-based software engineering team are women and marginalized genders, well above industry benchmarks. We’re a company that’s diverse in gender, culture, engineering experience, and much more, supporting a similarly vibrant community of buyers and sellers. Erica and I thought it was time for the public face of our engineering work to convey that fact, and our pride in it.

It might seem shallow, or beside the point, to dwell on the look and feel of an engineering blog. But the notion that engineering should somehow be beyond such concerns – especially at a company like Etsy – is exactly the problem that we're trying to solve. At its core, Etsy is a marketplace, one that brings people together around a shared delight in making things (as Chad Dickerson pointed out in that quote a dozen years ago). We’re rebranding with the intention of amplifying and supporting that central truth. The prior version of Code as Craft might never have hosted an article such as this one. But we want this blog to feel as accessible to bootcamp graduates as it does to PhDs in data science. We have a team of brilliant engineers who are connected to the world around them, and who can express that connection in ways that are thoughtful and open, that spark conversation, and keep it human. We want our writers and our readers alike to see themselves represented here.

We’ve heard from many people that Code as Craft is one of the reasons they aspired to join Etsy. For me, our team’s ability to recognize areas for growth and support changes such as this one are reasons why I stay here. We hope this is a platform where our employees, all of them, will be proud to share their work with you. We hope it will capture the full breadth of content that we’re capable of. Thank you for reading our blog.

Thank you to Etsy leadership, specifically Mike Fisher and Megan Oppenheimer, for readily sponsoring this initiative. My extreme gratitude goes out to Marissa Colantonio-Ray, Leah Schatz, Morgan McCrory, and Renee MacDonald for working on the project. Last but not least, this was made possible by my partner in many crimes, Erica Greene.

17 May 22:35

Heroku: Core Impact

Heroku: Core Impact

Ex-Heroku engineer Brandur Leach pulls together some of the background information circulating concerning the now more than a month long Heroku security incident and provides some ex-insider commentary on what went right and what went wrong with a platform that left a huge, if somewhat underappreciated impact on the technology industry at large.

Via Hacker News

17 May 22:35

BBC digital director: 'Social media platforms are often working against us'

Andrew Kersley, PressGazette, May 16, 2022
Icon

As is so often the case, what is being said here of media organizations like the BBC can also be said of educational institutions. The usual complaints are made, describing "social media platforms as a 'pure Wild West' full of 'bullying, violence, racism [and] hate crimes'." But some relevant points are also made. First, we "are actually not competing with each other any more...  most of the time, we are either growing the pie of time people spend on journalism, or we're shrinking it." And second, "People aren't following pages anymore, they're following personalities. There are studies that prove that. People will more likely have a reporter from a news organization pop up on their feed than the organisation itself."

Web: [Direct Link] [This Post]
17 May 22:35

Here come Canada’s crypto-conservatives

Paris Marx, The Breach, May 16, 2022
Icon

This article is advocacy journalism, so read it very sceptically and ignore the partisan political points being made. The bulk of the rest is a fairly mainstream criticism of digital currencies, pointing out the obvious flaws (the scammers, the hucksterism, etc). The salient point here is made more tacitly: cryptocurrency is the privatization of money. That's why we see the lawlessness: there's no central government oversight (or any oversight, really) ensuring money flows are legal. And one clear danger alluded to here is that money of questionable (and often foreign) origin can be used to fund further privatization. If this were all decentralized, with some sort of genuine equity built in, then that wouldn't be a problem. But that, for the most part, is a service the government provides. Without government, wealth is concentrated, and we get rule by the oligarchs.

Web: [Direct Link] [This Post]
17 May 22:34

Adding Unoffice Hours

by Ton Zijlstra

Matt Webb has been keeping UnOffice hours for a few years, a few timeslots in his week during which anyone can come by and talk to him. Several people in my network similarly have opened parts of their weekly schedule for others to be able to plan a conversation with them. Using a tool like Calendly, it saves the back and forth of finding a time. More importantly it is a clear signal you don’t have to ask if it’s ok to have a conversation. You can just go ahead and plan it if you want to talk to them.

I like that idea. A few times in the past I’ve mailed a selection of my own contacts to ask them for a conversation, just to catch up and hear what they are doing. It always leads to some new insights or connections, and sometimes it generates a next step. It’s a serendipity aid.

As an experiment I’ve created a schedule in which anyone can book a conversation on Wednesday afternoons (Central European Time). You can find the link to my Calendly schedule in the right hand side bar.

17 May 22:33

Reaching 1 million deaths

by Nathan Yau

The New York Times narrated the path to one million Covid deaths in the United States. They start with one million dots, each one representing a death. As you read, the dots arrange into trends and significant events over these past years.

As we have talked about before, it’s impossible to communicate the true weight of a single death, much less a million, but the individual dots provide a visual foundation to better understand abstract trends.

Tags: coronavirus, mortality, New York Times

17 May 22:20

Facing My Misanthropy

by Dave Pollard


cartoon by the incomparable Michael Leunig

I‘ve never really liked most people very much. I don’t seek out, or need, much human company, preferring to interact with a few who are as interested as I am in the subjects of this blog:

  • Creative works of all kinds
  • Appreciating how the world really works
  • Understanding our culture, and human nature
  • Tracking the collapse of our civilization, and the sixth great extinction
  • Exploring radical non-duality, free will and conditioning

I also enjoy interacting with an even smaller group of people who, for reasons I can’t really fathom, seem to really enjoy my company. I put that down to chemistry, which I wouldn’t even try to understand.

This year, my misanthropy has had the upper hand over me far too much of the time for my liking. I can tell myself that, like everyone else, I have no control over my reactions, beliefs, preferences and passions, but it doesn’t stop me from being distressed by them, from finding them ‘inappropriate’. It’s not even that I find the views and actions of people unfathomable. As I keep saying, no one is to blame and we are all doing our best.

So why do I get so exasperated by seemingly intelligent, thoughtful, informed people who, for example, support sending massive amounts of munitions to expand a war, who support censoring and ‘cancelling’ radical feminists and others with ‘unacceptable’ views, who think vaccines are evil and masks are an unreasonable restriction on their ‘freedom’, who think many or all government services are non-essential and unaffordable and should be privatized or discontinued, who think it matters which party you vote for in the next election, or who think climate collapse can be averted?

I appreciate that most people simply can’t help themselves. Why do I expect more of more intelligent people?

I used to agree with most people who call themselves ‘progressives’, on almost all issues. But now, when I am writing or speaking with people, I have to remind myself which subjects we agree on, and which we utterly disagree on, basically because I’ve found it completely pointless to even broach the latter. And ‘the latter’ seems to be an ever-growing proportion of what everyone is talking about.

Nevertheless, I get grumpy when I see or experience stupidity, ignorance, mis- and disinformation, naïveté, simplistic thinking, over-reaction, narcissism, cruelty, violence, aggression, righteous indignation, sloppiness, arrogance (including my own), self-pity, fearfulness, self-preoccupation, manipulation, meanness, incompetence and other very normal, understandable human characteristics and behaviours. Why does that happen, when I understand why things are that way?

And so I worry about a world sliding into fascism, a world utterly incapable of coping with the ever-growing challenges of collapse, although I know in my heart and my head and my bones, there is nothing to be done about it. What then is the point of worrying? I suppose we feel fear even when we know what we fear cannot be avoided, especially when the form the things we fear are going to take is so unclear and uncertain.

Recently, however, there have been times when the misanthropy just kind of disappears. When I see people struggling with difficult circumstances, or in physical pain. When I see people just smiling quietly, or singing, or obviously in love. When I see people working passionately on a project they love. When I see children in non-competitive play, or hear birdsong, or beautifully-composed music, or see pink and purple clouds at sunset. When people obviously brimming with joy greet me and everyone they see cheerfully.

In short, it is when I pay attention, right here, right now, that the misanthropy seems to melt away. When I get outside my head, and discover others likewise not locked inside their heads, not dwelling on everything that they imagine to be wrong with their world, or the world.

I have often said that I believe wild creatures move easily between two states — excitement and equanimity — save in the rare moments they face existential stress. I think that is how I want to live, and how I, or at least the idealist in me that is still hanging on, want all humans to live. Accepting of what is, noticing more here and now, thinking a lot less about abstract things and things they can do nothing about, and not getting caught up in their heads.

It’s a cliché that the things we presume to dislike in other people are the things we actually dislike about ourselves, which we resent seeing reflected back at us in others’ behaviours. All those things that I said above make me grumpy — stupidity, ignorance, expression of mis- and disinformation, naïveté, simplistic thinking, over-reaction, narcissism, cruelty, violence, aggression, righteous indignation, sloppiness, arrogance, self-pity, fearfulness, self-preoccupation, manipulation, meanness, incompetence — when I see them in others, are things that I am embarrassed to acknowledge I have been ‘guilty’ of, and sometimes still am.

So perhaps my misanthropy is a mask for shame. And the things I mentioned above that melt away my misanthropy do so because they do not reflect back on me the things I am ashamed of in my past or present self.

After all, since I know we cannot be other than how we are, my misanthropy cannot have any logical underpinnings, so it must have a psychological basis. We are all healing, and perhaps it is just too uncomfortable and embarrassing to be reminded of old and unhealed wounds when I see them freshly gaping in others. Perhaps I am afraid that the fearfulness and other lamentable and useless frailties of others will tear open the same fearfulness and frailties, anew, in me.

Of course, knowing this, if it is even true, doesn’t make any difference; it is not useful knowledge. There is no solace in feeling “Too Far Ahead” of most other people, and even believing that anyone is “ahead” of anyone else is just one more arrogance to invoke even more self-shame.

Like everyone else, I cannot help myself. Of late I have been trying to spend less time inside my head, less time online, more time sensing and less time trying to make sense. Not that I have any control over that — that just seems to be who I am, now, what I seem inclined to do. Might just be a new form of escapism.

But whatever it is, I am driven, now, to go out and walk by the river, smile for no reason, pay attention to small things, make eye contact with people and greet them cheerfully (even when that raises eyebrows), watch the birds and the squirrels, think less about what my senses are sensing, and just see where that takes me. Hopefully, to a place that is less misanthropic, less self-possessed, and more useful to the world.

17 May 22:16

Supercharging GitHub Actions with Job Summaries

Supercharging GitHub Actions with Job Summaries

GitHub Actions workflows can now generate a rendered Markdown summary of, well, anything that you can think to generate as part of the workflow execution. I particularly like the way this is designed: they provide a filename in a $GITHUB_STEP_SUMMARY environment variable which you can then append data to from each of your steps.

Via Hacker News

17 May 21:56

So Long, And Thanks For All The Bicycles!

by Adrienne Johnson

 Wow. It's 2022. Six years since last we met! Sorry for that.


Back in 2008 I was tired of always being stuck in my car- driving to work, driving 3 children everywhere, driving to the grocery store, drivingdrivingdriving, and never having time for anything other than driving. Life was stressful enough, and constantly being in the car wasn't making the situation better. My husband (you remember Hubby the Bikeman!) was finally back in stable employment after the god-awful post 9-11 tech crash, I was able to cut back hours in a career that was sucking me dry, and the world was waking up to the idea that life could be different. Living a slower, more deliberate life of lower consumption/more joy was grabbing hold, and I was spending a lot of time exploring the world of Slow Food (a movement that completely changed my world) and Buddhism (another exploration that changed everything). Suddenly, those searches were coinciding again and again with what was at that time called "Slow Cycling" (ironically, it stopped being called that pretty fast), and I kept stumbling on (the now defunct) "Amsterdamize" blog, by Marc Van Woudenberg (a lovely, funny man who will never know how much that blog meant to me). Repeatedly, while researching local food sheds and seasonal eating, my searches would turn up his photos and stories of people on giant, traditional Euro-style bicycles while wearing normal clothes, and not worrying about helmets or heart rates. They all looked content, and unhurried, and healthy. There were kids in bike seats eating snacks, and women wearing high heels, and panniers full of backpacks and groceries. 

I needed that. I needed that bad. 

I started with what I had- a 1988 Rockhopper Comp that I'd had since college, a crappy 8MP point and shoot, a brand new Flickr account, and a desire to try something different.

 And then I met Meli after stalking her at Bikes and the City.

Our first of hundreds of lunch dates, the
day CYLRAB became a
real thing.

Before I knew it, I had a blog, a new bicycle, my first good digital camera, and 2 more friends to share it all with- Calitexican, and Caryl!

 

The Calitexican!

Caryl from our LA bureau.

 
If you were around back then, you remember. The amount the world has changed since those days, which still had that 90's feel of possibility, is astounding!

We are now 13 years past those early days, and we are all in different lives. That adorable little boy who was always eating something in the seat on the back of my bicycle graduates from HS in a couple of months. My daughter (Meli's Mini Me) is a research scientist in regenerative medicine (commuting to her lab on an e-bike, looking fab the whole way). The oldest is an economist who advises the Governor of Colorado and is looking to buy his first home. Hubby the Bikeman is still fixing everyone's bicycles (something has to be a constant!).

The last few years have brought enormous changes in the lives of the CYLRAB women. We have collectively changed careers, returned to school, survived tragedies, bought homes, recreated ourselves repeatedly. For myself, l decided to formally study photography after having to leave my Physical Therapy career to care for both my family, and myself (something the blog showed me was possible). Autoimmune arthritis has changed how I do everything, and so many of the things I learned from my bicycle and creating the blog are what have made that process successful. I don't ride like I used to, and even typing this brief letter is hard on my hands, but I keep going!

And wasn't that the point of what were saying back then? It doesn't matter how fast you are, how fancy your bike is, how you ride, or how you look doing it. It matters that you show up, that you try, and that you love it. Bicycles were the vehicle in our message, but they were only ever a metaphor. 

After the end of next week, I am archiving CYLRAB. It's time to let go of this (officially), and embrace the things that are happening now. The world still needs us to ride our bicycles, maybe more than ever before. The world needs us to all change our lives! We started that together back in 2008, and now we need to find the next ineration.We thank you from the bottom brackets of our hearts (see what I did there?) for the years you shared your stories with us, and for joining us in ours.


Change your life! Ride a bike!




17 May 21:55

Using the Societies Act to return stolen land

by Chris Corrigan

Many settler organizations in Canada wonder how they can make meaningful strides on reconciliation with Indigenous Nations. Let me show you perhaps the easiest and most meaningful way you can do this. (I am not a lawyer, but there is no reason why this can’t work, and I’m currently working with a couple of organizations to make this happen).

In British Columbia, the Societies Act governs the operation of non-profit societies through which many organizations are operated. The Act has a whole section on what to do when the Society is needs to fold or be dissolved. Section 124 of this Act says that when a Society is dissolved, the assets of a Society can be distributed after all the debts are settled. Societies can make a by-law, kind of like an organizational Will, that specifies who receives these assets: Here is 124.2 (b).

The stipulation is that the entity receiving the asset needs to be a qualified recipient, which means another Society, or a co-op or a charity. And guess what? All First Nations in Canada are qualified recipients.

So what this means is that if your Society owns land as an asset you can create a by-law that says when you are dissolved as a Society the land you own is returned to the local First Nation in whose territory you are operating. You can make that by-law right now. And THAT means that if every Society operating in BC did that, over time, a lot of land would be returned to First Nations when it was no longer used by a Society. Of course you can always give that #LandBack now, but at the very least, you could make a by-law today.

So THAT means 2 things: 1. when you tell the host Nation that you are doing this, you enter into a long term relationship that is all about how you will steward this land while you are using it so that as the last settler organization to own it, you return it in a healthy state, because it’s kind to return stolen property in at least as good a shape as it was in when it was taken. And, 2: when you do your territorial acknowledgement you can truly say “we are on Indigenous land and we are in relationship with the local host Nation to return this land to them.” This is such an easy thing to do. You can do it right now. Imagine if this happened overnight. Over the next few years, land that is currently used to provide services and care for communities would flow back into the hands of First Nations and in the meantime relationships would be strengthened and responsibilities enacted. It’s such a powerful thing to do. And it is probably the easiest way to participate in the most meaningful action you can to engage in the reconciliation agenda. Give #LandBack.

(And here is some good legal advice from lawyers who want to help you dissolve your Society well.)

17 May 21:54

Why Guam should be your next destination rather than a layover - The Points Guy

17 May 21:54

A thermal theory of basketball

by Doc Searls

basketball

Chemistry is a good metaphor for how teams work—especially when times get tough, such as in the playoffs happening in the NBA right now.

Think about it. Every element has a melting point: a temperature above which solid turns liquid. Basketball teams do too, only that temperature changes from game to game, opponent to opponent, and situation to situation. Every team is a collection of its own human compounds of many elements: physical skills and talents, conditioning, experience, communication skills, emotional and mental states, beliefs, and much else.

Sometimes one team comes in pre-melted, with no chance of winning. Bad teams start with a low melting point, arriving in liquid form and spilling all over the floor under heat and pressure from better teams.

Sometimes both teams might as well be throwing water balloons at the hoop.

Sometimes both teams are great, neither melts, and you get an overtime outcome that’s whatever the score said when the time finally ran out. Still, one loser and one winner. After all, every game has a loser, and half the league loses every round. Whole conferences and leagues average .500. That’s their melting point: half solid, half liquid.

Yesterday we saw two meltdowns, neither of which was expected and one of which was a complete surprise.

First, the Milwaukee Bucks melted under the defensive and scoring pressures of the Boston Celtics. There was nothing shameful about it, though. The Celtics just ran away with the game. It happens. Still, you could see the moment the melting started. It was near the end of the first half. The Celtics’ offense sucked, yet they were still close. Then they made a drive to lead going into halftime. After that, it became increasingly and obviously futile to expect the Bucks to rally, especially when it was clear that Giannis Antetokounmpo, the best player in the world, was clearly less solid than usual. The team melted around him while the Celtics rained down threes.

To be fair, the Celtics also melted three times in the series, most dramatically at the end of game five, on their home floor. But Marcus Smart, who was humiliated by a block and a steal in the closing seconds of a game the Celtics had led almost all the way, didn’t melt. In the next two games, he was more solid than ever. So was the team. And they won—this round, at least. Against the Miami Heat? We’ll see.

Right after that game, the Phoenix Suns, by far the best team in the league through the regular season, didn’t so much play the Dallas Mavericks as submit to them. Utterly.

In chemical terms, the Suns showed up in liquid form and turned straight into gas. As Arizona Sports put it, “We just witnessed one of the greatest collapses in the history of the NBA.” No shit. Epic. Nobody on the team will ever live this one down. It’s on their permanent record. Straight A’s through the season, then a big red F.

Talk about losses: a mountain of bets on the Suns also turned to vapor yesterday.

So, what happened? I say chemistry.

Maybe it was nothing more than Luka Dončić catching fire and vaporizing the whole Suns team. Whatever, it was awful to watch, especially for Suns fans. Hell, they melted too. Booing your team when it needs your support couldn’t have helped, understandable though it was.

Applying the basketball-as-chemistry theory, I expect the Celtics to go all the way. They may melt a bit in a game or few, but they’re more hardened than the Heat, which comes from having defeated two teams—the Atlanta Hawks and the Philadelphia 76ers—with relatively low melting points. And I think both the Mavs and the Warriors have lower melting points than either the Celtics or the Heat.

But we’ll see.

Through the final two rounds, look at each game as a chemistry experiment. See how well the theory works.

 

 

17 May 21:01

Free Software Support Is Critical to Its Success

by Kyle Rankin

I’ve been in many “Linux on the Desktop” debates over the years and my stance today is largely the same as two decades ago: if you want free software to succeed, it must be pre-installed on hardware where all hardware features work, with a hardware vendor that supports it. It doesn’t matter nearly as much […]

The post Free Software Support Is Critical to Its Success appeared first on Purism.

17 May 21:01

Human Spaceflight Statistics 2021

by Brian Hurley
Information on human spaceflight in 2021. Includes launch vehicles, crew members, launch dates, and launch operators. Also includes suborbital and orbital flights.
17 May 21:01

Human Spaceflight Interactive Timeline

by Brian Hurley
17 May 21:00

College Board stops sharing data on Advanced Placement Computer Science exams

by Mark Guzdial

Barb Ericson has been gathering data on the Advanced Placement exams in Computer Science for a decade. The College Board made available data about who took the exam (demographic statistics) and how well they did for each state, for AP CS Level A and then for AP CS Principles when that exam started. When she first started in 2010, she would download each state’s reports, then copy the data from the PDF’s into her Excel spreadsheets. By the time she processed the 2020 data, it was mostly mechanized. Her annual reports on the AP CS exam results were posted here until 2018. She now makes her reports and her archived data collection available at her blog.

However, the 2020 data she has posted are now the last data that are available. The College Board is no longer sharing data on AP CS exams. The archive is gone, and the 2021 data are not posted.

Researchers can request the data. Barb did several months ago. She still hasn’t received it. She was told that they would sign an agreement with the University of Michigan to give her access to the data — but not to her personally. She would also have to promise that she wouldn’t share the data.

Barb talked to someone at the College Board who explained that this is a cost-saving measure — but that doesn’t make much sense. The College Board still produces all the reports and distributes them to the states. They have just stopped making them publicly available.

I agree with Joanna Goode in this tweet from April:

The National Science Foundation paid for the development of the AP CS Principles exam explicitly to broaden participation in computer science. The goal was to create an AP CS exam that any high school could teach, that would be welcoming, and that would encourage more and more diverse students to discover computing. But now, the data showing us whether that’s working are being hidden. Why?

17 May 20:17

Using Leonardo SVG Palettes in R

by hrbrmstr

In today’s newsletter Leonardo, an open source project and free online too from Adobe that lets you make great and accessible color palettes for use in UX/UI design and data visualizations! You can read the one newsletter section to get a feel for Leonardo, then go play with it a bit.

The app lets you download the palettes in many forms, as well as just copy the values from the site. Two of the formats are SVG: one for discrete mappings (so, a small, finite number of colors) and another for continuous mappings (so, a gradient). I’ll eventually add the following to my {swatches} package, but, for now, you can tuck these away into a snippet if you do end up working with Leonardo on-the-regular.

Read a qualitative leonardo SVG palette

This is a pretty straightforward format to read and transform into something usable in R:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="616px" height="80px" aria-hidden="true" id="svg">
    <rect x="0" y="0" width="80" height="80" rx="8" fill="#580000"></rect>
    <rect x="88" y="0" width="80" height="80" rx="8" fill="#a54d15"></rect>
    <rect x="176" y="0" width="80" height="80" rx="8" fill="#edc58d"></rect>
    <rect x="264" y="0" width="80" height="80" rx="8" fill="#ffffe0"></rect>
    <rect x="352" y="0" width="80" height="80" rx="8" fill="#b9d6c7"></rect>
    <rect x="440" y="0" width="80" height="80" rx="8" fill="#297878"></rect>
    <rect x="528" y="0" width="80" height="80" rx="8" fill="#003233"></rect>
</svg>

which means {xml2} can make quick work of it:

read_svg_palette <- \(path) {
  xml2::read_xml(path) |> 
    xml2::xml_find_all(".//d1:rect") |> 
    xml2::xml_attr("fill")
}

pal <- read_svg_palette("https://rud.is/dl/diverging.svg")

scales::show_col(pal)

Read a gradient leonardo SVG palette

The continuous one is only slightly more complex:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="800px" height="80px" aria-hidden="true" id="gradientSvg">
    <rect id="gradientRect" width="800" height="80" fill="url(#gradientLinearGrad)" rx="8"></rect>
    <defs id="gradientDefs">
        <linearGradient id="gradientLinearGrad" x1="0" y1="0" x2="800" y2="0" gradientUnits="userSpaceOnUse">
            <stop offset="0" stop-color="rgb(88, 0, 0)"></stop>
            <stop offset="0.04081632653061224" stop-color="rgb(123, 37, 6)"></stop>
            <stop offset="0.08163265306122448" stop-color="rgb(153, 65, 16)"></stop>
            <stop offset="0.12244897959183673" stop-color="rgb(179, 90, 25)"></stop>
            <stop offset="0.16326530612244897" stop-color="rgb(203, 115, 34)"></stop>
            <stop offset="0.20408163265306123" stop-color="rgb(222, 139, 51)"></stop>
            <stop offset="0.24489795918367346" stop-color="rgb(230, 166, 94)"></stop>
            <stop offset="0.2857142857142857" stop-color="rgb(236, 190, 130)"></stop>
            <stop offset="0.32653061224489793" stop-color="rgb(240, 210, 160)"></stop>
            <stop offset="0.3673469387755102" stop-color="rgb(245, 227, 184)"></stop>
            <stop offset="0.40816326530612246" stop-color="rgb(249, 241, 204)"></stop>
            <stop offset="0.4489795918367347" stop-color="rgb(252, 250, 217)"></stop>
            <stop offset="0.4897959183673469" stop-color="rgb(254, 254, 222)"></stop>
            <stop offset="0.5306122448979592" stop-color="rgb(251, 252, 222)"></stop>
            <stop offset="0.5714285714285714" stop-color="rgb(242, 248, 220)"></stop>
            <stop offset="0.6122448979591837" stop-color="rgb(229, 240, 216)"></stop>
            <stop offset="0.6530612244897959" stop-color="rgb(210, 229, 209)"></stop>
            <stop offset="0.6938775510204082" stop-color="rgb(188, 216, 201)"></stop>
            <stop offset="0.7346938775510204" stop-color="rgb(160, 202, 189)"></stop>
            <stop offset="0.7755102040816326" stop-color="rgb(126, 186, 178)"></stop>
            <stop offset="0.8163265306122449" stop-color="rgb(74, 170, 167)"></stop>
            <stop offset="0.8571428571428571" stop-color="rgb(53, 147, 146)"></stop>
            <stop offset="0.8979591836734694" stop-color="rgb(42, 122, 121)"></stop>
            <stop offset="0.9387755102040817" stop-color="rgb(28, 94, 95)"></stop>
            <stop offset="0.9795918367346939" stop-color="rgb(9, 65, 66)"></stop>
        </linearGradient>
    </defs>
</svg>

Which means we have to do a tad bit more work in R:

read_svg_gradient <- \(path) {

  xml2::read_xml(path) |> 
    xml2::xml_find_all(".//d1:stop") -> stops

  stringi::stri_replace_last_fixed(
    str = xml2::xml_attr(stops, "stop-color"),
    pattern = ")",
    replacement = ", alpha = 255, maxColorValue = 255)"
  ) -> rgbs

  list(
    colours = lapply(rgbs, \(rgb) parse(text = rgb)) |> 
      sapply(eval) |> 
      stringi::stri_replace_last_regex("FF$", ""),
    values = as.numeric(xml2::xml_attr(stops, "offset"))
  )

}

svg_grad <- read_svg_gradient("https://rud.is/dl/diverging-gradient.svg")

scales::show_col(svg_grad$colours)

We can use the continuous palette with ggplot2::scale_color_gradientn():

df <- data.frame(
  x = runif(100),
  y = runif(100),
  z1 = rnorm(100),
  z2 = abs(rnorm(100))
)

ggplot2::ggplot(df, ggplot2::aes(x, y)) +
  ggplot2::geom_point(ggplot2::aes(colour = z1)) +
  ggplot2::scale_color_gradientn(
    colours = svg_grad$colours,
    values = svg_grad$values
  ) +
  hrbrthemes::theme_ft_rc(grid="XY") 

FIN

Short post, but hopefully a few folks are inspired to try Leonardo out.

17 May 20:14

UK to table bill to scrap Northern Ireland Brexit protocol, Liz Truss says | Brexit

mkalus shared this story from The Guardian:
Next on the agenda: Trade War between the UK and EU.

Liz Truss has claimed the east-west relationship between Great Britain and Northern Ireland has been “undermined” by the Northern Ireland protocol, as she confirmed plans to table legislation that would scrap parts of the agreement.

The UK foreign secretary, who is also responsible for Brexit, set out plans for the move in a statement in the House of Commons. The bill is not expected to be published for several weeks, but if enacted could spark a trade war with the EU.

Truss said the government’s first priority was to uphold the Good Friday agreement, which she said was “under strain”.

“The Northern Ireland protocol does not have the support necessary in one part of the community in Northern Ireland,” she said, referring to opposition from the Democratic Unionist party.

Citing issues such as the need for veterinary checks and EU rules that prevented the Treasury from cutting taxes, she said: “These practical problems have contributed to the sense that the east-west relationship has been undermined,” adding: “We need to restore the balance in the agreement.”

As expected, she proposed legislation that would create a “green channel” for goods going to Northern Ireland from Great Britain that would not go on to the Republic of Ireland, with mandatory checks halted for these exports. Goods moving onwards to the Republic would still face checks, via a “red channel”.

This new system would involve a trusted trader scheme using real-time commercial data.

Truss said the changes would create a “dual regulatory system, that encompasses either EU or UK regulation as those businesses choose; that reflects its unique status of having a close relationship with the EU, while being part of the UK single market”.

The legislation would also remove regulatory barriers to goods made in Great Britain being sold in Northern Ireland and allow the UK to determine tax and spending.

The European Commission’s vice-president in charge of Brexit, Maroš Šefčovič, said Truss’s proposals raised “significant concerns”, adding that “unilateral actions contradicting an international agreement are not acceptable”.

In a statement after Truss’s speech to the Commons, Šefčovič said: “Should the UK decide to move ahead with a bill disapplying constitutive elements of the protocol as announced today by the UK government, the EU will need to respond with all measures at its disposal.”

EU diplomats say no decision has been taken on the nature of retaliatory action, which would only follow a move by the UK government to override the protocol.

EU officials have been urging the UK to return to the negotiating table to discuss proposals from Šefčovič that they say would sharply reduce checks on goods moving between Great Britain and Northern Ireland.

“With political will and commitment, practical issues arising from the implementation of the protocol in Northern Ireland can be resolved,” Šefčovič said.

Boris Johnson insisted the government was not seeking to overturn the protocol, telling the BBC, “we don’t want to nix it, we want to fix it”.

He insisted the move would not breach international law, saying: “The higher duty of the UK government in international law is to the Good Friday agreement and the peace process.

“That’s the thing we have to really look to, and of necessity we can make some changes I think to the protocol, which is not the law of the Medes and the Persians [a Biblical reference, denoting something unchangeable].”

The DUP’s Westminster leader, Jeffrey Donaldson, said Truss’s statement was: “a welcome, if overdue step, that is a significant move towards addressing the problems created by the protocol, and getting power-sharing, based upon a cross-community consensus, up and running again”.

His party would like to see progress on the legislation “in days and weeks, not months”, he said.

Truss stressed that she was still committed to negotiations with the EU, and was hopeful an agreement could be reached. Boris Johnson on Monday described the legislation as “insurance” in case the talks did not yield changes to the operation of the protocol.

Earlier, the prime minister’s official spokesperson said the legislation was aimed at resolving “serious and grave” problems with the protocol – not scrapping it altogether, and added that there would be “robust penalties” for businesses failing to comply with the rules.

Government sources were adamant the legislation would not breach international law, although they declined to discuss the details of legal advice provided to ministers by the attorney general, Suella Braverman.

17 May 20:14

“By outlawing abortion, we are giving a fetus rights other people don’t have”

by Andrea

Mama Doctor Jones: Doctor Explains Roe vs Wade – What Overturning Means for Health & Autonomy in Pregnancy. (YouTube, 28:33min) Includes resources in the video description.

“We’re discussing Roe vs Wade, what it protects, and what an overturn of abortion protection could mean for the state of health and autonomy in pregnancy.”

One comment that stood out to me: “You cannot even take organs from people after they DIE to save someone’s life unless the[y] are an organ donor and gave permission. A CORPSE has more rights than a living woman if this gets overturned.”

17 May 20:13

CZ admits Binance held Luna and UST in bizarre tweet threads

Binance logo, yellow text reading "Binance" next to a diamond shaped logo

On May 15, Binance CEO Changpeng Zhao (widely known as CZ) created a tweet thread in which he attempted to speak nonchalantly about questions that had "just occurred to [him]" about whether Binance held any UST. In the thread he attempted to distance himself from decisions or knowledge around such holdings, speaking cavalierly about how "we probably do have some". Former FBI agent James Harris wrote an interesting analysis of the thread, concluding, "If people weren't worried before, they will be now. If investigators weren't suspicious before, they should be now."

The following day, CZ tweeted, "Binance received 15,000,000 LUNA (at peak worth $1.6 billion USD, now not much) as part of the original ($3m) invest. 560x return at peak." In this tweet, "not much" glossed over the fact that these LUNA, obtained in return for a $3 million investment and at one point nominally worth $1.6 billion, are now worth $2,900.

He also wrote that Binance had 12,000,000 UST—worth $12 million when UST was properly pegged, and now worth $1.16 million (assuming liquidity exists to sell it at all).

17 May 20:13

"Stable"coin DEI loses peg

A circular symbol with a dot in the middle and two horizontal lines on each side, followed by the text "DEI", all in an orange and pink gradient.

Another stablecoin lost its peg as dominoes continued to fall in the declining crypto market. DEI, an algorithmic stablecoin created by Deus Finance on the Fantom network, de-pegged on May 15. Intended to be pegged to the US dollar, the token dipped to a low of around $0.50, and continued to hover well below its intended price through the next day. DEI had a nominal market cap of more than $88 million before losing its peg.

This is another bump in the road for Deus Finance, which lost a total of $16.4 million in two separate flash loan attacks in March and April 2022.

17 May 20:08

Razer’s Viper V2 Pro mouse gets rid of all the fluff

by Karandeep Oberoi

The gaming peripheral market is too saturated, but some staple names continue to stand out.

Razer comes out with heavy hitters consistently, but its latest Viper V2 Pro gaming mouse combines the company’s technical prowess with a fluff-less layout that makes the mouse suitable for those looking for a high-performance mouse and nothing more.

Its design is similar to the company’s 2021-released Viper 8K, or the 2019-released Razer Viper Ultimate, without the pronounced side grips.

For starters, the mouse has no RGB lights, not even on the iconic three-headed snake Razer logo. According to Razer, the Viper V2 Pro is the lightest mouse it has created, and thus getting rid of anything not pivotal to the mouse’s core performance was important. Getting rid of the RGB also helps in conserving the battery, which we’ll touch upon later.

It weighs in at just 58g, making it lighter than the 59g Cooler Master MM731, though using it feels like the difference isn't just 1g, and instead, much more.

Further cutting down on weight, Razer got rid of the two side buttons on the right, while retaining the two left-aligned side buttons, making the Viper V2 Pro suitable for right-handed people. That being said, if you can use your ring or pinkie finger to press the side buttons, the mouse feels and fits equally well in the left hand.

Razer also scrapped separate DPI and Power On/Off buttons in favour of a single button that takes on both the duties, along with eliminating the bottom-placed compartment that holds the 2.4GHz dongle in favour of a USB-C adapter that connects to the dongle.

You see? The overall trend here is to get rid of anything that would add to the mouse’s weight while not compromising on performance.

I’m using the matte-white version of the mouse, however, a matte-black version is also available, so you can match the mouse with your other peripherals.

In the box, which to my delight smells like a new car’s leather seats, you’ll receive Razer’s textured stock grip tape for added traction, though I haven’t felt the need to put them on. The matte design is similar to the Steelseries Aerox 3, and the mouse feels grippy enough as it is, at least while it's still new. Adding the grip tape would contribute to excess weight, taking away from the mouse’s pivotal ultra-lightweight selling point.

Additionally, the grip tape is black and the model I'm using is completely white, so it would look plain ugly if I were to put them on.

The box also contains a USB-A to USB-C speedflex cable with the accompanying 2.4GHz dongle adapter and the most important thing, two Razer stickers.

I use the mouse for about ten to eleven hours per day, which includes eight hours of work time and about two to three hours of gaming. I’ve had the mouse connected via the 2.4GHz wireless connection throughout the entirety of last week, and I’ve only had to charge it once.

And while Razer says that the mouse contains a smaller battery than its predecessors (cutting weight), the difference is negligible. According to official numbers, the battery is good for eighty hours per charge, which sounds like an overstatement. In my experience, the fifty to sixty-hour mark seems to be the correct battery life.

Coming back to the lights, well, I lied. The mouse does feature a small dot-LED right below the scroll wheel to display battery percentages and DPI.

The indication blinks red twice in repeated intervals to indicate that the battery is below 5 percent, whereas an orange, yellow or green light indicates that the battery is above 25, 50 and at 100 percent, respectively.

Similarly, pressing the DPI/Power on-off button lets you cycle through different DPI presents to match your playstyle. A red light indicates that the DPI is on preset number one, which is 400 by default. Preset numbers two, three, four and five are set at 800, 1600, 3200 and 6400, and are denoted by green, blue, cyan and yellow light, respectively. You can alter the presets according to your needs from Razer’s Synapse app.

On the app side of things, Synapse lets you do what any other mouse software would let you. Adjusting DPI, setting DPI presets, polling rate (125, 500 and 1,000), power-saving settings and smart tracking calibration. Nothing new to see there.

Performance-wise, the Viper V2 Pro is a delight to use. According to Razer, it updated the mouse’s PTFE feet to a more optimal shape, which is evident by how smoothly it glides across my mousepad. It tracks accurately even when used directly on a wooden or glass table as well, though that is sure to expedite the wear and tear on the PTFE feet and the bottom sensor.

Oh, and about the sensor, the Viper V2 Pro features Razer’s latest Focus Pro 30K Optical Sensor that it developed alongside Pixart. The sensor allows the mouse to reach a peak DPI of 30,000, and comfortably track when used directly on your table.

The sensor allows for precise movements, and according to Razer, it has a 99.8 percent resolution accuracy. In my experience using the mouse this past week, I can agree that it tracks precisely, and is uber-responsive, though most of the other gaming mice I’ve used in the same price category work about the same, so I wouldn’t buy the mouse just for the updated sensor.

The clicks on the Viper V2 Pro sound and feel very clicky. The mouse features optical Gen-3 mouse switches, compared to Gen-2 switches uses in older models. Razer says the new switches have a 90 million click lifecycle, and while they feel solid and reliable, only time will tell if they are durable and avoid double-clicks or misclicks.

While the ultra light-weight mouse feels great when playing precision shooters like Valorant or CS: GO, I don’t see myself using it for everyday use; in favour of an ergonomic mouse. Also, I want to save those 90 million clicks for when I need to hit a nasty flick in-game, not for when I’m writing tech news.

The Viper V2 Pro is purely a competitive gamer's mouse that can be appreciated by the most serious in the craft. Its ultra-lightweight body makes it easy to control, so much so that it doesn't feel like you're moving a mouse around, and instead, just moving your wrist and arm. It works on multiple surfaces and has optimized PTFE feet that allow the mouse to glide effortlessly. It includes an upgraded sensor that undoubtedly feels responsive and accurate, but in my opinion, gaming mice from other companies like SteelSeries feel equally responsive.

If you're looking for an ultra-lightweight gaming mouse, without all the extra fluff, the Viper V2 Pro is worth marrying. If you're someone who's just looking for a lightweight mouse, there are cheaper alternatives on the market.

The Viper V2 Pro is available at Razer's website and Best Buy in Black and White colourways for $189.99