Shared posts

25 Jan 04:33

Jack Dorsey’s lame explanation for suspending Trump’s Twitter account

by Josh Bernoff

Last week, Donald Trump’s Twitter feed disappeared. After seeing the violence in the Capitol, Twitter CEO Jack Dorsey decided that Trump’s feed was inciting violence and removed it. But Dorsey’s tweets explaining the ban were meandering and confusing. Let’s take a look at what Dorsey tweeted . . . and what he could have said … Continued

The post Jack Dorsey’s lame explanation for suspending Trump’s Twitter account appeared first on without bullshit.

25 Jan 04:33

Stuff that works :: Anker Nano Ladegerät

by Volker Weber

ankernano810293.jpg

Große Empfehlung für ein kleines Ladegerät: Wer ein 20 W-Ladegerät für iPhone, iPad etc. braucht, der wird mit dem Anker Nano (20 €) sehr gut zurecht kommen. Habe gerade diese Woche erst wieder zwei davon gekauft. Der ganze Lader passt in den Würfel und der flache Ansatz ist nur der Steckdose geschuldet.

More >

25 Jan 04:32

Computing Then and Now

by Eric Normand

In this episode, we read excerpts of Maurice Wilke's 1967 ACM Turing Award lecture titled 'Computing Then and Now'.

The post Computing Then and Now appeared first on LispCast.

25 Jan 04:24

Core competencies in DEI – Be strategic (Part 1 of 5)

by Tara Robertson

 

 

a white hand holds up a small round mirror that shows the clear refleciton of the mountains, the background is blurred
Photo by Ethan Sees

Three and a half years ago I changed careers from being an academic librarian who did diversity, equity and inclusion (DEI) work in the library technology community to a full time job as a DEI professional in the tech sector. Many people have reached out to see if I’d be willing to have a coffee and chat about DEI work and what the work actually looks like. I hope this series of five posts answers many of those questions.

Diversity, equity and inclusion careers panel event information

I’m excited to be one of the panelists for Andrea Tatum’s DEI careers panel on January 23. Registration is free and I hope you’ll join us. 

For me, the combination of head and heart make this work deeply satisfying and challenging. I think the five key competencies for DEI professionals are:

  1. be strategic
  2. translate academic research into action and measure the impact of initiatives
  3. meet people where they are at and help them move to be more inclusive 
  4. influence others
  5. get cross functional projects done. 

Over the coming week I’ll get into more detail on each of these competencies.

Be strategic

DEI means different things to different people and most people have an opinion on what the priorities should be. A clear strategy is important to focus on what you’re going to do, and more importantly, what you’re not going to do. 

While I’d facilitated and written strategic and operational plans for academic and library organizations, I really levelled up through conversations and a planning session with technology strategist John Jensen. My mentor Candice Morgan also shared her strategy and the thinking behind it. Seeing how others approach this was really useful. 

At the start of 2020 I adapted our existing strategy at Mozilla to connect the work we’d been doing on diversity and inclusion to the goals of the business. We had just gone through a layoff and some of the key business goals were focused on product innovation. Experimenting on how to build psychological safety was a key part of the strategy. Psychological safety is the belief that it’s safe to speak up with great new ideas and to raise the alarm when things are going off the rails. Looking at this through a DEI lens meant asking questions like:

  • Who speaks up?
  • Which voices are valued?
  • What kind of training and coaching can help teams and managers do this better?

DEI is a lens to look at HR policies and processes across the entire employee lifecycle and goes beyond to look at the entire business.

Over the last few months I’ve talked to over 30 companies about where they’re at in their DEI journey. In 2020 we saw many companies take a reactive approach to DEI, quickly rolling out one off workshops on unconscious bias or anti-racism. Without a broader strategy, these types of trainings won’t make a lasting impact.

When many people think DEI they quickly jump to thinking about hiring process. Increasing representation is impacted by who joins the company and who chooses to leave. Hiring is important but maybe your bigger problem is attrition. Looking at your attrition rates and exit survey data is a good place to look to start to understand who is leaving and why they’re leaving. To make the biggest impact these programs need to connect to an overall strategy. 

This is the first in a series of five posts. Tomorrow I’ll share some examples of translating academic research to action and talk about measuring impact of initiatives.

The post Core competencies in DEI – Be strategic (Part 1 of 5) appeared first on Tara Robertson Consulting.

25 Jan 04:19

A Winter’s Walk~54 Steps to Kitsilano’s Secret Beach

by Sandy James Planner

At the end of Cameron Avenue accessed from Alma Street is a steep public staircase that has exactly 54 steps. There’s two landings as well, but those are not counted in the poem posted at the top of the stairs.

The poem is written by Robert A. He may be the gentleman that stopped at the top of the stairs, told us it was his 72nd birthday, and he had just scaled the stairs eight times to celebrate.

Part of the  poem reads:

“I am fortunate. Around the corner from My house there are 54 Steps.

Down to a Rocky Beach. We call it “the crab beach”. Always can delight Little and big kids.

By gently lifting a rock Watch the baby crabs Scuttle away.My steps are my Meditation, My aerobics

My beautiful outside Stair masterView of the City Over English Bay, Mountains, boats

Ever changing light. And weather

Twenty times a thousand steps Give or Take. “Doing the Steps” Understood by family, friends.”

And then there’s the view. You can look north at the boats, east to the city, and south to the cliff side mansions along Point Grey Road.

The secret beach is  surprisingly private, marvellously close to water and slippy moss covered rocks, and at low tide walkable around to Kitsilano Beach or in the opposite direction  towards Jericho Beach.

When you scramble back up the public staircase you can access the foot of Dunbar Street where there is an old foreshore interpretation map and a cardboard add on, which asks “What More Do You Need?”

And the scribbled on answers will surprise you~answers written in pen state “music art and dancing” “more good words” “say hello to strangers to create and invite community”. There’s no weird stuff. None.

 

You can take a look at this blog post in “A Walk and a Lark” by Josy which outlines some great walks and access points along the foreshore of this area of Vancouver.  You can also access the 54 Steps to Kitsilano’s Public Beach from Point Grey Road at Dunbar, as shown below.

 

 

25 Jan 04:18

The Point Grey Elephant in the Yard~Seaside Greenway Public Realm

by Sandy James Planner

In 2016 when a report  on  Point Grey Road becoming the Seaside Greenway went to Council, there was much discussion about separating walking from biking, and ensuring that sidewalks were adequate and wide enough. You can reference that report here.

Of course some residents had usurped public city owned boulevard property as their own, by adding in shrubbery and fences, and were none too pleased when the City needed that public property for public things, like sidewalks and boulevards.  There was even discussion from residents that they would be more likely to crash into pedestrians and cyclists with the hedges and trees removed. You can’t make this stuff up.

It is always instructive to look back at what people feared of and to look at how things actually progressed. When the Seaside Greenway was approved, real estate values on Point Grey Road apparently  increased by 30 percent. It is a traffic calmed, quiet street.  And yes, there is an elephant in the yard, in the 3600 block of Point Grey Road.

I have written that  privately owned landscaping on public property may always be challenged. As the city grows and enhances walking and cycling mobility there will be more vigilance to ensure that homeowner landscaping does not impede proposed city works, or indeed, city owned property.

Sadly, the Point Grey elephant’s enclosure does take up some publicly owned property too, and the fence was not moved as part of the improvements for the Seaside Greenway.

Instead the pavement was widened to take up more of the city owned grass boulevard between the curb and sidewalk so not to inconvenience the property owner’s fence.

And further on in the 3800 block of Point Grey Road adjacent to Hastings Mill Park it is quite clear that the sidewalk is not wide enough, with the muddy tracks on either side of the cement showing the “desire lines”. In a park in winter people want to keep their feet dry.

While 1.8 to 2 meter widths of sidewalk are universally accepted as good minimum standards, the intensity of use of the sidewalk and location also needs to be considered.  It’s that kind of attention to detail that is needed as use of the Seaside greenway increases, and the appreciation of everyone’s right to the  public realm is reinforced.

 

 

 

18 Jan 04:01

