Shared posts

30 Mar 17:06

I am not a robot

by russell davies

When I first thought about doing Do Interesting I assumed it'd be easy. I've spent a long time thinking about this stuff. There's the blog post from way back when, there are the conferences, there've been occasional workshops. I own the twitter account. For a while when you typed 'how to be interesting' into google you got me. And Oliver Burkeman once said I was interesting..""Start a blog," the designer and blogger Russell Davies recommends, but as experience shows, only interesting people – Davies included – start interesting blogs."

But then I got worried. This space - as a tech consultant might say - has commodified. The internet is full of advice about how to do all this. Be more productive/creative/imaginative in that kind of influencey, guru-y, sort-of-useful, sort-of-soul-destroying way.

I love Morning Pages. It's a lovely and useful idea. When Morning Pages becomes a lifestyle app subscription model notecards thing something goes wrong. I didn't want to write that kind of book. And even if I'd wanted to, it's too late.

So I thought I should get help. If I was rewriting that original blogpost now I'd instantly add 'find people you love to work with'. The BIGGEST lie about sort-of-creative work is that you do any of it on your own. You don't. It's always a collaboration. Even if just with your eventual audience or with Past and Future Yous.

I won't tell you about the people I've found yet because I've not asked their permission. But one of them (Ben) immediately proved my point by doing a genius thing. He typed this prompt into ChatGPT:

Write me a short blog post, 500 words, on 10 ways to be interesting.”

ChatGPT wrote this:

Being interesting is an important quality to possess. It can make conversations more engaging, help you stand out in a crowd, and even make you more attractive to others. Here are 10 ways to be more interesting:

  1. Be curious. Ask questions, seek out new experiences, and learn about a wide variety of topics. Being curious shows that you are engaged with the world around you and that you have a thirst for knowledge.
  2. Have a passion. Whether it's a hobby, a sport, or a cause that you care about, having a passion can make you more interesting. It gives you something to talk about and share with others, and it shows that you have depth and complexity as a person.
  3. Be adventurous. Try new things, go to new places, and push yourself outside of your comfort zone. Being adventurous shows that you are brave and willing to take risks, which can be very interesting to others.
  4. Be creative. Think outside the box, come up with new ideas, and express yourself in unique ways. Being creative shows that you have a fertile imagination and that you are not afraid to be different.
  5. Be a good listener. Listen carefully to what others have to say, ask follow-up questions, and show that you are genuinely interested in their thoughts and experiences. Being a good listener shows that you are considerate and empathetic, which are attractive qualities.
  6. Be confident. Believe in yourself and your abilities, and don't be afraid to speak up and share your opinions. Being confident shows that you are self-assured and comfortable in your own skin, which can be very interesting to others.
  7. Be open-minded. Be willing to consider different perspectives, learn from others, and change your mind when new information becomes available. Being open-minded shows that you are intellectually curious and flexible, which can be very interesting.
  8. Be well-informed. Stay up-to-date on current events, know a little bit about a lot of different subjects, and be able to hold your own in a conversation. Being well-informed shows that you are knowledgeable and engaged with the world, which can make you more interesting.
  9. Be a good storyteller. Share interesting stories about your life, your travels, or your experiences, and tell them in a way that is engaging and entertaining. Being a good storyteller shows that you have a vivid imagination and the ability to captivate an audience, which can make you very interesting.

It's OK, right? It's not very interesting or useful but it's a pretty good summary of the internet consensus about this stuff.

