Shared posts

04 Aug 01:15

Celebrating Mozilla VPN: How we’re keeping your data safe for you

by Mozilla

A year goes by so quickly, and we have good reason to celebrate. Since our launch last year, Mozilla VPN, our fast and easy-to-use Virtual Private Network service, has expanded to seven countries including Austria, Belgium, France, Germany, Italy, Spain and Switzerland adding to 13 countries where Mozilla VPN is available. We also expanded our VPN service offerings and it’s now available on Windows, Mac, Linux, Android and iOS platforms. We have also given you more payment choices from credit card, paypal or through Apple in-app purchases. Lastly, our list of languages that we support continues to grow, and to date we support 28 languages. Thousands of people have signed up to subscribe to our Mozilla VPN, which provides encryption and device-level protection of your connection and information when you are on the Web.

Developed by Mozilla, a mission-driven company with a 20-year track record of fighting for online privacy and a healthier internet, we are committed to innovate and bring new features to the Mozilla VPN through feedback from our community. This year, the team has been working on additional security and customization features which will soon be available to our users. 

Today, we’re launching a new feature, one that’s been requested by many users called split tunneling. This allows you to divide your internet traffic and choose which apps you want to secure through an encrypted VPN tunnel, and which apps you want to connect to an open network. Additionally, we recently released the captive portal feature which allows you to join public Wi-Fi networks securely. We continue to add new features to offer you the flexibility to use Mozilla VPN wherever you go.

Divide and conquer your apps with our split tunneling feature

Today, we’re launching the split tunneling feature so you can choose which apps that you want to use the Mozilla VPN and which ones you want to go through an open network. This allows you to prioritize and choose the internet connections on the apps that you want to continue to be kept safe with the Mozilla VPN. This feature is available on Windows, Linux and Android.

Joining public Wi-Fi networks securely through our captive portal

Recently, we added the option to join public Wi-Fi networks securely. It’s a feature to make sure you can easily use our trustworthy Mozilla VPN service to protect your device and data when you are on a public WiFi network. If your VPN is on and you first connect to the cafe’s public Wi-Fi network, you may be blocked from seeing the cafe or public Wi-Fi’s landing or login page, known as the captive portal. Mozilla VPN will recognize this, and provide a notification to turn off the Mozilla VPN so you can connect through the public Wi-Fi’s landing or login page. Then, once you’re logged in, you’ll receive a notification to click to connect to our Mozilla VPN. This feature is available on Windows, Linux and Android.

New and flexible pricing plans

Recently, we changed our prices after we heard from consumers who wanted more flexibility and different plan options at different price points. As a token of our appreciation to the users who signed up when we first launched last year, we will continue to honor the $4.99 monthly subscription to users in those six countries – the United States, Canada, the United Kingdom, Singapore, Malaysia, and New Zealand. For new customers in those six countries that subscribe after July 14, 2021, they can get the same low cost by signing up for a 12 month subscription. 

We know that it’s more important than ever for you to be safe, and for you to know that what you do online is your own business. By subscribing to Mozilla VPN, users support both Mozilla’s product development and our mission to build a better web for all.  Check out the Mozilla VPN and subscribe today from our website.

The post Celebrating Mozilla VPN: How we’re keeping your data safe for you appeared first on The Mozilla Blog.

04 Aug 01:13

How to argue better — and what to teach your children about arguing

by Josh Bernoff

I love arguing — if it’s done right. There are basically two kinds of arguments. I only like arguing to reach the truth. Arguing for enlightenment In school, I learned that science is about testing out what is true about the real world, to gain insight. I liked that idea. I am not a scientist, … Continued

The post How to argue better — and what to teach your children about arguing appeared first on without bullshit.

04 Aug 01:13

Making Client Certificates Available By Default in Firefox 90

by Dana Keeler

 

Starting with version 90, Firefox will automatically find and offer to use client authentication certificates provided by the operating system on macOS and Windows. This security and usability improvement has been available in Firefox since version 75, but previously end users had to manually enable it.

When a web browser negotiates a secure connection with a website, the web server sends a certificate to the browser to prove its identity. Some websites (most commonly corporate authentication systems) request that the browser sends a certificate back to it as well, so that the website visitor can prove their identity to the website (similar to logging in with a username and password). This is sometimes called “mutual authentication”.

Starting with Firefox version 90, when you connect to a website that requests a client authentication certificate, Firefox will automatically query the operating system for such certificates and give you the option to use one of them. This feature will be particularly beneficial when relying on a client certificate stored on a hardware token, since you do not have to import the certificate into Firefox or load a third-party module to communicate with the token on behalf of Firefox. No manual task or preconfiguration will be necessary when communicating with your corporate authentication system.

If you are a Firefox user, you don’t have to do anything to benefit from this usability and security improvement to load client certificates. As soon as your Firefox auto-updates to version 90, you can simply select your client certificate when prompted by a website. If you aren’t a Firefox user yet, you can download the latest version here to start benefiting from all the ways that Firefox works to protect you when browsing the web.

The post Making Client Certificates Available By Default in Firefox 90 appeared first on Mozilla Security Blog.

04 Aug 01:10

Aggregators aren't open-ended

Gordon Brander, Subconscious, Substack, Jul 29, 2021
Icon

I think there's merit to this post, though I thing it relies on questionable hypotheses to get to where we already are. The first hypothesis is the characterization of aggregators as systems that monopolize demand by consolidating it; Gordon Brander offers Facebook, Uber and Amazon as examples. The second is that aggregators have broken a natural law describing how technology evolves: "yesterday’s product becomes tomorrow’s component." But you can't make Facebook, Amazon or Uber a component, he argues. There's no way to defeat their network advantage. So where does this leave us? "What if we instead had a small tool that was personal, multiplayer, distributed, evolvable? Maybe this is just a niche category, or maybe it could be the basis for a new open-ended ecosystem?" Well that, I argue, is where we are - at least conceptually. It's what Indieweb and Solid and mastodon and (humbly) gRSShopper are all seeking to attain.

Web: [Direct Link] [This Post]
04 Aug 01:10

Hasty Bug-fix Release of RSwitch v2

by hrbrmstr

Version 2 of RSwitch — the macOS menubar utility that enables fast and seamless switching between R versions on macOS and also provides notifications for new versions of RStudio Dailies has had a hasty update to deal with an error condition if/when the RStudio Dailies pages contain no links (they’re switching versioning schemes and I happened to catch this right at that time). The original RSwitch v1.x should be fine as long as the non-RStudio Pro dailies page isn’t busted.

Version 2.1.1b🔗 also adds a downloader for the arm64 version of the R-devel tarball:

The preferences also has a new button that lets you clear the cached previously seen latest daily download versions if you’re not getting notified (there could be a hiccup depending on when the last check was and the state of the daily download pages).

prefs

FIN

As noted, this is a hasty fix (right before heading out on holiday), so if there are issues it’ll be a bit before they get fixed.

04 Aug 01:10

Tumblr Post Plus

I had missed the announcement about Tumblr Post Plus, where tumblr users (in closed beta now, and...
04 Aug 01:09

Against Persuasion

Boston Review, Jul 29, 2021
Icon

Interesting argument: "His (Socrates's) politics of humility involved genuinely opening up the question under dispute, in such a way that neither party would be permitted to close it, to settle on an answer, unless the other answered the same. By contrast, our politics—of persuasion, tolerance, incentives, and punishment—is deeply uninquisitive." A long time ago I decided to cease attempting to persuade through argument, and instead to offer explanations for my thinking. I'm not always successful at this (for, after all, who doesn't want to be right?) but I've found that offering explanations allows people to have different beliefs and to help both me and themselves by asking me to make my explanations clearer.

Web: [Direct Link] [This Post]
04 Aug 01:09

“The Story of Playdate”

by peter@rukavina.net (Peter Rukavina)

I’m pretty sure that Playdate, the brand new bright yellow game console from Portland’s Panic, is an inane frivolity, the kind of thing the world doesn’t really need.

But it certainly begat an interesting promotional audio documentary that’s worth a listen to learn about modern hardware and software engineering, and how it’s possible at a modest independent scale.

And perhaps that’s why Playdate is worthwhile: as a case study of a general approach we might use to, say, rebuild our energy and transportation systems.

04 Aug 01:08

2021: The year privacy went mainstream

by Mozilla

It’s been a hell of a year so far for data privacy. Apple has been launching broadsides at the ad-tech industry with each new big privacy feature unveiling. Google is playing catch-up, promising that Android users will also soon be able to stop apps from tracking them across the internet. Then there’s WhatsApp, going on a global PR offensive after changes to its privacy policy elicited consumer backlash.      

There’s no doubt about it, digital privacy is shaping up as the key tech battleground in 2021 and the years ahead. But how did this happen? Wasn’t digital privacy supposed to be dead and buried by now? After all, many tech CEOs and commentators have told us that a zero-privacy world was inevitable and that everyone should just get used to it. Until recently, it would have been tough to argue that they were wrong.