2021: week 3

  • Spent most of the week avoiding packing, thinking about packing or actually packing. We move to Edinburgh in 3 days.

  • Thanks house, you've been good. Lots of happy memories.

    We're leaving the kids’ heights penciled on the door frame in the hallway.

  • How is it that a tiny strip of brown tape can keep 20kg of stuff from falling out the bottom of a cardboard box? It doesn't seem right to me.

  • I like it when the conspiracy theories turn out to maybe, possibly, be real. Feels like it's important to let them have one or two every now and again.

  • Sea shanty TikTok is what I need right now. It's so basic that I think the Guardian had an article explaining it, but I don't care. It's a crying shame that we'll never get internet latency low enough that people across the world can harmonise together in real-time.

  • Phoning this one in now and going to bed now. 😴

18 Jan 03:54

The long future of artificial intelligence

The brain is waking and with it the mind is returning. It is as if the Milky Way entered upon some cosmic dance. Swiftly the head mass becomes an enchanted loom where millions of flashing shuttles weave a dissolving pattern, always a meaningful pattern though never an abiding one; a shifting harmony of subpatterns.

Charles S. Sherrington, Man on his Nature, 1940

When Sherrington described the human brain as the enchanted loom in the mid-20th century, the Jacquard loom featured in his prose had been one of the most complex mechanical devices ever invented for over a hundred years. It used a system of punched cards that encoded complex patterns to be weaved into textile. The punched cards devised for the Jacquard loom would later find wider use in early computers, also programmed with punchcards. This is where software was born.

Given the place the Jacquard loom held in the history of mechanical craftsmanship, it’s no surprise that Sherrington imagined the human brain, still the most complex system we know of in the universe, as a system of looms weaving ephemeral patterns into memories and cognition.

Decades have passed, and the complexity of microprocessors used in Internet-scale computing systems dwarf the complexity of even the largest Jacquard patterns. Today, we imagine usurping the capabilities of the human brain with software instead of looms.

We’ve gotten closer, but I’m not sure that computers as we know it will get us there yet. Inventing the computer and the deep neural network may still be one of the first few steps in replicating the magic of the enchanted loom, and in this post, I want to explore the future that I imagine in our steps forward.

A new kind of computer

I firmly believe that deep neural networks represent a fundamentally different kind of tool than computers as we’ve known them since their invention.

Programs that run on conventional computers that aren’t neural nets – a class of programs I’ll call “classical computing” – are all built on the same fundamental conceptual foundation: the ability to emulate Turing machines efficiently.

The Turing machine is an abstract model of what it means to “compute” something. The model has a small machine working with a limited set of rules along an infinite tape of “memory” on which it can read and write data, and computer scientists consider the Turing machine the de-facto model for the capability that a computer has. This means that any classical program we can write for a computer can be re-written as a program fed into a Turing machine. All modern computers, from your smartphone and laptop to servers in Google’s datacenters to the microcontroller in your thermostat, are built on this foundational capability of emulating a Turing machine, and thus being able to solve the same problems a Turing machine can theoretically solve.

This is the reason that a program written for one computer can be safely re-written for another computer, and an algorithm designed for one programming language can be re-written in another language. All of these tools and computers encode the same powerful problem-solving power, which is the computational capability that a Turing machine represents. This capability includes things like efficient arithmetic, simulation, and working with strings of data, and these capabilities of the Turing machine turn out to unlock a whole world of power for users of computers – the power we enjoy today on our personal devices.

The Turing machine encodes a particular class of problems that classical computers can solve. But there are problems that are intractable for even the fastest, most efficient Turing machines, problems like factoring large prime numbers, infinite-precision decimal arithmetic, and the traveling-salesman problem. We depend on the intractability of some of these problems for the security of modern cryptography.

But just because these problems are impenetrable to computers based on Turing machines, doesn’t mean the are impossible problems. For example, a classical computer can’t work with infinite-precision decimal numbers, because they have finite memory. But we humans can trivially work with infinite-precision quantities, by using geometry. If you wanted me to tell you the exact value of the golden ratio, an irrational number, I could construct a geometric representation for you with a pencil, a ruler, and a compass, and you could measure it to any desired level of precision. Turing machine-based computers are powerful, but their power has limits.

Classical computers, like the one you have in your pocket or the one on which you’re reading this post, give us the computational capability to solve a specific class of problems. There are other kinds of computers that unlock the ability to solve other kinds of problems that are intractable for the computers we’re used to.

Astute readers will already know one such example of a new kind of computer: the quantum computer. Quantum computers don’t operate on the Turing machine model. Instead, the equivalent concept – the “quantum Turing machine” – encodes the total computational power of quantum computers in a mathematical model. Quantum computers give us a new kind of computational capability, namely the ability to run algorithms over a whole range of possible values, rather than a single value as in a classical computer. Using this new capability, we can attack new kinds of problems previously intractable for a Turing machine-based computer, like factoring large prime numbers, which is possible on a quantum computer using Shor’s algorithm.

In summary, there exist different computational capabilities, defined by the kinds of problems we can solve with each particular model of computing. Two examples are classical computers, emulating a Turing machine, and quantum computers, operating on a state space of values rather than single pieces of data.

Deep neural nets, I think, represent a third kind of computational capability.

The Turing machine for cognition

Training and making predictions with a deep neural net can run on a classical computer (as they almost always do today), but the operations that comprise computation with a neural net aren’t the atoms of Turing machines, but something different. They’re large, massively multi-dimensional matrix multiplications calculating weights and differentials across huge numbers of values at once in uniform ways. This fundamentally different computation model is what makes DNNs so well-suited to run on parallel processors like GPUs. But beyond that simple acceleration, we’ve been inventing new computing hardware for deep neural nets for a while now, better suited to the kinds of computational work required for a neural net. We’ve invented new kinds of processors (tensor processors), new kinds of data representations (bfloat16, reduced-precision floats), and alternative ways of writing programs (dataflow graphs) that are better suited to this new kind of computational power.

I think this suggests that deep neural nets represent a fundamentally new computational capability, different from classical computing that run sequentially on CPUs and efficiently emulate Turing machines. I’ll call this new capability cognitive computing to contrast with classical computing and quantum computing. Deep neural network-based software systems aren’t about emulating Turing machines or running algorithms designed for classical computers. Instead, they give computers the ability to solve new kinds of problems that resemble cognition.

Like quantum computers, DNNs open up a new, previously intractable class of problems for computers. These problems generally look like cognitive or perceptive tasks, things like learning the rules of an unknown system, recognizing patterns in data, breaking down images and text into sensible parts, and making inferences based on past patterns.

“But Linus,” you might object to this idea, “if deep neural nets really represent a new kind of computational capability, how can we run them on classical computers?”

Excellent question.

Beyond vacuum tubes

Even though cognitive and quantum computing represent different kinds of computational power, they aren’t completely inaccessible to each other. For example, it’s possible for fast classical computers, like the CPU in your laptop, to simulate a small quantum computer, albeit very slowly and inefficiently. But because a classical computer simulating a quantum computer has to keep track of exponentially more data, large quantum problems for which quantum computers are useful are impractical to simulate on a classical computer. (And by “impractical” I mean that constructing a computer capable of it would require more atoms that exist in the universe.)

When we run cognitive algorithms on deep neural nets on GPUs and tensor processors today inside our classical computers, we’re doing something akin to simulating quantum computers inside classical ones. We’re taking a massive hit in efficiency, for the benefit that we already know how to work with classical computers! But to really take advantage of the best that DNNs can offer humanity, we’ll need more efficient and DNN-friendly computational substrates.

Computing capabilities, computing substrates

In the possibility space of computers, there are two axes: capabilities and substrates. A computational capability describes the kinds of problems that a computer can solve: quantum algorithms, deep learning algorithms, basic arithmetic, and so on. A computational substrate is the physical material on which the algorithm runs: paper-and-pen, vacuum tubes, microprocessors, ion atoms, GPUs, and so on.

For each computational capability, there are many, many substrates on which we can execute the same algorithms. The first computers that ran on vacuum tubes can theoretically run the same programs that my iPhone 12 runs today, even though they use different substrates under the hood, because they implement the same computational capability, namely the Turing machine.

When any new computational capability is introduced, we usually take a few tries to discover the right substrate that’s efficient, fast, and cheap to manufacture. For classical computers, this brought us from punched cards and vacuum tubes to flash memory and transistors in laser-etched silicon. For quantum computers, there is ongoing research to discover materials that make more efficient qubits, like trapped ions and superconducting materials.