(I think for the book we'll have to do a shorter version. It's hard to read when it's this long. Like a Medium post.)

What was more alarming is the tone. It's quite like I write. It's Internet Modern. Short sentences. Plain. Be this. Do that. That was chastening. That made me even more determined to get other people involved and to make the book more various, more odd and more (of course) interesting.

I think we're getting there but it's an interesting needle to thread.

I will post extracts and Work In Progress for your perusal.

  

12 Feb 18:12

2023-01-26 BC

by Ducky

The statistics show really good news! While I wouldn’t say that the situation is good right now, it is better than it has been in a long time. (Assuming that the province hasn’t f’ed with the data.)

  • COVID-19 hospitalizations are almost as low as they were pre-Omicron.
  • Non-COVID respiratory diseases are also way down (although not as low as they were in October for adults or September for kids).
  • Emergency Department wait times (as determined by my totally unscientific “occasionally look at the BC ED wait times page”) are way down.

Entertainment

A friend alerted me that Vancouver’s Orpheum Theatre has amazing ventilation. This pre-pandemic article and this post-pandemic article both confirm that! (But this Twitter thread says that it’s not so good in the balcony.) So if you really want to get out and about, go to the Orpheum!

Statistics

As of today, the BC CDC weekly report said that in the week ending on 21 Jan there were: +408 confirmed cases, +104 hospital admissions, +19 ICU admissions, +27 all-cause deaths.

As of today, the weekly report said that the previous week (data through 14 Jan) there were: +560 confirmed cases, +173 hospital admissions, +27 ICU admissions, +48 all-cause deaths.

Last week, the BC CDC weekly report said that in the week ending on 14 Jan there were: +560 confirmed cases, +142 hospital admissions, +24 ICU admissions, +27 all-cause deaths.

Last week, the weekly report said that the previous week (data through 7 Jan) there were: +661 confirmed cases, +195 hospital admissions, +37 ICU admissions, +42 all-cause deaths.

The BC CDC weekly report says that there are 228 in hospital / 22 in ICU as of 26 Jan 2023.

Transit

This article says that Translink journeys are still down about 30% from pre-pandemic levels.

I would like to note that various surveys say that about 30% of people are still worried about COVID. Hmmm.

Assholes

This story tells of a high school teacher who left his classroom unattended in northern BC to disrupt a vaccine clinic instead. (He got suspended.)

Charts

From the BC CDC Situation Report page as of 26 Jan (with data through 8 Jan):


From the BC CDC VoC report of 26 Jan (covering data through 8 Jan) :


From the BC CDC Vaccination Coverage report as of 26 Jan (with data through 22 Jan):


03 Feb 03:43

peterparkcr:Did you really think I was going to give you that...















peterparkcr:

Did you really think I was going to give you that list? Before you die, I want you to get this through that thick, primitive skull. I never worked for you. You worked for me. Every false intel I gave you, a rip in the iron curtain. Every piece of intel you gave me, a bullet in my fucking gun. I want my life back.

CHARLIZE THERON as LORRAINE BROUGHTON
ATOMIC BLONDE
2017 | dir. David Leitch

03 Feb 03:43

—Why?



Why?

03 Feb 03:38

Level Up to Audio Hijack 4.1

by Paul Kafasis

When we shipped Audio Hijack 4.0 last year, we also had a roadmap for further releases containing additional features and enhancements. Today, we’re thrilled to show off the first of those releases: Audio Hijack 4.1. It’s available now as a free update for all Audio Hijack 4 users, and it contains an astonishing 53 enhancements. Read on for details or just click to download immediately.

The Overhauled Session List (And Global Window)

The updated Session List

Audio Hijack automatically saves your sessions for re-use, displaying them in its Session List window. That window has now been greatly enhanced.

  • Customizable Columns: Now you can customize the exact columns shown in the Session List, by clicking the ||| view options button.

  • Optional New Columns: Audio Hijack now has columns for Recordings (A count of recordings found in each session) and Timers (A count of timers in each session), as well as a new stand-alone Meters column.

  • Adjustable Column Widths: You can now change the width of any column in the Session List. Most notably, the Meters column can be resized between 5 and 30 bars wide.

  • More Sorting Options: It’s now possible to sort based on additional columns, not just the session name.

The Session List now looks and acts more like a standard Finder window in List view, and that’s very nice.

Sessions are also found in Audio Hijack’s global window, which lives in the menu bar to provide access even when the app is in the background:

Audio Hijack 4.1’s updated Global Window

This window has also seen substantial updates. Like the Session List, it behaves more like a Finder window, with new columns and enhanced sorting. As well, when it’s detached, the visable columns can now be customized and their widths can be adjusted.

More Powerful System Audio Source

The System Audio input block has always allowed you to capture all audio playing on your Mac, but now it’s much more customizable.

The updated System Audio popover

The new controls allow you to exclude specific sources manually, to capture “All system audio except X”. In addition, you now have the option to include alert sounds, like notification dings and error beeps. With this update, System Audio is more powerful than ever.

Audio Hijack Gets Smaller

Many users, especially podcasters, wish to have Audio Hijack recording in the background while other apps are in use. We’ve made some changes to make this work better for you. First up, session windows can now be shrunk way, way down to a much smaller minimum size. The Session meters are also now tied to the window width, and will disappear at the narrowest widths:

A minimum size session window in Audio HIjack 4.1

Of course, thanks to Audio Hijack’s optionally floating popovers, you don’t have to leave your session visible at all. The Recorder popover can be collapsed to a very small size, as seen here:

Audio Hijack’s Recorder popover, pinned for global access

Pin it for easy reference, so you can see your recording no matter what app you have in the foreground.

Interface Refinements

There are many other interface refinements to be found in Audio Hijack 4.1. Control-click in the Session List to access the new contextual menu, allowing for fast duplicating, exporting, and deletion. When playing a recording in a session’s Recordings tab, click the right time readout to see the track’s remaining time count down. The delete button in the Session List window is now helpfully labeled “Delete Session”, for improved clarity.

And last but certainly not least, lists have been improved throughout the application. You might not even notice most of these changes, but they’ll make the app feel and work better.

Additional New Features

The new features don’t stop there. We’ve also added:

Standard Audio Unit Presets: Audio Hijack now saves and reads standard Audio Unit presets, meaning they can be read by other applications which support Audio Units, including our own app SoundSource.

Recording Inspector Updates: The Recording Inspector window has been improved, with the ability to rename files without needing to go to the Finder, new time readouts, new status indicators for active recordings, and some useful reorganization.

Scripting Enhancements: Following useful feedback from scripters, we’ve extended scripting support to include renaming, moving, and setting tags on recorded files. Deleted scripts are also now better handled by automations, the read-only nature of built-in scripts has been made more obvious, and both logging and errors from scripts were improved as well.

Give the release notes for 4.1 a read to learn even more.

Bugs Be Gone

We always want our latest version to be our greatest version, and part of that is whittling down the number of known issues. In addition to enhancements, we also took time to eliminate over two dozen bugs and rough edges. Among other fixes, the “Undo” function now works more smoothly, several rare crashes have been eliminated, and small visual glitches have been corrected.

Audio Hijack 4.1 Is Available Now

Audio Hijack 4.1 is a free update for all users of version 4. To download it, just select “Check for Updates” from the “Audio Hijack” menu.

If you’re an Audio Hijack 3 user who hasn’t yet moved up to version 4, you can still do so at the heavily discounted upgrade price of just $29. Get started on the “What’s New in Audio Hijack 4” page.

And if you’ve made it this far, but you’re entirely new to Audio Hijack? Click to learn more about the Mac’s premier audio recording tool, and download the free trial.

03 Feb 03:37

Images considered harmful (sometimes)

by Jon Udell

The Mastodon dashboards I’ve been developing and describing in this series are backed by a Steampipe plugin that translates SQL queries to Mastodon API calls. Like all Steampipe plugins you can use this one to run those queries in all sorts of ways: from psql or another Postgres CLI (perhaps via cron, perhaps in a CI/CD pipeline); from Metabase or Grafana or any Postgres-compatible BI tool; from Python or JavaScript or any programming language. The Steampipe core is a versatile software component that you can plug into just about any environment.

There’s also, of course, Steampipe’s dashboards as code approach which powers the alternate Mastodon UX that I’ve been exploring in this series. You can think of this dashboarding tool as a primitive web browser with a freakish talent for querying Postgres and weaving SQL results into widgets such as infocards, input controls, charts, tables, and relationship graphs. You compose widgets using HCL (Hashicorp Configuration Language) instead of HTML, arrange them using basic layout syntax, and view them by connecting your browser to the local Steampipe dashboard server or to cloud.steampipe.io.

The alternate Mastodon UX built this way was aptly described (thanks again Greg Wilson!) as A Bloomberg terminal for Mastodon. As a reminder, the stock Mastodon web client looks like this.

And the pages served by the Mastodon dashboards look like this.

I can scan the latter view far more effectively.

Now, I’ve been trying out a bunch of alternate Mastodon clients lately. I love Ivory on my phone, and Elk in the browser, and I use them when I want an experience that feels social-media-ish. But I don’t use Ivory or Elk or Toot! or the stock Mastodon web clients (browser, phone) when I want an experience that feels RSS-reader-ish.

For some information landscapes I want to unfold a big map, spread it out, and scan for points of interest. Social media is that kind of landscape, RSS readers were the first way I surveyed it effectively, and these Mastodon dashboards are becoming my new way.

When I compare those two screenshots though, it’s not just the density of the latter that I notice, but also the absence of pictures. At first I fretted about that. Could the dashboard pages render full-strength HTML? Perhaps they will, and there are a few different ways that could happen, but meanwhile I’ve come to embrace the text-only constraint. When I’ve got my map unfolded, and I’m scanning my home timeline or my lists for things to click into, images can be a distraction. I wouldn’t have chosen to omit them, but I find that their absence enables me to focus very effectively on who is speaking, and what they are saying or boosting.

There is also, of course, the graphical view afforded by relationship graphs. These feel very map-like in the way they reveal clusters of people interacting with one another. I’m finding them more useful than anticipated.

But the text that I read in these dashboards is image-free for now. And I think it’s having a calming effect. There are plenty of times when I want images, don’t get me wrong, and that’s partly why I use a mix of conventional Mastodon clients. But there are times when I want to dial down the clutter, just like there are times when I switch my phone to monochrome. Two things can be true: The pictures we share with one another are a source of joy, and they are sensory overload. I’ll make them optional here when I can, and would like to have the option to use all social media interfaces in text mode.


1 https://blog.jonudell.net/2022/11/28/autonomy-packet-size-friction-fanout-and-velocity/
2 https://blog.jonudell.net/2022/12/06/mastodon-steampipe-and-rss/
3 https://blog.jonudell.net/2022/12/10/browsing-the-fediverse/
4 https://blog.jonudell.net/2022/12/17/a-bloomberg-terminal-for-mastodon/
5 https://blog.jonudell.net/2022/12/19/create-your-own-mastodon-ux/
6 https://blog.jonudell.net/2022/12/22/lists-and-people-on-mastodon/
7 https://blog.jonudell.net/2022/12/29/how-many-people-in-my-mastodon-feed-also-tweeted-today/
8 https://blog.jonudell.net/2022/12/31/instance-qualified-mastodon-urls/
9 https://blog.jonudell.net/2023/01/16/mastodon-relationship-graphs/
10 https://blog.jonudell.net/2023/01/21/working-with-mastodon-lists/
11 https://blog.jonudell.net/2023/01/26/images-considered-harmful-sometimes/
12 https://blog.jonudell.net/2023/02/02/mapping-the-wider-fediverse/
13 https://blog.jonudell.net/2023/02/06/protocols-apis-and-conventions/
14 https://blog.jonudell.net/2023/02/14/news-in-the-fediverse/
15 https://blog.jonudell.net/2023/02/26/mapping-people-and-tags-on-mastodon/
16 https://blog.jonudell.net/2023/03/07/visualizing-mastodon-server-moderation/
17 https://blog.jonudell.net/2023/03/14/mastodon-timelines-for-teams/
18 https://blog.jonudell.net/2023/04/03/the-mastodon-plugin-is-now-available-on-the-steampipe-hub/
19 https://blog.jonudell.net/2023/04/11/migrating-mastodon-lists/
20 https://blog.jonudell.net/2023/05/24/when-the-rubber-duck-talks-back/

03 Feb 03:34

Manual removal of harmful text to train AI models

by Nathan Yau

AI training data comes from the internet, and as we know but maybe forget sometimes, there are harmful areas that are terrible for people. For Time, Billy Perrigo reports on how OpenAI outsourced a firm to label such data, which required people to read disturbing text:

To build that safety system, OpenAI took a leaf out of the playbook of social media companies like Facebook, who had already shown it was possible to build AIs that could detect toxic language like hate speech to help remove it from their platforms. The premise was simple: feed an AI with labeled examples of violence, hate speech, and sexual abuse, and that tool could learn to detect those forms of toxicity in the wild. That detector would be built into ChatGPT to check whether it was echoing the toxicity of its training data, and filter it out before it ever reached the user. It could also help scrub toxic text from the training datasets of future AI models.

To get those labels, OpenAI sent tens of thousands of snippets of text to an outsourcing firm in Kenya, beginning in November 2021. Much of that text appeared to have been pulled from the darkest recesses of the internet.

Tags: AI, cleaning, ethics, OpenAI, Sama

03 Feb 03:34

Differing approaches between SpaceX and NASA to sending rockets to the moon

by Nathan Yau

For The Washington Post, William Neff, Aaron Steckelberg, and Christian Davenport show the contrast between NASA and SpaceX using a scrolly tour through 3-D rocket models.

Tags: 3-d, moon, NASA, space, SpaceX, Washington Post

31 Jan 07:12

The Page With No Code

The Page With No Code

A fun demo by Dan Q, who created a web page with no HTML at all - but in Firefox it still renders content, thanks to a data URI base64 encoded stylesheet served in a link: header that uses html::before, html::after, body::before and body::after with content: properties to serve the content. It even has a background image, encoded as a base64 SVG nested inside another data URI.

Via I decoded it in this Gist

31 Jan 07:12

Quoting Murray Shanahan

It is very important to bear in mind that this is what large language models really do. Suppose we give an LLM the prompt “The first person to walk on the Moon was ”, and suppose it responds with “Neil Armstrong”. What are we really asking here? In an important sense, we are not really asking who was the first person to walk on the Moon. What we are really asking the model is the following question: Given the statistical distribution of words in the vast public corpus of (English) text, what words are most likely to follow the sequence “The first person to walk on the Moon was ”? A good reply to this question is “Neil Armstrong”.

Murray Shanahan

31 Jan 07:12

Quoting Riley Goodside

I think prompt engineering can be divided into “context engineering”, selecting and preparing relevant context for a task, and “prompt programming”, writing clear instructions. For an LLM search application like Perplexity, both matter a lot, but only the final, presentation-oriented stage of the latter is vulnerable to being echoed.

Riley Goodside

31 Jan 06:48

Python Sandbox in Web Assembly

Python Sandbox in Web Assembly

Jim Kring responded to my questions on Mastodon about running Python in a WASM sandbox by building this repo, which demonstrates using wasmer-python to run a build of Python 3.6 compiled to WebAssembly, complete with protected access to a sandbox directory.

Via @jimkring

31 Jan 06:48

Quoting Ben Johnson

[On SQLite for production concurrent writes] In general, WAL mode “just works” as Simon said. You just need to make sure you don’t have long running write transactions, although those are somewhat problematic in any database system. Don’t do stuff like starting a write txn and then calling a remote API and then committing. That’ll kill your write throughout.

Ben Johnson

31 Jan 06:48

Quoting Kellan Elliott-McCrea

Large teams spend more time dealing with coordination and are more likely to reach for architecture and abstractions that they hope will reduce coordination costs, aka if I architect this well enough I don’t have to speak to my colleagues. Microservices, event buses, and schema free databases are all examples of attempts to architect our way around coordination. A decade in we’ve learned that these patterns raise the cost of reasoning about a system, during onboarding, during design, and during incidents and outages.

Kellan Elliott-McCrea

30 Jan 03:01

Objects

This is part of a series on Native AOT.
Previous -- Top -- Next


So far, our examples have been very simplistic, using only integer types. Native AOT won't be very useful if we can never use objects.

And we can. We just need to express them in terms of the conventions of C.

Actually, the techniques for dealing with .NET objects in unmanaged code are not new. We've had good interop capabilities much longer than we've had Native AOT. The primary way to pass an object reference to unmanaged code is a GCHandle, and it first appeared in .NET Framework about 20 years ago.

If you are already familiar with GCHandle, please bear with me as I explain things from first principles in the context of Native AOT.

In many languages, memory is managed manually. If you need a bit of memory, you have to ask for it, and when you are done, you have to release it. In C, the standard library functions for this are called malloc and free. The need to carefully manage memory has been the source of countless bugs.

The memory for .NET objects is managed automatically by a Garbage Collector (GC). When you construct an object, memory is allocated, but you don't have to worry about explicitly releasing it. The .NET runtime keeps track of things for you, and when a block of memory is no longer being used, it is classified as "garbage" and freed.

This works because .NET knows about all objects. But if you want to store an object reference somewhere that .NET cannot see, then the GC doesn't know about that reference, so it might decide the object is garbage, and your reference would become invalid.

This is the problem a GCHandle is designed to solve. We can create a GCHandle for any object, and when we do so, we are telling the GC that "as long as this handle exists, the object is not garbage". The GCHandle can be passed into unmanaged code and stored in unmanaged memory.

The following Native AOT function returns an object (a string):

[UnmanagedCallersOnly(EntryPoint = "get_hello_string")]
public static IntPtr GetHelloString()
{
    string s = "Hello World";
    GCHandle h = GCHandle.Alloc(s);
    return GCHandle.ToIntPtr(h);
}
  • Start with a string value.

  • Construct a GCHandle for that string using GCHandle.Alloc().

  • Convert the GCHandle to an integer representation using GCHandle.ToIntPtr().

  • Because the string variable is local to the function, it would become garbage when the function returns, but the GCHandle prevents that.

An IntPtr is an integer that is the same size as a pointer. On most modern systems, that'll be 64 bits. On 32-bit systems, pointers are 32 bits wide, so IntPtr is as well.

In any case, an IntPtr is an integer, so we can return it across the Native AOT boundary, where it can be used by unmanaged code in whatever way we like.

Well, actually, the unmanaged code can't do much with it at all. The IntPtr is "opaque". It's probably the numerical address of a block of memory, but it doesn't have to be, and even if it is, we're not supposed to modify that memory or even look at it.

The only thing we can do with our IntPtr is give it back to the .NET code and ask it to do something. But that opens lots of possibilities.

Here's a Native AOT function that retrieves the length of a string:

[UnmanagedCallersOnly(EntryPoint = "get_string_length")]
public static int GetStringLength(IntPtr v)
{
    GCHandle h = GCHandle.FromIntPtr(v);
    object ob = h.Target;
    string s = (string) ob;
    int len = s.Length;
    return len;
}

This is the typical pattern when we have an object handle in unmanaged code and we pass it back to .NET and ask it to do something.

  • Start with the IntPtr

  • Convert it back to a GCHandle with GCHandle.FromIntPtr

  • Retrieve the underlying object with the Target property of the GCHandle

  • Cast the object to the type we expect it to be

  • Do something

So far, we've seen one code snippet that converts an object to an IntPtr, and one code snippet that converts an IntPtr back to an object. But it's quite common to need both in the same function. Here's a Native AOT function that accepts a string and returns another string made by calling String.Replace().

[UnmanagedCallersOnly(EntryPoint = "banish_letter_l")]
public static IntPtr BanishLetterL(IntPtr v)
{
    var s = (string) GCHandle.FromIntPtr(v).Target;
    var s2 = s.Replace("l", "NOT");
    return GCHandle.ToIntPtr(GCHandle.Alloc(s2));
}

It is important to remember that every GCHandle must be released. So, if we're going to return objects from Native AOT functions, we must also provide something like the following:

[UnmanagedCallersOnly(EntryPoint = "free_object_handle")]
public static void FreeObjectHandle(IntPtr v)
{
    GCHandle h = GCHandle.FromIntPtr(v);
    h.Free();
}

The GCHandle concept is a way of bridging the gap between the automatic memory management of .NET and the world where memory is managed manually. Like most any other form of manual memory management, GCHandle is very unforgiving. If we don't release a handle, the object will never be freed, and we get a memory leak. If we release a handle more than once, or if we release a handle that does not exist, we are likely to cause memory corruption.

Finally, the C++ code below shows an example of how to call the functions shown above.

#include <cstdint>
#include <stdio.h>

extern "C" uintptr_t get_hello_string();
extern "C" int32_t get_string_length(uintptr_t);
extern "C" uintptr_t banish_letter_l(uintptr_t);
extern "C" void free_object_handle(uintptr_t);

int main()
{
    // the original string is "Hello World"
    uintptr_t s1 = get_hello_string();

    // the length of the original string is 11
    int32_t len1 = get_string_length(s1);
    printf("%d\n", len1);

    // the new string should be "HeNOTNOTo WorNOTd"
    uintptr_t s2 = banish_letter_l(s1);

    // the length of the new string is now 17
    int32_t len2 = get_string_length(s2);
    printf("%d\n", len2);

    // need to release both string objects
    free_object_handle(s1);
    free_object_handle(s2);

    return 0;
}

Two final thoughts about the code sample for this chapter:

  • To keep things focused, I'm still giving no attention to proper error handling, but that topic needs to be discussed.

  • So far, all the samples have been shown on Windows, even though they are inherently cross-platform. For the sake of mixing things up, this one is configured for Linux.


The code for this blog entry is available at:

https://github.com/ericsink/native-aot-samples/tree/main/hello_string

30 Jan 03:00

Quamina v1.0.0

Today I hit the “release” button on v1.0.0 of Quamina (introduction here), a fast open-source pattern-matching library in Go. Gotta keep doing some coding to keep me honest! The purpose of today’s piece is to provide a snapshot status report and record a few technology gripes just to get them off my chest; sharing is caring.

I built Quamina v0.1.0; since then, it’s had help from others. Thanks especially to Jamie, Micha, and Yosi. I peeked back in history and the first project check-in was January 24, 2022, so that’s a year and a day from idea to stability. Too slow! I’d be mad if Quamina weren’t a hobby. People who are interested in Event-Driven software and/or high-performance Go might find a trip through my Quamina Diary posts instructive.

What does “v1.0.0” mean?

That we think it’s well-enough tested, that there’s enough there to be useful, and that we promise to change the APIs only additively.

Recent news

The biggest Quamina-related news was AWS’s release of AWS Event Ruler (“Ruler” for short), a similar event-filtering library written in Java that I bootstrapped while at AWS. Thanks to Usman and Shawn and especially Rishi for getting the open-sourcing done; I suspect this will end up being heavily used in the community.

The intent is that Java and Quamina should be compatible. At the moment, Ruler supports more pattern flavors, so Quamina needs to catch up. On the other hand, Quamina is (at least on a few common Patterns) quite a bit faster.

Checklist

Here are the things we did to make Quamina ready for v1.0.0:

  • Yosi made Quamina much smarter about not looking at parts of events that can’t match any Patterns. You don’t get speedups for every Pattern combination, but you often get dramatic results.

  • Micha did a mountain of work getting our CI/CD sorted out, fighting stupid GitHub problems, keeping me from doing stupid Git things and helping me recover when I did them anyhow.

    Behind the BigCo firewall, I’d never taken a serious look at GitHub’s CI/CD/release tooling — it’d be fair to say I’ve been a bit behind the times on that stuff — so this was super-educational for me.

  • Micha and I figured out how to give Quamina a vanity-domain home, so Quamina’s import is now quamina.net/go/quamina. This is promoted as a best practice and most people are too polite to clarify that it’s a declaration of independence from GitHub, in case they go sour.

    Thanks also to my wife Lauren for setting up quamina.net on her basic hosting provider.

  • I adapted a couple of Ruler’s unit tests; useful for making sure we’re compatible, for comparing performance, and one of them even snagged an un-caught bug.

  • I made a pass over the code, killed a bunch of TODOs and bad comment grammar, and wired in a couple easy optimizations.

Did I mention “fast”?

All this whittling away and in particular Yosi’s work now have Quamina processing certain common event-matching tasks at way over 1.5 million Events/sec on my mouldy old Intel MacBook Pro. Yow!

Next steps

The next wave of work is mostly straightforward: Making Quamina more Ruler-compatible by adding lots of new patterns like monocase matching, numeric expressions, and eventually full wild-carding.

Also, there’s a lingering bug where if you add too many of Quamina’s “shellstyle” Patterns, the size of the finite automaton explodes in a stupid way — it still works, just burns a lot of memory — that annoys the hell out of me and will be hard to debug. But I will.

Gripe: GitHub commit signing

What a great idea! You can get people to sign their commits with a public key they upload, which makes paranoids like me happy. Then you can turn on branch-protection to allow only signed commits.

But in practice, it’s pretty useless, because the CI bots like Dependabot don’t sign commits. GitHub doesn’t even sign when you ask it to bring a slightly-out-of-date PR into sync with the current repo state. Blecch.

Gripe: Git generally

In all those years at Google and Amazon, I used git but both places wrapped it in so much automation that you never really needed anything more than add, commit, and push; damn few options required on any of them. Being generally lazy, I never bothered to learn more than the bare minimum.

Out there in the wilder world of GitHub, you have to know a whole lot more and, while I admire Git’s power, flexibility, and performance, I have to say I loathe the experience of using it. The learning curve is horrible. And the syntax… consider:

git log main^..HEAD # huh?!

Blecch. I just don’t think it needs to be as hard as it is.

Anyhow, thanks once again to Micha for talking me through this weirdness, and I heartily recommend his blog Git rebase, squash...oh my!, just bulging with straightforward explanations and how-to recipes.

Hobbyist

An open-source project makes for a nice hobby. I recommend it, particularly for us old folks.

30 Jan 02:59

#AskFirefox host Chenae Moore on internet pranks and losing sleep over recipe videos

by Kristina Bravo
Chenae Moore smiles for a photo.
Chenae Moore is the host of our YouTube series, #AskFirefox.

Here at Mozilla, we are the first to admit the internet isn’t perfect, but we are also quick to point out that the internet is pretty darn magical. The internet opens up doors and opportunities, allows for people to connect with others, and lets everyone find where they belong — their corners of the internet. We all have an internet story worth sharing. In My Corner Of The Internet, we talk with people about the online spaces they can’t get enough of, what we should save in Pocket to read later, and what sites and forums shaped them.

This month we chat with Chenae Moore. She’s the host of our YouTube series, #AskFirefox, where we answer your pressing questions to help you understand the web and live your best online life.

What is your favorite corner of the internet?

My favorite corner of the internet is the TikTok “prank” section. Not the ones where people violate your personal space or give people near heart attacks, but the ones where people do silly things at home to get their spouse’s natural reactions. Or when people walk up to strangers and act like they know them and the stranger feels bad for having forgotten how they met so they go along with it. I can’t get enough. It literally brings me to tears.

What is an internet deep dive that you can’t wait to jump back into?

The most ridiculously satisfying deep dive is watching ingrown toenail removal videos. Dr. Toenail and The Meticulous Manicurist are two of my favorites. I can sit and watch for hours because the end results are just that rewarding. Makes me want to grab some tools and go to work on my own toes. Unfortunately, I don’t have ingrown toenails. Dangit.

What is the one tab you always regret closing?

I always regret closing recipe videos. I’ll find an incredible recipe and put my phone down, lose the recipe and lose sleep because I won’t be able to stop thinking about it. Now I just DM myself tons of recipes. My DMs are basically a cookbook, and I’m practically a professional chef now.

What can you not stop talking about on the internet right now? 

Tech! I enjoy tech so much I went and got a fiancé in tech and a tech show! I host a show called #AskFirefox where I answer questions and provide resources on how to navigate the wonderful world of tech. It’s pretty groovy if I do say so myself!

When I want to catch up on the reality tea, it’s all about “The Real Housewives” for me. This previous season of “The Real Housewives of Beverly Hills” was DRAMA PATCHED! I follow tons of Bravo accounts, so I’m even hip to some of the drama for shows I’ve never even seen.

What was the first online community you engaged with?

Probably MySpace way back in the day. Oh what a time to be alive.

What articles and videos are in your Pocket waiting to be read/watched right now?

Definitely tons of recipes, especially brunch recipes. My family and I do a brunch every Christmas so I start finding recipes months in advance. Games and gift ideas for my nieces so I can spoil them. Workouts for abs and the booty.

If you could create your own corner of the internet what would it look like?

Mary-Kate and Ashley rare sightings. As their No. 1 fan, it’s pretty difficult to keep up with what they have going on since they’re such private people. Nineties sitcom TV clips so we can remember just how incredible family TV once was and also get a life lesson right along with it (a two for one!), ‘90s R&B throwbacks and 2000s boy band hits so we can learn the dance moves that took the world by storm before TikTok and be blessed by the incredible fashions at the same time. Another winner winner, chicken dinner!

Chenae Moore is a professional screen actor and a Michigan native. With a focus on comedy and branded content, her recent commercial work includes brands such as Tillamook, Fujifilm, and Mattel, in addition to film and voiceover roles.

To keep up with Chenae, you can catch new episodes of #AskFirefox on YouTube every Thursday. Also look out for her as one of REACT Media’s newest cast members: @REACT on YouTube and TikTok, and @REACTmedia on Instagram. Or simply give her a follow on Instagram: @Hey_Nae.

Save and discover the best articles, stories and videos on the web

Get Pocket

The post #AskFirefox host Chenae Moore on internet pranks and losing sleep over recipe videos appeared first on The Mozilla Blog.

30 Jan 02:59

yeah, it’s snowing again

by jnyyz

Here I am at the beginning of my ride home.

Always easier to make a track in fresh show to the left than to ride in the existing tracks. Once tracks freeze into ruts, that’s a problem.

Looks like line 2 is down again!

Near the end of the ride, snow is stuck everywhere (including the camera lens)

Stay safe out there!

26 Jan 18:50

Vikunja

by Rui Carmo

This page is a stub.

Vikunja is a nice, clean Go-based, self-hostable task planning application with both a Kanban and Gantt view that seems very lightweight and fast, and a possible alternative to Microsoft Planner for personal and team use.


26 Jan 18:49

Notes for January 16-22

by Rui Carmo

This is an abridged list of the non-work things I accomplished during the week.

Monday, 2023-01-16

Martin Luther King Day in the US. Reasonably slow day, able to go out for lunch for a change.

  • Tidied up office again before work.
  • Realized my Intel KVM host was running out of disk space, moved inactive images to my NAS and bumped up priority for replacing/upgrading it.
  • Investigated and filed #424.
  • Walked 5Km uphill returning from lunch break.
  • Listened to two more episodes of Oxide and Friends (yes, I have a very long backlog).
  • Rewrote most of my RSS-to-Mastodon poster as a plain aiohttp script.
  • Did some minor fixes to Piku HTTP header mappings.

Tuesday, 2023-01-17

Spent most of the day trying to catch up with various things and poking at GitHub during breaks, then attending to some personal stuff.

  • Fixed up some of my Azure boilerplate scripts to accommodate the newest fads.
  • Reviewed some issues I filed, accepted a few pull requests on personal projects.
  • Updated some of my cloud-init bootstrapping scripts, including the Piku ones.
  • Started to put together a minimalist application metrics server.
  • Spent a while doing some research.

Wednesday, 2023-01-18

Pretty lousy day due to the news of Microsoft layoffs.

  • Paid bills.
  • Spent 20m kicking off apt/dnf upgrades across a few machines.
  • Stepped into the JavaScript front-end cesspool, decided to do a “simple” modular dashboard with Preact and D3, ended up wasting far too much time, filing #236 and rebuilding the htm and preact bundle myself. Seriously, why is this ecosystem so broken?
  • Decided to take a break away from computers and the news for the evening.

Thursday, 2023-01-19

Woke up unusually early due to a commotion in the building, got an extra hour to read morning news (which was not an improvement).

  • Set up the new Pythonista beta on my iPad Pro, since I’m planning to replace some of my shortcuts with it.
  • Got an HDMI-to-CSI bridge in the post and set up a Pi Zero W with a legacy PIKVM image over lunchtime–this way I can at least check my KVM host console. The Zero W, despite slow and not officially supported anymore, can run off a single unmodified USB cable for power, which is a big advantage.
This folds neatly into a volume only slightly bigger than the Pi.
  • Ordered a second HDMI-to-CSI bridge from AliExpress (I will be repurposing another Zero W in a few months).
  • Started sketching out a case for the above.
  • Wrote a little backend for my Preact app.

Friday, 2023-01-20

Some unexpected personal stuff to attend to. In between that and news of the Google layoffs, nothing much got done outside of work.

Saturday, 2023-01-21

Pretty productive day, all things considered.

  • Personal inbox zero (or close enough).
  • Updated my CV and portfolio (you never know).
  • Stumbled upon the zero to main() series of posts about bootstrapping an MCU, which made for quite nice reading.
  • Did some vacuuming.
  • Poked at a couple more 3D models in OpenSCAD.
  • Did a draft print of an enclosure for the PiKVM on the KP3S Pro.
  • Finally watched The Matrix Resurrections. Was most emphatically not impressed.
  • Reviewed and polished some pending drafts.

Sunday, 2023-01-22

Couch potato day.

  • Tidied some storage boxes.
  • Read a fair chunk of The Economist.
  • Finished my KP3S Pro long-term review.
  • Played around with the Mastodon API a bit more.
  • Cleaned up and published these notes.

26 Jan 17:41

Ivory for Mastodon Review on MacStories

by Rui Carmo

I managed to miss all of the beta slots, but Ivory is, overall, the best iOS client I’ve used yet–with caveats stemming from my habits.

Right now I’m missing:

  • More affordances regarding lists (can’t set a list as my default timeline)
  • Some form of notification summary/grouping (I don’t think each boost or favorite really needs its own row)
  • A column view on the iPad (there’s a side panel, but it isn’t the same thing).

I also had a few minor issues:

  • I couldn’t… share links easily? The app doesn’t appear in at the top of the share sheet, but Open in Ivory opens the built-in browser, and then you have to share the link again to get a compose window. Real weird.
  • I couldn’t set the font size as small as I wanted on the iPad.
  • Some things pop up with exaggerated motion (switching to bookmarks, for instance).
  • Had to turn off all the cutesy sounds. It should be a syncable preference, one of my devices is still chirping someplace in the house.
  • Had to squint at some of the icons to figure them out (the sharing one was definitely not obvious to me).
  • Doesn’t work with Takahē (sort of to be expected).
  • Doesn’t let you rename accounts (I have three accounts with the same name and avatar…).

The pluses, though, are great. Having the timeline position sync across all my devices is delightful. Definitely setting a gold standard here, so… Well done, Tapbots!


26 Jan 17:40

Things to do and not to do during a wave of tech layoffs

by Rui Carmo

I was shocked to hear Christian was caught up in the Microsoft layoffs, and his advice is as thoughtful, well grounded and comprehensive as everything else I’ve watched him do since the Mozilla days.

Well worth reading. Also, awesome T-Shirt.


26 Jan 17:36

Microsoft overstepping with Edge & Bing

by Volker Weber

I have been a happy Edge user for a few years, but more recently the experience is degrading for me. Microsoft dumped a few useful features like the good epub reader that used to be built in. And it keeps altering settings while pretending to make my browsing experience better. One recent example is how they quietly disabled the DuckDuckGo extension I had previously installed. What does it do? It changes the default search engine to DuckDuckGo.

This is what I want to see when I search for something:

This is what Microsoft wants to show me instead:

I also fought very hard against Microsoft to make this my opening page in Edge:

I like a clean desk, a clean desktop, and I need focus. Continue to distract me, and I will dump Edge for this reason alone.

26 Jan 17:35

Walking in the Dark

by Dave Pollard

This post is about the most recent of the 2-3 hour ‘contemplative wanderings’ that I do near the end of each month.

In the early hours of evening, at this time of year this far north, it’s already been dark for a while. But it’s not raining, or windy, or foggy, so I make my way down the elevator and head outside. Here, in the city, a flashlight isn’t essential, as it was when I lived on Nex̱wlélex̱wm, so I have purposely left it behind.

This is the hour of after-work joggers, some of them sporting headlamps or reflective tape on their clothes. It’s the hour of dog-walkers, and late commuters, and weary night-shift workers. Drawn to the sea, I walk towards the eastern edge of Burrard Inlet (səl̓ilw̓ət — “tsuh-LAYL-wut” in the hən̓q̓əmin̓əm̓ local First Nation language).

After my recent post on our “sense of scents”, I’m hoping to see whether the darkness allows me to exercise my non-visual senses. Will I be able to smell səl̓ilw̓ət’s salt water, and remember it? Will it then strike me, the next time I’m near, differently from the rich green smell of Hoy Creek, which I often visit, and which I’ve just passed? Will I ever be able to map the emotional landscape of these smells? Is there a language of smells, a language that can’t be spoken, a language in which that smell could be related to that feeling, the way a major seventh, or a sus4 chord, relates to that feeling?

I’m walking alongside rows of hedges and riverside trails, but I’m not able to discern much in the way of scents, even when I briefly close my eyes and try to concentrate.

And then a guy walking a beagle passes by going in the other direction, and the dog stops the guy it’s taking for a walk, in order to sniff. I slap myself on the side of the head. Of course! I utter a greeting to the guy, and nod to the dog in thanks for the lesson.

When I stop walking, and focus, and pay attention, I really can smell the differences from plant to plant. But it’s strange and frustrating — I have no language with which to distinguish and remember these scents. Perhaps if I knew what the names of the shrubs and trees were, I could at least ‘tag’ the smells with the names of their bearers, as I can now with cedars and lilacs. But I am totally unpracticed at this — I can no more make sense of these scents than I can make sense of the conversation of the people I passed a few moments ago speaking — what? — Mandarin or Cantonese or Korean? Japanese even? I have no idea.

How is it even possible to ‘remember’ anything if you have no taxonomy, no ontology, no words for it, I wonder? I recall scents from even way back in my childhood, when I’m re-exposed to them. “That smell” means “that precise place” or “that thing that happened” or even “that person”. It all comes rushing back. But we have no words for it — for the Cardiff Bridge Street smell or the listening-to-Gymnopédies-with-Joanne smell. Perhaps there is no need for words for it.

As I continue to walk, I am a bit surprised at the number of people, mostly women, who say words of greeting to me as we pass in the darkness. Since I moved here I’ve not noticed that very much. What’s changed? I am smiling, but that’s not unusual for me, especially when I’m walking. Is it because it’s dark, so it’s a safety acknowledgement, like the gentle ting of bicycles when they are passing you on multi-use paths?

And then I laugh. It’s because I’m not wearing a mask! For the past three years I’ve defaulted to wearing one, even outdoors when I’m in busy places. They were acknowledging my unmasked smile, along with my eye-contact and brief attention to them as our paths crossed. Nothing more meaningful, and nothing less human, than that.

There are, of course, people who don’t meet your gaze, who shrink down and look away and hurry past.

That gets me thinking about what it must be like to live a life of constant precarity, constant unease, constant wariness, or constant struggle. A life in the shattering aftermath of trauma. A life in never-ending fear of the reappearance of an abuser, or another horrific war. A life full of the the shame and dread of not knowing where the next meal for you or your children will come from, or the next fix, or where you’ll sleep tonight, and tomorrow night.

No wild creature, I am convinced, would ever put up with such a life — having known a better life, it would be too far down for them to even contemplate putting up with it. They would skulk away, lie down quietly and gracefully and just let it end.

What is it that drives humans to go on, no matter how ghastly their lives? Is it hope, or is it just the only life they know and the only life they can imagine? Are we all domesticated creatures like Lucky the dog, willing to put up with almost anything once we get used to it?

I sigh. The older I get, the more I realize that I know nothing. I wonder if my walking in the dark is a metaphor for where we are, we humans, now, always, scurrying around in a sea of unknowing. Wild creatures live in a world of wonder, while we, allegedly homo sapiens (twice), live mostly in a world of dissatisfaction, anxiety and bewilderment. Is this what all our ‘knowledge’ brings us?

As I reach the long arm of the ocean, and descend down the steps from the always-noisy road to the sand-and-pebble shore, I discover that last month’s king tide damaged the boardwalk across the edge of the inlet. There’s yellow tape everywhere, so I can’t even get close enough to smell the ocean, or what the ocean becomes in its transition to rivers and lakes. So I sit on the park bench quietly and listen to the ducks. There could be thousands of them out there; it’s too dark to see.

On the way back, I find myself walking behind two little girls with (I suppose) their mothers. The girls are dancing and singing and spinning around holding small flashlights in their hands, illuminating everything around them. “Aha!” says one, “You can’t avoid my gaze.” The other asks whether they can take the riverside path home instead of the “boring” roadside sidewalk. The mother is dubious. “We can show you the way,” the girl replies, in superhero voice. “We can see anything even far away, so we can protect you.” And then, shining the light from below her chin to eerily illuminate her face, she adds: “We have TASERS!” “Whaaaat?” shouts the mother, as I make my way by them.

I’m sort of glad I won’t hear where that conversation is going as I pass out of earshot.

It’s quiet then, for a while. From my treadmill routine, I’ve started to walk fast, about 7 km/h, and now I come up behind another couple, I’m guessing in their late teens, walking in the same direction. They’re speaking in urgent, hushed tones, and the young woman is pressed up against the guy as they walk. I can’t make out what they’re saying until the woman suddenly throws up her hands and says, in a loud, exasperated, grief-filled voice:

“All I want is to be able to curl up with you every night when we go to sleep, and wake up in your arms every morning, and spend all day loving you and being loved by you! Why is that so hard?… Why is everything good in this world impossible?”

I am briefly stunned by this bravura performance, and have to restrain myself from giving her a raised fist salute and shouting “Right on, sister!” Instead, as I pass them, I smile and nod to the woman, and give her a ‘thumbs-up’.

And for the rest of the walk home I am haunted by her questions. Has there ever been a time in human prehistory where that was how we lived, perhaps back in the days when we were pre-bonobos living in the trees? Was life, in those times of abundance and balance, such that we could simply reach out and grab a fig or some other nutritious food, and then sink back into the arms of the one we loved? If that were so — if it’s not just a fantasy of starry-eyed paleontologists and paleoanthropologists — then where did we go wrong, or was our trajectory from there to here just one of tragic but necessary evolutionary adaptation to ecological change?

Instead of going straight home, I head first to the neighbourhood bistro for a matcha latte. The place is jammed, so I grab a seat and eavesdrop for a few minutes. The group at the next table is talking about the crows dive-bombing from the top of their apartment and then soaring back up again. One of them was repeatedly dropping a pebble and then swooping down at incredible speed and grabbing it in its beak, and then repeating the exercise over and over. Having witnessed this often, I smiled.

There are a lot of anthropocentric explanations for why wild creatures play — mostly relating to their use of play as ‘practice’ for serious real-life situations. But biologists who have carefully studied wild creatures insist this is a false myth.

As I wave goodnight to the hardworking, gentle boss of the bistro, I wonder why crows play. I wonder if they do it just for fun. I wonder if they do it because that is just what crows do with their large brains and abundant leisure time. I wonder why they have migrated dramatically to the cities over the past 50 years, to the point more live in cities than in the countryside now — just like us. I wonder why, in each city, they mass each night (except in breeding season) in enormous, crowded, raucous roosts of thousands of birds, and then return miles to their far-flung homes each morning.

I wonder why there has to be a reason for anything, or if there even is a reason for anything — perhaps reasons are just placeholders, inventions of the brain, misleading us into seeing, and sharing, patterns where none really exists.

Perhaps there isn’t even a reason why “everything good in this world is impossible”. I don’t know. I don’t know anything. I’m just standing here in the dark, looking up at the moon, and wondering.

24 Jan 23:39

Weekly Snapshot with Flickr Social, 1/20/2023

by MacKenzie Joslin

Hi all! Welcome to another installment of “Weekly Snapshot with Flickr Social”.

Every Friday we’re highlighting some of our favorite photos submitted to the Flickr Social group. For a chance to be featured, join the group and share your photos!

Winter in Bryce

“Winter in Bryce Canyon. I was lucky enough to witness this beautiful rainbow spanning over the entirety of canyon on my last first and last evening in the park! I was shooting towards the sun when I realized a rainbow was forming on the other side and I rushed with my backup camera to capture it. The scene was too wide for the widest of my lenses, so I just snapped a handheld pano, and this is the result!” – Tanmay Sapkal

Withered Asters

“Withered Asters” – Peter Stenzel

FoRk

“Fork” – Falcon JKF

Winter in Moab

“Winter in Moab. Behind the Rocks area, Moab, Utah. Taken with my Mavic 3 drone with the 7x zoom enabled.” – Whit Richardson

Violet-bellied Hummingbird. / Weekly Snapshot with Flickr Social!⭐ Jan 20, 2023

“Violet-bellied Hummingbird” – nicole le roy

Lila Schönheiten im Sonnenuntergang

“Purple beauties in the sunset” –Moni Bordt

A lovely couple

“A lovely couple” – Anastasia Podrabinek

Ferrara

“Ferrara” – ::ErWin

Be a part of this month’s Explore takeover

Your Best Shot is the annual celebration of the most inspiring photography on Flickr where we invited you to share your single best shot of the year. This year the contest ran from Dec 1, 2022- Jan 4, 2023 and has accumulated almost 12k photo entries. This month’s takeover will be celebrating some of your best shots from Your Best Shot 2022!

If you entered – we invite you to share your entry in the discussion here for a chance to have it included in this month’s Explore takeover.

If you missed the deadline – you can still participate in the takeover by sharing your favorite photo from the Your Best Shot 2022 group pool in the discussion in Flickr Social. An awesome way to highlight and celebrate the work of other photographers here on Flickr!

Check out some of these photos below that have been submitted to YBS 2022. We hope they inspire you to share your photos & celebrate your fellow photographers!

Colorful houses

“Colorful houses” – Christophe D

2022-10-01-DRN-02

“East Fork Eklutna River” – tpeters2600

Just crossing here!

“Just crossing here!” – Vered Gilad Friedman

See you next week!

24 Jan 23:37

Charging in Vancouver

by Stephen Rees

Sunday and there appears to be no-one charging at Kits Beach this morning. If something is too good to be true then it probably isn’t. The Flo app maintains this idea and when we arrive all the spaces are empty. But when we plug in no electricity flows. So I hit the help button on the app. This turns out not be a Good Idea at all. The number it dials is different to that on the machine, and it adds an extension which answers in French. Then plays music. So I end that call and dial the number on the charger, which gives me a chance to pick English from the menu, and gets answered by a human straightaway. He tells me that all four chargers will need the attention of the City of Vancouver. That doesn’t explain why the Flo app shows non-functional chargers as available. But then we find that the two chargers on Beach at Broughton, also shown as available, are in a car park that is currently closed. The chargers on 7th Ave are not available on Sunday. We end up back at Kerrisdale paying for parking and power as by the time we get there we are literally out stored power.

I get the feeling that this post may be the start of something. For now here is a picture of the free charger at the free parking out at Pacific Spirit Park. Which shuts off charging after 2 hours, no matter what.

The charger story starts getting more interesting thanks to a comment thread on this post. It turns out that the new building on the other side of Yew Street does have EV charging options. These show up on the PlugShare app but not on the FLO app or ChargePoint.

This Hyundai is parked on a space marked CAR SHARE on the corner of building A that houses Safeway. This is the north west corner just off Yew Street. There is nothing on the vehicle to suggests it belongs to a car share.

Zut alors! That is a long period of charging but then the Hyundai is an EV, not a plug-in hybrid. Since it does not appear on their app, it must require a RFID card, like I use at Oakridge when I am having tests at LifeLabs. Those FLO charges are listed on the app but not their status. So it is a bit of a crap shoot if you can get one of the two chargers there. You can’t use the phone to start charging either so I imagine they are beyond cell phone data use or nearby wifi.

The street behind the Tesla has not been named as it is really just a lane access for trucks and so on. The charger on the other side of the post is not functional – and according to PlugShare hasn’t been for some time. I imagine the Tesla’s owner will use the other one once the Hyundai is fully charged.

PlugShare also now says that the underground parking provided for Safeway also has outlets for car charging along the wall. Since I usually walk to Safeway and take the trolley for heavy loads I haven’t been down there much, but there are “multiple wall plugs available” for “trickle charging” while shopping my transportation mode may change! Apparently both parking and charging are free while shopping.

Wednesday February 1, 2023

We went out to Pacific Spirit Park this afternoon, and plugged in but the app wasn’t working. All I got was a blank page on my phone. So I used the RFID card to get the thing started. From the information panel on the charger it looked like it had started even though no little blue lights came on. But they have also done that elsewhere but come on later, so I didn’t wait for them. We walked around the park using the “Lily of the Valley” trail which someone described to us as “the Art Gallery”. So a pleasant hour and some exercise, but no electricity actually passed to the car’s traction battery.

UPDATE I got an email from Flo that explained

The problem comes from the charger but not from your card. 

I can see a support ticket was opened yesterday and our techniciens intervened around 7pm. 

The station should work and provides energy now but do not hesitate to contact us again if the problems appears again.

So my conclusion is that the guy before me – who we saw leave – must have had a problem too, but chose not to warn us that the charge wasn’t working. I don’t know why I expected that there would be some kind of fellow feeling between EV drivers.

The charger in question is actually in the top picture at the empty parking space



We got going to try and get home before the school run started. My partner noticed that she could see the car being charged on the roadside charger behind Safeway from our bedroom window. Not only that she saw the guy come back to his car and drive away. So I went down to the basement, got my car and got to the charger before anyone else did. Again, the RFID card got used, since that charger isn’t on the FLO app, and this time one blue light on the dashboard started flashing. The PlugShare app says there is a $1 charge per visit and just 1 kWhr transfers. Given that 26 hour transfer pictured above I wondered if that was right – but I suppose it depends on the number on that RFID card. I got back after two hours to find the low battery was now up to 36% – not the full charge I get in two hours elsewhere. I also established by walking around the Safeway underground parking that many of the support columns have a two outlet 110v receptacle. So that is where people are getting “trickle charging” while shopping although there are no signs about EV charging – just generic warnings to all that there is a 2 hour limit for parking while shopping. I have yet to try that.

I noticed similar boxes near the EV parking at the park but with a more complex arrangement of the socket and an absence of the large central neutral pin.

Wednesday February 5

We got to Pacific Spirit Park around 1pm but both chargers were in use – and would be for a couple of hours. So we went to Kits Beach, although I had my doubts. Once again, the reason two chargers were available was that neither worked. I talked to the operator on the phone and got her to check. I had done everything I should have, the charger failed to start. And we tried to get the Modo charger started from her end with the same result. I was going to go to 7th Avenue, which the Flo app said was available, but their web page showed was in use, so then we went up to Kerrisdale. By now my “top up” idea had to change to a full two hour charge at the place with the most expensive electricity and parking fee.

I also found out today that I had qualified for the BC electric vehicle subsidy – as I got a request to complete a survey. What the dealership had done was add three years of biannual services to my purchase bill on the assumption that I would qualify for the subsidy (I had ordered the car and paid a deposit before the rules changed). The survey asked if I had applied for the subsidy for a Level 2 charger – but as the strata council opposes that idea it wasn’t exactly applicable.

24 Jan 23:37

Class Reductionist

Like many geeks, I hoard a few dozen domain names, and currently they include the .com/.org/.net triple for “classreductionist”. “Class Reductionist” is considered an insult by many progressives and as far as I know, there’s no organized faction claiming the label. And while I wouldn’t either, I’m pretty sure I’d support the key policy goals that a hypothetical Class Reductionist would.

Definitions and argumentations

Let’s start with the Urban Dictionary’s: “The idea in some leftist circles that all oppression based on gender, sex, race, etc. is just a byproduct of class struggle, and that once class disparity is solved, all those issues will vanish.”

Salon goes deeper in Asad Haider’s How calling someone a “class reductionist” became a lefty insult. Specifically, it calls out the DSA Philadelphia Chapter statement on the murder of George Floyd by the Minneapolis Police. The DSA presented a very class-centric position: That the murder was a consequence of class oppression and that socialists such as the DSA were thus uniquely qualified to address the problem.

You don’t have to be a Political Science Ph.D to notice that Floyd’s murder was a racist act that can only be understood in a racism-aware framework, and that omitting that dimension is clueless.

On the other hand, ignoring the class dimension of oppression in general, racism in particular, and George Floyd’s murder in particular particular, would also be clueless. Mr Floyd was a man with a bunch of problems, but one of the biggest was that he was broke.

Dive deeper

Anyhow, I’m not going to get too far into theory arguments because, as I argue below, I don’t think they make much difference in which political policies we ought to support. But it’s an interesting conversation, so here’s a short reading list that I think is both educational and fascinating.

Professor Adolph L. Reed, Jr

Professor Adolph L. Reed, Jr.

  • The Myth of Class Reductionism is by Adolph Reed. Professor Reed seems to be upstream from a lot of this debate, and goes so far as to question the value of much “antiracism” in practice. I’m not always 100% convinced, but the man is eloquent and erudite.

  • The Marxist Who Antagonizes Liberals and the Left, in the New Yorker, covers Prof. Reed and his ideas and history and writings pretty thoroughly. Once again, I’m not a disciple, but his line of argument is never not stimulating.

  • In the NYTimes, check out A Black Marxist Scholar Wanted to Talk About Race. It Ignited a Fury. It’s about what the title says: How Prof. Reed’s ideas led to a hideous melt-down when the NYC DSA branch invited him to give a speech. Opponents accused him of being “reactionary, class reductionist and at best, tone deaf”; the event was canceled. Both sides of the debate are interesting.

  • That Salon piece by Asad Haider that I linked above. Once it gets past the Floyd episode, it digs pretty deep into all the stuff in this list; I found it nuanced and eye-opening.

Intersectionality

What schools of thought are in opposition to Class Reductionism? The three I hear mentioned are “Identity Politics”, “Postmodernism”, and “Intersectionality”. I never understood what the first meant and anyhow it’s just a right-wing culture-warrior battle-cry now. “Postmodernism”… I mean, in 2023, who cares.

Intersectionality, though, is one of the more interesting new-ish things in progressive thought; it’s simple enough and seems self-evidently true. Oppression isn’t one-dimensional, but operates along axes including race and gender and age and disability, and not always in simple ways.

Let me put it another way: Traditional patriarchial thinking is built around the notion of the default “standard” person, who is a straight white heterosexual neurotypical fully-abled cis male. To the extent that any person varies from “standard”, they are disadvantaged and likely oppressed.

And another way: A Black trans woman with a disability is likely to have an extremely difficult life, at no fault of her own.

Intersectionality issues a challenge: It’s neither ethical nor effective to try to solve just one of these problems, because they combine in complicated ways. It’s a school of thought that causes eye-rolling on the right and is held at a distance by some old-school leftists. Which puzzles me because it seems so self-evidently empirically true.

And yet… in the first paragraph above, I said friendly things about the policies a “class reductionist” might advance. How so?

It’s about the money

Let’s return to that Black trans woman with a disability I mentioned above. The forces which affect her are complex, but one of the results is highly predictable: She’s probably broke, possibly to the point of food or shelter insecurity. Life (and intersectionality) are complex, but money is, relatively speaking, simple. As a society, there’s plenty of it to go around but it’s distributed stupidly, unjustly, and inefficiently. And it’s getting worse.

In Vancouver, the insanely rich city where I live, Teslas and Lamborghinis are common as dirt, but our Food Banks are facing skyrocketing demand, and there’s a constant struggle to feed the kids who come to school hungry.

Let me hand the mike to Sarah Smarsh, a writer with an unusually deep understanding of the American poverty she grew up in (link):

Tweet by Sarah Smarsh: “What causes poverty?” “Being born poor.” “How do we solve poverty?” “Give people money.”

And then, here’s the paper that led to me writing this long-gestating piece. It’s Effects Of The 2021 Expanded Child Tax Credit On Adults’ Mental Health: A Quasi-Experimental Study in Health Affairs by Batra, Jackson, and Harnad, all from UCSF’s Social Policies for Health Equity Research Program research team. Here’s most of the abstract:

The US Congress temporarily expanded the Child Tax Credit (CTC) during the COVID-19 pandemic to provide economic assistance for families with children. Although formerly the CTC provided $2,000 per child for mostly middle-income parents, during July–December 2021 it provided up to $3,600 per child. Eligibility criteria were also expanded to reach more economically disadvantaged families … we examined the effects of the expanded CTC on mental health and related outcomes among low-income adults with children, and by racial and ethnic subgroup. We found fewer depressive and anxiety symptoms among low-income adults. Adults of Black, Hispanic, and other racial and ethnic backgrounds demonstrated greater reductions in anxiety symptoms compared to non-Hispanic White adults with children …

We mustn’t stop working hard to disentangle and remediate the messy intersectional vectors of oppression. But while we do that, something along the lines of a Unversal Basic Income routes around that mess and — yes, granted — focuses on treating oppression’s symptoms. But… why not?

I’d go further. I’d put the goal of getting money flowing to the oppressed at the front of the queue. It’s a policy that has the virtue of being simple and easy to understand and easy to explain and, based on the evidence from a variety of Universal-Basic-Income studies, has results that are beneficial and not very hard to measure.

It will of course require a ferocious political struggle against the moneyed patriarchal interests for whom current society is ticking along just fine, ignoring of course the hungry kids coming to school and the people being killed by police over crimes which range from petty to nonexistent.

Time to get on board with that struggle!

But racism!

Anyone who makes these kinds of arguments is at risk of being accused of looking away from the glaringly obvious racism which seems to inhabit the white-hot center of the intersectional tangle of oppression. Especially when that “anyone” is someone like me, a “standard” human per the criteria listed above, possibly blinded by my own whiteness.

I don’t have anything cheerful to say. I try to be antiracist, a good ally, but I don’t think I’m good at it. And I don’t think we’re going to break racism’s back in this generation or the next. I’ve come to believe that humanity, as a species, has a hard-wired predisposition for tribal behavior, for hating (and given the chance, casually killing) the people who live over there and speak with that accent and eat that meat and worship that god.

My prediction is that if our civilization survives another couple of centuries we’ll do better. But we’ll still need a strong early-education focus to bend young minds away from tribalism and toward intercultural harmony. Antiracism will never end.

And, apologizing in advance for negativity, I think it’s not just me who’s bad at antiracism; we as a society generally suck at it. I speak as a veteran of years of involvement in corporate DEI programs and donations to worthy charitable causes and signing the right petitions.

We have in my lifetime developed an increasingly accurate perception of the pervasiveness of bigotry, but done a miserable job of alleviating it. I’m optimistic that we’ll get better at it — one lifespan is a pretty short time to develop approaches and tools. But I am in no way inclined to put other urgent measures on hold while we work it out.

Given the above, it seems both ethical and urgent to focus right now on doing our best to make sure that everyone can count on being fed, clothed, and sheltered.

Among other things, the oppressed people should have a leadership role in fighting oppression, and that’s just not going to happen if they’re putting all their effort into making the rent and feeding their kids.

Pillow with Karl Marx cartoon

A wide selection of Karl Marx cushions
is available at TeePublic; this one is by Gaby Shiny.

Marxism?

You can’t really take this kind of angle without acknowledging that you’re talking about class, which means you’re a Marxist, right? And indeed, Marxists, from pedantic academics to hard-ass tankies, are at one in explaining how class transcends issues of race and gender, and that fighting for the working class implies attacking multiple other vectors of oppression. And they have a point.

So I can get along with the Marxist take as long as prioritizing anti-poverty doesn’t mean you think you’re automatically antiracist or can postpone addressing the other flavors of oppression. And thinking about social problems through the lens of class seems like a powerfully useful tool for understanding the social problems we’re trying to fix.

What am I then?

I wish there were a convenient label to describe the perceptions that I’ve described here. Which is to say, I’m unlikely to deploy a “classreductionist.org” Web site any time soon.

I think of slogans like “Prioritize Poverty” and “Send Money Now”.

But for the moment, I don’t know what domain name I should buy. Maybe I’m a Smarshian? A Reedite?

What I really believe is “Send money. Start now.” But that’s a lousy label.

24 Jan 23:34

Static libraries

This is part of a series on Native AOT.
Previous -- Top -- Next


Buckle up folks, this part of the ride gets a little bumpy. As of .NET 7, using Native AOT with static libraries is implemented, but is not yet considered a supported and documented feature.

As mentioned previously, building a static library with Native AOT is straightforward. Just set the NativeLib property to static:

$ dotnet publish --property NativeLib=Static -r win-x64

And the code to call our multiply() function is no more complicated than it would normally be for whatever language is in play. In this sample, we're using C++:

#include <cstdint>
#include <stdio.h>

extern "C" int32_t multiply(int32_t, int32_t);

int main()
{
    int32_t c = multiply(7, 6);
    printf("%d\n", c);
    return 0;
}

Where things get tricky is when we try to link.

To be fair, the various command line options for any C++ compiler are usually arcane and complicated, so we'll try to blame Native AOT only for the complexity that it added to an already messy situation.

Using the Microsoft C++ compiler, our first attempt to build the program shown above might look something like the following:

cl.exe 
    (compiler options)
    mul_main.cpp
    ../mul_cs/bin/Debug/net7.0/win-x64/publish/mul.lib 
    (windows libraris)

I've omitted the usual compiler options and the long list of Windows libraries so we can focus on the two things we really care about. What we want is to compile the C++ snippet from above, and link it with the static library containing our multiply() function, built by Native AOT.

Unfortunately, this command will result in the linker complaining about a bunch of unresolved symbols. These symbols correspond to the various things that Native AOT code needs, a stripped-down form of the .NET runtime.

In principle, our trivial multiply() function should not need that stuff, but it is a degenerate case. There are settings we could have used to omit certain dependencies, but we didn't use those settings, so Native AOT has assumed that this library will need all the usual stuff.

So we need to add a bunch of static libraries to our link. When Native AOT building a dynamic library, this chore is performed automatically, because the .dll (or .so or .dylib) is built by the linker, but with a static library, we're deferring the actual link step until later.

But what libraries do we need? And where are they?

A few chapters ago, when we set things up for building with Native AOT, we had to add the PublishAOT property to our csproj.

When the .NET SDK sees this property, it does a lot of work behind the scenes, including adding references to several nuget packages which contain the tools and libraries that Native AOT needs. In the case of Windows, those libraries are in the nuget package runtime.win-x64.microsoft.dotnet.ilcompiler.

I mentioned above that none of this is considered to be a supported feature for .NET 7. In fact, the currently suggested way to figure this stuff out is to run a Native AOT build with detailed logging and examine the output to see the actual command line options for the C++ compiler. That gives us the list of libraries, plus the fact that we need to require the NativeAOT_StaticInitialization symbol.

The final command line is just too ugly to show in a blog entry, but all the gory detail is in a BAT file in the sample code.

We end up with one self-contained executable file (which is still ridiculously large, grumble).

C:\Users\eric\dev\native-aot-samples\mul_cpp_win_static> dir

 Directory of C:\Users\eric\dev\native-aot-samples\mul_cpp_win_static

...
01/23/2023  09:53 AM         4,763,136 mul_main.exe
...

C:\Users\eric\dev\native-aot-samples\mul_cpp_win_static> .\mul_main.exe
42

The code for this blog entry is available at:

https://github.com/ericsink/native-aot-samples/tree/main/mul_cpp_win_static

24 Jan 01:32

West Toronto Railpath closure at Bloor

by jnyyz

As of today (Monday January 23) the West Toronto Railpath will be closed at Bloor for about a year. Approaching Bloor from the north at Ernest Ave, the ramp associated with the earlier closure is still there.

If you continue south on the platform, you will discover that the second ramp back to the rail path is gone, and you can see the construction starting at Bloor. I wonder how that one bike is going to get back to its owner. At this point, your only option is to go through the station and down the stairs to Bloor.

Your better option is to turn east at Ernest to Symington, and then to cross Bloor at the offset intersection with Sterling. In principle you could also cross Bloor at Perth, but there is no signal there.

Unfortunately, there are no really good options going south from this point. You could ride against traffic on Sterling which is one way northbound, or you could go along the sidewalk to Perth.

This sign shows that the nearest access back to the Railpath is through the Henderson parking lot, at which point you might as well stay on Sterling until Dundas.

Riding north on the Railpath, you will see this sign at Bloor and your only choice is to go down the stairs.

There is a sign at Dundas about the closure, but it is easy to miss.

In summary, unless you are willing to carry your bike up and down stairs, the Railpath is blocked at Bloor, and you will have to consider a detour.

Riding the rest of the way into work this morning along College, I am reminded the sharrows are bullshit.

Late January 2023 update from Councillor Bravo’s office:

“The construction of the stoplight at Bloor and Perth is currently in the design phase. Construction is expected to start by the end of the year and will be coordinated with other works in this area.

Given the closure of the Railpath due to Metrolinx construction, our office has reached out to Staff regarding the possibility of fast-tracking the light or installing a temporary pedestrian crossover at this location.”

24 Jan 01:30

Update to Debian NGINX guide

Article: Update to Debian NGINX guideWeb link: https://fedfree.org/news/debian-nginx-update.html