Over the last 18 months, events have conspired to accelerate this shift in public attitudes towards privacy from a niche concern to something much more fundamental and mainstream. In the process, more people also began to see how privacy and security are inextricably linked.

The abrupt shift to remote working prompted by COVID-19 “stay at home” orders globally was the first crank of the engine. Many of us have had to use personal devices and work in less-than-secure home environments, exposing vast swathes of corporate data to greater risk.

The result has been something of a crash course in cybersecurity for all involved. Workers have had to navigate VPNs in order to access their company networks and learn how to keep their employer’s data safe. Those that didn’t suffered the consequences. In August 2020, MalwareBytes reported that 20% of organizations had had a data breach due to remote working.

Mozilla VPN, a Virtual Private Network from the makers of Firefox.

Protect all your devices

With home working here to stay in some form at least, employees must now be kept updated on cybersecurity best practice to ensure their networks stay protected. This should seep into people’s own online habits, prompting them to be more cautious and to adopt better everyday security hygiene.

Then there was the COVID-19 public health response, with contact tracing apps and vaccine passports putting health privacy front of mind. Their introduction raised thorny questions about how to balance managing the spread of the virus with respecting data privacy. In the UK, privacy fears forced the government to scrap the original version of its contact tracing app and switch to a decentralized operating model.

As mass vaccinations roll out, attention has since turned to vaccine passport apps. In New York, the Excelsior Pass controversially uses private blockchain technology leading to criticism that developer IBM and the state government are hiding behind the blockchain gimmick rather than genuinely earning the trust of the public to protect their information. As a result, the Linux Foundation is now working to develop a set of standards that protects our privacy when we use these apps. This is a significant step forward and provides a baseline for digital privacy protections that could be referenced in the development of other apps.

It’s not just the pandemic that has opened more eyes to privacy issues. Over a tumultuous summer, law enforcement agencies across the U.S. flaunted surveillance powers that brought home just how flimsy our privacy protections truly are.

At the peak of the Black Lives Matter protests, authorities were able to identify protestors via facial recognition tech and track them down using phone location data. To combat this, major news outlets like Time and human rights organizations such as Amnesty International published articles on how we can protect our digital privacy while protesting. The encrypted messaging app Signal even developed an anti-facial recognition mask which they distributed to Black Lives Matter protesters for free.

Finally, moves from Apple over the past year have really hammered home the growing demand for protecting our personal data. The introduction of privacy labels to the App Store means we can now get an idea of an app’s privacy practices before we download it. The iOS 14.5 update also made app tracking opt-in only. A whopping 96% of U.S. users chose not to opt-in, showing just how much consumer behaviour is changing. Needless to say Google has followed suit in some regards, announcing its own version of privacy labels to come next year for Android owners.

This last point is important. Big tech companies have the power to force each other’s hands and shape our lives. If they continue seeing  that digital privacy can be profitable, then there’s a great chance it’s here to stay.

Looking back to 2018 when the Cambridge Analytica / Facebook scandal broke, digital privacy was on life support, hanging on by a thread. That shocking moment proved to be the tipping point when many people looked up to see a less private and less secure reality, one which they didn’t want. Since then, many tech companies have found themselves firmly in the sights of a Congress looking to take them down a peg or two. States, led by California, began enacting consumer privacy legislation. Meanwhile in Europe, the introduction of GDPR has been an opening salvo for what strong international consumer privacy protections can look like. Countries like India and Kenya have also begun to consider a data protection law, impacting the privacy of over a billion users on the internet.

But what can we do to demand more for our digital privacy? A good place to start is by using alternatives to big tech platforms like Google, Facebook and Amazon. Switching from Google Chrome to a privacy-focused browser like Mozilla Firefox is a good first step, and maybe it’s time you considered deleting Facebook for good. Until these platforms clean up their act, we can take action by avoiding them all together. We can also ask our local senators and representatives to vote for legislation that will safeguard us online, such as the Fourth Amendment is Not for Sale Act. The Electronic Frontier Foundation runs numerous campaigns online to help us do this and you can get involved via their Action Center

It’s the combination of companies protecting their bottom lines, pressure from regulators, and extraordinary societal moments where we are seeing a turning point in favor of consumer privacy, and there is no going back. As consumers of technology, we must never take these privacy gains for granted and continue pressing for more.

Callum Tennent is a guest opinion columnist for Mozilla’s Distilled blog. He is Site Editor of Top10VPN and a consumer technology journalist as well as a former product testing professional at Which? Magazine. You can find more information about him here and follow him on Twitter at @TennentCallum.

The post 2021: The year privacy went mainstream appeared first on The Mozilla Blog.

04 Aug 01:08

Expert speakers or trainers are not interchangeable

by Josh Bernoff

If you hire experts to train on areas outside their expertise, you’ll pay too much and get a really poor result. It’s like paying a painter to rewire your house. Experts specialize. It’s what makes us experts. I’ll use myself as a case study here, but the same applies to anyone you hire. Imagine that … Continued

The post Expert speakers or trainers are not interchangeable appeared first on without bullshit.

04 Aug 01:08

Ezra Klein on Mandating Vaccination

He gets right to the edge, and backs down. In What if the Unvaccinated Can’t Be Persuaded, Ezra...
04 Aug 01:08

Weeknotes: datasette-remote-metadata, sqlite-transform --multi

I mentioned Project Pelican (still a codename until the end of the embargo) last week. This week it inspired a new plugin, datasette-remote-metadata.

I also published an article describing the Baked Data architectural pattern and shared the video and transcript of a talk I gave at PyGotham last year.

datasette-remote-metadata

Datasette's metadata system is one of the key ways of customizing a Datasette instance: it lets you add extra information about the tables hosted by the instance, lets you configure canned queries and also (due to some scope creep that I'd love to clean up) lets you configure options for various Datasette plugins.

There's just one catch: when you update the metadata for an instance, you need to re-deploy the whole thing. I increasingly find myself using Datasette and Cloud Run to host databases that are over 1GB in size, so re-deploying just to tweak some text on the homepage is less than ideal.

The datasette-remote-metadata plugin uses the new get_metadata() plugin hook from Datasette 0.58 to work around this problem.

Essentially, it lets you tell Datasette "load your metadata from this external URL". You provide it with a URL to a JSON or YAML file hosted elsewhere and the plugin will load that file on startup and periodically (by default every 30 seconds) check to see if it has changed.

Those checks for updates only happen if Datasette is receiving traffic. Datasette will try for up to 200ms, then continue the fetch but serve the request using the now-stale metadata rather than block for longer than that.

I'm trying this out for Project Pelican and it seems to be working great - which means we can iterate on the metadata (including the description_html block displayed on the Datasette homepage) without needing to constantly re-deploy the 700+ MB SQLite database file to Cloud Run.

sqlite-transform --multi

sqlite-transform is my command-line tool for running transformations against columns of data in a SQLite database - parsing dates, splitting comma-separated lists into JSON arrays or using custom Python code to apply any custom transformation.

The latest release adds support for splitting one input column into multiple output columns. This is best explained with an example: consider a database table with a location column that contains latitude,longitude points which you would like to split out into separate latitude and longitude columns.

sqlite-transform lambda demo.db places location \
  --code 'return {
    "latitude": float(value.split(",")[0]),
    "longitude": float(value.split(",")[1]),
  }' --multi --drop

The new --multi option means that the passed in --code will return a Python dictionary, and the tool should then add new columns to the specified table for each of the returned dictionary keys and populate them with the corresponding values.

The new --drop option tells the tool to drop that location column after the transformation has been completed.

Releases this week

TIL this week

04 Aug 01:08

2021-07-29 BC

by Ducky

Hello, fourth wave. 😞

Vaccinations

From the Weekly Data Summary, information about cases/hospitalizations/deaths by age between 15 June and 15 July:

Between 15 June and 15 July, nobody under 80 who had been double-vaxxed died; nobody under 60 who had been double-vaxxed got hospitalized. Partly that’s because there were not many cases, but partly because vaccines work.


People have asked me why the vaccination rate has dropped off so much recently.

  • Our inter-dose interval is 7 weeks right now.
  • 7 weeks ago today was 10 June.
  • If you look at the Inoculation chart below, you’ll see that first doses started to drop at about 2 June.
  • We can’t give second doses to people who haven’t gotten first doses. 😉

So the fall-off in vaccinations isn’t that odd. What we really need is more people with first doses, and the province is really working hard on that. (If you look at Adrian Dix’ Twitter feed, it is FULL of announcements of pop-up clinics and town halls.)

Variants

Also from the Weekly Data Summary, in the week ending 22 July, the proportion of cases which were delta and P1 didn’t change much.

Statistics

+204 cases, +0 deaths.