A table of different computational capabilities and the evolution of their respective substrates

For the cognitive computation power that deep neural nets represent, our current solution – silicon chips like GPUs and tensor processors strung together into giant datacenters – are a first step, but I think they’re nowhere near as efficient or cheap as it could be.

Firing up a multi-million dollar server farm to train a cutting-edge natural language model like GPT-3 feels a lot like firing up a building-sized computer in the early days of classical computing. We didn’t get to smartphones by simply shrinking vacuum tubes and punchcards; we got here because we found new substrates for the same computational power, namely laser-etched transistors on silicon. I imagine, in a hundred years, if we have GPT-10 in our pockets, it won’t run on GPUs and TPUs, but a new material entirely.

I believe there exist materials that will enable smaller, faster, far cheaper and far more efficient computers that can see, think, and speak. As one example, the human brain is a powerful cognitive computer, and runs on organic materials, not silicon. If we’re still doing the work of cognitive computing on silicon in 100 years, it would probably signal a tragic stagnation in humanity’s ability to discover better ways to build computers.

Discovering magic

If we treat cognitive computing as a new computational power that unlocks a fundamentally new class of previously intractable problems, we can imagine much more exciting futures for computer technology at large.

For one, I think it opens up the enchanting possibility that there is not just the one “computer” or the one “Turing machine” that lets us solve just one kind of hard problems, but a vast universe of different computational power and substrates on which we’ll discover ways to solve a million different kinds of hard problems. In this future, we’ll discover a problem, and match it with the kind of computing technology best fit to attack it in service of humanity.

This future of multicolored computing contains not just classical computers and cognitive computers and quantum computers, but a myriad of other computational materials and algorithms that work together to solve hard problems and answer questions that appeared impossible with previous generations of computers. Perhaps every fifty years, we’ll discover a new kind of computational power that we didn’t even realize existed before, and gift ourselves the ability to solve problems we previously dismissed as impossible.

Magic is simply technology we haven’t invented yet. Today, the best technology we have is large, planet-spanning software systems. So when we imagine engineering magic, we imagine even more complex and powerful computer systems. But the reality might be even more fantastical.

As Charles Sherrington imagined weaving the magic of artificial intelligence on a loom, and we today imagine etching superintelligence into ever-faster silicon, the next generation of engineers and thinkers will imagine encoding magic in organic molecules, transmitting magic in gravitational waves, and threading magic into streams of light.

In this long future of computing, superhuman artificial intelligence isn’t the holy grail, it’s just the next milestone. The zoo of computational capabilities is infinite. The doors have only just opened, the first few inhabitants found, but the real work is only getting started.

18 Jan 02:18

Study suggests Apple Watch can detect COVID-19 before symptoms appear

by Aisha Malik
Apple Watch SE

A new study suggests that the Apple Watch may be able to detect COVID-19 infections before symptoms arise.

Researchers at Mount Sinai Health System in New York have found that wearable technology could play a vital role in detecting cases. The study found that the watch was able to detect positive cases of the virus before it’s detectable by tests.

The researchers found that the Apple Watch can detect subtle changes in people’s heartbeats, which could signify that the person has the virus up to a week before they start feeling sick.

“Our goal was to use tools to identify infections at time of infection or before people knew they were sick,” Rob Hirten, the author of the study and an assistant professor of medicine at Mount Sinai, told CBS news.

The study looked at heart rate variability, which can be used to measure how a person’s immune system is performing.

“We already knew that heart rate variability markers change as inflammation develops in the body, and covid is an incredibly inflammatory event. It allows us to predict that people are infected before they know it,” Hirten said.

It’s worth noting that the Apple Watch isn’t the only wearable device that can detect early infections. A separate study from Stanford outlines that Garmin and Fitbit devices can be used to identify COVID-19 cases as well.

Source: CBS News

The post Study suggests Apple Watch can detect COVID-19 before symptoms appear appeared first on MobileSyrup.

18 Jan 02:18

Software effort estimation is mostly fake research

by Derek Jones

Effort estimation is an important component of any project, software or otherwise. While effort estimation is something that everybody in industry is involved with on a regular basis, it is a niche topic in software engineering research. The problem is researcher attitude (e.g., they are unwilling to venture into the wilds of industry), which has stopped them acquiring the estimation data needed to build realistic models. A few intrepid people have risked an assault on their ego and talked to people in industry, the outcome has been, until very recently, a small collection of tiny estimation datasets.

In a research context the term effort estimation is actually a hang over from the 1970s; effort correction more accurately describes the behavior of most models since the 1990s. In the 1970s models took various quantities (e.g., estimated lines of code) and calculated an effort estimate. Later models have included an estimate as input to the model, producing a corrected estimate as output. For the sake of appearances I will use existing terminology.

Which effort estimation datasets do researchers tend to use?

A 2012 review of datasets used for effort estimation using machine learning between 1991-2010, found that the top three were: Desharnias with 24 papers (29%), COCOMO with 19 papers (23%) and ISBSG with 17. A 2019 review of datasets used for effort estimation using machine learning between 1991 and 2017, found the top three to be NASA with 17 papers (23%), the COCOMO data and ISBSG were joint second with 16 papers (21%), and Desharnais was third with 14. The 2012 review included more sources in its search than the 2019 review, and subjectively your author has noticed a greater use of the NASA dataset over the last five years or so.

How large are these datasets that have attracted so many research papers?

The NASA dataset contains 93 rows (that is not a typo, there is no power-of-ten missing), COCOMO 63 rows, Desharnais 81 rows, and ISBSG is licensed by the International Software Benchmarking Standards Group (academics can apply for a limited time use for research purposes, i.e., not pay the $3,000 annual subscription). The China dataset contains 499 rows, and is sometimes used (there is no mention of a supercomputer being required for this amount of data ;-).

Why are researchers involved in software effort estimation feeding tiny datasets from the 1980s-1990s into machine learning algorithms?

Grant money. Research projects are more likely to be funded if they use a trendy technique, and for the last decade machine learning has been the trendiest technique in software engineering research. What data is available to learn from? Those estimation datasets that were flogged to death in the 1990s using non-machine learning techniques, e.g., regression.

Use of machine learning also has the advantage of not needing to know anything about the details of estimating software effort. Everything can be reduced to a discussion of the machine learning algorithms, with performance judged by a chosen error metric. Nobody actually looks at the predicted estimates to discover that the models are essentially producing the same answer, e.g., one learner predicts 43 months, 2 weeks, 4 days, 6 hours, 47 minutes and 11 seconds, while a ‘better’ fitting one predicts 43 months, 2 weeks, 2 days, 6 hours, 27 minutes and 51 seconds.

How many ways are there to do machine learning on datasets containing less than 100 rows?

A paper from 2012 evaluated the possibilities using 9-learners times 10 data-prerocessing options (e.g., log transform or discretization) times 7-error estimation metrics giving 630 possible final models; they picked the top 10 performers.

This 2012 study has not stopped researchers continuing to twiddle away on the option’s nobs available to them; anything to keep the paper mills running.

To quote the authors of one review paper: “Unfortunately, we found that very few papers (including most of our own) paid any attention at all to properties of the data set.”

Agile techniques are widely used these days, and datasets from the 1990s are not applicable. What datasets do researchers use to build Agile effort estimation models?

A 2020 review of Agile development effort estimation found 73 papers. The most popular data set, containing 21 rows, was used by nine papers. Three papers used simulated data! At least some authors were going out and finding data, even if it contains fewer rows than the NASA dataset.

As researchers in business schools have shown, large datasets can be obtained from industry; ISBSG actively solicits data from industry and now has data on 9,500+ projects (as far as I can tell a small amount for each project, but that is still a lot of projects).

Are there any estimates on Github? Some Open source projects use JIRA, which includes support for making estimates. Some story point estimates can be found on Github, but the actuals are missing.

A handful of researchers have obtained and released estimation datasets containing thousands of rows, e.g., the SiP dataset contains 10,100 rows and the CESAW dataset contains over 40,000 rows. These datasets are generally ignored, perhaps because when presented with lots of real data researchers have no idea what to do with it.

18 Jan 02:06

320-ish days later

by Rui Carmo

