The skateboarding piece with Heimana Reynolds uses a left-right hover to move back and forth through a time-lapse. It lets you see each part of the trick, which can be a challenge to see in real-time. The climbing piece with Brooke Raboutou employs AR so that you can place a 3-D model of the 50-foot wall and Raboutou in your living room for scale. Neat.
I hitched up my canoe to my bicycle using the Wicycle Trailer this afternoon to see how it handled on the road.
The canoe-bicycle connection is via a device Wicycle calls the “smart stick” and it turns out to be pretty smart: it mounts to the seat post of the bike and then ties up to the bow line of the canoe in a way that both keeps the canoe from flopping around and allows it to turn freely.
Out on the road, the weight of the canoe felt about the same as pulling a fully loaded trailer of groceries, albeit with more horizontal sway. It seems like a reasonable thing to expect to be able to cycle out to Andrews Pond for a first paddle. And home again.
I already have visions of getting a Brompton folding bicycle that I could carry in the canoe itself, allowing me full intermodality.
One thing my wife and I are coming to terms with is that memories —or experiences— cost money. Typically this is in context of making memories or providing experiences for our children, but it could about our relationship or even about to chasing week-to-week personal interests.
Of late we’ve been discussing camping; should we fix our old busted camper or buy a new camper. It’s easy to talk yourself into a new camper… and then you’re looking at campers that cost as much as a down payment on a house… and before you realize it we’re talking about buying another house?
We also talk about traveling, taking the kids to see family, to Disneyland, or our hope to one day take our children abroad (when they’re old enough and will appreciate it).
Last Tuesday I was on a Webex call (the British Standards Institute’s use of Webex for conference calls predates COVID 19) for a meeting of IST/5, the committee responsible for programming language standards in the UK.
There have been two developments whose effect, I think, will be to hasten the decline of the relevance of ISO standards in the programming language world (to the point that they are ignored by compiler vendors).
People have been talking about switching to online meetings for years, and every now and again someone has dialed-in to the conference call phone system provided by conference organizers. COVID has made online meetings the norm (language working groups have replaced face-to-face meetings with online meetings). People are looking forward to having face-to-face meetings again, but there is talk of online attendance playing a much larger role in the future.
The cost of attending a meeting in person is the perennial reason given for people not playing an active role in language standards (and I imagine other standards). Online attendance significantly reduces the cost, and an increase in the number of people ‘attending’ meetings is to be expected if committees agree to significant online attendance.
While many people think that making it possible for more people to be involved, by reducing the cost, is a good idea, I think it is a bad idea. The rationale for the creation of standards is economic; customer costs are reduced by reducing diversity incompatibilities across the same kind of product., e.g., all standard conforming compilers are consistent in their handling of the same construct (undefined behavior may be consistently different). When attending meetings is costly, those with a significant economic interest tend to form the bulk of those attending meetings. Every now and again somebody turns up for a drive-by-shooting, i.e., they turn up for a day to present a paper on their pet issue and are never seen again.
Lowering the barrier to entry (i.e., cost) is going to increase the number of drive-by shootings. The cost of this spray of pet-issue papers falls on the regular attendees, who will have to spend time dealing with enthusiastic, single issue, newbies,
“Whenever possible, inclusive terminology shall be used to describe technical capabilities and relationships. Insensitive, archaic and non-inclusive terms shall be avoided. For the purposes of this principle, “inclusive terminology” means terminology perceived or likely to be perceived as welcoming by everyone, regardless of their sex, gender, race, colour, religion, etc.
New documents shall be developed using inclusive terminology. As feasible, existing and legacy documents shall be updated to identify and replace non-inclusive terms with alternatives that are more descriptive and tailored to the technical capability or relationship.”
The US Standards body, has released the document INCITS inclusive terminology guidelines. Section 5 covers identifying negative terms, and Section 6 deals with “Migration from terms with negative connotations”. Annex A provides examples of terms with negative connotations, preceded by text in bright red “CONTENT WARNING: The following list contains material that may be harmful or
traumatizing to some audiences.”
“Error” sounds like a very negative word to me, but it’s not in the annex. One of the words listed in the annex is “dummy”. One member pointed out that ‘dummy’ appears 794 times in the current Fortran standard, (586 times in ‘dummy argument’).
I think there will be zero real world impact from the use of inclusive terminology in ISO standards, for the simple reason that terminology in ISO standards usually has zero real world impact (based on my experience of the use of terminology in ISO language standards). But the use of inclusive terminology does provide a new opportunity for virtue signalling by members of standards’ committees.
While use of inclusive terminology in ISO standards is unlikely to have any real world impact, the need to deal with suggested changes of terminology, and new terminology, will consume committee time. Most committee members tend to a rather pragmatic, but it only takes one or two people to keep a discussion going and going.
Over time, compiler vendors are going to become disenchanted with the increased workload, and the endless discussions relating to pet-issues and inclusive terminology. Given that there are so few industrial strength compilers for any language, the world no longer needs formally agreed language standards; the behavior that implementations have to support is controlled by the huge volume of existing code. Eventually, compiler vendors will sever the cord to the ISO standards process, and outside of the SC22 bubble nobody will notice.
Gwen Snyder is uncivil@gwensnyderPHL
I think a lot of people need to hear this:
You just went through 1.5 years of a profound ongoing threat to your he… twitter.com/i/web/status/1…
Image from wikimedia by Nick Hobgood, CC-BY-SA 3.0
The title of this post is stolen from a catchy new John Mayer song. His lyrics are OK, if a little self-preoccupied. But the title resonated with me as I contemplate a world in collapse, and deal with the cognitive dissonance of dealing with it while holding a belief that we have no free will, that there is no time, no death, just nothing appearing as everything, appearing as this, for no reason.
So here is a list of the things I think, deep down, shouldn’t matter, as they’re only ephemera, beyond anyone’s control, just the apparent acting out of our universe’s unfolding and our conditioning — but which I feel, perhaps because of that conditioning, do matter. I will try my best not to impute intent or other cause or motivation to the things on this list, since what really matters, I think, is the harm they produce.
EIGHT THINGS THAT MATTER
Dishonesty, manipulation, exploitation, propaganda, brainwashing and disinformation
Inequality of power, wealth, influence and opportunity
Acts of violence, threatened violence, intimidation, harassment, bullying, humiliation, cruelty, spite and hatred, at all scales
Waste, in all its forms, from pollution and excessive consumption to packaging, plastics and poorly-made products
Poisons of all kinds — anything that disturbs the natural balance of the planet
Imprisonment and confinement of any creature, including forced work (‘wage slavery’), forced military service, and forced schooling, and other controlling behaviours at the collective or individual level
Expectations and judgements, of oneself and of others
Deprivation of the essential qualities needed to be an effective and functional human, including attachment at a young age, personal autonomy, connection with others and with the natural world, the capacity to be one’s authentic self, basic dignity, healthy food, water and environment, and control over one’s own body
(You’ll note that things like selfishness, insensitivity, ignorance and stupidity are not on this list; I think of them, as I think of collapse, caste-ism, overpopulation, and genocide, as being likely inevitable consequences of the above.)
I am both subject and object of all of the above ‘things that matter’; I am both their perpetrator and their victim. We are not well, and the eight ‘atrocities’ above are manifestations of our disease. (The word ‘atrocity’ etymologically means ‘seeing the fearsome fire’ and I use the word in quotes in this sense, not in a judgemental sense.)
So these eight things, and their consequences, matter to me. They shouldn’t matter — we have no control over what we do or how we have evolved. These are, with rare exceptions, uniquely human actions and attitudes, and may have not been part of pre-civilization human behaviour either.
But here we are. These eight things and their terrible consequences are endemic in our culture, and they will almost assuredly end once that culture has fully collapsed, which is what is happening quickly now. In the meantime, we can only reassure ourselves that it won’t be long now before they will no longer define the human experiment.
In the meantime, it shouldn’t matter. But it does.
My first trip outside of Toronto's city boundaries since the start of the COVID-19 pandemic was this Friday, to Hamilton. The closest CEBL basketball team to Toronto, the Hamilton Honey Badgers1, opened up their stadium to fans in the past week, so I took advantage by buying a ticket to Friday evening's game. I had a dentist's appointment in the morning, work after that, and a surprisingly busy afternoon, so I just barely made the 4:30 PM GO Train out of Union Station. My trips in previous years to Hamilton were by bus, and this was the first time by rail. I have a longtime preference of taking rail transportation when the option presents itself (I can't believe I live in Toronto, the downtown core of which is served by streetcars), so I was glad I took the opportunity this time. I wouldn't say it's the most scenic train ride in the world, but the entry into Hamilton is pretty epic, with great views on both the left and right as it winds its way into Steeltown.
I didn't have much time before the game to have dinner, so I was glad I knew my way around a bit from previous visits. I had the presence of mind to avoid a dive bar and land at Merit Brewery, which I knew had a good macaroni and cheese, though I'd forgotten just how good it was. And it's on the snacks menu! The only regret was that I didn't have time for a second beer there, as I had hoped to try their key lime sour beer.2
The game was fun! You had to wear a mask at all times except while eating, and seating was limited and spaced out, but the atmosphere was terrific. It was my second time seeing a Honey Badgers game at Copps ColiseumFirstOntario Centre, and it was a back-and-forth affair. My type of basketball. It concluded with an Elam Ending, where if a game is close near the end of the 4th quarter, an algorithm determines the target score, and the first team to that score wins the game. The game clock is turned off, and the ending eliminates the situation where the team that's behind in the score tries to foul to get the ball back. It's a common complaint about NBA games that, combined with the timeouts, 2 minutes of basketball can take a half an hour to play. The Elam Ending gives the team that's closely behind the team with the lead a chance to win, with an advantage to the team that is already leading. The risk is that a game ends on a free throw, but the easy solution to that is to not foul and send anybody to the free throw line in the first place. And if it does happen, the incentive is to stock a team's roster with good free throw shooters.
The Honey Badgers-Bandits game, it turned out, ended on a free throw, but in quite spectactular fashion. And controversial! (Or at least as controversial as a Canadian professional basketball game can get.) The defending Bandits player, on the free throw that would have won the game for the Honey Badgers, was blocked before it got to the rim. Initially the referees called it goaltending, but since no player seemed to have been in a game where that particular event happened, there was confusion on the court. The referees conferred, and the call stood. The Honey Badgers won!
To get back to Toronto, my plan was to take the bus, but I seemed to have forgotten that the Hamilton GO Station locks its front doors after hours. After a moment of wondering whether I'd be trying to find a hotel room, I confirmed that indeed busses were still running, and boarded the 16 bus back to Union Station. While it took the freeway initially, I was surprised (as I was on each of my other bus trips to and from Hamilton) that it took detours, driving through Oakville and on roads running parallel to the 403 and the QEW. Road signs I saw along the way: Dorval Rd., Cornwall Rd., Trafalgar Rd., Sheridan Way. I was 100% sure we were going to Toronto, with just no strong sense about what roads we'd take to get there.
Arriving in Toronto, I got my first taste of the new Union Bus Terminal. I wasn't taking the subway home (I had already decided to walk), but I would definitely have asked the attendent directing passengers on how to get there if I had.
It was a pleasant evening trip. I'm hoping to spend more time Hamilton, including an overnight stay, since it's a place in the GTHA (along with Etobicoke) where I feel like I can breathe.
The Ontario mathematics curriculum unsurprisingly "emphasizes the need to recognize and challenge systems of power and privilege, both inside and outside the classroom, in order to eliminate systemic barriers." At least, it did until National Post and Toronto Sun writers complained, after which is was quietly removed, along with a number of other statements addressing race, environment, social justice, inequity and discrimination. At a time when we should be working for meaningful change to address longstanding issues in our society, these changes represent a step backward, making it more likely we'll make the same mistakes over again. Via Doug Peterson.
If you suffer from fear of missing out (FOMO) then fear no more: you can now get onto Clubhouse. I won't be on Clubhouse because there's no desktop version; you have to use your phone. And that makes me deeply suspicious of its motives, because the phone is integrated into things like your phone number and contact lists and payment information much more deeply than your desktop. The first principle in the Clubhouse guidelines is "be yourself", which suggests to me they're focused on identification and tracking. Now to be clear: these are all suspicions, not facts.
Honeybadger is your one-stop solution for error tracking that combines error monitoring, uptime monitoring, and cron monitoring into a single, simple-to-use platform. It’s the only service that combines all those elements into one elegant solution that has your back when you need it most.
If your production site goes down, the last thing you want is to hear about it first on Twitter or by email from unhappy customers. With Honeybadger, you know the instant a problem arises. The included uptime and cron monitoring also let you know when your external services are having issues or your background jobs go missing or silently fail.
What’s more, Honeybadger is easy to set up, taking just minutes, not hours. The service hooks into popular web frameworks, job systems, authentication libraries, and front-end JavaScript. Most installations are just a few lines of code. Honeybadger also includes a comprehensive online dashboard and context-rich reporting system that helps you diagnose and resolve issues quickly.
Honeybadger is a bootstrapped company built from the ground up to serve developers. They answer to you, not VCs, and their mission is straightforward: tame production and make you a better, more productive developer.
Honeybadger is used by tens of thousands of customers of all sizes, including eBay, DigitalOcean, heroku, thoughtbot, and even MacStories. Sign up for Honeybadger’s 15-day free trial today and join the growing list of companies whose developers swear by Honeybadger. There’s no credit card required to sign up, so you’ve got nothing to lose. Give Honeybadger a try and see how it feels to stop wasting time tailing logs and spend more time doing the development work you love.
Our thanks to Honeybadger for sponsoring MacStories this week.
Support MacStories Directly
Club MacStories offers exclusive access to extra MacStories content, delivered every week; it’s also a way to support us directly.
Club MacStories will help you discover the best apps for your devices and get the most out of your iPhone, iPad, and Mac. Plus, it’s made in Italy.
Listening, I discovered, wasn’t just about waiting for the other person to stop talking, or asking good questions, or even not interrupting. It was about really hearing what the other person was saying, and why they were saying it. Being interested, but also curious. Sometimes that means looking for what’s not said, what’s left out, which words are used to mask emotions that are hard to acknowledge. Likewise, good listening is about approaching what has been said as if you’ve never heard it before. Put simply, it’s about paying attention.
A retired admiral indulges in strange, sentimental daydreams of noble soldiers and perfidious policy-makers. All high-ranked civilian officials are stupid, ineffectual, or treasonous. Every soldier and sailor is noble. This book is a recipe, and excuse, for the sort of coup that Trump attempted and for which his supporters still dream.
All speculations on future warfare rest on sand, but this one is often ridiculous. “They have better cyber!” is the problem, and that can be interesting: Tom Clancy did that in Debt Of Honor, his entertaining of implausible effort to imagine a second war between the US and Japan. Here, apparently, someone in China presses a button and nothing works: it neutralizes every communication system in three Aegis destroyers (and every US satellite) just like that. Everything else, too: the destroyers never get off a shot.
The US solution? Tear out the avionics in their fighter planes so everyone can use WW2 tech and fly by the seat of their pants.
Oh — and someone else, it turns out, has even better offensive cyber capability than the Chinese do.
This is an admiral’s book. The lowest-ranked individual with a speaking part is a single chief petty officer who is on hand — in the radio room, on the flight deck, in CIC. We never learn the name of the President. We never meet China’s civilian leaders. We contrive to break an Iranian brigadier general and make him a lieutenant commander in the Iranian Navy because establishing a new character would be too much work.
Finally, language related to “functioning levels” (e.g., “high-functioning” and “low-functioning”) will not be used, unless it is part of a quote or a study. The term “autism spectrum” will not be used because it generally refers to a one-dimensional line that extends from point A (those people perceived as furthest from allistic functioning) to point B (those perceived as most like allistic people). This verbal and mental construction posits a one-dimensional view of human experience and expression that places allistic experience and behavior as superior to autistic experience and behavior. Where differences in functioning matter, for example in the case of autistic individuals with low speech abilities trying to access services, I will note the distinguishing characteristics that affect the autistic person’s life.
A memoir of a young woman who has lost her Korean-American mother and who is estranged from her Irish-American father, told primarily in terms of food. The food doesn’t really sing the way Bourdain’s did, or Mandy Lee’s does, but it's an intriguing story.
Ever since my mom died, I cry in H Mart. For those of you who don’t know, H Mart is a supermarket chain that specializes in Asian food. The “H” stands for han ah reum, a Korean phrase that roughly translates to “one arm full of groceries.” H Mart is where parachute kids go to get the exact brand of instant noodles that reminds them of home. It’s where Korean families buy rice cakes to make tteokguk, a beef soup that brings in the new year. It’s the only place where you can find a giant vat of peeled garlic, because it’s the only place that truly understands how much garlic you’ll need for the kind of food your people eat.
Early on July 23, hours before the Tokyo 2020 opening ceremonies, a Senegal musician posted on Facebook that he had been dismissed from performing at the event because a member the Tokyo Olympic Organizing Committee questioned, “Why is an African is here to perform?” He was dismissed unilaterally in May, he asserts, even though he had been scheduled to perform.
The ceremony, that surprised the world by having Naomi Osaka, a biracial Japanese tennis champion, light the Olympic flames, may have an underbelly that yet places great emphasis on looking “Japanese enough” to succeed in this country. There are already many who question if the theme of “diversity” is really understand by the organizers who have employed for the opening ceremonies an abuser of the disabled, a comedian who joked about the holocaust, and despite all warnings, used the music of an notorious homophobe who also denies Japan’s war crimes.
Latyr Sy is an accomplished percussionist that has appeared alongside Japan’s top artists in concerts and television programs, including the December 2020 FNS song festival. He has also performed at events attended by Prime Minister Shinzo Abe, who was “the face of the Tokyo Olympics” and instrumental in making sure Japan won the bid in 2013. (Of course, the several million dollars worth of bribes helped).
“So ashamed. I feel good that I’m no longer performing at the Tokyo Olympic Opening Ceremony…Though I’ve been contributing to the Japanese music industry since 1995…They completely violate the Olympic principles of human rights and diversity.” Sy wrote in English in his social media post. He also wrote eloquently of his plight in Japanese. (See below)
Latyr Sy, a musician was allegedly told that he shouldn’t be performing at the Tokyo Olympics opening ceremony because he wasn’t Japanese enough. This stands in contrast to the theme of the opening ceremony which was “diversity and harmony.”
The Japan Subculture Research Center is scheduled to speak with Sy later today. We are also reaching out to the Tokyo Organising Committee of the Olympic and Paralympics as well as the International Olympic Organization for comment,
This article says that 78%/18%/4% of the cases between June 15 and July 15 were in in people who had zero/one/two doses.
I’m not sure these figure really tells us anything interesting. These numbers doesn’t tell us about how severe those cases were and the number of vaccinations went up very quickly during this period. (67.6%/12.9% of the total population was single/double-vaxxed on 15 June and 72.3%/44.2% on 15 July.)
My reaction to the one-dose graph: Go teens! Look how much the 12-17 year-olds have been vaxxed!
Here’s another way of looking at BC vaccinations, from this thread:
There was a point around the beginning of June where the rate of people getting first doses dropped significantly. I had a sense of “oh, we’ve run out of people who are going to get a first dose.” However, I have been surprised at how consistently BC has continued to increase first doses. It has slowed down, sure, but even for the past three weeks, it’s still been a very consistent 0.1% per day. That’s ~3% per month.
+112 cases, +4 deaths, +5,201 first doses, +55,675 second doses (of which 193 were AZ.)
Currently 46 in hospital / 17 in ICU, 603 active cases, 146,463 recovered.
first doses
second doses
of adults
81.3%
61.4%
of over-12s
80.3%
58.1%
of all BCers
73.1%
52.8%
We have 722,667 doses in fridges, which we will use up in 12.1 days at last week’s rate. We’ve given more doses than we’d received by 18 days ago.
We have 660,280 mRNA doses in fridges, which we will use up in 11.0 days at last week’s rate. We’ve given more mRNA doses than we’d received by 18 days ago.
We have 62,387 AZ doses in fridges; we’ll use it up in 383 days at last week’s rate.
There is so little AZ use that I’m going to stop reporting it unless someone asks for it.
Also, note that when I say “we have xxx amount in the fridges”, I don’t actually know. The number I report is the amount that has been delivered minus what has expired, got dropped, got left on the counter overnight, the cat ate, etc. I am hearing that some of the AZ has reached its exipry date, but I don’t have any hard info on that.
It is a real shame to waste supply, but apparently there is no process for BC to give vax back to the feds so they can donate it; there’s no process for BC to donate it to other countries themselves.
When we drove to Denmark yesterday we started from E’s parent’s place, which is in the north of the Netherlands right on the border with Germany (as in: if you leave the village, you leave the country). We didn’t expect any border controls obviously, it’s one of those many small crossings that even before the Schengen treaty didn’t see much activity. And indeed there weren’t any.
Within meters of passing the border we did however get an SMS “The federal government: welcome! Please follow the rules on tests/quarantine” plus a URL. It made E and me laugh ‘Achtung, hier spricht die Bundesregierung’, ‘attention, this is the federal government speaking!’ as if spoken through a bullhorn while you’re surrounded Blues Brothers style.
It is the first time the Federal Government of Germany expressly welcomed me on their turf!
Perhaps they should continue the practice of SMS’ing a formal welcome message from the federal government even after the Covid measures have been abolished again. It has a certain ring to it, being welcomed to the country by the government itself.
The German federal eagle, also half affectionately, half mockingly referred to by the locals as ‘das Huhn‘, ‘that chicken’. (Image by me license CC BY NC SA, taken 2016 in the former German parliament in Bonn, when I was presenting there)
It’s been a busy week. The whole thing was centred around Friday, which was the funeral for my mother-in-law, Lorraine. There were separate events and locations for the burial, church celebration of her life, and refreshments. The whole thing was planned meticulously by my wife, Hannah, and her sister Laura.
I don’t think Lorraine could have asked for a better send-off, with around 100 people paying their respects, and the overall feeling being one of celebrating a life well-lived but sadly curtailed. I was proud of Hannah for the joint eulogy she gave, and my son, Ben, for the short reading he did. Having given a eulogy before, I know how difficult that can be.
We live in Northumberland, the other end of the country to where Lorraine lived and was laid to rest. It’s a long drive and, thankfully, the roads were relatively clear on Thursday as we travelled down. We’re staying at a place we’ve stayed a few times before — at a small wooden cottage built by friends of my father-in-law. It’s in an idyllic location.
The previous three days from Monday to Wednesday I spent doing a lot of work with and for Julie’s Bicycle, a pioneering not-for-profit mobilising the arts and culture to take action on the climate and ecological crisis. As a collaboration between my home co-op, WAO, and Outlandish, we’re helping them with some development of their tools as well as overall strategy.
I’m looking forward to a full week off work while down here in Devon. There’s always stuff to be done and things to be organised but, as deaths in the family all too poignantly illustrate, life goes on whether you’re there or not.
So next week, I’m going to be reading, drinking, and playing games with my family and my sister-in-law’s family. Hopefully the weather should be good, and we can spend time decompressing after a pretty intense few weeks.
Image taken of a wheat field during a family walk near Gittisham, Devon.
Remarkably detailed and thorough dissection of how exactly import, modules and packages work in Python - eventually digging right down into the C code. Part of Victor Skvortsov's excellent "Python behind the scenes" series.
Construction work on Hornby Street has required that vehicle traffic be limited to one lane – notably the 700-block between Robson and Georgia.\xc2\xa0 The separated bike lane has also been closed.
\n
To allow for a bike detour, Engineering took what they learned from Beach Avenue, similarly repositioned during the first year of the pandemic, to create a bypass.\xc2\xa0 And here’s the thing: it’s a three-laner, not just the width of the two-lane bikeway. There’s a passing lane in the middle – and that makes a huge difference.
\n\n
As discussed before. there’s already a problem with the separated two-laners as the amount of micro-mobility use increases – those e-bikes, skate- and hover-boards, scooters, monocycles and anything else you can attach a small electric motor to.\xc2\xa0 Because of the differential in speed, there’s a need to allow for passing, and often that’s not possible on a crowded bikeway.\xc2\xa0 At least not safely.
\n
Beach Avenue is such a success, with an extraordinary increase in two- and one-wheeled traffic, because it has the needed width for users to sort themselves out.\xc2\xa0 Same now on this block of Hornby.\xc2\xa0 They have effectively created a new standard: Mobility Lanes 3.0.\xc2\xa0 \xc2\xa0It’s not just for bikes anymore.
The Death and Deathlessness* project was my exploration of life, death, and immortality. EEPROMs, the permanent memory in some chips, have finite life for writing. I had seen examples of folks killing EEPROMs, basically repeatedly reading and writing until they encountered an error, a failure for the address in the EEPROM to correctly take a write. I therefore thought running down an EERPOM to the last failure would be the equivalent of death. And recording it for playback would be like immortality – or would that still be life?
As I was building the project, I realized there were a few questions I could not find answers for. For sure, folks had shown that ATmega or ATtiny EERPOMs actually can be faithfully read and written way more than the 100k cycles the manufacturer guarantees. But everyone stopped their experiments at first failure.
I wanted to know if when an address failed, was it the whole address or was it the whole EEPROM? It felt like it was the whole address, as I’ve heard that folks would stop using that failed address. Though, if an address failed, did it stay failed? And if it stayed failed, would other addresses also start failing until the whole EEPROM had failed? And because I was writing then immediately reading, would the fail be harder to find? That is, my failure test required failure right after a write. What if failure after 100k cycles really was related to long-term stability of the address, which I’d never see, or which is why folks could hit 1M or 2M quick read-write cycles before seeing a failure?
Well, since I was going to run this EEPROM down, I realized that I would be able to answer some of these questions.
When the whole thing started
Some parameters I was using an ATtiny45, which has 256 bytes of EEPROM. I was only using the first 128 addresses (because my readout was an LED matrix with 128 pixels). For each byte I alternated writing 240 (binary 11110000) and 15 (binary 00001111), meaning all the bits alternated each cycle. I read the value after every write to see if it retained the expected written byte.
My first try blew past 2M cycles with no errors showing, so, in disbelief, I stopped to check my code. It was good. So I got a fresh chip and started another experiment, and with extreme self-control, let the damn thing run for what felt like forever, without watching it.
Errors! Addresses 25, 33 and 115. Image from day 28.
And then I saw an error. And some interesting behavior. After a few days, and some more interesting behavior, I stopped the experiment.
There was a challenge handling a CSV file with 4.9M rows, but I was able to see that the experiment did about 3.7M cycles, throwing about 1.2M errors.
And now for something completely different The addresses that failed would only show a failure every other cycle. That’s the first insight: failure is at the BIT level, not the BYTE level, such that when it wrote and read a number, it would fail, and when it wrote and read the next one (all different bits), it would read fine. For example, address 33 always failed on the odd cycles, while address 41 only failed on the even cycles.
Bit-level failure (morning of day 29)
Crazier still, while a failed address would fail consistently for a long stretch, it would then NOT fail for a long stretch, too. Indeed, I saw other failed addresses, also showing the alternating of fail and succeed, pop up and then not show up for a long time. For example, 33 is first to fail at cycle 666,517; and it fails 263,318 times in the subsequent 3,004,848 cycles.
I did a histogram and saw that only 29 addresses had ever failed. Address 33 was the address with the most failures. But address 34 fails 3 times (adjacent odd cycles 3,440,911; -913; -915) and then never again (that’s for the remaining 231k cycles before I turned it off).
Long stretches no errors (evening of day 29)
This failing for stretches and then not failing suggests to me that this is a probabilistic fail rather than a catastrophic terminal fail. Think of it as the bit has an issue holding a charge (probabilistic) rather than no longer holds a charge (catastrophic fail). So it can go long stretches when its probability of holding a charge improves, until the probability gets bad again.
Of course, for the manufacturer and anyone looking to depend on the EEPROM, stepping into that probabilistic failure might as well be a terminal failure as it makes that whole address useless. As for me, who thought that perhaps the whole address would fail, or that at least when a bit failed, the address would stay failed, this probabilistic nature basically killed the nature of my project.
Yup.
I could do a bit more statistical digging into the data, but I don’t really have that skill, or the right toolset. Nonetheless, what I can figure out is that the condition where EVERY address fails is likely impossible (or way longer than I am willing to wait – tho I am tempted).
Below is a link to the CSV is you’re interested in checking this out. The columns are Cycle, Address, Result (0 for failure). For my own logging and for the LED matrix output, I wrote out a row for every cycle. But, to save space and speed things up, I only wrote out Address and Result when there was a failure.
Please note, I share the original so I can avoid inadvertently introducing something in editing. There was some writing artefact that added a null row after every error (about 1.2M – sorry). And there’s some gibberish before the first cycle you need to delete. I suppose I could revisit the logging code.
Summary I had wondered a few things about how EERPOMs fail. I wondered if when one bit failed, the whole EEPROM failed. That’s not the case. Also, I couldn’t find anything that suggested if errors were at bit or byte level. I now know that they are at the bit level. I also wasn’t sure if a failure was terminal. Turns out failures are probabilistic, so an address can function properly after having failed numerous times. Also, that means that I likely would never be able to kill off a whole EEPROM, where ALL the addresses fail on EVERY read and write cycle.
In the end, what I thought would be an achievable and straightforward running down of an EEPROM, turned into an interesting revelation of resilience for the wee chip.
You’d think everything there is to know of ATtiny or ATmega EEPROM failure is known. Well, perhaps not (or maybe I just couldn’t find the answers to my questions). In any case, my Death and Deathlessness project did teach me many interesting things about EEPROM failure.
Do these finding jive with the EEPROM behavior you’ve seen?
*Deathlessness is a key concept in the Lord of the Rings. I even wrote a short story on it in college, as extra credit, that the prof read out in class, to my embarrassment. In any case, when the movies came out, I had a chance to teach my kids how deathlessness was a key thread throughout JRRT’s stories of Middle Earth.
One of my favorite definitions of “hacking” is the creative reuse of tools
for new and unexpected purposes. Hacking is using your email account
as a hard drive, using your bicycle seat to open a beer, using Minecraft’s
red bricks to create a calculator in the game.
The opposite of hacking is marketing. Marketing tells you that this particular
non-stick pan is the pan you’ll use to make omelettes, and you’ll do it in the morning
dressed in fashionable clothing in a nice kitchen. It includes a photo and inspirational
copywriting to drive this home. Marketing dictates a style,
context, and purpose for even the most general-purpose products.
This narrative needs to be specific so that you can readily imagine
it: it’s you, in an Airbnb, laughing with friends.
I’ve been building a product recently, something fundamentally general-purpose. Before
that I worked on two projects that were also pretty general (Observable and Mapbox)
and one that was relatively domain-specific. The thing about making general
tools is that marketing is harder and you need to build narratives about
how the general thing is specifically useful.
For example, let’s say you’re building another calendar app. It’s a decent calendar,
you can add and remove events.
But then you type “Yachting schedule” at the top,
market it to people who own yachts, change the text field for the Zoom link to
a select box for which yacht you’re taking out that particular month, and sell
ads in yacht owners magazines.
Then people who own yachts look at their calendar app, which is not made for people
with yachts, and this new competitor, which is optimized for yachting, and pay
a premium that you know they can afford, because after all, they own a yacht.
Exaggeration, sure, but this is sort of how it shakes out. You can make a general
purpose company like Mapbox or Observable work, but maps for real estate
or notebooks for finance are better pitches than maps or notebooks.
And as an added plus, you can pick the domain and try to optimize for
one that just screams “money,” like cigars or finance or defense.
Hence the Solutions tab at the top of the website, which exists only to say
“yes, you can put real estate on these maps.”
This is the way the world works, and whining about it does no good. But
nevertheless I think there’s a cultural divide here. Products
for hackers can be things like Redis, abstract building
blocks with descriptions like an “in-memory data structure store.” Which leaves
a lot of possibility, but also a lot of uncertainty about what it’s for,
unless you have creativity and knowledge.
Building maximally general technology, and then adding a final layer of interface,
marketing, and narrative that makes it all seem specific, is part of the challenge
of making things people will buy.
One of the nice things of the 5G Core Network architecture is that it allows the concealment, i.e .the encryption of the user’s identifier. While in previous network generations, this ID is referred to as the IMSI (International Mobile Subscriber Identity), it has been renamed to SUPI (Subscription Permanent Identity) in 5G. Under normal circumstances, even 2G, 3G and 4G conceal the user’s identity with a temporary ID that changes frequently. Under some circumstances, however, e.g. when connecting to a roaming network for the first time, or when the home network has forgotten the temporary identifier, which can happen for a number of reasons, the network has to ask for the IMSI. Unfortunately, this loophole can be used by malicious base stations and other equipment to get to the real identities of devices and their users. The good news: The 5G core has a fix for this!
The 5G core network closes this loophole by encrypting the user’s identity before it leaves the device. This is optional, however, so not all network operators might use it in the future. If used, a public key connected to a mobile network operator is used as an input to an encryption algorithm to conceal, i.e. encrypt the IMSI/SUPI. The result is referred to as the SUCI (the Subscription Concealed Identifier).
From a conceptual point of view, this is very similar to how web pages are encrypted. The web browser gets the public key of the web site owner, which is then used to encrypt all outgoing data packets in the reverse direction to the web server. There, the private key is used to reverse the process. For private/public keys used on the web, a chain of trust exists that the web browser uses to verify that the public key it has received during the connection establishment actually belongs to that website. But how can the mobile device verify that the public key it was given to encrypt the IMSI/SUPI into the SUCI is actually from the network operator? And how is the public key given to it in the first place?
Instead of using a chain of trust, the public key of the network operator is stored on the SIM card. And as only the network operator can put this value on the SIM card (e.g. via an Over the Air update), no chain of trust is needed. So far so good, but that leads right to the next question: Where is the public key actually stored on the SIM card?
The place to look for the details is 3GPP TS 31.102: On the SIM card, there is a file referred to as USIM Service Table – EF(UST) with file ID 0x6F38. This file contains a bitmap, and each bit represents a service that can be activated or deactivated. To enable SUCI calculation, Service 124 (Subscription identifier privacy support) must be active.
Further, there are two ways to calculate the SUCI: On the device or on the SIM card. If Service 125 (SUCI calculation by the USIM) is active, the SIM does all the work and the device can just request the SUCI from the SIM card. If Service 125 is not active, the device has to calculate the SUCI on its own. For this, it requires two pieces of information:
The first parameter that is required is the public key of the network operator. It is stored in file EF(SUCI_Calc_Info) with ID 4F07, which resides in a dedicated 5G directory on the SIM, referred to as 5GS with file ID 0x5FC0. This directory can be found inside the USIM directory. As there can be more than one public key and more than one algorithm, the file contains the following content as per TS 31.102, 4.4.11.8:
First byte set to: A0
Length indicator
A list of Protection Scheme Identifiers (1..N) with an index to the public key used for each
The list of public keys that are referenced from the list above.
And that’s almost it. The only other info required is a ‘routing indicator’ that will be included in the SUCI, which gives the home network operator further info where to find the user’s database record. The routing indicator is quite short and is stored in EF(Routing_Indicator) with file ID 4F0A.
Quite a lot of flexibility for the future to update/change/use the public key to generate the SUCI. But it has to last for a while and nobody knows today what the future will bring. So better save than sorry.
Final photo of season, one of very first I took on Kii Peninsula some eight years ago, the peninsula along which we’ve been traveling together for twenty-two weeks, and here, in this first photo, having stepped off train at Kamikosawa, John asks for directions and you can see two men — station attendee and local — already ensnared by strange voodoo of John, him seducing flabbergasted countryside old folks (supernumerary to most walks, key to ours) into thinking about specifics of their environs, and they dole out delight (perhaps to their own surprise!) and they are bedazzled by the strange kindness of this strange Australian, and so these men here, standing before Kamikosawa — first to be charmed on our adventures — point towards a distant ridgeline we’d soon plainly roam, chōishi-no-michi, full path starting down below at Kudoyama, but us, on this first walk — this first walk into Kumano Kodō land — begin partway up, old wooden signage with handwritten letters pointing elsewhere, corner of a newer sign in bottom left of frame (probably pointing in yet another direction), heads of the men form a mirror ridgeline, fingers and hands and arms yet another, intersecting lines, what I remember most about this moment is how foreign and unknowable it all felt, an impenetrable newness, and for a second five lives (Derro just out of frame) converge and information is exchanged and, with a dollop of confidence, we take the very first steps of the long walk that starts it all.