Currently 51 in hospital / 20 in ICU, 1,055 active cases, 146,810 recovered.

first doses second doses
of adults 81.9% 66.8%
of over-12s 81.0% 64.1%
of all BCers 73.7% 58.3%

We have 659,731 doses in fridges; we’ll use it up in 12.5 days at last week’s rate. We’ve given more doses than we’d received by 16 days ago.

We have 598,076 mRNA doses in fridges; we’ll use it up in 11.3 days at last week’s rate. We’ve given more doses than we’d received by 10 days ago.

Currently, 79.1% of people who got a first dose have gotten a second dose.

Charts

04 Aug 01:07

Pause estivale pour l'Octet Vert

by Tristan

L’Octet Vert, comme tout le monde, a bien le droit à des vacances. Alors en cette fin de “première saison”, c’est l’occasion, en quelques minutes, de faire le point sur l’audience et de se poser la question qui tue : “y aura-t-il une prochaine saison ?” L’avenir nous le dira !

Coté audience, on frise le 20 000 écoutes pour 15 épisodes, soit plus de 1 000 écoutes par épisode !

Quel épisodes ont-ils rencontré le plus de succès ?

  1. Sébastien Brault, épisode 0, remporte mécaniquement la première place, car de nombreux nouveaux auditeurs commencent par le premier épisode. Sébastien est un développeur mobile et on parle de son métier et du rapport avec l’obsolescence logicielle ;
  2. Agnès Crépet, épisode 7. Agnès nous a fourni un épisode vraiment super, on y parle de fabrication de smartphones, de matériaux Conflict-free, de sa lutte pour rendre compatible un vieux modèle de mobile avec une version récente du système d’exploitation mobile Android ;
  3. Thomas Wagner dit BonPote, épisode 11 nous parle de son envie de changer de vie et de quitter son poste de banquier pour mettre en valeur les travaux du GIEC sur le climat.
  4. 4 au pied du podium, Frédéric Bordage, épisode 8. Frédéric est un peu le parrain du GreenIT, puisqu’il est fondateur de la communauté GreenIT.fr.

Où écouter ce non-épisode ?

  1. L’Octet Vert sur Apple Podcasts ;
  2. L’Octet Vert sur Google Podcasts ;
  3. L’Octet Vert sur Spotify ;
  4. Le flux RSS de l’Octet Vert ;
  5. L’Octet Vert sur Deezer ;
  6. L’Octet Vert sur Anchor ;
  7. L’Octet Vert sur Breaker ;
  8. L’Octet Vert sur Pocket Casts ;
  9. L’Octet vert sur Podcast Addict ;
  10. L’Octet Vert sur RadioPublic.
04 Aug 01:07

Articles of faith

by Chris Grey
In the years before the Referendum – long before this blog started, so I haven’t kept links – I quite often came across pro-leave people explaining, usually in rather lofty tones, that leaving the EU would be very simple because everything was all set out in Article 50 of the Lisbon Treaty. Prior to that, there had been no formally defined exit mechanism. Its creation had been partly as a reassurance for the countries that joined in 2004, but it had the support of what were then called Eurosceptics in the UK in the hope that, one day, it would be their portal to ‘freedom’.

Invoking Article 50

If we have learned nothing else since 2016, it is surely that Article 50 offered only the broadest of frameworks for withdrawal, and “invoking” it was only the beginning of a complex process. So having so enthusiastically lauded Article 50 as the answer to their prayers, the most committed Brexiters actually approached it in a variety of quite contradictory ways.

One, espoused by the Vote Leave campaign documents (slide 11), was to say that “we will negotiate the terms of a new deal before we start any legal process to leave”, meaning prior to invoking Article 50. This was impossible (and rejected by the EU before the Referendum votes had even been counted) and was rarely mentioned again after the Referendum result. The second, espoused from time to time by UKIP, was simply to leave without invoking Article 50 at all. This would have been perverse, since it wouldn’t have made any of the issues involved in leaving disappear, though, quite astonishingly, it seems to be what Dominic Cummings still thinks could have happened, and he also believes the EU would have entered negotiations prior to triggering Article 50.

The third, soon dominant, idea was that Article 50 should be invoked as soon as possible, and that any delay represented backsliding and was the province of the “enemies of the people”, so immediate invocation became a test of Brexit fidelity. A final idea, which for many months Theresa May’s government, including at the time Boris Johnson, appeared to believe, was that both exit and future terms could be agreed within the Article 50 period. This was simply false.

The underlying mind-set

All this is old history now, but worth recalling because it reveals a mind-set which has not gone away and which is coming to the fore again. It was evident on the many occasions in 2018 and 2019 that Brexiters – including Rees-Mogg, Farage and Johnson – talked of ‘invoking GATT Article XXIV’ as a way of, supposedly, securing a temporary trade deal even if no exit (let alone trade deal) had been done. It was nonsense and, notably, although Johnson referred to it during his campaign to be Tory leader during an excruciatingly embarrassing interview with Andrew Neil, he never mentioned it after that. But the same mind-set is on display now in the numerous calls and threats to ‘invoke Article 16’ of the Northern Ireland Protocol (NIP).

What is the mind-set? I think it has three, related, aspects. One lies in the image it conveys of the UK having unilateral control – it ‘invokes’ things and, as such, appears to be the active party without having to have regard for other players, notably the EU. The second is that, for all their supposed disdain for expertise, Brexiters are adept at using what to the general public sounds like ‘expert jargon’ which, when delivered in dismissive or authoritative terms, gives the impression of great mastery of technical detail when, in fact, none exists. Thirdly, and perhaps most importantly, it suggests that there is a quick and easy short-cut to solve complex and intractable problems.

As regards the NIP, it is now abundantly obvious that Johnson’s government also saw that as a short-cut to ‘solving’ Brexit, without understanding or caring what it meant. The same goes for the Brexiter MPs and MEPs who voted for it in the British and European parliaments, although some of them seem to have persuaded themselves, or been persuaded by others, that it would lapse once a trade agreement was reached. Hence, even now, dullards like Iain Duncan Smith say (£) that the NIP was “always seen by both sides as a temporary solution”. This is a flat-out falsehood. Unlike May’s ‘backstop’, this was a ‘frontstop’ agreement that existed permanently and independently of any trade agreement or of there being no trade agreement at all. The two were connected only to the extent that had the trade agreement been a ‘deeper’ one, then the nature of the Irish Sea border would have been correspondingly ‘thinner’ (e.g. in terms of the extensiveness of checks).

Invoking Article 16: and then what?

Whether it was always intended or only later decided that the NIP would be reneged upon, the idea that ‘invoking Article 16’ offered a way out of what had been agreed first surfaced as early as January 13 2021, when Johnson spoke of doing so in the House of Commons. That date is of note for two reasons. Firstly, because it was less than two weeks into the actual operation of the NIP, showing how early it was being threatened (and, of course, Johnson and others had denied from the outset that the NIP meant there would be an Irish Sea border). And secondly because it predates by two weeks the EU’s own short-lived and abandoned threat to invoke Article 16 over vaccine supplies, of which Brexiters and the government now make so much.

As I wrote at the time, that was a major blunder by the EU, with no justification. Even so, and apart from the fact it never happened, what it would have meant has been heavily misrepresented. It would not have meant creating an Ireland-Northern Ireland border, as some Brexiters now claim, but only that vaccines destined for Northern Ireland would never have left the factory in Belgium. Moreover, it would have been a specific measure to deal with a particular and unforeseen emergency. In this, even as a possibility, it was entirely different to the way that the Brexiters, and the government, are now talking about how the UK might try to use Article 16.

What that talk seems to suggest is that Article 16 would allow the UK unilaterally to suspend the entirety of the NIP or even unilaterally to disapply the NIP. As Professors Katy Hayward and Dave Phinnemore of Queen’s University Belfast explain, neither of these is the case. The UK would need to identify ‘serious’ problems which were ‘unexpected’ and ‘likely to persist’, and the proposed solutions, for consideration and discussion by the Joint Committee. Diversion of trade is one possible problem which might be identified – and Frost’s recent statements seem to imply it is the one upon which the UK might base an Article 16 invocation - but it can’t just be that which was to be expected because it is inherent in the agreement. It certainly isn’t the case, as, again, Iain Duncan Smith recently claimed (£), that diversion is “forbidden” by the NIP. And most certainly Article 16 isn’t a way of just saying ‘we don’t like this agreement’: its terms would continue to exist, and many of them would continue to operate.

So, rather as with invoking Article 50, it would be the beginning of a process (though not one leading to ‘exiting’ the NIP). Thus whenever invoking Article 16 is proposed, the crucial question that should be asked is: and then what? The answer, inescapably, is further negotiation with the EU, but if that has failed to give the UK the outcome it wants without using Article 16 then it is no more likely (probably less likely) having done so. So what then? Rip up the NIP entirely, with all that will mean for possible trade sanctions from the EU, and, at the very least, diplomatic rows with the US? And, still, what then?