Taking a break from my ongoing attempts to post mostly about uplifting stuff, we’re coming up close to a year since the pandemic started and I was hoping not to have to come back to the topic this early – but, alas, things have worsened dramatically since my last update before Christmas, as is plain to see:

Clearly a long way from improving, to say the least. All my data is here, updated daily (and still manually).

This has made for some pretty dramatic news coverage, so I think most people have, by now, realized that New Year’s Eve wasn’t a magical line and that 2021 has just as much (or less) potential as 2020.

Regardless of actual causes (Christmas gatherings, New Year, whatever – it’s largely moot now, but my family, for instance, did not get together for any of those occasions), Portugal has now had almost 10 (non-consecutive) days of around 10.000 new cases a day, which dramatically raised the 7-day rolling average:

The evolution after New Year's is staggering, and I can't help but think this is just the tip of the iceberg.

And the worst thing is that these figures are most certainly on the low side, since many news commentators highlight that there is a ceiling for how many tests we can actually perform a day. Not for lack of tests (yet), but simply in matters of scale.

Law and (Dis)order

So the government issued another decree for a “strict” lockdown that is expected to last at least a month, and that (amazingly) has no less than twenty-four exceptions (itemized as a through x in the official decree) that allow people to leave their homes.

And we’re having a presidential election in a couple of weeks, smack in the middle of confinement (which is exception s in that decree, in case you were wondering).

There was the option to vote ahead of time, today, in a few selected locations, but I shied out because (for us) it would entail going across half the city, and there seems to be zero restraint from most people.

Courtesy of one of my friends, who took advantage of the early voting option.

Even though the photo above is actually fairly orderly (it’s the central Uni campus, which has a massive lawn, and there are multiple queues of people going to different faculty buildings to vote), over the past few days streets were still crowded, with photos of crammed subways, roads and public places (as well as schools) bubbling to the top of social media, as well as the obligatory leisure walks by the sea by roving packs of plodding “athletes”.

The Low Dregs Of The Pseudo-Educated

The worst thing, though, is that in the most selfish, irresponsible and breathtakingly defiant way imaginable, negationists are still crawling out of the woodwork all over the place and posting on social media about their dinner parties, photos and all. And it’s more than just negating masks, there are entire packs of tinfoil conspiracy theorists out there.

One current example is centered around one particular restaurant and one particularly vocal set of diners (the kind that apparently hold Philosophy PhDs and rant on about “freedom”) whose Facebook posts are making the rounds on social media, and the (apparent) utter lack of any kind of legal consequences.

So it’s no surprise whatsoever that we now top this chart:

I added the US and Brazil above for comparison and to cover most countries where I have friends or acquaintances. [Source]

Yes, we’re topping the world chart right now if you take out Andorra, which has less than 80.000 people…

The Gaps That Nobody Even Papered Over

Schools of all kinds remain open (so parents can theoretically work, although we, for instance, still have to leave home drop and pick up our kids, which is now our single biggest direct exposure risk), and even though remote working is mandatory, for the first few days there has been zero difference in traffic, public transportations, etc.

Even though I completely understand that many people cannot really work remotely in hundreds of small businesses (which, by the way, are something between 92%-97% of all companies in Portugal, depending on how you slice things) and that remote schooling was a massive problem in most places, I cannot help but find the arguments that “schools are the safest place for children” and that it would be “stunting their intellectual and emotional development” rather risky taking into account that we know essentially zero about long-term effects.

Another argument that has been controversial is the half-assed acknowledgement that the 20-29 demographic is well and truly driving case growth, yes, but “outside universities”, which is farcical to say the least.

What really annoys me is that the government had at least half a year to prepare for this (either it be hospital beds, computers for schools, or just funding for businesses) and that the current guidelines mandate that kids sit in classrooms with windows open in what have (so far) been the coldest days of the year so far.

And yes, our tiny economy is tanking. No surprises there.

Healthcare Implosion

But, again, that is mostly moot considering that the death toll has been rising and that hospitals and ICUs are already over capacity, with dozens of ambulances waiting in line in hospital emergency routes (and people dying in them):

Lisbon's main public hospital, at around 11PM on the 15th. [Source]

To say that this is not a time to be sick at all is an understatement. I hope we don’t catch anything, of course, but I also worry about having minor accidents that would entail visiting an emergency ward, since hospitals are under stress right now:

The death toll charts are too depressing to show, but we're way past 150 deaths a day now.

Vaccines, as was to be expected, are rolling out slowly. We’re at roughly 100.000 first-round inoculations at this point, although (as usual) there is no reliable daily data source, with the actual figure being pasted into a single image buried someplace in a government website1.

Obviously, health workers and those most at risk are the priority, and “mass” vaccination is expected to come after Summer, so I honestly don’t expect vaccines to make any real difference at this point.

If anything, I suspect the prospect of a vaccine wiped out any common sense in some people, given that I still see unmasked people in the streets (and the construction works in front of our flat, and shops I peek into) every day, with nary a care in the world.

Prognosis

Last week, prior to re-confinement, I originally expected things to come to a head in February or so, but last week’s data (and predictions of local health experts) pointed to us reaching at least 14.000 new confirmed cases a day.

To be honest, given what I see on the streets and the rise in completely ignorant and obnoxious behavior (either out of ignorance, intolerance towards the confinement, or lack of fear for the disease or any consequences), I think we’re going to go past twice that in a few weeks – with the caveat that we probably won’t be aware of it given the difficulty of doing enough testing.

I also have zero hope of schools being closed, and fear the consequences of the government’s constant dithering around that topic (not the least, again, due to our complete and utter lack of understanding regarding long-term effects).

So amidst all of this, my mood is grim. It’s hard to plan your future (or even work) when the whole thing is falling apart around you.


  1. Don’t get me started about health data sources. Ever again. ↩︎


17 Jan 18:25

We stopped in at Smith’s Bagelry today. Boug...

We stopped in at Smith’s Bagelry today.

Bought fresh simit (pictured), as well as a slice of San Sebastián style gluten free cheesecake. A bit sweet for me, but light & fluffy.

17 Jan 18:25

Cultural deafness and controversy in tech debates, by @baldur

We may all be writing in English, debating in English, and working in English, but the web dev scene is thoroughly multicultural even though online discourse doesn’t seem capable of taking that into account.

@baldur Cultural deafness and controversy in tech debates

What a great post. I’ve experienced this for 20 years, being of German background but growing up in Canada. I can more easily translate from what appear to be blunt German commands when typed in English.

This came up in the recent discussion with Rosano, who pointed to Ramsey Nasser’s Arabic programming language.

But @baldur’s post is more about the tone and style of English use, which differs by culture. The average American or Canadian gets afraid or agitated by an intense argument.

I know I get energized by them, and am looking for a counterpoint who fights hard enough to get me to change my “strong opinions loosely held”.

Web dev culture is an anglophone culture.

We can’t change that.

But maybe we should, at the very least, try and make it less American

👏👏👏

17 Jan 17:00

Weeknotes: Still pretty distracted

Not a lot to report this week. U.S. politics continues to make it extremely difficult to focus on anything substantial.

Ongoing Datasette projects

I have a lot of balls in the air regarding Datasette core at the moment. I'm mainly thinking rather than coding, but I feel like I've made some good progress that should turn into a flurry of code relatively soon.

Some of the areas I've been thinking about this week:

  • Ability for plugins to collaborate when adding extra HTML to blocks in default templates.

    Plugins like datasette-cluster-map add content to the top of the table page (example). I'm increasingly seeing a need for plugins to do this in a way that respects potential additions by other plugins.

    I want to add hooks that let plugins cleanly add content at the top or bottom of the table, database, query, row and index pages in a way that won't over-write additions from other plugins.

  • Take advantage of sqlite-utils cached table counts, if available. I added a cached table count mechanism in sqlite-utils 3.2, now I'd like to take advantage of it to speed up Datasette.

  • Datasette Enrichments. This is still purely in the idea phase but I'm really excited about it. I want to provide a plugin-driven mechanism for Datasette which allows users to select a column and apply an "enrichment" against that column which will expand it with additional data.

    A classic example is geocoding: imagine being able to select an "address" column, hit "geocode" and have extra latitude/longitude columns added to the table and populated using a geocoder. If it takes ten hours that's fine - come back ten hours later.

    Now imagine if it was trivial to write additional enrichments using a simple plugin hook - OCR, entity extraction and so on.

  • Rewriting the Datasette TableView. The table page is by far the most complex component of Datasette, supporting faceting and filtering and pagination and various other features. The code is pretty messy. I'd like to clean it up.

    Meanwhile for Datasette 1.0 I'm planning on introducing a mechanism for users of the .json API to request extras for things like suggested facets. And I'm looking to improve the plugin hook used for custom output formats like .yaml.

    I'm beginning to suspect that the solution to all of these issues are related.

<script type="module"> for Datasette plugins

One change I did complete this week is adding support for <script type="module"> JavaScript scripts in Datasette's plugin system.

This kind of script tag is required if you want to use JavaScript modules directly in modern browsers, without needing to run your code through a pre-processor.

Datasette has a mechanism for adding additional scripts to a page which can be configured both by plugins and in the metadata.json configuration file. I've updated both of those to support a "module": true key which adds the type="module" attribute to the script tag. See Custom CSS and JavaScript and extra_js_urls() in the documentation for details. Short version: add this to metadata.json:

{
    "extra_js_urls": [
        {
            "url": "https://example.datasette.io/module.js",
            "module": true
        }
    ]
}

To add the following line to every page of your Datasette instance:

<script type="module" src="https://example.datasette.io/module.js"></script>

I also modified the extra_body_script() plugin hook to allow scripts to use module syntax:

@hookimpl
def extra_body_script():
    return {
        "module": True,
        "script": "console.log('Your JavaScript goes here...')"
    }

Which will add the following to the bottom of the <body> element:

<script type="module">console.log('Your JavaScript goes here...')</script>

Releases this week

TIL this week

17 Jan 16:51

The Cloud Based 5GC – From Theory To Practice

by Martin

Last year I wrote about a 5G Americas whitepaper that describes how 3GPP has standardized the 5G core in a way that lends itself for cloud based implementation. In short, that means that control plane functions are split into microservices, deployed on bare metal clusters in containers and managed with Kubernetes. So far the theory. Now, products designed this way are announced by first telecommunication vendors.

Here’s a link to a number of very insightful whitepapers that Ericsson has recently published. You have to leave a name and email address before the web page lets you download the PDF brochures but it’s worth the effort. Once you have read the 5G Americas whitepaper linked to above and understood the basic concepts of the 5GC being cloud native, these Ericsson documents will tell you how it will actually be implemented in practice!

17 Jan 04:19

FFP2-Masken sind das neue Klopapier

by Volker Weber

Apple AirPods Pro sind nicht die einzigen Dinge, die schwer zu kriegen sind. Durch Söders Ankündigung, in Bayern FFP2-Masken vorzuschreiben, steigen auf einmal die Lieferzeiten dramatisch.

Habe heute noch mit sofortiger Lieferung bestellt, aber jetzt gehen die Lieferzeiten schon auf 14 Tage rauf. Und die Preise folgen. Wenn man sie mehrfach verwenden will, am besten 7 Tage, 7 Masken und dann zum Austrocknen aufhängen. Wenn es schneller gehen muss, bei 80 Grad in den Backofen und dann einen Tag trocknen lassen.

More >

PS: Kommentare geschlossen, weil die ersten Spammer schon da waren.

17 Jan 03:12

Reflecting on 20 years of Drupal & my personal mission

Dries, founder of the Drupal project, posted his thoughts and wishes from 20 years.

He included 3 birthday wishes.

The first one, never stop evolving1, includes this passage:

First and foremost, we’ve been focused on a problem that existed 20 years ago, exists today, and will exist 20 years from now: people and organizations need to manage content. Working on a long-lasting problem certainly helps you stay relevant.

So, roughly, the short phrase for this is “content management”. It was very interesting to read this, because it’s not at all the reason I contributed to the Drupal project.

I got involved using it personally, joined the mailing list, and starting contributing. It was my first open source project and community and I learned so much and have so much to be thankful for to the project, to Dries, and to all the wonderful people I got to meet.

My first contributions were around CSS class names and the recipe module.

Anyway: I got involved and built a company around Drupal because I wanted to enable personal publishing. Not the content management part, but rather giving individuals and groups agency over their content: using open source software to publish their own words online. Without having to go through mass media of a newspaper or other publisher, which is all there was at the time.2

I’m still on that same mission, in part because of Drupal being built as a full stack LAMP application: much too hard to host and maintain by individuals. This reduces user agency: you’re relying on someone else to have the knowledge and expertise and trust to run and maintain a server stack, and hopefully back up your content.

I’m pleased that people are in part solving this by banding together as co-ops and collectives.3. Some of the first worker cooperatives that I was exposed to were building on Drupal, like Agaric, or Vancouver’s CanTrust Hosting Co-op.

My goal: a user with a smartphone as their only computing device should be able to create and publish directly, and participate in the web.

Alongside of this is an understanding that humans make software and can be supported directly, which wish #3 is about.

Wish #2 is continued focus on ease of use, with a specific mention of out-of-the-box experience.

I hacked together SQL queries and config files to invent install profiles for Drupal, with many more capable people doing an actual good job of this afterwards ;)

Mostly, the Drupal community hasn’t internalized what it wants to be out of the box. Modules rather than products. It has gotten better, but there is a lot more to do here.4

And, the immense gravitational force of Dries’ commercial company Acquia being focused on (enterprise) content management pulls things in that direction. This is also at odds with my personal interest in individuals and groups, who have very different needs

This is not really this category, but I have been reflecting on it so will include it here:

At the time (in the early 2000s) I had little to no awareness of the concept of equality and inclusion. Around me I saw mostly white, young, and primarily male faces. I was - and am! - so privileged to be able to spend time participating in OSS communities.

This, too, is usability and ease of use.

Wish #3 resonated most strongly with me and I think Dries and I are very aligned on this goal: Economic systems to sustain and scale Open Source.

He links to a shop local analogy: think about the software you use, and understand that choosing software with an open source license pays dividends for you and the people around you.

Related to privilege, I am thinking a lot about “open source as a job”. I have long tried to get open source devs paid in different ways. Now, I think it’s time to have apps as a small business. Can we enable devs from around the globe to earn a living from building and maintaining apps? Yes, we can, and we must — and move past just North America and Western Europe as the focus for this.

All of the things I’ve mentioned are a core part of Fission, my current company:

  1. User owned content and personalization of apps
  2. Out of the box components for users and developers to build apps
  3. A model for users to participate with and support developers directly, so devs can have “open source as a job”

I am so glad to have met Dries and have him as a friend, so we can continue to work together, debate, and argue over priorities over how our missions overlap ;)

Dries is one of the very few people on the planet with 20 years of history of guiding a large open source project, and the changes and awareness of issues related to this that has happened over that time.

Congrats to him, to the entire Drupal community. Here’s to another 20.


  1. A Drupal phrase is “The Drop is Always Moving” – because Drupal’s logo looks like a drop, and it’s always evolving. When new services or protocols launched, the Drupal community usually had a module supporting it in weeks or days. [return]
  2. Dries did message me after I posted and said basically “Yes! This too!”, as well as “blogging is about sparking conversations”. [return]
  3. I wrote about the Social.Coop collective I joined recently. [return]
  4. I should be more positive here. There are 139 actively maintained distributions for Drupal 8. Next up: solid financial support models for a wide range of distros. [return]
17 Jan 03:10

How to pair more than one device with a Logitech Unifying Receiver

by Brad Bennett

If you have a Logitech keyboard and mouse and want to pair them both to the same dongle, this guide is for you.

I uncovered this useful trick after ‘updating’ my PC’s Bluetooth driver and my wireless mouse stopped connecting as seamlessly as before. From there, I found that you can download a handy tool from Logitech and connect up to six of the company’s devices to a single dongle. After learning that, I realized I could even bring an old keyboard back from the dead by connecting it to a dongle from a cheap mouse I had laying around.

The app is called ‘Logitech Unifying Software‘ and you can download it on Windows, Mac and Chrome OS.

How to connect all your devices to a single dongle

Once you download the app, the process is fairly straightforward. First, plug in your receiver and make sure you have your Logitech gear on-hand.

Next, make sure your Logitech device can work with a Unifying receiver. Most have the Orange Logitech ‘Unifiny’ logo, but I’ve also seen it in grey, and some items, like the Logitech MX Keys Keyboard, don’t have this logo anywhere but still work.