Article 16 can’t solve the deeper problem

For the deeper problem in all this is the same one that has existed since, at least, the UK government decided in January 2017 that Brexit meant hard Brexit. If the UK is to be outside the regulatory regime of the EU single market and the tariff regime of the customs union then the UK itself needs a border just as the EU does. So where’s the border? That question has no easier answer now than it had in all the years since 2017 during which endless models were proposed. The NIP is the least-worst answer that anyone could come up with which both sides would agree to.

The recent spate of self-serving tweets from Dominic Cummings on this subject is again instructive. Although he affects disdain for the ERG, his account is precisely that which most of them have been peddling for years, namely that the Irish border issue was a minor or even non-existent one, and only achieved prominence because of the weakness and incompetence of May’s government and its acceptance of what Cummings calls the “babbling” about the Good Friday Agreement. Had what he calls “we” (apparently meaning the Vote Leave team) been in charge, the UK would just have refused to erect borders and if the EU did then so be it: the integrity of the single market was the EU’s problem, not the UK’s (he still doesn’t seem to realise that the UK needed a border as well). By the time Johnson and Cummings came to power, it was too late and what they both childishly call the ‘Surrender Act’ (meaning the Benn Act) prevented resurrecting a hardball approach, hence the NIP with its associated Irish Sea border. This, of course, rests on the preposterous idea that a no-deal Brexit, which would have damaged the UK far more than the EU, constituted negotiating leverage had the Benn Act not prevented it.

As I say, none of this is new and I’ve catalogued it as the boilerplate position of the Brexit Ultras endlessly on this blog, as well as explaining why it was unrealistic. Apart from anything else it ignores the fact that David Davis thought pretty much exactly the same things, but found that they were unworkable, including the fantasy of an Article 50 pre-negotiation, the denial of the reality of the Irish border issue, and the delusion that Ireland was only a minor player. In short, most of Cummings’s ‘hypotheticals’ are already discredited. More generally, what developed into May’s deal wasn’t a result of the Ultras’ approach not having been tried, but of it having been tried and failed. So it is only of passing interest, and no surprise, that Cummings himself has confirmed that he shares their analysis of the Brexit process and clings – in a way reminiscent of those who used to defend the USSR as not being ‘real’ Communism – to the idea that ‘it just wasn’t tried properly’.

Frost’s flawed logic

Cummings is irrelevant now, hence he has the time to re-litigate the events of the last few years in his barrage of tweets and blogs. But what remains highly relevant is that his analysis is shared by David Frost who, of course, was one of the Cummings’ group when the NIP was negotiated. Frost may not have brewed the Kool-Aid (his skills, to the extent they are discernible, appear to be emulative rather than innovative), but he certainly drank deeply from the cup. So Cummings’s statements underscore the fact that Frost, like all the Brexit Ultras, doesn’t accept the need for the NIP or the validity of the process that led to it. Moreover, it underscores his commitment to the fanciful idea that playing ‘hardball’ pays dividends – the belief, for example, that the illegal clauses in the Internal Markets Bill paved the way to a trade deal being struck (in fact, they nearly scuppered it). The corollary of that belief is a refusal to accept that the UK losing the trust of the EU – and more widely - matters, or is even a relevant concept.

The reason this is so crucial is that it confirms something which, as I’ve argued before, I think many pundits misunderstand about Frost’s approach to the NIP. It is not ‘playing to the domestic gallery’ and it is not intended to be, though of course may end up being, a prelude to a climbdown with the EU. Like every bull market sucker, he genuinely believes that ‘this time’ it will be different. If I am right, then Frost is not making the current hard pitch as a route to a subsequent compromise giving him much but not all of what he demands, but believes he can have those demands met pretty much in full.

This seems to be confirmed this week by the government’s immediate rejection of the EU’s proposals for some flexibilities in the application of the NIP as inadequate. It also explains why Frost isn’t doing anything to build trust with the EU in the way suggested in a wise analysis of the situation by Maddy Thimont Jack of the Institute for Government this week. For, wise as it is, trust plays no part on the Frost-Cummings-Game Theory 101 approach to negotiations. It does, however, matter in the real world, and lack of trust in both the UK in general and Johnson in particular is the central stumbling block to Frost’s recent proposals being accepted when viewed from an EU perspective.

Moreover, the antagonistic atmosphere Frost has created arguably partly explains the European Commission’s refusal to recommend that the UK be allowed to rejoin the Lugano Convention (as readers of this blog will be aware). It certainly won’t have helped. Nor is it likely to help in the re-emerging disagreements over Gibraltar. More generally, Frost either doesn’t understand or doesn’t care that it is in the nature of Brexit that the UK will, permanently, be in negotiations with the EU about something or other. Eviscerating goodwill in such circumstances is extremely foolish.

So what now?

Coming back to the NIP, in her characteristically excellent assessment of the present situation, Professor Katy Hayward suggests that Frost’s strategy “simply deepens the hole that the UK has dug for itself”. She argues that the EU has three possible responses. One would be simply to accept all or most of the UK’s demands, but she is surely right to think this highly unlikely. The second would be to take some form of retaliatory action (introduction of some tariffs, exclusion of UK from some programmes). The third is to continue to try to negotiate within the framework of the NIP, as so far continues to be the case.

That might also go alongside a more minimal acceptance of Frost’s demands to the extent of further extensions of the various grace periods. This seemed likely to happen anyway, and even more so now that the EU have announced that it will, as Frost requested, pause the legal action over those grace periods the UK unilaterally extended last March. As I flagged in my previous post, last week it was being reported that the action would proceed to the next stage by the end of this month.

The logic of Frost’s position (assuming, again, that I have read it correctly) would be to respond aggressively to any retaliations, and to bank concessions on the grace periods, regard them as proof that his ‘tough’ approach works, say they don’t go far enough, and invoke Article 16. As noted above, the latter wouldn’t solve anything but it would escalate the political crisis – which is the only direction that the Frost logic points to. In that view of the world, as soon as you back down, or even compromise, you’ve lost. That is what – as Cummings’ statements show – the Ultras think happened repeatedly post-2016 and they won’t do it again. But there is ‘a but’.

Which way will ‘shopping trolley’ Johnson veer?

The analysis that all would have been fine if only the politics of the 2016-2019 period hadn’t prevented the Brexit Ultras’ strategy working is inadequate for many reasons, including its failure to understand basic realities about the EU and the single market. But it also contains its own contradiction in imagining that the Brexit process could ever proceed separately from ‘politics’ or, as Cummings puts it, ‘SW1’ (meaning, I suppose, the entirety of the politico-governmental system). So if Frost’s logic escalates the present tensions with the EU into a huge crisis, politics may well intervene decisively in the form of Johnson.

I’m sure that, in his way, Johnson buys in to the simplism that runs through the Cummings-Frost thinking, just as he once believed that both exit and trade deals could be done as part of the Article 50 process, and that GATT Article XXIV was a get out of jail free card. However, it’s hardly a startling insight that Johnson believes deeply in very little, but cares greatly about his own position and advantage and that on policy, as Cummings puts it, he veers about like a wonky shopping trolley.

So the ‘but’ for Frost’s approach is whether, when it comes to it, he will get Johnson’s support or whether he will join the long list of those Johnson has betrayed. In answering this question, clearly any issues of principle or loyalty can be discounted. Far more shamefully, it seems unlikely that any concern for peace and security in Northern Ireland will figure highly in Johnson’s priorities. On the other hand, if there were intensified pressure from the Biden administration that could matter.

What might be most relevant, though, is the sharp recent decline in the Conservative’s opinion poll ratings and Johnson’s own approval scores.  If this is still continuing come an autumn crisis the calculation may be whether a major confrontation with the EU will be popular with the electorate or not. It would certainly appeal to his voter base, and to many of his MPs. It might bring back some of his public support. But it might alienate a larger number of voters, not least since Johnson was elected on the promise that he would ‘get Brexit done’ and yet here he is, still negotiating the terms of the deal formerly known as oven-ready. In particular, it might alienate the type of Tory voters who deserted Johnson in the recent Chesham and Amersham by-election, and alarm his already “jittery” backbenchers (£). If also facing the kind of Labour post-Brexit strategy I discussed in last week’s post, which seems increasingly in prospect (£), Johnson might well conclude that, as regards the NIP, discretion is the better part of valour.

How such calculations play out obviously remains to be seen, but since so much of Brexit has been more about domestic politics than Britain’s relationship with the EU it wouldn’t be altogether surprising if it were to be so again. So it’s not impossible that Frost may soon be joining Cummings in having many spare hours in which to tweet about how Brexit would have been a huge success if only he had been allowed to do it properly.

04 Aug 01:07

Why We Love the BenQ HT2050A Movie Projector