Make sure you have a wired mouse or keyboard handy or a backup way to control your PC in case something goes wrong when you try to reconnect your peripherals.

From there, open the app you downloaded earlier and it should detect the USB receiver in your computer. Make sure you only have one receiver plugged in.

The next step is to turn your device off and then on again to restart the pairing process. I found that with devices that were previously connected via Bluetooth, you need to start the pairing process to connect to the receiver.

Once you connect, you’re good to go, and you can add up to six devices. You can even go into the ‘Advanced’ section of the app to look for firmware updates and check your device’s battery.

The post How to pair more than one device with a Logitech Unifying Receiver appeared first on MobileSyrup.

17 Jan 03:08

Insecure, But Anyway… RPi Web Terminal

by Tony Hirst

A simple http web terminal offering ssh access into a Raspberry Pi…

# In RPi terminal
sudo apt install libffi-dev
pip install webssh

# Run with:
wssh  --fbidhttp=False --port=8000

Then in browser, go to raspberrypi.local:8000 and log in to raspberrypi.local host with defult credentials (user pi, password raspberry), or whatever credentials you have set…

Insecure as anything, but a quick way to get ssh terminal access if you don’t have another terminal handy.

Next obvious steps would be to try to run the service in the background and ideally run it as a service. The security should probably also be tightened up.

Note that another alternative is to run a Jupyter server, which will provide terminal access and some simple auth on the front end, though you’d be limited to running with the permissions associated with the notebook user.

[Ah, this looks like it has steps for getting a service defined, as well as creating a local SSL certificate: https://blog.51sec.org/2020/07/python-development-installation-on.html ]

PS see also webmin: https://sbcguides.com/install-webmin-on-raspberry-pi/ or https://thedreamingdad.com/install-webmin-raspberry-pi/ (although this takes up 300MB+ of space… )

That said, for webmin, Chrome will tell you to f***k off and won’t let you in because the SSL certs will be off… Because Google knows best and Google decides what mortals can and can’t see; and as with everyone else who works in ‘pootahs and IT, it’s not in their interest for folk to have an easy way in to accessing compute via anything other than regulated insitutional or monetised services. I f****g hate people who block access to compute more than I f****g hate computers.)

17 Jan 03:06

Twitter Favorites: [John_Dearie] Universal healthcare is not socialism -- it is utterly supportive of capitalism by allowing would-be entrepreneurs… https://t.co/hZzC6Oo12O

John Dearie @John_Dearie
Universal healthcare is not socialism -- it is utterly supportive of capitalism by allowing would-be entrepreneurs… twitter.com/i/web/status/1…
17 Jan 03:06

A rite of passage for our DM3-powered wardialer: being unleashed directly onto the PSTN from a PRI to a DMS-100, communicating with Shadytel ISDN code. pic.twitter.com/TOjIlhNiKi

by Shadytel (shadytel)
mkalus shared this story from shadytel on Twitter.

A rite of passage for our DM3-powered wardialer: being unleashed directly onto the PSTN from a PRI to a DMS-100, communicating with Shadytel ISDN code. pic.twitter.com/TOjIlhNiKi




6 likes
16 Jan 20:52

The Road Not Taken

by Dave Pollard

The Road Not Taken (Robert Frost)

Two roads diverged in a yellow wood,
And sorry I could not travel both
And be one traveler, long I stood
And looked down one as far as I could
To where it bent in the undergrowth;

Then took the other, as just as fair,
And having perhaps the better claim,
Because it was grassy and wanted wear;
Though as for that the passing there
Had worn them really about the same,

And both that morning equally lay
In leaves no step had trodden black.
Oh, I kept the first for another day!
Yet knowing how way leads on to way,
I doubted if I should ever come back.

I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I—
I took the one less traveled by,
And that has made all the difference.

If I have developed any distinctive competency in my life, it is likely the capacity to imagine possibilities — to draw on my study of a very broad range of subjects and make connections, and hence identify what might be possible, and what might have been possible.

This is a bit paradoxical in light of my current belief that we have no free will, and that therefore things have happened, and will happen, in the only way they possibly could have. There are no possibilities, except in our imaginations.

A recent article by the Ideas Editor (is that a dream job or what?) of the New Yorker, Joshua Rothman, explores how we think about the possibility that our lives might have turned out differently, and the impact of our choices and non-choices, and concludes that we define ourselves and our dreams for the future largely on the basis of what we have not chosen to do (at least yet) and what has not happened yet but might — “We seem to find meaning in what’s never happened. Our self-portraits use a lot of negative space.”

He notes that while Robert Frost claims his choice between the two roads made “all the difference”, in the end “it doesn’t matter what the difference is”.

In his hit song Baby Boom Baby, James Taylor writes: “How come I miss what I never knew? / Drag out the past just to paint it blue / Spend my days with a dream of you.” Thinking of past loves and dreams, which are actually all fictions, that song still, always, brings tears to my eyes.

So does another song, by Christine Lavin, The Kind of Love You Never Recover From: “At times like this when the moon is right / When the air is foggy like it is tonight / She’ll think about what might have been / If she had just held on to him… So here am I looking at you / Oh tell me, what are we gonna do? / Am I destined to be a regret? /Are you that one I will never forget?”

It’s interesting that songs with this theme of other possible choices are always replete with questions. The Muppets’ song Rainbow Connection, about future possibilities, is full of unanswerable questions.

Joshua notes that “The butterfly effect works in reverse: [Everything that actually happened] had to happen—in fact, everything had to go a certain way.” The road not taken was, in a sense, never there.

One writer that Joshua refers to in his article suggests that the western cults of individualism and capitalism, both of which emphasize ever more personal choices, have exacerbated the anguish we feel about other choices we supposedly might have made. The more choices we seem to have, the more sub-optimal choices there are, and the less likely it is we will choose the most optimal.

And then there are the related issues of shame and regret about past supposed choices, and the endless stress over the choices we feel we have to make, now or soon or eventually, to ensure a happy future for ourselves and our loved ones. Our relationship with time, in that respect, seems to me entirely unhealthy — our imagined pasts filled with false nostalgia and crippling regret, and our imagined futures filled with self-doubt and dread.

As someone blessed and cursed with a seemingly-unlimited and hyperactive imagination, I often think about the emergence of imagination as an evolutionary trait. I used to watch Chelsea the dog running in her sleep, her paws moving involuntarily in motion that clearly mimicked pursuit, even while she was lying on her side, quietly yipping. Surely she was dreaming, imagining something that might have happened, or might one day happen, or even something that could never happen but which, in that unconscious moment, seemed definitely to be happening. So I don’t think imagination is a uniquely human trait.

Presumably it emerged to allow us to plan for eventualities that had not yet happened, and to learn from those that had passed — what might have gone differently and what we can take from that. If so, as I’ve argued elsewhere, I think it was a spandrel — an accidental experiment of very large and not overly busy brains, one that has continued to emerge in each new generation of humans not because it’s of any use, but because there’s nothing currently or yet important enough for our mostly idle brains to do instead.

There are compelling arguments that imagining is just too energy-demanding, imprecise, and slow a process to have actually helped our species survive in the face of life’s immediate, life-threatening crises. Nice try, Mother Nature, but this seems a very expensive failure. It allows us to imagine possibilities, most of them actually impossible or impracticable, and many of them terrifying, immobilizing, traumatizing, inactionable, over-simplified or, well, just unrealistic.

Without imagination there could not be regret, or envy, or shame, or a host of other negative emotions that don’t serve us at all well. But there would also be no fantasy, no aspiration, and probably no perseverance.

Our selves are, if anything, stories — imagined plots about imagined characters. We create them to make sense of the world and our perceptions and conceptions about it. When we don’t like our lot we are urged to create a different, better story, which is to say imagine one and use it to motivate us to pursue its realization. What a fool’s errand that is!

My life used to be filled with regrets, envy, shame, indecision, second-guessing, day-dreaming, fantasizing, and other forms of longing for what was not, or is not, or will not ever be. As I get older these feelings and activities take up less and less space in me. I think that’s exhaustion more than wisdom. I’m no longer taken with stories much, my own or others’, whether they’re about a fictitious past or a fictitious future or a fictitious other world, no matter how artfully they’re made. They are lies, propaganda, over-simplifications, false promises. They are distractions from what is in favour of what might be, or might have been. Children and idealists and ideologues and optimists seem to love them, but to me they seem increasingly useless, empty.

Why do we want to be told stories, especially as children? Why do we like to imagine what might have been, or might one day be, or might be somewhere far, far away, when what is, right here, right now, is so astonishing, and mostly unnoticed? What is it about our sense of wonder that its focus is so easily seized from the real world and redirected to distraction from the real world in the invention of other, false realities?

And what would it be like to break through the veil of our illusions of choice and alternate possibilities, to escape the sad, limited, invented story of our selves, and to simply be, like Chelsea, and like the madly soaring flock of hundreds of pine siskins outside my window, right here, right now, beyond imagining — one with everything?

16 Jan 14:57

Auf dem Fenster schreiben :: Wie man Windows 10 mit einem Stift nutzt

by Volker Weber

7ca7ce806e1eb6764e0415658115e2fd

PDFs unterzeichnen, Notizen verfassen und synchronisieren, malen und zeichnen, auf gemeinsamen Whiteboards kritzeln – das alles geht per Stift einfacher als per Maus und Tastatur, nicht erst seit dem Homeoffice. Bei allem Hype um Android- und iOS-Geräte mit Stift vergisst man schnell, dass Microsoft schon seit 20 Jahren an dieser Technik herum evolutioniert – und oftmals ausgereiftere Lösungen bietet.

Mehr in der c't 3/2021, S. 150 >

16 Jan 14:57

Rust is a hard way to make a web API

by Tom MacWright

Rust is an amazing language. It has enabled excellent CLI tools like ripgrep and exa. Companies like Cloudflare are using Rust for their own systems and encouraging people to write Rust to run microservices. Rust makes it possible to write really fast software that’s secure, tiny, and more concise than C++ or C.

If I were writing a geocoder, a routing engine, a real-time messaging platform, a database, or a CLI tool, Rust would be at the top of the list.

But last year, I spent some time trying to make Rust work for a plain-vanilla API to power a normal website. It wasn’t a very good fit.

Lots of missing pieces

Rust has a fair number of web server frameworks, database connectors, and parsers. But building authentication? You have only very low-level parts. Where Node.js will give you passport and Rails has devise and Django gives you an auth model out of the box, in Rust you’re going to build this system by learning how to shuttle a shared vec into low-level crypto libraries. There are libraries trying to fix this, like libreauth, but they’re nascent and niche. Repeat for plenty of other web framework problem areas.

How about SDKs? In mainstream languages, you’ll be able to plug into Google Cloud services, AWS, or Stripe by bringing in an official library. Those libraries are mostly great. The aws-sdk-js and Stripe libraries, for example, are incredibly well-designed and maintained.

Not so with Rust. There are a few third-party libraries trying to fill in the blanks, which is great, but with the sheer velocity of those services, will they really be able to give a quality experience?

Some people will say well, X language is so good you can just write an SDK yourself in a weekend! To which I must reply, no.

Rust’s ecosystem is rich in other domains. The crates for building CLIs, managing concurrency, doing really impressive operations with binary data and low-level parsers - they’re spectacular.

Rust’s compiler is faster than it was, but still slow

I’ve been reading Nicholas Nethercote’s excellent blog for years now, in which he describes how the Rust team has made the compiler faster. And they certainly have made it faster!

But compared to other languages you build websites with, it’s slow. It’s much slower than the Go compiler and much, much slower than the startup time for interpreted languages like JavaScript, Ruby, and Python.

Once your code is compiled, everything’s amazing! But in my case, this basic API - which wasn’t even feature-complete and was by no means a complex system - took more than ten minutes to compile. On the weak hardware of Google Code Build, it would run out of time, every time. We couldn’t build anything.

Caching helps as long as you don’t have to rebuild cached dependencies. And, I don’t know, maybe slimming down dependencies would help Rust projects compile faster. But serde, for example - the JSON and other-format serializer/deserializer that nearly everyone uses - takes up a huge chunk of compile time. Should we replace serde with something that compiles faster but lacks great documentation and ecosystem support? It’s a bad trade.

Rust is complicated

Rust makes you think about dimensions of your code that matter tremendously for systems programming. It makes you think about how memory is shared or copied. It makes you think about real but unlikely corner cases and make sure that they’re handled. It helps you write code that’s incredibly efficient in every possible way.

These are all valid concerns. But for most web applications, they’re not the most important concerns. And buzzword-oriented thinking around them leads to some incorrect assumptions.

Take, for example, Rust’s safety. This is a big part of the marketing, and it’s absolutely correct: Rust’s main promise is to be both safe and low-level - it works without a garbage collector, while at the same time protecting against memory-based exploits. When you read “safety”, think about Rust competing with C. Code in C can reference arbitrary memory, can easily overflow and segfault. Rust code can be just as fast as that C code, but protect that memory access, and without the cost of a garbage collector or some kind of runtime checking.

But Rust’s memory rules aren’t more secure than Node.js’s or Python’s. Your web application written in Rust isn’t going to be systematically more or less secure than an application in Python or Ruby. High-level languages with garbage collectors pay a performance penalty in exchange for generally dodging this whole class of exploits and bugs. You can’t reference uninitialized memory in JavaScript because you simply can’t reference memory-as-memory in JavaScript.

Sidenote… This is describing the design goal of Node.js and other systems - they do occasionally have bugs that creep into this problem area. The previous behavior of Node.js's Buffer object, for example, is a good read.

Heck, if you ask some people, Rust is less secure than a GC’ed language for web apps if you use any crates that have unsafe code - which includes Actix, the most popular web framework, because unsafe code allows things like deferencing raw pointers.

If you’re writing a video game, a pause to run garbage collection is bad. If you’re writing code for a microcontroller, any memory “overhead” or waste is really bad. But most web applications can spare a little memory overhead in exchange for productivity.

This argument is pretty much the same for the other attributes of Rust. Its concurrency primitives are amazing if you’re doing something complicated and need blistering-fast performance. But if you aren’t? The Rust async ecosystem is challenging, to say the least: there are different sorts of async, projects that span domains to do async implementations of unrelated stuff like tokio.

It feels a lot less like Node.js, which had a good async story but ugly syntax, than Python Tornado or Twisted, which had a weird async story and also ugly syntax.

Async, I’m sure, will stabilize and homogenize and be a lot easier to do in the future. But I was working in the present.

The Rust ecosystem is not web-centric

There are many people currently learning Rust, writing CLI apps or low-level code in Rust, and having an extremely fun time. There are dramatically fewer people using Rust to write plain-vanilla web applications.

This is an important part of the equation for technology choices: are there people working with the tool and are they roughly in the same domain? Unfortunately, a lot of the incredibly exciting work in the Rust ecosystem has nothing to do with web application servers. There are some promising web frameworks - even a somewhat higher-level framework - but they’re undoubtedly in a niche. Even Actix, the main web framework, has a very top-heavy set of contributors.

If Rust grows at its current rate, the web portion of the community will reach a sort of critical mass, but right - I don’t think there are enough people using Rust for websites for it to be a practical tool for websites. And compare to other communities in which there are entire companies dedicated to building web applications with existing tools - not cutting-edge work, but the kind of stuff that differentiates a mature technology from a new one.

The Juniper crate invites n+1s

This part isn’t just about Rust, it’s about the GraphQL ecosystem and Rust’s involvement in that ecosystem is one example.

The n+1 problem is something that everyone building web applications should understand. The gist is: you have a page of photos (1 query). You want to show the author of each photo. How many queries do you end up with: 1, combining the photos & authors, or a query per photo to get the author after retrieving the photos? Or 2 queries, with the second having something like user.id IN ids to fetch all authors in a single pass and then reconnect them to their photos.

n+1 queries are usually the highest-priority database fixes: they’re usually high-impact, and changing an n+1 query into a single query is usually a big win. And we have lots of ways to try and resolve them: you can write SQL and try to get a lot done in a single query using CTEs and JOINs, like we did at Observable, or use an ORM layer like ActiveRecord that has quick ways to turn n+1 queries into predictable queries.