by Christine Cyr Clisset
Why We Love the BenQ HT2050A Movie Projector

For years, my husband and I wanted to buy a movie projector, but we couldn’t stomach the steep price. We didn’t want to have a big TV hogging up wall space in our tiny apartment, so we made do with watching movies on our laptop or iPad. We finally ponied up for the BenQ HT2050A, as a family Christmas gift in 2019. Little did we know just what a good investment it would prove to be over the coming year.

04 Aug 01:07

Welcome to the Entropocene

Back in 2019 there was a risk that the UK would exit the EU with no trade deal at all, and supply chains would be sufficiently disrupted that shop shelves would run empty etc.

So we built up a contingency stash in the room upstairs, mainly baby things: medicine, nappies, long-life milk, etc, then added tinned and dry goods like pasta and chopped tomatoes.

We didn’t need it. (My guess is that supermarkets and suppliers had assessed the risk and built up their warehouses, which stabilised those first few weeks.)

BUT our Brexit No Deal stash had a second life as a Covid Supermarkets Can’t Cope stash.

Online orders were rationed in the first lockdown in early 2020. Our existing accounts we used to get deliveries for our parents. Then for a few weeks we couldn’t get groceries – we dipped into the stash a few times (then kept it topped up). Handy.

I have been eying the remainder of the contingency stash. Time to wind it down? Maybe. Maybe not.

These days supermarket shelves run empty frequently enough that they’ve printed special boxes to fill the space. Post-Brexit problems with not enough delivery drivers? Or the “pingdemic” – a half million people are self-isolating right now because they’ve been pinged by the Covid contact tracing system. So the shops are all short-staffed. Or is it just that online grocery orders are being prioritised over actual shelves? (E-commerce has boomed in the UK, way more than the US.)

Then there are the flash floods in London from recent storms. I look at the closed roads and think, well clearly that’s not going to help.

I mean it’s multi-factor isn’t it.

One thing reduces resilience in the supply chain such that another thing knocks it out entirely.

And it’s global and it’s unpredictable. The Suez Canal shutdown led to garden gnome shortages in Whitminster. Hard to imagine that would have happened before a year of the system being stressed with Covid. (All the shipping containers are in the wrong places. The cost of a container on the Asia-Europe route is up 5x.)

All of which means I’m looking at my stash (after almost two years) and thinking maybe it has a third life as an Extreme Weather Event contingency larder.

I hadn’t expected that. I live in the UK, and we don’t have earthquakes or wildfires so I’ve never had to make up a Go Bag.

But honestly I look at the weather, here, and think of the ancient viruses being thawed out in the permafrost, a thousand miles away, and this is basically the rest of my life now isn’t it. Always keep a cache of dried pasta and garden gnomes in the back room, you never know.

The world is fragile.


Rod McLaren invented a word for it in his latest edition of the Co-op Digital newsletter, which is ostensibly about technology and groceries. But:

Every newsletter is now a climate change newsletter, because climate change is the landscape now. We now live in the “entropocene”, an era of larger, quicker, less predictable, non-linear change.

– Rod McLaren, Co-Op Digital Newsletter (29 July 2021)

The Entropocene. The new geological era of entropy.


It turn out McLaren’s Entropocene is a parallel coinage because of course it is – all experiences are shared global experiences now.

Here, for example, in an article also introducing this new word, is a strong plea to stop using the word Anthropocene to refer to this new epoch:

Have you ever felt the toxic touch of the word “Anthropocene”? If you haven’t, I could put it in a simple way. Considering that the near-collapsing state of our planet is due to the Anthropos in general means that we take the Inuits or the Jivaros for responsible of the situation, in the same way that our modern occidental civilization. This sounds absurd, since they are amongst the first victims of capitalistic greed, deforestation, and climate change. And that all in the name of a “universal mankind” (the Anthropos), a concept they never ask or stand for. In other words, one is mistaking the victims for the predators when using the word Anthropocene. And it all sounds like the last dirty joke of Western White Man, his Empires and his Capital.

– Symbiosphere, Goodbye Anthropocene, Hello Entropocene… (2019)

It is a great point.

Yes, the concept of the Anthropocene points out that humans wield global power and have global impact. When archaeologists a million years hence dig down, there will be a line of microplastics, radioactivity, and high atmospheric CO2, and they’ll point to the thin stratum and say, aha, the human era.

But as they say: not all humans.

Yes this is an era characterised by a general and accelerated process towards the maximal disorder leading to social and political dislocation - entropy - but Disaster Capitalism is not a universal phenomenon. It is incorrect to pin the Anthropocene on humankind at large. So let’s not bake it into the name.

Entropocene it is.

03 Aug 23:39

10 best ways to keep your iPhone secure

by Braden Newell

If there’s one selling point Apple wants you to associate with the iPhone, it’s privacy and security. Apple loves to champion that your iPhone knows a lot about you.

Therefore, it should be you and only you who can access your device’s data. After all, you may not remember where you were four Thursdays ago at 11:52 am, but your iPhone probably does.

Even if you have nothing to hide from a legal point of view, I’d bet you still wouldn’t want some stranger to be able to access your photos or text messages. This stance became very clear in 2016 when Apple’s CEO Tim Cook refused to create a “backdoor” to allow the FBI access to a seized iPhone 5c. In every OS release, Apple adds more privacy and security features to its devices, especially the iPhone.

Below are ten settings you should check to secure your iPhone better:

1. Use a complex passcode

While many of us likely already use passcodes on our devices, there are also people out there who don’t. Passcodes are the best first layer of defence to protect the private data on your iPhone. Apple offers four different passcode options; 4-digit, 6-digit, custom numeric, and custom alphanumeric. Using a 4-digit passcode was the standard for a long time and had a 1/10,000 chance of being cracked.

iOS Passcode

In iOS 9, Apple added a 6-digit passcode option which offers a 1/1,000,000 opportunity of being cracked. With custom numeric and custom alphanumeric passwords, the longer and more complex you make them, the more secure they will be. For example, I recommend making a sentence with 14 or more characters. According to security.org’s password strength checker, something like “I love my iPhone” would take three hundred billion years to crack.

Use a trusted password strength checker to ensure all of your passwords are secure.

To add a passcode to your iPhone:

  1. Launch Settings
  2. Tap Face ID & Passcode
  3. Tap Turn Passcode On
  4. Tap Passcode Options
  5. Select one of the options
  6. Type in your new passcode
  7. Tap Next
  8. Type in your new passcode again
  9. Tap Done

To change your existing passcode:

  1. Launch Settings
  2. Tap Face ID & Passcode
  3. Type in your passcode
  4. Tap Change Passcode
  5. Type in your passcode again
  6. Tap Passcode Options
  7. Select one of the options
  8. Type in your new passcode
  9. Tap Next
  10. Type in your new passcode again
  11. Tap Done

2. Require Attention for Face ID

Many of us use Face ID and probably don’t notice that our iPhone requires us to look directly at the device’s front camera to unlock. If your eyes were closed or covered when you raise your iPhone, it won’t unlock. This feature is called Require Attention for Face ID.

Requite attention setting Face ID

Require Attention for Face ID is used to protect you from someone attempting to unlock your phone while you’re asleep. Those with accessibility needs can toggle the setting off. While turning off this setting may seem more convenient, it also dramatically reduces your iPhone’s security.

To turn on Require Attention for Face ID:

  1. Launch Settings
  2. Tap Face ID & Passcode
  3. Type in your passcode
  4. Toggle Require Attention for Face ID on

3. Limit access while your device is locked

In the Face ID & Passcode section of your iPhone’s settings, there’s a list of items that you can toggle on or off to either grant or prevent access to information while your iPhone is locked. Most people have these items turned on for maximum convenience. For example, they may do things like swipe down and open the control center while their iPhone is locked. However, access to these items can make information on your device more accessible, such as asking Siri to make a phone call to someone in your contacts.

Settings you can enable or disable access to while your iPhone is locked include ‘Today View,’ ‘Notification’ Center,’ ‘Control Center,’ ‘Siri,’ ‘Reply with Message,’ ‘Home Control,’ ‘Wallet’ and ‘Return Missed Calls.’ The fewer of these you have enabled, the less likely someone may be able to gain access to private data on your iPhone without your passcode.

Below are the steps to disable these settings:

  1. Launch Settings
  2. Tap Face ID & Passcode
  3. Type in your passcode
  4. Scroll to the “allow access when locked” section
  5. Toggle off the items you would like to prevent access to while your iPhone is locked

4. Disable USB accessory access after one hour

Law enforcement and bad actors alike may attempt to unlock your iPhone by connecting it to computers via USB. A way to help prevent USB devices from communicating with your iPhone is by turning off USB Accessories. This setting requires you to enter your passcode every hour to permit your iPhone to speak with a USB device.