We were using Juniper, a GraphQL server for Rust applications. GraphQL basically lets your frontend application define queries, instead of the backend. You give it a range of things it could query, and the application - React or something else - sends arbitrary queries to the backend.

This makes things hard for the backend. Any sort of SQL-level optimization is impossible - your server is writing dynamic SQL, so you rely on the intelligence of your GraphQL server, which is not always high. Juniper, for example: n+1 queries by default. The workaround - a dataloader - is rough and independently maintained. So at the end of the day, you’re going to have a blisteringly-fast application layer that’s spending all of its time inefficiently querying your database.

The word is that GraphQL works really well with non-SQL databases which can serve these sorts of requests fast. I’m sure that there’s some special database used internally at Facebook that’s incredible in combination with GraphQL, but the rest of industry is pretty attached to Postgres and its ilk, for good reason.

Let’s have some caveats!

So I tried to lead with the main caveat: this isn’t about Rust in general. It’s about using the language and its ecosystem for a particular goal. Simple web APIs.

The caveat to that: in the general sense, you can build a website with anything and be successful. Remember how OkCupid was implemented in C++. There’s a popular astrology app, Co-star, that’s all Haskell. If you’re great at writing some language and you can hire other people with lots of talent, you can do it and be heroes.

Another caveat: what I was trying to build was a CRUD-heavy web application API for a website. It wasn’t a web “service” as you might call them nowadays, something that did one operation very fast and millions of times, but a web “application” - something that did quite a few different operations and had a fair bit of domain logic in it. If you’re not building that kind of thing, this advice might not apply! If what you need is to do one or two things at hyper-fast speed, like if you’re writing a payment gateway or voice messaging application, Rust’s tradeoffs might work a lot better.

Here’s another caveat: I’m writing this in January 2021. Assuming that society continues to function, Rust will evolve and will probably get a lot better, and it may become really easy to use for web application development.


All said, I really enjoyed working with Rust. It’s a beautiful language with a lot of cool ideas, and I hope that soon I’ll be thinking about something I want to build and Rust will be the right tool. As it is now, though, a lot of the things I want to build are better served by languages that have different priorities.

16 Jan 14:55

Remembering Catherine

by peter@rukavina.net (Peter Rukavina)

Oliver and Catherine.

Catherine died a year ago tomorrow night.

16 Jan 14:55

Librem 14 Update: Shipping Starts in February with Extended Battery

by Purism

The Librem 14 is our dream laptop and we know many of you are looking forward to getting yours. In our last post we talked about some of the final tweaks we made that resulted in shipping being delayed until January. The bad news is that we won’t be able to start shipping Librem 14s until February, but the good news is that everyone will be getting our (as of yet unannounced) extended battery option by default! Read the rest of the article for details.

Supply Chain Challenges

If you talk to anyone in manufacturing they will tell you that this has been a particularly challenging year for the supply chain. Whether you are talking about toilet paper, N95 masks, rubber gloves, or semiconductors, the global pandemic has made supply chains less reliable, and lead times and shipping times incredibly unpredictable. We already ran into supply chain challenges with the Librem 14 earlier when Intel announced CPU shortages, and most recently when we were preparing the first run of production Librem 14s we hit another issue: we couldn’t get the 3-cell batteries we were planning to use until after Chinese New Year! If you are familiar with manufacturing in China, you know that the entire country essentially shuts down for weeks, so this is far from ideal. However it turns out we could get our 4-cell extended battery in time.

The Librem 14 Extended Battery

When we first designed the Librem 14, it was with a 3-cell battery and second M.2 storage slot. Later on, we evaluated having the option to include a 4-cell extended battery increase the capacity by 33% with the expense of covering up the second M.2 storage slot. Because of that, we decided at the time to make the 3-cell battery the default, and offer the 4-cell extended battery to customers as an after-market optional upgrade.

These recent events have caused us to re-evaluate that plan. We realize most customers will probably never use the second M.2 storage slot of their laptop, but they would appreciate having the extra battery capacity. So we are going to default to the 4-cell extended battery on Librem 14 orders, unless the customer fills both M.2 slots, in which case we will fall back to the 3-cell battery.

For existing orders with both disk slots populated, this would mean your order gets delayed until March when we get 3-cell batteries, but if you don’t want to wait, we will work with you if you want to modify your order (simply contact our support team with your order number). For everyone else, we will start shipping their Librem 14 with the 4-cell extended battery in February.

Thank you so much for your patience while we finish up the Librem 14. Hopefully the surprise upgrade to an extended battery will help take some of the sting off of the extra wait!

The post Librem 14 Update: Shipping Starts in February with Extended Battery appeared first on Purism.

16 Jan 14:53

The (monetary) value of a university education during a pandemic

Doug Belshaw, Open Thinkering, Jan 15, 2021
Icon

The problem with the premise in the headline is I hope evident, since the meaning of education runs far wider than monetary value, but if you're paying £9000 tuition you are going to be attentive to the value you're receiving for that money, educational or otherwise. The key point in this post is that "Universities, because they’re acting like businesses, don’t have as much goodwill from the general population anymore." I mean, sure, they provide a service, people might reason, but it's no big deal if they go out of business, just like any other commercial enterprise. What would make universities indispensable? Well, there are many good examples - things like fire services, roads, police, water supply. Not only do we need them, we will make sure government keeps supporting them because they're available mostly for free and affordably to everybody. I don't think this is Doug Belshaw's point, but it's certainly mine.

Web: [Direct Link] [This Post]
16 Jan 14:53

Automatically maintained citations with Wikidata and Cite Q

Mike Peel, Andy Mabbett, Diff, Jan 15, 2021
Icon

Citations are an important part of any information ecosystem (so much so that pretty much every post in OLDaily is in essence a citation). They are also core to the reliability and authority of Wikipedia, which has a policy that any assertion be backed with a citation to a published source. This article describes a citation template in use by Wikipedia that has a single parameter: the index of the citation in Wikidata. The Wikidata record, meanwhile, has a range of citation properties that will be familiar to learning designers. The project has a lot readers can dig into - here is the Source MetaData project page, which includes a roadmap, a research bot, and implementation in a programming language called Lua (this is the first I've ever heard of Lua).

Web: [Direct Link] [This Post]
16 Jan 14:52

We’re lucky: no reported transmission at any ba...

We’re lucky: no reported transmission at any barbers in BC.

@crowsnestbarber in #eastvan chopped my mop and trimmed my wizard eyebrows.

16 Jan 14:46

Planning for Survival with a Cherry on Top

by Raul Pacheco-Vega

It’s been a rough year (2020) and 2021 promises to be just as difficult. I started the year exhausted and needed to ramp up to actually work normal hours. I strongly believe that we need kindness to others and to ourselves more than ever. The COVID19 global pandemic has created an extremely difficult situation for everyone.

January (or end of December of the previous year) is usually when people plan their year or their activities. To be quite frank, I normally plan with much more rigor for an academic year rather than a calendar year, but I also have a process for organizing my calendar year using my Everything Notebook and a set of printed calendars, integrating everything I plan as well with both my Google Calendar and my iPhone’s iCal.

Much as I love being ambitious, I think that for 2021 we really need to consider Planning for Survival with a Cherry on Top. I describe my approach below.

A Pair of Cherries

Photo credit: Amanda Slater on Flickr Creative Commons License: Attribution-Share Alike

You survived – RIGHT FUCKING ON.

Your family survived – GLORY!

Your friends, students, colleagues are doing as well as they can be? -EXCELLENT

Anything else is the Cherry on Top.

Did you Write For 10 Minutes – CHERRY ON TOP

Did you do an AIC summary of one article? – CHERRY ON TOP.

Did you teach that one first class of the semester? – CHERRY ON TOP

Did you manage to have the readings ready for the first couple weeks of classes? – CHERRY ON TOP.

Did you manage to answer 5 emails? – CHERRY ON TOP.

Right now, the goal is to survive this pandemic. Anything else that gets done, is The Cherry on Top. Actively de-programming ourselves from planning for life Almost As If We Were Back to Normal takes a long time. I’m struggling with it. I had to dial down my hopes for 2021. Right now, all I want is to survive and a few cherries.

(Immense thanks to Dr. Mirya Holman who always inspires me to think about these issues and I just want to heavily promote Dr. Holman’s #MHAWS newsletter AND Fridays writing group).