If your passcode hasn’t been entered in an hour, your iPhone will cut off all communication with the USB accessory. This iOS setting is displayed a little differently than most. While this setting is toggled on, you grant USB accessories near unlimited access to your iPhone. However, toggling USB Accessories off will limit USB connection time with your iPhone to one hour. Combine turning off this setting with a strong passcode, and you’ve essentially protected your phone from brute force attacks.

Disable USB accessories through the following steps:

  1. Launch Settings
  2. Tap Face ID & Passcode
  3. Type in your passcode
  4. Toggle USB Accessories off

5. Erase data after ten failed passcode attempts

This setting is not for the faint of heart, but it ensures your data never falls into the wrong hands. By turning on the Erase Data setting, your iPhone will erase itself after a passcode has been entered incorrectly ten consecutive times. Of course, make sure you have a backup or are willing to take on the risk. Sometimes a curious toddler or a joke gone wrong may leave your iPhone erased too.

Enable Erase Data by:

  1. Launch Settings
  2. Tap Face ID & Passcode
  3. Type in your passcode
  4. Toggle Erase Data on

6. Auto-Lock Time

Many users get annoyed when their iPhone dims and locks on them too quickly. However, they may not think about how faster auto-lock keeps their device more secure. A faster auto-lock means there is a smaller window of opportunity for someone to be able to access your iPhone when you aren’t paying attention.

Below are the steps to change your auto-lock speed:

  1. Launch Settings
  2. Tap Display & Brightness
  3. Tap Auto-Lock
  4. Select one of the options from the list

7. SIM Passcode

If someone has your iPhone, a passcode may keep them from getting access to the data on the device, but what about your phone number? A SIM passcode will prevent someone from taking the SIM card out of your iPhone and placing it in theirs. Your SIM card doesn’t house much in terms of personal data, but it does tell cellphone towers which device to direct phone calls and text messages.

“Entering a SIM passcode too many times incorrectly will lock the SIM.”

Someone may use your SIM card to impersonate you or to gain access to accounts with two-factor authentication. A SIM passcode locks your SIM card, so you have to enter the PIN to gain access to that phone number when entered into a new phone. If you use a password manager, make sure to note your new SIM passcode. Entering a SIM passcode too many times incorrectly will lock the SIM. If you’ve never used a SIM passcode before, contact your carrier to determine the default PIN for their SIM cards (i.e. the default PIN for Telus SIMs is 1234).

To add a PIN to your SIM, take the following steps:

  1. Launch Settings
  2. Tap Cellular
  3. Tap SIM PIN
  4. Toggle SIM PIN on
  5. Enter the previous or default SIM PIN (i.e. the default PIN for Telus SIMs is 1234)
  6. Tap Change PIN
  7. Enter in the old or default PIN
  8. Tap Next
  9. Type in your preferred PIN
  10. Tap Next
  11. Type in your preferred PIN again
  12. Tap Done

8. Automatic Software Updates

One of the best ways to protect any device from malicious actors is to ensure your iPhone remains updated with the latest version of its operating system to patch bugs and security vulnerabilities. Apple has tried to make this easy for people with two settings: download iOS updates and install iOS updates. These settings will attempt to download and install any new versions of iOS automatically overnight when your iPhone is connected to power and WiFi.

To turn on Automatic Software Updates, follow these steps:

  1. Launch Settings
  2. Tap General
  3. Tap Software Update
  4. Tap Automatic Updates
  5. Toggle Download iOS Updates and Install iOS Updates on

9. Automatic App Updates

Similar to the reasons updating iOS is essential, updating your apps helps protect you from possible security vulnerabilities and bugs patched by new app versions. Your iPhone has a setting called Automatic App Updates. Turning this setting on will update your apps to their latest version when your iPhone is connected to Wi-Fi. Turning on automatic app updates means you don’t have to check the App Store for pending app updates periodically.

iOS Automatic Updates

Here’s how to turn on automatic app updates:

  1. Launch Settings
  2. Tap App Store
  3. Toggle App Updates on

10. Find My

One of the best and most secure features of owning an Apple device is ‘Find My.’ There are three settings to Find My, all of which I recommend enabling on your iPhone. The first is Find My iPhone. This setting allows you to track, lock, or erase your iPhone from another Apple device with the Find My app installed or by visiting icloud.com/find. When Find My iPhone is enabled, it also prevents someone from setting your iPhone back up fresh if they’ve erased it via Finder or iTunes. When someone attempts to set up a device with Find My iPhone enabled, they are asked for the Apple ID and password last associated with the device.

The second recommended setting is the Find My network. Participating in the Find My Network allows your iPhone to send low-power Bluetooth singles to other Apple devices when your iPhone doesn’t have an internet connection or is turned off. Those low-power Bluetooth singles allow for other Apple devices to report your iPhone’s approximate location anonymously.

Lastly, there is Send Last Location. This setting will show your iPhone’s last confirmed location in the Find My app when the device cannot report a current location.

To enable the Find My settings:

  1. Launch Settings
  2. Tap your name at the very top
  3. Tap Find My
  4. Tap Find My iPhone
  5. Toggle Find My iPhone, Find My network, and Send Last Location to on

The post 10 best ways to keep your iPhone secure appeared first on MobileSyrup.

28 Jul 16:34

état de choc

by peter@rukavina.net (Peter Rukavina)

Whoever sent us an anonymous gift from état de choc: thank you; you are aces.

28 Jul 16:34

YouTubers are making a living on videos about Microsoft software

Jordan Novet, CNBC, Jul 27, 2021
Icon

The focus of this article is of course on whether people can make a profit making YouTube videos, but I'm more interested in the way we can increase access to learning resources with or without monetary gain. "People often turn to YouTube when they want to get a better understanding of Microsoft software, and while Microsoft has plenty of its own videos available on YouTube, they don’t always come up at the top of the site’s search results." That is how it should be; one of the major issues with Microsoft's help function is that you end up with help from Microsoft, which more often than not isn't very useful.

Web: [Direct Link] [This Post]
28 Jul 16:26

Working with Postgres types

by Jon Udell

In episode 2 of this series I noted that the languages in which I’m writing Postgres functions share a common type system. It took me a while to understand how types work in the context of Postgres functions that can return sets of records and can interact with tables and materialized views.

Here is a set-returning function.

create function notes_for_user_in_group(
  _userid text, 
  _groupid text)
returns setof annotation as $$
  begin
    return query 
      select * from annotation
      where userid = concat('acct:', _userid)
      and groupid = _groupid;
  end;
$$ language plpgsql;

In this case the type that governs the returned set has already been defined: it’s the schema for the annotation table.

Column Type
id uuid
created timestamp without time zone
updated timestamp without time zone
userid text
groupid text
text text
tags text[]
shared boolean
target_uri text
target_uri_normalized text
target_selectors jsonb
references uuid[]
extra jsonb
text_rendered text
document_id integer
deleted boolean

The function returns records matching a userid and groupid. I can now find the URLs of documents most recently annotated by me.

select
  target_uri
from notes_for_user_in_group('judell@hypothes.is', '__world__')
order by created desc
limit 3;

The Postgres response:

                 target_uri                  
---------------------------------------------
 https://news.ycombinator.com/item?id=20020501
 https://www.infoworld.com/article/2886828/github-for-the-rest-of-us.html
 https://web.hypothes.is/help/formatting-annotations-with-markdown/
 http://example.com                          
(3 rows)

You might wonder why the function’s parameters are prefixed with underscores. That’s because variables used in functions can conflict with names of columns in tables. Since none of our column names begin with underscore, it’s a handy differentiator. Suppose the function’s signature were instead:

create function notes_for_user_in_group(
  userid text, 
  groupid text)

Postgres would complain about a confict:

ERROR:  column reference "userid" is ambiguous
LINE 2:       where userid = concat('acct:', userid)
                    ^
DETAIL:  It could refer to either a PL/pgSQL variable or a table column.

The table has userid and groupid columns that conflict with their eponymous variables. So for functions that combine variables and database values I prefix variable names with underscore.

Set-returning functions can be called in any SQL SELECT context. In the example above that context is psql, Postgres’ powerful and multi-talented REPL (read-eval-print loop). For an example of a different context, let’s cache the function’s result set in a materialized view.

create materialized view public_notes_for_judell as (
  select
    *
  from notes_for_user_in_group('judell@hypothes.is', '__world__')
  order by created desc
) with data;

Postgres reports success by showing the new view’s record count.

SELECT 3972

The view’s type is implicitly annotation; its schema matches the one shown above; selecting target_uri from the view is equivalent to selecting target_uri from the setof annotation returned from the function notes_for_user_in_group.

select
  target_uri
from public_notes_for_judell
limit 3;

The Postgres response is the same as above.

                 target_uri                  
---------------------------------------------
 https://news.ycombinator.com/item?id=20020501
 https://www.infoworld.com/article/2886828/github-for-the-rest-of-us.html
 https://web.hypothes.is/help/formatting-annotations-with-markdown/
 http://example.com                          
(3 rows)

It shows up a lot faster though! Every time you select the function’s result set, the wrapped query has to run. For this particular example that can take a few seconds. It costs the same amount of time to create the view. But once that’s done you can select its contents in milliseconds.

Now let’s define a function that refines notes_for_user_in_group by reporting the count of notes for each annotated document.

create function annotated_docs_for_user_in_group(
  _userid text, 
  _groupid text)
returns table (
  count bigint,
  userid text,
  groupid text,
  url text
) as $$
  begin
    return query
      select
        count(n.*) as anno_count,
        n.userid,
        n.groupid,
        n.target_uri
      from notes_for_user_in_group(_userid, _groupid) n
      group by n.userid, n.groupid, n.target_uri                          
      order by anno_count desc;
  end;
$$ language plpgsql;

Instead of returning a setof some named type, this function returns an anonymous table. I’ve aliased the set-returning function call notes_for_user_in_group as n and used the alias to qualify the names of selected columns. That avoids another naming conflict. If you write userid instead of n.userid in the body of the function and then call it, Postgres again complains about a conflict.

ERROR:  column reference "userid" is ambiguous
LINE 3:         userid,
                ^
DETAIL:  It could refer to either a PL/pgSQL variable or a table column.

Here’s a sample call to our new function..

select 
  *
from annotated_docs_for_user_in_group(
  'judell',
  'hypothes.is',
  '__world__'
);

The result:

 count | userid             | groupid   | target_uri
-------+---------------------------------------------
   516 | judell@hypothes.is | __world__ | http://shakespeare.mit.edu/macbeth/full.html
    73 | judell@hypothes.is | __world__ | https://www.independent.co.uk/news/world/asia/india-floods-bangladesh-nepal-deaths-millions-homeless-latest-news-updates-a7919006.html
    51 | judell@hypothes.is | __world__ | https://www.usatoday.com/story/news/nation-now/2017/06/16/coconut-oil-isnt-healthy-its-never-been-healthy/402719001/

Now let’s create a view based on that function.

create materialized view url_counts_for_public_notes_by_judell as (
  select 
    *
  from annotated_docs_for_user_in_group(
    'judell@hypothes.is',
    '__world__'
  )
) with data;

Postgres says:

SELECT 1710

When you ask for the definition of that view using the \d command in psql:

\d url_counts_for_public_notes_by_judell

It responds with the same table definition used when creating the function.

 Column  |  Type  
---------+--------
 count   | bigint
 userid  | text
 groupid | text
 url     | text   

Behind the scenes Postgres has created this definition from the anonymous table returned by the function.

To revise the function so that it uses a named type, first create the type.

create type annotated_docs_for_user_in_group as (
  count bigint,
  userid text,
  groupid text,
  url text
);

Postgres reports success:

CREATE TYPE

Now we can use that named type in the function. Since we’re redefining the function, first drop it.

drop function annotated_docs_for_user_in_group;

Uh oh. Postgres is unhappy about that.

ERROR:  cannot drop function annotated_docs_for_user_in_group(text,text) because other objects depend on it
DETAIL:  materialized view url_counts_for_public_notes_by_judell depends on function annotated_docs_for_user_in_group(text,text)
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

A view that depends on a function must be recreated when the function’s signature changes. I’ll say more about this in a future episode on set-returning functions that dynamically cache their results in materialized views. For now, since the view we just created is a contrived throwaway, just drop it along with the function by using CASCADE as Postgres recommends.

drop function annotated_docs_for_user_in_group cascade;

Postgres says:

NOTICE:  drop cascades to materialized view url_counts_for_public_notes_by_judell
DROP FUNCTION

Now we can recreate a version of the function that returns setof annotated_docs_for_user_in_group instead of an anonymous table(...)

create function annotated_docs_for_user_in_group(
  _userid text, 
  _groupid text)
returns setof annotated_docs_for_user_in_group as $$
  begin
    return query
      select
        count(n.*) as anno_count,
        n.userid,
        n.groupid,
        n.target_uri
      from notes_for_user_in_group(_userid, _groupid) n
      group by n.userid, n.groupid, n.target_uri                          
      order by anno_count desc;
  end;
$$ language plpgsql;

The results are the same as above. So why do it this way? In many cases I don’t. It’s extra overhead to declare a type. And just as a view can depend on a function, a function can depend on a type. To see why you might not want such dependencies, suppose we want to also track the most recent note for each URL.

create type annotated_docs_for_user_in_group as (
  count bigint,
  userid text,
  groupid text,
  url text,
  most_recent_note timestamp
);

That won’t work.

ERROR:  type "annotated_docs_for_user_in_group" already exists

Dropping the type won’t work either.

ERROR:  cannot drop type annotated_docs_for_user_in_group because other objects depend on it                           
DETAIL:  function annotated_docs_for_user_in_group(text,text,text) depends on type annotated_docs_for_user_in_group    
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

To redefine the type you have to do a cascading drop and then recreate functions that depend on the type. If any of those views depend on dropped functions, the drop cascades to them as well and they also must be recreated. That’s why I often write functions that return table(...) rather than setof TYPE. In dynamic languages it’s convenient to work with untyped bags of values; I find the same to be true when writing functions in Postgres.

Sometimes, though, it’s useful to declare and use types. In my experience so far it makes most sense to do that in Postgres when you find yourself writing the same returns table(...) statement in several related functions. Let’s say we want a function that combines the results of annotated_docs_for_user_in_group for some set of users.

create function annotated_docs_for_users_in_group(_userids text[], _groupid text)
  returns setof annotated_docs_for_user_in_group as $$
    begin
      return query 
        with userids as (
          select unnest(_userids) as userid
        )
        select 
          a.*
        from userids u
        join annotated_docs_for_user_in_group(u.userid, _groupid) a
          on a.userid = concat('acct:', u.userid);
    end;
$$ language plpgsql;

This new function uses the SQL WITH clause to create a common table expression (CTE) that converts an inbound array of userids into a transient table-like object, named userids, with one userid per row. The new function’s wrapped SQL then joins that CTE to the set returned from annotated_docs_for_user_in_group and returns the joined result.

(You can alternatively do this in a more procedural way by creating a loop variable and marching through the array to accumulate results. Early on I used that approach but in the context of Postgres functions I’ve come to prefer the more purely SQL-like set-oriented style.)

Sharing a common type between the two functions makes them simpler to write and easier to read. More importantly it connects them to one another and to all views derived from them. If I do decide to add most_recent_note to the type, Postgres will require me to adjust all depending functions and views so things remain consistent. That can be a crucial guarantee, and as we’ll see in a future episode it’s a key enabler of an advanced caching mechanism.

1 https://blog.jonudell.net/2021/07/21/a-virtuous-cycle-for-analytics/
2 https://blog.jonudell.net/2021/07/24/pl-pgsql-versus-pl-python-heres-why-im-using-both-to-write-postgres-functions/
3 https://blog.jonudell.net/2021/07/27/working-with-postgres-types/
4 https://blog.jonudell.net/2021/08/05/the-tao-of-unicode-sparklines/
5 https://blog.jonudell.net/2021/08/13/pl-python-metaprogramming/
6 https://blog.jonudell.net/2021/08/15/postgres-and-json-finding-document-hotspots-part-1/
7 https://blog.jonudell.net/2021/08/19/postgres-set-returning-functions-that-self-memoize-as-materialized-views/
8 https://blog.jonudell.net/2021/08/21/postgres-functional-style/
9 https://blog.jonudell.net/2021/08/26/working-in-a-hybrid-metabase-postgres-code-base/
10 https://blog.jonudell.net/2021/08/28/working-with-interdependent-postgres-functions-and-materialized-views/
11 https://blog.jonudell.net/2021/09/05/metabase-as-a-lightweight-app-server/
12 https://blog.jonudell.net/2021/09/07/the-postgres-repl/

28 Jul 16:22

Memeflinger or influencer?

by Josh Bernoff

There’s a way to generate influence that bugs me. I call people who do this “memeflingers.” Here’s how it works. First, identify the memes that are spreading most widely on social media, especially if they include meaningless platitudes about behavior and careers. Maybe even hire people to track them down for you. Second, repost as … Continued

The post Memeflinger or influencer? appeared first on without bullshit.

28 Jul 16:19

Languages Infographic

by Caterina Fake
28 Jul 16:19

new cranks for the Haul a Day

by jnyyz

I started having an issue with my cargo bike where the chain would come off of the chainring when I pushed hard on the pedals. This was especially inconvenient when I would be doing something like a Toronto Bike Brigade delivery,

or hauling a 7 foot Ikea bookcase.

One thought that I had was that the chainring was getting pretty shark toothed. Time to replace the chainring. When you don’t have a pin wrench, you improvise.

Digging through my toolbox, I was pleased to find my old crank remover.

Interestingly enough, the wear on the chainring was most severe at 90° out of phase with the crank arms, i.e. pulling on the chain with the cranks in the horizontal position.

Here is where things went wrong. I had the took to prevent the chainring bolt nuts from turning

but much as I tried, I could not get 3 of the five chainring bolts undone. This is what multiple winters of salt does to a crankset.

Plan B: I happened to have a spare Alfine crankset with integral BB. Perfect since I noticed that my current BB had a bit of play.

Not having all the right tools to deal with the BB, I had master mechanic Geoffrey do the BB replacement and crankset installation.

Very nice.

As a bonus, this particular crankset has a double sided chain guard.

I can’t really complain. Today was ride #1200 on the Haul a Day, with over 12K km, so it was high time that I gave it a little TLC.

Also nice to spend some time with Geoffrey while not on a ghost bike ride.

Keep on trucking’ folks.

28 Jul 16:17

Nothing unveils its Ear (1) wireless earbuds with ANC

by Jonathan Lamont
Nothing's Ear (1) wireless earbuds

Nothing, a tech startup headed by OnePlus co-founder Carl Pei, finally announced its much-hyped ‘Ear (1)’ true wireless earbuds.

The earbuds arrive after months of teases and hype. The Ear (1) will go on sale starting August 17th across 45 countries, including Canada, priced at $99 / £99 / €99. Nothing’s earbuds feature a unique design with clear plastic and offer up to 5.7 hours of playback from the buds (34 hours total with the included charging case) with active noise-cancelling (ANC) turned off.

Turning on ANC drops the battery life to four hours (24 with the case). Users can charge the buds wirelessly with a Qi-compatible charging pad or over USB-C. The Ear (1) buds also use three microphones for noise-cancellation, a ‘transparency mode’ to let sound through and to reduce background noise when making a call.

As for sound, the buds sport an 11.6mm driver tuned by Swedish gadget maker Teenage Engineering. While it remains to be seen how the Ear (1) buds sound, Nothing says they’ve been tuned for “balanced bass, mid and treble performance.” Further, the Ear (1) buds use Bluetooth 5.2 for excellent connectivity.

Finally, the earbuds feature IPX4 water resistance, so they should be able to survive sweat and light splashes. For Android devices, the Ear (1) will support fast pairing.

Although the buds don’t go on sale until August 17th, Nothing will sell a limited batch on its website starting July 31st. You can check out the Ear (1) buds here and sign up for an email blast when they become available.

Image credit: Nothing

Source: Nothing

The post Nothing unveils its Ear (1) wireless earbuds with ANC appeared first on MobileSyrup.

28 Jul 16:17

200 Lime e-bikes now available to ride in Vancouver’s North Shore

by Karandeep Oberoi
Lime bike

Monday saw the launch of British Columbia’s first all-electric bike-sharing program in Metro Vancouver’s North Shore.

Lime, a global staple in shared electric vehicles, has expanded its service to include the city of North Vancouver, The District of North Vancouver, and The District of West Vancouver.

The short-term rental program began on Monday, with 200 e-bikes available at dozens of marked parking sites. With e-bikes that make climbing the North Shore’s hills an easy task, the goal is to provide residents and visitors with another carbon-free option for getting about.

“I’m proud to see this e-bike share program, the first of its kind in B.C., launch here on the North Shore with all three municipalities,” said City of North Vancouver Mayor Linda Buchanan in a news release.

Users may book a bike using the Lime app, pick it up at a predetermined spot, and drop it off at a different parking or drop-off spot. The rental cost is $1 to unlock the bike and 30 cents per minute to ride. Lime also provides monthly pass alternatives that lower the cost of each trip significantly. Additionally, users can also join Lime Prime for $7.99 per month, which waives the unlock charge and lets users book a bike for up to 30 minutes in advance.

The City of North Vancouver initially passed a policy in November 2020 to establish the e-bike share program. The District of North Vancouver followed suit in February 2021. Finally, the District of West Vancouver joined the program last month, enabling complete access across the North Shore.

The e-bike sharing service has begun its two-year test phase. The participating districts will collaborate with Lime to monitor and analyze the initiative during this time and make changes if necessary.

Image credit: Lime

Source: District of West Vancouver

The post 200 Lime e-bikes now available to ride in Vancouver’s North Shore appeared first on MobileSyrup.

28 Jul 16:16

Huawei P50 Pro rumoured to feature 300Hz touch sampling rate, 120Hz refresh rate

by Dean Daley

Tomorrow, Huawei will finally show off the P50 and the P50 Pro. Ahead of the devices’ official reveal, well-known leaker Ishan Agarwal (via MySmartPrice) has leaked the P50 Pro 4G’s full specifications.

The Pro should feature a 6.6-inch OLED display with a 2700 x 1228 pixel resolution, 120Hz refresh rate and a rather high 300Hz touch sampling rate. Moreover, the phone reportedly measures in at 158.8mm × 72.8mm × 8.5mm.

The handset will also feature a quad-camera setup with a 50-megapixel main shooter, with a 64-megapixel telephoto shooter with a 3.5x optical zoom and a 40-megapixel monochrome sensor and a 13-megapixel ultra-wide camera. On the front, the device reportedly features a 13-megapixel selfie shooter.

The leak indicates the handset includes a Kirin 9000 chipset with 8GB of RAM and 512GB of storage. Moreover, it packs a 4,360mAh battery and supports both 66W wired charging and 50W wireless charging with an in-display fingerprint scanner, stereo speakers and IP68 water and dust resistance.

Not a lot is known about the P50 Pro Plus, but the regular P50 is rumoured to feature a 6.3-inch screen, a hole punch display, alongside a weird pill shape camera setup.

The Huawei P50 Pro Plus, Huawei P50 Pro and Huawei P50 and more will launch on July 29th at 7:30am ET. It’s unclear if Huawei will launch these devices in Canada as they will continue to lack Google Play Services.

Image Credit: OnLeaks

Source: Ishan Agarwal 

The post Huawei P50 Pro rumoured to feature 300Hz touch sampling rate, 120Hz refresh rate appeared first on MobileSyrup.

28 Jul 14:35

2021-07-27 General

by Ducky

Mitigation Measures

This article says that the Canadian border guards are close to striking.

Supply

This article says that Canada now has enough vaccine for two doses for every person over 12.

Vaccines

This study found way more of a certain kind of impurities in AZ than in J&J, and those impurities sure look like they would lead to blood clots.

Recommended Reading

This article talks about breakthrough cases.


This tweet thread is a great review of why the vaccines don’t impact fertility.

28 Jul 14:34

Huffy Radiobike (1955)

by Ronny
mkalus shared this story from Das Kraftfuttermischwerk.

b'\n

Sieht von weitem aus wie ein aktuelles E-Bike, aber das Radiobike der Firma Huffy aus dem Jahr 1955 ist genau das nicht. Vielmehr war es ein Fahrrad mit einem integrierten Radio – und irgendwie finde ich diese Idee doch recht charmant. Mehr dazu beim Online Bicycle Museum.

\n

Geiles Lampe vorne auch.

\n


\n(Direktlink, via Nag on the Lake)

'
28 Jul 14:22

Ich habe ein Messaging-Problem

by Volker Weber

Jeder hat ein Messaging-Problem. Email war easy. Ein Programm, ein Postkorb, alle Nachrichten. Dann kamen ICQ, AOL, Yahoo, und auf einmal wollte jeder seinen eigenen Garten beackern. Es gibt Client-Software, die das alles wieder integriert, aber das ist nur ein Pflaster auf’s Holzbein.

Aktuell habe ich ein RCS-Problem. Ich bekomme keine SMS mehr von Android-Handys.

RCS ist das, was sich die Carrier als Nachfolger des Goldesels SMS ausgedacht haben. Und es war ein totaler Flop. Dann hat sich Google der Sache angenommen und nach gefühlt drei Dutzend anderer Initiativen selbst RCS noch mal ausgerollt.

Was war mein Fehler? Ich habe meine eigene SIM in ein Android-Handy gesteckt und das hat mich fix beim Telekom-RCS angemeldet. Google hat eine Seite, wo man Googles RCS ausschalten kann, aber das geht bei mir nicht. “Contact your carrier”. Telekom ist nutzlos. “Sie müssen das in dem Android-Handy erst ausschalten”. Habe ich. Trotzdem kriege ich keine SMS mehr von Android. Habe auch mal “Message+” von Telekom installiert, dort aktiviert und wieder deaktiviert.

Wie einfach ist das doch beim iPhone. Da gibt es iMessage. Geht mit allen Apple-Nutzern. Und verschickt zuverlässig SMS, wenn die Zielnummer nicht im iMessage angemeldet ist.

Das Problem ist weitverbreitet und wahrscheinlich weißt Du nicht mal, dass es existiert.