(date: 2024-07-27 10:18:02)
date: 2024-07-26, updated: 2024-07-26, from: Daring Fireball
https://www.404media.co/google-is-the-only-search-engine-that-works-on-reddit-now-thanks-to-ai-deal/
date: 2024-07-26, updated: 2024-07-26, from: Bruce Schneier blog
They’re better for the environment.
date: 2024-07-26, from: Liam on Linux
Someone on Reddit was asking about the Bluecurve theme on Red Hat Linux.Not any more. In recent years I’ve tried GNOME, Xfce, MATE, KDE, Cinnamon, and LXQt on Fedora.
They all look different. They may have some wallpaper in common but that’s it. In any of them, there’s no way you can glance from across a room (meaning, too far away to read any text or see any logos) and go "oh, yeah, that’s Fedora."
And on openSUSE, I tried all of them plus LXDE and IceWM. Same thing. Wallpaper at best.
Same on Ubuntu: I regularly try all the main flavours, as I did here and they all look different. MATE makes an effort, Unity has some of the wallpapers, but that’s about it.
If a vendor or project has one corporate brand and one corporate look, usually, time and money and effort went into it. Into logos, colours, tints, gradients, wallpaper, all that stuff.
It seems to me that the least the maintainers of different desktop flavours or spins could do is adopt the official theme and make their remixes look like they are the same OS from the same vendor.
I like Xfce. Its themes aren’t great. Many, most, make window borders so thin you can’t grab them to resize. Budgie is OK and looks colourful, but Ubuntu Budgie does not look like Ubuntu.
Kubuntu looks like Fedora KDE looks like Debian with KDE looks like anything with KDE, and to my eyes, KDE’s themes are horrible, as they have been since KDE 1 – yes I used 1.0, and liked it – and only 3rd party distro vendor themes ever made KDE look good.
Only 2 of them, really: Red Hat Linux with Bluecurve, and Corel LinuxOS and Xandros.
Everyone else’s KDE skins are horrible. All of them. It’s one reason I can’t use KDE now. It almost hurts my eyes. (Same goes for TDE BTW.) It is nasty.
Branding matters. Distros all ignore it now. They shouldn’t.
And someone somewhere should bring back Bluecurve, or failing that, port GNOME’s Adwaita to all the other desktops. I can’t stand GNOME but its themes and appearance are the best distro in the West. (Some of the Chinese ones like Deepin and Kylin are beautiful, but everyone’s afraid they’re full of spyware for the Chinese Communist Party… and they might be right.)
comments
https://liam-on-linux.dreamwidth.org/91365.html
date: 2024-07-26, updated: 2024-07-26, from: Jason Kittke’s blog
https://kottke.org/24/07/nasa-used-futura-all-over-the-apollo-11-mission
date: 2024-07-26, from: Heather Cox Richardson blog
https://heathercoxrichardson.substack.com/p/july-25-2024-6cb
date: 2024-07-26, updated: 2024-07-26, from: Bruce Schneier blog
This isn’t good:
On Thursday, researchers from security firm Binarly revealed that Secure Boot is completely compromised on more than 200 device models sold by Acer, Dell, Gigabyte, Intel, and Supermicro. The cause: a cryptographic key underpinning Secure Boot on those models that was compromised in 2022. In a public GitHub repository committed in December of that year, someone working for multiple US-based device manufacturers published what’s known as a platform key, the cryptographic key that forms the root-of-trust anchor between the hardware device and the firmware that runs on it. The repository was located at https://github.com/raywu-aaeon/Ryzen2000_4000.git, and it’s not clear when it was taken down…
https://www.schneier.com/blog/archives/2024/07/compromising-the-secure-boot-process.html
@Dave Winer’s Scripting News (date: 2024-07-26, from: Dave Winer’s Scripting News)
Somewhere in this timeframe Adam Curry began Daily Source Code which is still running to this day, almost 20 years later.
http://scripting.com/2024/07/26.html#a154409
@Dave Winer’s Scripting News (date: 2024-07-26, from: Dave Winer’s Scripting News)
On this day in 2004 I was in Boston to blog the Democratic National Convention, esp with my newfangled audio blog post thing.
http://scripting.com/2024/07/26.html#a154106
date: 2024-07-26, updated: 2024-07-26, from: Jason Kittke’s blog
https://kottke.org/24/07/0045022-hey-public-voting-is-open
date: 2024-07-26, from: Dave Winer’s Scripting News
Somehow it’s up to the Harris campaign to get the Trumps to have a normal American presidential campaign, not a prelude to a second attempted coup, which is what the Trumps are doing. I can see the op-ed they run in September saying that it’s Harris’s fault that the Trumps are fascist.
I reinstated my subscription because I need to actually read their words, not because they cover news, but because they are news. The news is that the fourth estate in the US is gone. They have lost their minds. They aren’t even trying. Their op-eds don’t reflect facts, such as Trump will never be a serious candidate in the sense that the NYT thinks a candidate should be serious. The Democrats still will. But there’s no need as far as I’m concerned, for a legitimate candidate to respond to their taunts.
They completely lost many of us in their extended campaign to force Biden to step aside. I knew they wouldn’t stop there, because abusers never stop when you give in to them. They are the tragedy of America now, even more than Trump. We must replace them. The real question is who’s going to step up to help restore journalism to our country.
Thanks for listening.
PS: I am not pointing to their piece out of respect for people who have cancelled their subscriptions.
http://scripting.com/2024/07/26/151543.html?title=theNytPulledAnotherOne
date: 2024-07-26, from: Dave Winer’s Scripting News
I lost my iPhone a few days ago. I think all the data is safe. First time I ever lost a phone. I ordered a new iPhone 15 Pro with 256GB, it will arrive on Monday hopefully.
In the meantime I’ve needed to use my Android phone to record voice memos. Google’s product is called Recorder. It’s just what I wanted.
It has a website, so you don’t have to export your recording to get it where you need it to be, and it automatically does a transcript. There’s an editor on the website, which again is exactly where I want it.
A 2-minute voice memo/podcast I recorded with the app.
BTW, I think the files are smaller?
Here’s a screen shot.
http://scripting.com/2024/07/26/150516.html?title=googleRecorderIsWhatIWanted
date: 2024-07-26, updated: 2024-07-26, from: Jason Kittke’s blog
https://kottke.org/24/07/diary-comics-june-17-19
date: 2024-07-26, from: Dave Winer’s Scripting News
I sent a tweet to Eric Raymond today, lightly edited here, following up on a thread that started in 2001.
What Raymond said in 2001.
It’s very true, my design goal for my whole 50+ year career has been to factor my code so well so it was as clean as Unix is, from top to bottom
The virtue of relentless factoring is you can build higher if each layer of the stack lets through the functionality that’s needed, and no more. Ideally there should be one way of doing something. and it should work pretty well.
I realized that the web, RSS and podcasting are also a Unix-like things.
Because they can be made to do anything, but are simple, not a lot to understand.
But – there’s been this huge proliferation of languages and frameworks, and incredibly complex and underspecified formats.
Meanwhile core functions like storage combined with identity for end users, has not been implemented, because of course if the users had their own networked data independent of any platform vendor there would be no lockin. that’s 2024 version of the cathedral, to follow your analogy.
Anyway, seeing you here made me think of this, I’ve wanted to say this to you for a long to you and now I have. ;-)
PS: The 2001 email from Eric Raymond.
http://scripting.com/2024/07/26/134607.html?title=unixlikeThings
@Dave Winer’s Scripting News (date: 2024-07-26, from: Dave Winer’s Scripting News)
Has anyone ever seen Trump laugh?
http://scripting.com/2024/07/26.html#a134544
date: 2024-07-26, from: Robert Reich’s blog
BUNK! It’s caused by corporate power. And what would President Harris do about it?
https://robertreich.substack.com/p/debunking-myth-9-inflation-is-caused
date: 2024-07-26, from: Heather Cox Richardson blog
Momentum continues to build behind Vice President Kamala Harris to become the Democratic Party’s presidential nominee, and the national narrative as a whole has shifted.
https://heathercoxrichardson.substack.com/p/july-25-2024
date: 2024-07-26, from: Tracy Durnell Blog
(via Mx Tynehorne who also recently wrote a delightful piece on their favorite dinosaur)
https://tracydurnell.com/2024/07/25/using-biology-to-color-in-the-long-lost-past/
date: 2024-07-26, from: Tracy Durnell Blog
The Grimy Residue of the AI Bubble by Dr. Alex Hanna But I’m more pessimistic — and frankly upset — about what will be left behind once the AI bubble pops. Already, Google and Microsoft have sheepishly admitted that they are far from reaching their climate goals, due to the large investment in AI. …Will […]
https://tracydurnell.com/2024/07/25/when-will-the-bubble-pop/
date: 2024-07-25, from: John Naughton’s online diary
l’Auto Following the Route Napoleon on our drive northwards through the Rhone Alps a couple of weeks ago, we stopped for coffee in the village of Corps and came on this quaint vehicle. It was small but perfectly formed, as … Continue reading
https://memex.naughtons.org/friday-26-july-2024/39676/
date: 2024-07-25, updated: 2024-07-25, from: Jason Kittke’s blog
https://kottke.org/24/07/the-origin-evolution-of-italian-stuffed-pasta-shapes
date: 2024-07-25, updated: 2024-07-25, from: Jason Kittke’s blog
https://kottke.org/24/07/0045019-susannah-breslin-discover
@Dave Winer’s Scripting News (date: 2024-07-25, from: Dave Winer’s Scripting News)
We’re at a huge fork in the road. One fork – goodbye USA, the other way, we’re stronger than ever. We’re in a good spot imho because Trump’s tank is empty. He’s old, tired, fat, addled, fetid, rotten. You have to work really hard not to see that. If it works, Biden will have stabilized the country, and Harris will erect the guardrails that make sure no one follows in Trump’s path, and the Supreme Court gets back into its proper place. They’ve been overthrowing our society, economy and political system. That all has to be reversed before it does too much damage, and prevented in the future. I want to know why the court can’t be expanded, and if Harris will put that in her platform.
http://scripting.com/2024/07/25.html#a200442
date: 2024-07-25, updated: 2024-07-25, from: Jason Kittke’s blog
https://kottke.org/24/07/0045020-an-interview-with-yachts-
@Dave Winer’s Scripting News (date: 2024-07-25, from: Dave Winer’s Scripting News)
Biden’s speech might turn out to be a Gettysburg type speech. I hope it does.
http://scripting.com/2024/07/25.html#a193040
@Dave Winer’s Scripting News (date: 2024-07-25, from: Dave Winer’s Scripting News)
Software-wise I realized recently that everything that takes me away from creating really nice writing and publishing tools is a waste. I have to get off track because there are huge holes in the web as a runtime platform. And every year it gets worse as new incompatible languages are added, new incompatible stacks built. As a result we have to re-do everything all the time, and never get a chance to create new user experience. The market fragments, which is exactly what the tech companies want. It keeps their products from becoming commodities. And like it or not, the politicians and corporations don’t want us writing too much, they just want us working, donating to their campaigns, paying taxes, buying their crap, and not getting all agitated about things they don’t care about.
http://scripting.com/2024/07/25.html#a192311
date: 2024-07-25, from: Dave Winer’s Scripting News
I am optimistic that Trump is headed for the graveyard of history, shortly.
First time I’ve felt like this in a long time.
When (if) that happens, we can use Cory Doctorow’s excellent concept enshitification to describe what he did to the American political system.
He also stress tested it, and we would be the greatest fools imaginable if we didn’t add some seriously enforceable guardrails to prevent this kind of attack happening in the future.
Might work out well to have a lawyer in the White House.
http://scripting.com/2024/07/25/191835.html?title=optimisim
@Dave Winer’s Scripting News (date: 2024-07-25, from: Dave Winer’s Scripting News)
I want a Masto-clone that does not do replies. You can’t insert anything under my idea, but you can if you like include my idea, as a link, in yours. This model works. I think by now we know the other way does not work. BTW I use the term Masto-clone interchangeably with Twitter-like. Let’s spread the love around.
http://scripting.com/2024/07/25.html#a191605
date: 2024-07-25, from: Dave Winer’s Scripting News
JD goes as a childless cat lady in the Cretins of Trumpland krewe.
http://scripting.com/2024/07/25/191217.html?title=jdCrankGoesToMardiGras
@Dave Winer’s Scripting News (date: 2024-07-25, from: Dave Winer’s Scripting News)
I almost used enshitification in a post yesterday.
http://scripting.com/2024/07/25.html#a190517
@Dave Winer’s Scripting News (date: 2024-07-25, from: Dave Winer’s Scripting News)
It’s weird that JD Vance goes out with the insults before most people have any idea who he is. Instead of childless cat ladies sticking to Kamala, it’s sticking to him, which I’m pretty sure wasn’t his intent.
http://scripting.com/2024/07/25.html#a190304
@Dave Winer’s Scripting News (date: 2024-07-25, from: Dave Winer’s Scripting News)
Pretty remarkable how abusive the bots on Twitter have become. Makes discourse there seem pretty silly. Might as well turn it into a one-way medium, for all practical purposes that’s what it is.
http://scripting.com/2024/07/25.html#a190245
date: 2024-07-25, updated: 2024-07-25, from: Jason Kittke’s blog
https://kottke.org/24/07/incredible-time-lapse-movies-of-exoplanets
date: 2024-07-25, updated: 2024-07-26, from: Bruce Schneier blog
Friday’s massive internet outage, caused by a mid-sized tech company called CrowdStrike, disrupted major airlines, hospitals, and banks. Nearly 7,000 flights were canceled. It took down 911 systems and factories, courthouses, and television stations. Tallying the total cost will take time. The outage affected more than 8.5 million Windows computers, and the cost will surely be in the billions of dollarseasily matching the most costly previous cyberattacks, such as NotPetya.
The catastrophe is yet another reminder of how brittle global internet infrastructure is. It’s complex, deeply interconnected, and filled with single points of failure. As we experienced last week, a single problem in a small piece of software can take large swaths of the internet and global economy offline…
date: 2024-07-25, updated: 2024-07-25, from: Jason Kittke’s blog
https://kottke.org/24/07/0045017-on-her-birthday-us-rep
date: 2024-07-25, from: Heather Cox Richardson blog
https://heathercoxrichardson.substack.com/p/july-24-2024-56c
date: 2024-07-25, updated: 2024-07-25, from: Jason Kittke’s blog
https://kottke.org/24/07/0045016-fun-little-browser-game-w
date: 2024-07-25, updated: 2024-07-25, from: Jason Kittke’s blog
https://kottke.org/24/07/0045015-laura-dern-was-forced-to
date: 2024-07-25, from: James Fallows, Substack
A writer who was a joy to know, and to read.
https://fallows.substack.com/p/the-man-who-loved-politics-mr-walter
date: 2024-07-25, from: Alex Schroeder’s Blog
I was wondering whether I should get back to Gridmapper, but not using Javascript and the web but using Common Lisp. I spent some time on this two years ago. Of course by now I have forgotten everything – like how to build it!
This is the Makefile that seems to work, given that I have both
gridmapper.asd
and gridmapper.lisp
in the
current directory.
SHELL = /bin/sh
LISP ?= sbcl --non-interactive
PWD = $(shell pwd)
build:
$(LISP) --eval '(asdf:load-asd "$(PWD)/gridmapper.asd")' \
--eval '(asdf:load-system :gridmapper)' \
--eval '(asdf:make :gridmapper)' \
--eval '(quit)'
Surely there is a better way to do this?
If I replace (asdf:load-system :gridmapper)
with
(ql:quickload :gridmapper)
it no longer gives me a warning
about cl-colors.asd
which I don’t know anything about. I
guess the warning is still preferable because it means no dependency on
Quicklisp? I have no idea. The
README
comes with a long explanation of what to install and how to do it, in
order to build Gridmapper – including the use of Quicklisp.
The hairiest part is that I need access to a function that isn’t exported from the Cairo package. So now I’m accessing the private function (using two colons):
;; Sorry for the ugly hack… cairo_format_stride_for_width is not exported.
(cairo::cairo_format_stride_for_width :CAIRO_FORMAT_ARGB32 (surface-width surface)))))
Two years ago, there was a different solution to this that apparently no longer works. 🤷
2024-07-25. Another option would be to switch to a
different binding of the SDL2 library, of course.
hu.dwim.sdl
sounds like the package I need? Sadly, there is
no documentation. The SDL2 symbols are translated by the rules given
into Common Lisp symbols. Given my lack of understanding, that makes it
difficult. Furthermore, the binding I’ve been using until now came with
hand-written convenience methods such as with-rects
that
don’t exist in this other binding. There is some porting to do. And
given all of that… I must confess that it makes me tired.
Using the browser as a universal user-interface is a pretty cool idea! Even if the application itself is a stand-alone program that can act as a web-server (like Oddmu), all the hard parts are abstracted away: line-breaks, hyphenation, spell-checking when writing. Perhaps using the canvas is hard? But using the DOM and SVG is something I’ve done countless times and by now I know my way around.
Sigh.
I suspect something like the following is required for every symbol that I want to use:
(defun render-fill-rect (&rest args) (apply 'HU.DWIM.SDL.FFI::|SDL_RenderFillRect| args))
And then take a look at the arguments. The other SDL2 binding already has this.
rect.lisp
defines these:
(defun make-rect (x y w h)
"Allocate and return a new SDL_Rect filled in with the arguments."
(c-let ((rect sdl2-ffi:sdl-rect))
(setf (rect :x) x
(rect :y) y
(rect :w) w
(rect :h) h)
rect))
(define-struct-accessors (rect sdl2-ffi:sdl-rect)
:x :y (width :w) (height :h))
render.lisp
defines this:
(defun render-fill-rect (renderer sdl-rect)
"Use this function to fill a rectangle on the current rendering target with
the drawing color. "
(check-rc (sdl2-ffi.functions:sdl-render-fill-rect renderer sdl-rect)))
So I am between a rock and a hard place. The SDL2 bindings I had were pretty good. They don’t come with bindings for SDL2/gfx so I would I need to do the missing legwork myself. Which I could do.
Or I could stick with Javascript and the web.
Sadly, the situation for the Cairo library doesn’t appear to be much
better. The function format-stride-for-width
is not
exported and I suspect nobody is actively working on the library.
My issue has
no reaction since Jul 20, 2022.
https://alexschroeder.ch/view/2024-07-24-gridmapper-local
date: 2024-07-25, updated: 2024-07-25, from: Jason Kittke’s blog
https://kottke.org/24/07/we-choose-freedom
date: 2024-07-25, updated: 2024-07-25, from: Jason Kittke’s blog
https://kottke.org/24/07/0045008-a-recent-book-van-gogh
date: 2024-07-25, from: David Rosenthal’s blog
Kanav Kariya |
In many cases, the essential attribute of a crypto token is liquidity: What you want, often, is a token that trades a lot, because your goal for the token is to trade it a lot. Real-world utility, a sensible business model, acceptance in real transactions, etc., are all less important than just trading if you think of crypto as a toy market for traders to play with. If a token trades a lot at a high price, that in itself justifies the price, because that is all that is asked of a token: It doesn’t need to have a good underlying business or cash flows; it just has to trade a lot at a high price.Below the fold I discuss the astonishing story behind this explanation of why wash trading is so rife in cryptocurrencies.
The firm needed to test the mettle of its would-be staffers—whether they could parse the nuances in financial markets and translate them into algorithmic trading models. But it couldn’t give the temporary hires the keys to the kingdom, with its proprietary strategies and billions of dollars in capital.Levine comments:
Crypto offered a solution. The sector had its own tradable assets, exchanges, and quirks, but it was separated enough from Jump’s world of stocks and bonds that it wouldn’t pose a threat.
It feels like a useful mental model for crypto: Crypto is what you get when you take the smart ambitious interns at traditional financial firms and put them in charge of their own play market. Only for real money.Jump Crypto made markets, and for many shitcoins they were the dominant market maker, and thus the reason why the shitcoins traded a lot, and thus the source of their value. This was because they made deals with the shitcoin projects:
Token projects will lend market makers a large supply of tokens so they can kickstart trading. Some firms also negotiate a call option, which gives the market makers the right to buy a chunk of the tokens for a steep discount if the project goes well. Selig says that the inverted structure in crypto—where market makers work with token projects, rather than exchanges—makes some sense, given projects’ need to spur trading activity. It also creates dynamics that would never be allowed in TradFi. While crypto market makers still make money off the trading spreads, the massive windfalls often come from those lucrative call options.If I’m a shitcoin promoter, I can sell Jump Crypto cheap call options for a bunch of my new shitcoin. They will pump the price by wash trading it. We’ll, both get rich; me from selling some of my inflated tokens, and Jump Crypto by exercising the options and selling. Who are we selling to? The retail speculators sucked in by the spectacle of a new token with a rapidly rising “price”. This is another version of the VC’s List And Dump Schemes described by Fais Khan in “You Don’t Own Web3”: A Coinbase Curse and How VCs Sell Crypto to Retail.
For a firm like Jump, becoming the market maker for a token project meant unlimited upside with no real financial risk. “If you’re at Jump, you decide which one is going to win,” one crypto exchange founder tells Fortune, speaking on the condition of anonymity to discuss industry dynamics.And Levine comments:
Man, what a crazy time the crypto boom was. It really did teach a generation of young financial traders that they could build perpetual motion machines: You make a token, you trade it, that makes it go up, the value comes from you trading it, you can do no wrong, you get rich, “unlimited upside with no real financial risk.”Like most financial schemes, this all worked great at first. Two of the shitcoins for which Jump Crypto made markets were Do Kwon’s Terra/Luna pair. Schwartz’ article starts by recounting a May 2021 crisis:
[Jump Crypto] had become a kind of silent partner for one of the most high-profile projects in crypto, an algorithmic stablecoin called TerraUSD that was meant to maintain a $1 peg through a complex mechanism tied to a related cryptocurrency called Luna—a careful dance that Jump helped coordinate on the backend by fulfilling trades. But despite the bluster of Terra’s swaggering founder, Do Kwon, the stablecoin was failing. It had lost its peg.Jump Crypto and Do Kwon averted the crisis:
Over the next week, Jump secretly bought up huge tranches of TerraUSD to create the appearance of demand and restore the coin’s value to $1, according to court documents. Meanwhile, Kwon “vested” Jump, meaning he agreed to deliver 65 million tokens of Luna to Jump at just $0.40, even though the coin would trade, at times, at more than $90 on exchanges.
Jump ultimately made $1 billion from that agreement alone
Terra loses
peg |
These dubious heroics succeeded only in staving off the inevitable: When TerraUSD lost its peg again a year later, there was nothing Jump could do. By May 2022, the cryptocurrency had grown in popularity, and its failure was catastrophic. Some $40 billion in investors’ money evaporated into thin air in a matter of days.
The details of Jump Crypto’s involvement with Terra/Luna were
revealed because the SEC’s case against Terraform Labs and Kwon was
based partly on a whistleblower from Jump Crypto. The testimony will
probably feature in the criminal case against Kwon, currently awaiting
extradition from Montenegro.
https://blog.dshr.org/2024/07/matt-levine-explains-cryptocurrency.html
date: 2024-07-25, from: mrusme blog
“Córdoba, is a city in Andalusia, Spain, and the capital of the province of Córdoba. It is the third most populated municipality in Andalusia.”
https://xn--gckvb8fzb.com/travel/spain/cordoba/
date: 2024-07-25, updated: 2024-07-24, from: Bruce Schneier blog
I am the Chief of Security Architecture at Inrupt, Inc., the company that is commercializing Tim Berners-Lee’s Solid open W3C standard for distributed data ownership. This week, we announced a digital wallet based on the Solid architecture.
Details are here, but basically a digital wallet is a repository for personal data and documents. Right now, there are hundreds of different wallets, but no standard. We think designing a wallet around Solid makes sense for lots of reasons. A wallet is more than a data store—data in wallets is for using and sharing. That requires interoperability, which is what you get from an open standard. It also requires fine-grained permissions and robust security, and that’s what the Solid protocols provide…
https://www.schneier.com/blog/archives/2024/07/data-wallets-using-the-solid-protocol.html
date: 2024-07-25, from: Robert Reich’s blog
Musk is going all out for Trump. Let’s boycott Musk’s companies.
https://robertreich.substack.com/p/beware-the-mump-0ee
date: 2024-07-25, from: James Fallows, Substack
‘I revere this office, but I love my country more’: Joe Biden on passing the torch, to Kamala Harris and to the rest of us.
https://fallows.substack.com/p/election-countdown-103-days-to-go
date: 2024-07-25, from: Heather Cox Richardson blog
Tonight, President Joe Biden explained to the American people why he decided to refuse the 2024 Democratic presidential nomination and hand the torch to Vice President Kamala Harris.
https://heathercoxrichardson.substack.com/p/july-24-2024
@Dave Winer’s Scripting News (date: 2024-07-25, from: Dave Winer’s Scripting News)
Is Reddit now only available on Google search?
http://scripting.com/2024/07/24.html#a002741
@Dave Winer’s Scripting News (date: 2024-07-25, from: Dave Winer’s Scripting News)
Fantastic speech by President Biden. It’s good we’ll have both a president and a campaign and that they’ll be separate thing. I look forward to reading it slowly. And he put a cap on the awful communication of the last month, he took control of the story from the snobs and shit throwers in the press.
http://scripting.com/2024/07/24.html#a002055
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
https://kottke.org/24/07/simple-advice-for-personal-finance-1
date: 2024-07-24, from: Dan Rather’s Steady
The vice president is largely unknown to most of us
https://steady.substack.com/p/reintroducing-kamala-harris
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
https://kottke.org/24/07/0045004-in-supposedly-affluent-we
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
https://kottke.org/24/07/0045006-a-study-of-the-worlds
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
https://kottke.org/24/07/0045012-some-good-climate-news-th
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
https://kottke.org/24/07/0044986-if-youre-feeling-nostalgi
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
https://kottke.org/24/07/0045003-the-gods-of-logic-benjami
@Dave Winer’s Scripting News (date: 2024-07-24, from: Dave Winer’s Scripting News)
How Harry McCracken discovered that ChatGPT is a deeply and broadly knowledgable, infinitely patient, always available, inexpensive, programming partner. I’ve been using it that way for a year, and it has enabled me to take on much more ambitious and complete projects. It could evolve into something much more powerful, but where it is now is already amazing. The criticisms for ChatGPT have mostly missed the point of what it’s useful for.
http://scripting.com/2024/07/24.html#a174217
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
https://kottke.org/24/07/books-to-read-to-understand-where-project-2025-came-from
date: 2024-07-24, from: Heather Cox Richardson blog
https://heathercoxrichardson.substack.com/p/july-23-2024-51f
date: 2024-07-24, from: Liam on Linux
ARRA was the first ever Dutch computer.
C.S. Scholten
In the summer of 1947, I was on vacation in Almelo. Earlier that year,
on the same day as my best friend and inseparable study mate, Brain Jan
Loopstra, I had successfully passed the qualifying exams in mathematics
and physics. The mandatory brief introduction to the three major
laboratories—the Physics Laboratory, the V.d. Waals Laboratory, and the
Zeeman Laboratory—was behind us, and we were about to start our doctoral
studies in experimental physics. For two years, we would be practically
working in one of the aforementioned laboratories.
One day, I received a telegram in Almelo with approximately the
following content: "Would you like to assist in building an automatic
calculating machine?" For assurance, another sentence was added:
"Mr. Loopstra has already agreed." The sender was "The Mathematical
Center," according to further details, located in Amsterdam. I briefly
considered whether my friend had already confirmed my cooperation, but
in that case, the telegram seemed unnecessary, so I dismissed that
assumption. Both scenarios were equally valid: breaking up our
long-standing cooperation (dating back to the beginning of high school)
was simply unthinkable. Furthermore, the telegram contained two
attractive points: "automatic calculating machine" and "Mathematical
Center," both new concepts to me. I couldn’t deduce more than the name
suggested. Since the cost of a telegram exceeded my budget, I posted a
postcard with my answer and resumed my vacation activities. Those of you
who have been involved in recruiting staff will, I assume, be filled
with admiration for this unique example of recruitment tactics: no fuss
about salary or working hours, not to mention irrelevant details like
pension, vacation, and sick leave. For your reassurance, it should be
mentioned that I was indeed offered a salary and benefits, which, in our
eyes, were quite generous.
I wasn’t too concerned about how the new job could be combined with the
mandatory two-year laboratory work. I believed that a solution had to be
found for that. And a solution was found: the laboratory work could be
replaced by our work at the Mathematical Center.
Upon returning to Amsterdam, I found out the following: the Mathematical
Center was founded in 1946, with a goal that could roughly be inferred
from its name. One of the departments was the ‘Calculation Department,’
where diligent young ladies, using hand calculators—colloquially known
as ‘coffee grinders’—numerically solved, for example, differential
equations (in a later stage, so-called ‘bookkeeping machines’ were added
to the machinery). The problems dealt with usually came from external
clients. The head of the Calculation Department was Dr. ir. A. van
Wijngaarden. Stories about automatic calculating machines had also
reached the management of the Mathematical Center, and it was clear from
the outset that such a tool—if viable—could be of great importance,
especially for the Calculation Department. However, it was not possible
to buy this equipment; those who wanted to discuss it had to build it
themselves. Consequently, it was decided to establish a separate group
under the Calculation Department, with the task of constructing an
automatic calculating machine. Given the probable nature of this group’s
activities, it was somewhat an oddity within the Mathematical Center,
doomed to disappear, if not after completing the first machine, then
certainly once this kind of tool became a normal trade
object.
We were not the only group in the Netherlands involved in constructing
calculating machines. As we later discovered, Dr. W.L. v.d. Poel had
already started constructing a machine in 1946.
Our direct boss was Van Wijngaarden, and our newly formed two-man group
was temporarily housed in a room of the Physics Laboratory on Plantage
Muidergracht, where Prof. Clay was in charge. Our first significant act
was the removal of a high-voltage installation in the room, much to the
dismay of Clay, who was fond of the thing but arrived too late to
prevent the disaster. Then we thought it might be useful to equip the
room with some 220V sockets, so we went to Waterlooplein and returned
with a second-hand hammer, pliers, screwdriver, some wire, and a few
wooden (it was 1947!) sockets. I remember wondering whether we could
reasonably submit the exorbitant bill corresponding to these purchases.
Nonetheless, we did.
After providing our room with voltage, we felt an unpleasant sensation
that something was expected from us, though we had no idea how to start.
We decided to consult the sparse literature. This investigation yielded
two notable articles: one about the ENIAC, a digital (decimal) computer
designed for ballistic problems, and one about a differential analyzer,
a device for solving differential equations, where the values of
variables were represented by continuously variable physical quantities,
in this case, the rotation of shafts. The first article was abominably
written and incomprehensible, and as far as we understood it, it was
daunting, mentioning, for instance, 18,000 vacuum tubes, a number we
were sure our employer could never afford. The second article (by V.
Bush), on the other hand, was excellently written and gave us the idea
that such a thing indeed seemed buildable.
Therefore, it had to be a differential analyzer, and a mechanical one at
that. As we now know, we were betting on the wrong horse, but first, we
didn’t know that, and second, it didn’t really matter. Initially, we
were not up to either task simply because we lacked any electronic
training. We were supposed to master electricity and atomic physics, but
how a vacuum tube looked inside was known only to radio amateurs among
us, and we certainly were not. Our own (preliminary) practicum
contained, to my knowledge, no experiment in which a vacuum tube was the
object of study, and the physics practicum for medical students (the
so-called ‘medical practicum’), where we had supervised for a year as
student assistants, contained exactly one such experiment. It involved a
rectifier, dated by colleagues with some training in archaeology to
about the end of the First World War. The accompanying manual prescribed
turning on the ‘plate voltage’ only tens of seconds after the filament
voltage, and the students had to answer why this instruction was given.
The answers were sometimes very amusing. One such answer I won’t
withhold from you: ‘That is to give the current a chance to go around
once.’
Our first own experiment with a vacuum tube would not have been out of
place in a slapstick movie. It involved a triode, in whose anode circuit
we included a megohm resistor for safety. Safely ensconced behind a
tipped-over table, we turned on the ‘experiment.’ Unlike in a slapstick
movie, nothing significant happened in our case.
With the help of some textbooks, and not to forget the ‘tube manuals’ of
some manufacturers of these useful objects, we somewhat brushed up on
our electronic knowledge and managed to get a couple of components,
which were supposed to play a role in the differential analyzer, to a
state where their function could at least be guessed. They were a moment
amplifier and a curve follower. How we should perfect these devices so
that they would work reliably and could be produced in some numbers
remained a mystery to us. The solution to this mystery was never found.
Certainly not by me, as around this time (January 1948), I was summoned
to military service, which couldn’t do without me. During the two years
and eight months of my absence (I returned to civilian life in September
1950), a drastic change took place, which I could follow thanks to
frequent contacts with Loopstra.
First, the Mathematical Center, including our group, moved to the
current building at 2nd Boerhaavestraat 49. The building looked somewhat
different back then. The entire building had consisted of two
symmetrically built schools. During the war, the building was
requisitioned by the Germans and used as a garage. In this context, the
outer wall of one of the gymnasiums was demolished. Now, one half was
again in use as a school, and the other half, as well as the attic above
both halves, was assigned to the Mathematical Center. The Germans had
installed a munitions lift in the building. The lift was gone, but the
associated lift shaft was not. Fortunately, few among us had suicidal
tendencies. The frosted glass in the toilet doors (an old school!) had
long since disappeared; for the sake of decorum, curtains were hung in
front of them.
Van Wijngaarden could operate for a long time over a hole in the floor
next to his desk, corresponding with a hole in the ceiling of the room
below (unoccupied). Despite his impressive cigar consumption at that
time, I didn’t notice that this gigantic ashtray ever filled
up.
The number of employees in our group had meanwhile expanded somewhat;
all in all, perhaps around five.
The most significant change in the situation concerned our further
plans. The idea of a differential analyzer was abandoned as it had
become clear that the future belonged to digital computers. Upon my
return, a substantial part of such a computer, the ‘ARRA’ (Automatische
Relais Rekenmachine Amsterdam), had already been realized. The main
components were relays (for various logical functions) and tubes (for
the flip-flops that composed the registers). The relays were Siemens
high-speed relays (switching times in the order of a few milliseconds),
personally retrieved by Loopstra and Van Wijngaarden from an English war
surplus. They contained a single changeover contact (break-before-make),
with make and break contacts rigidly set, although adjustable. Logically
appealing were the two separate coils (with an equal number of
windings): both the inclusive and exclusive OR functions were within
reach. The relays were mounted on octal bases by us and later enclosed
in a plastic bag to prevent contact contamination.
They were a constant source of concern: switching times were unreliable
(especially when the exclusive OR was applied) and contact degradation
occurred nonetheless. Cleaning the contacts (‘polishing the pins’) and
resetting the switching times became a regular pastime, often involving
the girls from the Calculation Department. The setting was done on a
relay tester, and during this setting, the contacts were under
considerable voltage. Although an instrument with a wooden handle was
used for setting, the curses occasionally uttered suggested it was not
entirely effective.
For the flip-flops, double triodes were used, followed by a power tube
to drive a sufficient number of relays, and a pilot lamp for visual
indication of the flip-flop state. Since the A had three registers, each
30 bits wide, there must have been about 90 power tubes, and we noted
with dismay that 90 power tubes oscillated excellently. After some time,
we knew exactly which pilot lamp socket needed a 2-meter wire to
eliminate the oscillation.
At a later stage, a drum (initially, the instructions were read from a
plugboard via step switches) functioned as memory; for input and output,
a tape reader (paper, as magnetic tape was yet to be invented) and a
teleprinter were available. A wooden kitchen table served as the control
desk.
Relays and tubes might have been the main logical building blocks, but
they were certainly not the only ones. Without too much exaggeration, it
can be said that the ARRA was a collection of what the electronic
industry had to offer, a circumstance greatly contributed to by our
frequent trips to Eindhoven, from where we often returned with some
‘sample items.’ On the train back, we first reminisced about the
excellent lunch we had enjoyed and then inventoried to determine if we
brought back enough to cover the travel expenses. This examination
usually turned out positive.
It should be noted that the ARRA was mainly not clocked. Each primitive
operation was followed by an ‘operation complete’ signal, which in turn
started the next operation. It is somewhat amusing that nowadays such a
system is sometimes proposed again (but hopefully more reliable than
what we produced) to prevent glitch problems, a concept we were not
familiar with at the time.
Needless to say, the ARRA was so unreliable that little productive work
could be done with it. However, it was officially put into use. By
mid-1952, this was the case. His Excellency F.J. Th. Rutten, then
Minister of Education, appeared at our place and officially inaugurated
the ARRA with some ceremony. For this purpose, we carefully chose a
demonstration program with minimal risk of failure, namely producing
random numbers à la Fibonacci. We had rehearsed the demonstration so
often that we knew large parts of the output sequence by heart, and we
breathed a sigh of relief when we found that the machine produced the
correct output. In hindsight, I am surprised that this demonstration did
not earn us a reprimand from higher-ups. Imagine: you are the Minister
of Education, thoroughly briefed at the Department about the wonders of
the upcoming computing machines; you attend the official inauguration,
and you are greeted by a group explaining that, to demonstrate these
wonders, the machine will soon produce a series of random numbers. When
the moment arrives, they tell you with beaming faces that the machine
works excellently. I would have assumed that, if not with the truth, at
least with me, they were having a bit of fun. His Excellency remained
friendly, a remarkable display of self-control.
The emotions stirred by this festivity were apparently too much for the
ARRA. After the opening, as far as I recall, no reasonable amount of
useful work was ever produced. After some time, towards the end of 1952,
we decided to give up the ARRA as a hopeless case and do something else.
There was another reason for this decision. The year 1952 should be
considered an excellent harvest year for the Mathematical Center staff:
in March and November of that year, Edsger Dijkstra and Gerrit Blaauw
respectively appeared on the scene. Of these two, the latter is of
particular importance for today’s story and our future narrative. Gerrit
had worked on computers at Harvard, under the supervision of Howard
Aiken. He had also written a dissertation there and was willing to lend
his knowledge and insight to the Mathematical Center. We were not very
compliant boys at that time. Let me put it this way: we were aware that
we did not have a monopoly on wisdom, but we found it highly unlikely
that anyone else would know better. Therefore, the ‘newcomer’ was viewed
with some suspicion. Gerrit’s achievement was all the greater when he
convinced us in a lecture of the validity of what he proposed. And that
was quite something: a clocked machine, uniform building blocks
consisting of various types of AND/OR gates and corresponding
amplifiers, pluggable (and thus interchangeable) units, a neat design
method based on the use of two alternating, separate series of clock
pulses, and proper documentation.
We were sold on the plan and got to work. A small difficulty had to be
overcome: what we intended to do was obviously nothing more or less than
building a new machine, and this fact encountered some political
difficulties. The solution to this problem was simple: formally, it
would be a ‘revision’ of the ARRA. The new machine was thus also called
ARRA II (we shall henceforth speak of A II), but the double bottom was
perfectly clear to any visitor: the frames of the two machines were
distinctly separated, with no connecting wire between them.
For the AND/OR gates, we decided to use selenium diodes. These usually
arrived in the form of selenium rectifiers, a sort of firecrackers of
varying sizes, which we dismantled to extract the individual rectifier
plates, about half the diameter of a modern-day dime. The assembly—the
selenium plates couldn’t tolerate high temperatures, so soldering was
out of the question—was as follows: holes were drilled in a thick piece
of pertinax. One end of the hole was sealed with a metal plug; into the
resulting pot hole went a spring and a selenium plate, and finally, the
other end of the hole was also sealed with a metal plug. For connecting
the plugs, we thought the use of silver paint was appropriate, and soon
we were busy painting our first own circuits. Some time later, we had
plenty of reasons to curse this decision. The reliability of these
connections was poor, to put it mildly, and around this time, the
‘high-frequency hammer’ must have been invented: we took a small hammer
with a rubber head and rattled it along the handles of the units, like a
child running its hand along the railings of a fence. It proved an
effective means to turn intermittent interruptions into permanent ones.
I won’t hazard a guess as to how many interruptions we introduced in
this way. At a later stage, the selenium diodes were replaced by
germanium diodes, which were simply soldered.
The AND/OR gates were followed by a triode amplifier and a cathode
follower. ARRA II also got a drum and a tape reader. For output, an
electric typewriter was installed, with 16 keys operable by placing
magnets underneath them. The decoding tree for these magnets provided us
with the means to build an echo-check, and Dijkstra fabricated a routine
where, simultaneously with printing a number, the same number (if all
went well) was reconstructed. I assume we thus had one of the first
fully controlled print routines. Characteristic of ARRA II’s speed was
the time for an addition: 20 ms (the time of a drum
rotation).
ARRA II came into operation in December 1953, this time without
ministerial assistance, but it performed significantly more useful work
than its predecessor, despite the technical difficulties outlined
above.
The design phase of ARRA II marks for me the point where computer design
began to become a profession. This was greatly aided by the introduction
of uniform building blocks, describable in a multidimensional binary
state space, making the use of tools like Boolean algebra meaningful. We
figured out how to provide ARRA II with signed multiplicative addition
for integers (i.e., an operation of the form (A,S) := (M) * (±S’) + (A),
for all sign combinations of (A), (S), and (M) before and of the
result), despite the fact that ARRA II had only a counter as wide as a
register. As far as I can recall, this was the first time I devoted a
document to proving that the proposed solution was correct. Undoubtedly,
the proof was in a form I would not be satisfied with today, but still…
It worked as intended, and you can imagine my amusement when, years
later, I learned from a French book on computers that this problem was
considered unsolvable.
In May 1954, work began on a (slightly modified) copy of ARRA II, the
FERTA (Fokker’s First Calculating Machine Type A), intended for Fokker.
The FERTA was handed over to Fokker in April 1955. This entire affair
was mainly handled by Blaauw and Dijkstra. Shortly thereafter, Blaauw
left the service of the Mathematical Center.
In June 1956, the ARMAC (Automatic Calculating Machine Mathematical
Center), successor to ARRA II, was put into operation, several dozen
times faster than its predecessor. Design and construction took about 1½
years. Worth mentioning is that the ARMAC first used cores, albeit on a
modest scale (in total 64 words of 34 bits each, I believe). For
generating the horizontal and vertical selection currents for these
cores, we used large cores. To drive these large cores, however, they
had to be equipped with a coil with a reasonable number of windings.
Extensive embroidery work didn’t seem appealing to us, so the following
solution was devised: a (fairly deep) rim was turned from transparent
plastic. Thus, we now had two rings: the rim and the core. The rim was
sawed at one place, and the flexibility of the material made it possible
to interlock the two rings. Then, the coil was applied to the rim by
rotating it from the outside using a rubber wheel. The result was a
neatly wound coil. The whole thing was then encased in Araldite. The
unintended surprising effect was that, since the refractive indices of
the plastic and Araldite apparently differed little, the plastic rim
became completely invisible. The observer saw a core in the Araldite
with a beautifully regularly wound coil around it. We left many a
visitor in the dark for quite some time about how we produced these
things!
The time of amateurism was coming to an end. Computers began to appear
on the market, and the fact that our group, which had now grown to
several dozen employees, did not really belong in the Mathematical
Center started to become painfully clear to us. Gradual dissolution of
the group was, of course, an option, but that meant destroying a good
piece of know-how. A solution was found when the Nillmij, which had been
automating its administration for some time using Bull punch card
equipment, declared its willingness to take over our group as the core
of a new Dutch computer industry. Thus it happened. The new company,
N.V. Elektrologica, was formally established in 1956, and gradually our
group’s employees were transferred to Elektrologica, a process that was
completed with my own transfer on January 1, 1959. As the first
commercial machine, we designed a fully transistorized computer, the XI,
whose prototype performed its first calculations at the end of 1957. The
speed was about ten times that of the ARMAC.
With this, I consider the period I had to cover as concluded. When I
confront my memories with the title of this lecture, it must be said
that ‘designing computers’ as such hardly existed: the activities that
could be labeled as such were absorbed in the total of concerns that
demanded our attention. Those who engaged in constructing calculating
machines at that time usually worked in very small teams and performed
all the necessary tasks. We decided on the construction of racks, doors,
and closures, the placement of fans (the ARMAC consumed 10 kW!), we
mounted power distribution cabinets and associated wiring, we knew the
available fuses and cross-sections of electrical cables by heart, we
soldered, we peered at oscillographs, we climbed into the machine armed
with a vacuum cleaner to clean it, and, indeed, sometimes we were also
involved in design.
We should not idealize. As you may have gathered from the above, we were
occasionally brought to the brink of despair by technical problems.
Inadequate components plagued us, as did a lack of knowledge and
insight. This lack existed not only in our group but globally the field
was not yet mastered.
However, it was also a fascinating time, marked by a constant sense of
‘never before seen,’ although that may not always have been literally
true. It was a time when organizing overtime, sometimes lasting all
night, posed no problem. It was a time when we knew a large portion of
the participants in international computer conferences at least by
sight!
comments
https://liam-on-linux.dreamwidth.org/91041.html
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
https://kottke.org/24/07/0045005-in-the-latest-data-releas
date: 2024-07-24, updated: 2024-07-24, from: Jason Kittke’s blog
https://kottke.org/24/07/0045010-martin-pollack-writes-abo
date: 2024-07-24, updated: 2024-07-24, from: Bruce Schneier blog
Supposedly the DHS has these:
The robot, called “NEO,” is a modified version of the “Quadruped Unmanned Ground Vehicle” (Q-UGV) sold to law enforcement by a company called Ghost Robotics. Benjamine Huffman, the director of DHS’s Federal Law Enforcement Training Centers (FLETC), told police at the 2024 Border Security Expo in Texas that DHS is increasingly worried about criminals setting “booby traps” with internet of things and smart home devices, and that NEO allows DHS to remotely disable the home networks of a home or building law enforcement is raiding. The Border Security Expo is open only to law enforcement and defense contractors. A transcript of Huffman’s speech was obtained by the Electronic Frontier Foundation’s Dave Maass using a Freedom of Information Act request and was shared with 404 Media…
https://www.schneier.com/blog/archives/2024/07/robot-dog-internet-jammer.html
date: 2024-07-24, from: Jeff Geerling blog
Getting Started with Meshtastic
<div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>After seeing the Meshtastic booth at Open Sauce, my Dad and I thought it would be fun to learn more about the low power radio tech by getting our own radios and experimenting.</p>
Then, we were contacted by Simon from Muzi Works, and he offered to send a few units of R1 and H1, his company’s pre-built Meshtastic nodes.
What’s a node, and what is Meshtastic? Excellent question.
Simply put—and copied shamelessly from the official website:
An open source, off-grid, decentralized, mesh network built to run on affordable, low-power devices
Meshtastic nodes are often tiny gumstick-size PCBs with a LoRa radio module, a couple buttons, a tiny OLED display, and a USB port.
<span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>Jeff Geerling</span></span>
https://www.jeffgeerling.com/blog/2024/getting-started-meshtastic
date: 2024-07-24, from: Daniel Stenberg Blog
On the curl website we of course list exactly what changes that go into each and every single release we do. In recent years I have even gone back and made sure we provide this information for every single release ever done. At the moment that means 258 releases, listing over 10,000 bugfixes and almost … Continue reading changelog changes
https://daniel.haxx.se/blog/2024/07/24/changelog-changes/
date: 2024-07-24, from: Robert Reich’s blog
Friends,
https://robertreich.substack.com/p/office-hours-for-vice-president
date: 2024-07-24, from: Heather Cox Richardson blog
Vice President Kamala Harris continues her momentum toward the 2024 presidential election since President Joe Biden’s surprise announcement on Sunday that he would not accept the 2024 Democratic presidential nomination.
https://heathercoxrichardson.substack.com/p/july-23-2024
date: 2024-07-24, from: Daniel Stenberg Blog
Numbers the 258th release11 changes63 days (total: 9,623)260 bugfixes (total: 10,531)423 commits (total: 32,704)0 new public libcurl function (total: 94)1 new curl_easy_setopt() option (total: 306)4 new curl command line option (total: 263)80 contributors, 38 new (total: 3,209)47 authors, 16 new (total: 1,288)2 security fixes (total: 157) Download the new curl release from curl.se as always. … Continue reading curl 8.9.0
https://daniel.haxx.se/blog/2024/07/24/curl-8-9-0/
date: 2024-07-24, from: Alex Schroeder’s Blog
Sometimes I have the urge to write a small editor, something like the kilo project: so small that it is barely usable. I also imagine it to have a sort of conversational UI – which I guess ed has? – if ed is your grumpiest of companions! – or maybe the M-x commands for emacs – and I guess I‘m looking at Oddµ as a site generator and Markdown file server and I wonder: what sort of editor would I need to maintain this? What sort of minimal SVG editing capabilities would be nice to have?
What if I could use an ed-like “conversational” interface, with better
prompts, wrapped in readline
for ‹Up, Return› combos to
repeat things, opening multiple files, switching between them, with
completion or menus, and saving it all in one go.
I think I will install rlwrap
as a first step and wrap
ed
and mail
in it.
When I read the Wikipedia pages of sam
and
acme
I get the feeling that the started out at the same
point and then moved towards a different, full-screen, mouse-support
paradigm.
What would my ed have, in addition to ed?
My ed would have the notion of “units”. Perhaps these can be defined by a separator marker, a regular expression. A “line” is a unit separated by a newline, or a “beginning of line” regular expression. A “sentence” is a unit separated by all sorts of punctuation followed by zero or more quotes and one or more spaces, and so on. A “block” is a unit separated by empty lines, or special line beginnings such as header markup or list item markup. A “section” is a unit separated by line beginnings with header markup. These unit names and the corresponding separators are defined in a file, per type, so that they can be changed.
File types are associated with file extensions or special matches (such as looking at the first two lines of a file).
My ed would have a config file so that it can be redefined in parts. For example, every file type has special, system dependent commands to “render” it, be it compilation, viewing, printing, etc. Perhaps mailcap could be an interesting option to fall back to.
My ed would be line oriented and still offer keyboard navigation using the arrows or vi-style keys. It would have two panes: the top one would show the file content and a cursor or the highlighted unit. The bottom one would be a command line history. The command line history shouldn’t be a complete file buffer that can be edited, though, because the temporal ordering seems important to me.
The navigation commands can also be used to modify the selection. Ideally, using arrows to move, shift arrows to select, and typing commands would all work seamlessly.
My ed would have commands that are words or even phrases, and can defined more of them in files, and edit and “source” them into your session. It would have understandable errors.
My ed would have a snarf buffer or a clipboard to use for cut, copy and insert. Cutting and copying would work on whole units.
My ed would have infinite undo and redo and an auto-save file. Perhaps the auto-save file would contain the redo script.
I’m starting to wonder whether I’m reinventing vi, here. 🤔
https://alexschroeder.ch/view/2024-07-24-ed
date: 2024-07-24, from: Alex Schroeder’s Blog
If you know Go, I think you’ll find the architecture of Oddmu to be very traditional: There is a list of actions it knows how to handle when it serves a site on the web and a list of commands it understands when called from the shell. Everything involving HTML or the RSS feed uses a Go template.
There were two things that were tricky, in hindsight. I didn’t know enough Go to know how best to do it and so it took me a long time to figure them out.
The first was what data to keep in memory. I didn’t want search to involve a database so I experimented a lot with different ways of indexing the content. Trigrams? Full-text? And what about scoring? In the end, I dropped all of that. The only thing I keep in memory is a map of page names and page titles as well as a map of hashtags and pages. I find that searching titles and hashtags is what I do most often. For everything else, I search the files. This, of course, is much slower but for a site of ten thousand pages it’s still fast enough. So figuring out how to do search was hard. Once I had this figured out, I discovered that keeping maps in memory when there are multiple Go routines being used by the web server means that I need locks. Both of my maps are in fact data structures that each contain a map and a lock. This was new to me and it took me a long time to realize that having the lock was important. For a while, I didn’t have those locks. 😅
The second thing that took me a long time to get right is that I wanted pages to be served from Oddµ when it runs as a web server and I wanted to be able to edit files locally and upload them (using rsync, for example) while it was still running on the server. I didn’t know about watching the filesystem for changes and had to learn how to do this: a watcher per directory, spawning new watchers when directories are created, and updating those maps I keep in memory as files are added, deleted or edited.
Watching the files introduced another complication, however: What if a user edited a page via the web? I already had code in place that would update my maps. Now the file system watcher would report the same file being written to, resulting in two updates. And what about a change to a file that results in multiple events: create a file, write something to the file, write some more to the file. Three events resulting in three updates? The code is therefore complicated.
If Oddµ knows that a file is going to change ahead of time, like when a user on the web saves an edit, the file is added to a map of ignored files for a second. When the file system watcher sees those changes, no updates are done because it knows that the edit handler already does it.
If Oddµ sees a file change because of somebody editing files directly, a one second timer is started. If another event for the same file arrives, the timer is reset to one second. Only when a second has elapsed without changes does the watcher do the updates to the internal data structures. That is to say, changes made to the file system regarding page title changes or hash tag changes take an effect on the web with a one second delay.
So now, with all that in place, think of all the go routines running in parallel. Every one second timer is a go routine. Every go routine accessing a map like the map if files to ignore means that this map needs to be a data structure containing a map and a lock.
When I look at that part of the code, I still get dizzy. 😵💫
2024-07-21. @bouncepaw asked about usability issues, specially in the context of using Oddµ for picture galleries. In my case, I think the hardest part is finding particular pictures. Consider the page of flowers in 2020. I know that there’s a sanseveria in bloom on that page, for example. But how can I find it? I can find the page if I search for “bogenhanf #pictures”, and then I can search for the same word on the page, and then I have to wait for a bit as the browser lazy-loads pictures.
Perhaps, if I could get into the habit of putting the image description into the Markdown alt text, I could index all the images and their alt text, providing direct access to the images. I guess I would also have to add special code to the Markdown renderer that made the alt text visible for regular visitors (as title attribute or as regular paragraphs). That’d be interesting.
Later. I have implemented something useful, I hope. If one of the search terms (excluding hashtags and predicates) matches an alt-text of an image, that image is included in the result.
Of course, almost none of my galleries use the alt-text, so right now there aren’t many pages that will show results for a query like “bogenhanf #pictures”.
My expectations regarding alt texts and title attributes for images have changed significantly as I’ve spent time on fedi, so I’m really not sure what to do about Markdown in this respect. Right now I’m in the habit of adding neither alt-text nor title attribute, trying to provide enough text in the paragraphs above or below. With this new search option, that might have to change, too. As a sighted person, I sort of expect the title attribute to be the same as the alt text.
https://alexschroeder.ch/view/2024-07-21-what-is-hard-about-oddmu
date: 2024-07-24, updated: 2024-07-24, from: Daring Fireball
https://1password.com/daringfireball
date: 2024-07-23, from: John Naughton’s online diary
Peak Viewing The Peak District viewed from Stanage Edge. Note the strategically-positioned crow. Photo by my son Pete. Quote of the Day “A new scientific truth does not triumph by convincing its opponents and making them see the light, but … Continue reading
https://memex.naughtons.org/wednesday-24-july-2024/39660/
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/13-year-old-daredevil-jumps-trash-cans-in-alley-on-junker-special-bike
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/0045007-chronic-pain-is-psychedel
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/0045000-flint-mi-is-giving-pregna
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/how-sci-fi-movies-have-changed-since-the-50s
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/0045009-livestream-of-a-blooming-
date: 2024-07-23, from: Heather Cox Richardson blog
https://heathercoxrichardson.substack.com/p/july-22-2024-0ab
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/trumps-massive-deportation-plan-echoes-concentration-camp-history
date: 2024-07-23, from: Om Malik blog
No matter how much I try to avoid political news, there’s no hiding from the forthcoming U.S. presidential election and the ensuing political circus. Not even technology newsletters are a respite. Charlie Warzel of The Atlantic and Sarah Frier of Bloomberg in their most recent editions made a point that echoes something I said two …
https://om.co/2024/07/23/musk-the-foxy-kingmaker/
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/0044995-a-generic-version-of-a
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/0044994-kamala-harris-is-to-the
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/0044993-from-scientific-american-
date: 2024-07-23, from: Alex Schroeder’s Blog
Apparently there’s a way to have Oddµ and Eglot cooperate in Emacs using Marksman.
Note that LSP integration only works in a “project”: a VCS repository,
or in the case of Marksman, a directory containing an (empty)
.marksman.toml
file. This latter option is important if
your notes aren’t under version control.
After installing the Marksman binary, use something like the following. This installs Eglot for Go mode, Perl mode and Markdown mode.
;; There is probably a way to put this inside the use-package form but
;; this is how it works for me.
(add-hook 'go-mode-hook 'eglot-ensure)
(add-hook 'perl-mode-hook 'eglot-ensure)
(add-hook 'markdown-mode-hook 'eglot-ensure)
(autoload 'eglot-ensure "eglot" "Start Eglot session for current buffer if there isn’t one.")
(use-package eglot :ensure t
:config (add-to-list 'eglot-server-programs '(markdown-mode . ("marksman"))))
(setq-default eglot-workspace-configuration
'((:gopls .
((staticcheck . t)
(matcher . "CaseSensitive")))))
#Emacs #Oddµ #Markdown #Perl #Golang
https://alexschroeder.ch/view/2024-07-23-eglot
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/0044992-dark-oxygen-source-discov
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/a-less-rigorous-version-of-friendship
@Dave Winer’s Scripting News (date: 2024-07-23, from: Dave Winer’s Scripting News)
All the reporters know the Repubs refused to fund border stuff so they could use it to tag the Dems in the election. So the first thing the Repubs do is tag VP Harris with the border. The reporter asks a Dem what they have to say about that. But the reporter knows what the Repubs did. So why do they even ask the freaking question? They just play the script the Repubs wrote for them. They are so savvy, but we heard all that too, so we know how corrupt they are. They don’t care if we know.
http://scripting.com/2024/07/23.html#a133302
date: 2024-07-23, updated: 2024-07-23, from: Jason Kittke’s blog
https://kottke.org/24/07/0044990-bodycam-footage-of-aston-
@Dave Winer’s Scripting News (date: 2024-07-23, from: Dave Winer’s Scripting News)
Show notes for today’s Scripting podcast.
http://scripting.com/2024/07/23.html#a131631
date: 2024-07-23, from: Dave Winer’s Scripting News
A 20-minute morning coffee notes rambler podcast, started with a narration of how we do linkblogging these days, mostly by hand, and how Bluesky is being hurt by not having a large-enough character limit. Another plea for textcasting, some standards for what we put on the wire over the social web.
Also talked about twitter-like systems, and idea borrowed from algol-like and lisp-like.
I talk about what made Unix so great.
Eric Raymond once told me that XML-RPC was very much like Unix, and I said oh yeah, and so is RSS and the rest. Huge compliment because the simplicity of Unix is what I strive for, put huge time into.
Journos once said Apple is dead, but that was ridiculous because they had built a product that was just starting to grow and they had planted the seeds of huge growth in the 80s when they focused on selling to education, which made sure that kids when they grew up would have good feelings about Apple, and it totally worked. When the reporters were calling them dead, they were actually just about to boom in a whole new way, on the web, which the Mac was perfect for, given the built in simple networking. And then boom again when Jobs came back. And again with the iPod and then again with the iPhone. See how reporters miss the big picture. We shouldn’t give them so much power, they pretend they know, but they are usually pretty clueless.
This podcast is also a demo of how my mind works. I flit around all over the place but also have learned over the years that if I want to get anything done I have to focus on one thing for at least a few hours every day, and string those days together.
I want to document this stuff for the benefit of young programmers. I learned a lot from reading the code of Unix, I always want to pay that back, the message is to strive for simplicity, keep technical debt to a minimum, and factor, factor and factor again to reduce technical debt. Those are the hardest projects, I’m doing one of those right now, but in the end it’s worth it, because with simplicity you get to build higher.
http://scripting.com/2024/07/23/130117.html?title=podcastStartsWithLinkblogging
@Dave Winer’s Scripting News (date: 2024-07-23, from: Dave Winer’s Scripting News)
I was able to follow kamalhq on twitter. This report says that Musk is rate-limiting followers on that account. Of course we warned what could happen if a Republican bought twitter, but I didn’t honestly contemplate that a fascist would. These days our greatest fears aren’t scary enough. People laugh that Musk paid too much for twitter, but if the US ends up as an autocracy, the oligarch that owns the entire news distribution system for the world will probably have the last laugh. BTW, if you want to know why we’re so thrilled to have Harris as the candidate, even though we didn’t want Joe to give in, it’s because no informed and sane person wants to live in a new Trump term. We tried that if you recall. The hope you hear now is much greater than the hope we had when Obama was selling that (though hope was a good word for it). Today it’s the hope that we won’t be deported or worse.
http://scripting.com/2024/07/23.html#a122650
@Dave Winer’s Scripting News (date: 2024-07-23, from: Dave Winer’s Scripting News)
I want future President Harris to stay happy no matter what the bastards do or say. We should have a crisis line for her to call to get some quick love. 1-800-LUV-KAMALA.
http://scripting.com/2024/07/23.html#a121858
date: 2024-07-23, updated: 2024-07-23, from: Bruce Schneier blog
It’s heavily redacted, but still interesting.
Many more ODNI documents here.
https://www.schneier.com/blog/archives/2024/07/2017-odni-memo-on-kaspersky-labs.html
date: 2024-07-23, from: Enlightenment Economics blog
I’ve been dipping into the proofs of a substantial book, Industrial Policy for the United States by Marc Fasteau and Ian Fletcher, due out in September. It will prove a significant resource for anybody interested in the issue. The book … Continue reading
date: 2024-07-23, from: Alex Schroeder’s Blog
Today I tried to make the irc2 plugin work for my IRC server.
Mostly fiddling with the regular expressions. Adding an optional comma. Making it case-insensitive. The usual, I guess.
I was positively impressed by Debians pre-packaged Perl modules:
apt install libpoe-component-irc-perl libpoe-component-sslify-perl
Here’s the modified plugin for /etc/munin/plugins
:
#!/usr/bin/perl
# -*- perl -*-
=head1 NAME
ircstats - Plugin to graph data about an IRC network and a single IRC server
=head1 CONFIGURATION
- env.SERVER to point to the server to connect to, defaults to localhost.
- env.PORT port to use, defaults to 6667.
- env.NICK nickname to use, defaults to munin-$HASH.
- env.USESSL 0 or 1 values to enable SSL/TLS, defaults to 0.
- env.USEIPV6 0 or 1 to enable IPv6 use, defaults to 0.
=head1 USAGE
This plugin connects to an IRC server.
It requires POE::Component::IRC and POE::Component::SSLify if you use SSL/TLS.
=head1 AUTHOR
Robin H. Johnson
Alex Schroeder
=head1 LICENSE
3-clause BSD.
=head1 MAGIC MARKERS
#%# family=manual
=cut
use strict;
use warnings;
use Data::Dumper;
use POE qw(Component::IRC);
use Digest::MD5 qw(md5_hex);
my $nickname = $ENV{NICK} || 'munin-'.substr(md5_hex(rand().time()), 0, 3);
my $ircname = "Munin statistics gathering from $ENV{SERVER}";
my $server = $ENV{SERVER} || 'localhost';
my $port = $ENV{PORT} || 6667;
my $usessl = $ENV{USESSL} || 0;
my $useipv6 = $ENV{USEIPV6} || 0;
if($ARGV[0] and $ARGV[0] eq "config") {
print "graph_title ircd status - $server\n";
print "graph_category chat\n";
print "graph_order clients channels servers localclients clientmax localclientmax localservers opers unknownconns\n";
print "graph_args -l 0\n";
print "clients.label clients\n";
print "clients.draw LINE2\n";
print "channels.label channels\n";
print "channels.draw LINE2\n";
print "servers.label servers\n";
print "servers.draw LINE2\n";
print "localclients.label localclients\n";
print "localclients.draw LINE2\n";
print "clientmax.label clientmax\n";
print "clientmax.draw LINE2\n";
print "localclientmax.label localclientmax\n";
print "localclientmax.draw LINE2\n";
print "opers.label opers\n";
print "opers.draw LINE2\n";
print "localservers.label localservers\n";
print "localservers.draw LINE2\n";
print "unknownconns.label unknownconns\n";
print "unknownconns.draw LINE2\n";
exit 0;
}
my %result;
# We create a new PoCo-IRC object
my $irc = POE::Component::IRC->spawn(
nick => $nickname,
ircname => $ircname,
server => $server,
port => $port,
raw => 0,
UseSSL => $usessl,
useipv6 => $useipv6,
) or die "Oh noooo! $!";
POE::Session->create(
package_states => [
# debug messages:
# main => [ qw(_default _start irc_001 irc_376 irc_disconnected irc_public) ],
# These are the interesting ones:
# irc_251: 'localhost' 'There are 13 users and 0 services on 2 servers' [There are 13 users and 0 services on 2 servers]
# irc_254: 'localhost' '26 :channels formed' [26, channels formed]
# irc_255: 'localhost' 'I have 8 users, 0 services and 1 servers' [I have 8 users, 0 services and 1 servers]
# irc_265: 'localhost' '8 8 :Current local users: 8, Max: 8' [8, 8, Current local users: 8, Max: 8]
# irc_266: 'localhost' '13 14 :Current global users: 13, Max: 14' [13, 14, Current global users: 13, Max: 14]
main => [ qw(_start irc_001 irc_251 irc_252 irc_253 irc_254 irc_255 irc_265 irc_266 irc_372 irc_375 irc_376 irc_public irc_disconnected) ],
],
heap => { irc => $irc },
);
$poe_kernel->run();
my $RPL_LUSER_CLIENT = 251;
my $RPL_LUSERCHANNELS = 254;
my $RPL_ENDOFMOTD = 376;
sub _start {
my ($heap,$kernel,$sender) = @_[HEAP,KERNEL,SENDER];
# retrieve our component's object from the heap where we stashed it
my $irc = $heap->{irc};
$irc->yield( register => 'all' );
$irc->yield( connect => { } );
return;
}
sub irc_001 {
my $sender = $_[SENDER];
my $irc = $sender->get_heap();
$irc->yield( quit => { });
return;
}
#irc_251: 'moo.us.p2p-network.net' 'There are 155 users and 3397 invisible on 16 servers' [There are 155 users and 3397 invisible on 16 servers]
# luserclient
sub irc_251 {
my $sender = $_[SENDER];
my $irc = $sender->get_heap();
my $s = $_[ARG1];
# Do we have something like an UnrealIRCD?
if($s =~ /There are (\d+) users and (\d+) invisible on (\d+) servers/) {
$result{'clients'} = $1 + $2 - 1; # don't count this script
$result{'servers'} = $3;
}
# Or maybe some freendode hyperion stuff?
elsif($s =~ /There are (\d+) listed and (\d+) unlisted users on (\d+) servers/) {
$result{'clients'} = $1 + $2 - 1; # don't count this script
$result{'servers'} = $3;
}
# Or some recent ircnet ircd?
elsif($s =~ /There are (\d+) users and \d+ services on (\d+) servers/) {
$result{'clients'} = $1 - 1; # don't count this script
$result{'servers'} = $2;
}
# Anything else goes here
elsif($s =~ /There are (\d+) users and (\d+) invisible/) {
$result{'clients'} = $1 + $2 - 1; # don't count this script
}
# And here (if there are no invisible count)
elsif($s =~ /There are (\d+) users/) {
$result{'clients'} = $1 - 1; # don't count this script
}
}
#irc_252: 'moo.us.p2p-network.net' '18 :operator(s) online' [18, operator(s) online]
# opers
sub irc_252 {
my $sender = $_[SENDER];
my $irc = $sender->get_heap();
my $s = $_[ARG1];
if($s =~ /^(\d+)/) {
$result{'opers'} = $1;
}
}
#irc_253: 'moo.us.p2p-network.net' '1 :unknown connection(s)' [1, unknown connection(s)]
sub irc_253 {
my $sender = $_[SENDER];
my $irc = $sender->get_heap();
my $s = $_[ARG1];
if($s =~ /^(\d+)/) {
$result{'unknownconns'} = $1;
}
}
#irc_254: 'moo.us.p2p-network.net' '1325 :channels formed' [1325, channels formed]
# luserchannels
sub irc_254 {
my $sender = $_[SENDER];
my $irc = $sender->get_heap();
my $s = $_[ARG1];
if($s =~ /^(\d+)/) {
$result{'channels'} = $1;
}
}
#irc_255: 'moo.us.p2p-network.net' 'I have 348 clients and 1 servers' [I have 348 clients and 1 servers]
# local clients/servers
sub irc_255 {
my $sender = $_[SENDER];
my $irc = $sender->get_heap();
my $s = $_[ARG1];
if($s =~ /I have (\d+) clients and (\d+) servers/) {
$result{'localclients'} = $1-1; # don't count this script
$result{'localservers'} = $2;
}
elsif($s =~ /I have (\d+) users, \d+ services and (\d+) servers/) {
$result{'localclients'} = $1-1; # don't count this script
$result{'localservers'} = $2;
}
}
#irc_265: 'moo.us.p2p-network.net' 'Current Local Users: 348 Max: 1900' [Current Local Users: 348 Max: 1900]
sub irc_265 {
my $sender = $_[SENDER];
my $irc = $sender->get_heap();
my $s = $_[ARG1];
if($s =~ /Current Local Users: (\d+),?\s+Max: (\d+)/i) {
$result{'localclients'} = $1-1; # don't count this script
$result{'localclientmax'} = $2;
}
}
#irc_266: 'moo.us.p2p-network.net' 'Current Global Users: 3552 Max: 8742' [Current Global Users: 3552 Max: 8742]
sub irc_266 {
my $sender = $_[SENDER];
my $irc = $sender->get_heap();
my $s = $_[ARG1];
if($s =~ /Current Global Users: (\d+),?\s+Max: (\d+)/i) {
$result{'clients'} = $1-1; # don't count this script
$result{'clientmax'} = $2;
}
}
# 372 motdline
sub irc_372 {
return;
}
# 375 startofmotd
sub irc_375 {
return;
}
# 376 endofmotd
sub irc_376 {
my $sender = $_[SENDER];
my $irc = $sender->get_heap();
$irc->yield( quit => {} );
}
sub munin_print {
my $key = shift;
my $val = shift;
print "${key}.value ".($val || 'U')."\n";
}
sub irc_disconnected {
for my $var (qw(clients channels servers localclients clientmax localclientmax localservers opers unknownconns)) {
munin_print($var, $result{$var});
}
exit 0;
}
sub irc_public {
my ($sender, $who, $where, $what) = @_[SENDER, ARG0 .. ARG2];
my $nick = ( split /!/, $who )[0];
my $channel = $where->[0];
if ( my ($rot13) = $what =~ /^rot13 (.+)/ ) {
$rot13 =~ tr[a-zA-Z][n-za-mN-ZA-M];
$irc->yield( privmsg => $channel => "$nick: $rot13" );
}
return;
}
# We registered for all events, this will produce some debug info.
sub _default {
my ($event, $args) = @_[ARG0 .. $#_];
my @output = ( "$event: " );
for my $arg (@$args) {
if ( ref $arg eq 'ARRAY' ) {
push( @output, '[' . join(', ', @$arg ) . ']' );
}
else {
push ( @output, "'$arg'" );
}
}
print join ' ', @output, "\n";
return 0;
}
To configure, I created the file
/etc/munin/plugin-conf.d/irc.conf
:
[irc2]
env.SERVER campaignwiki.org
env.PORT 6697
env.USESSL 1
The result:
#Administration #Munin #IRC #ngircd
https://alexschroeder.ch/view/2024-07-23-ngircd-and-munin
date: 2024-07-23, from: Robert Reich’s blog
Friends,
https://robertreich.substack.com/p/go-kamala
date: 2024-07-23, from: Heather Cox Richardson blog
Vice President Kamala Harris has continued to rack up endorsements and delegates since President Biden’s surprise announcement yesterday that he would not accept the 2024 Democratic presidential nomination.
https://heathercoxrichardson.substack.com/p/july-22-2024
date: 2024-07-23, from: Tracy Durnell Blog
My friend and I are trying to get out of the house more often, exploring new destinations we don’t think will be too crowded. (COVID numbers are high so we both still masked too.) This weekend we headed into Seattle to the conservatory at Volunteer Park on Capitol Hill. I’ve always loved the San Francisco […]
https://tracydurnell.com/2024/07/22/flower-field-trip-to-volunteer-park/
date: 2024-07-23, updated: 2024-07-23, from: Daring Fireball
https://marco.org/2024/07/16/overcast-rewrite
date: 2024-07-23, updated: 2024-07-23, from: Daring Fireball
date: 2024-07-22, from: Om Malik blog
The CrowdStrike fiasco has once again focused the spotlight on Microsoft’s Achilles’ heel — security, or rather the lack there of. I have been writing about technology long enough to know that nothing about the Windows operating system surprises me. Over the weekend, The Wall Street Journal outlined a multitude of reasons why the “blue …
https://om.co/2024/07/22/surely-microsoft-isnt-blaming-eu-for-its-problems/
date: 2024-07-22, from: Dave Winer’s Scripting News
http://scripting.com/2024/07/22/214539.html?title=thankYouBillionaires
date: 2024-07-22, updated: 2024-07-22, from: Jason Kittke’s blog
https://kottke.org/24/07/0044989-an-explainer-and-organiza
date: 2024-07-22, from: Jeff Geerling blog
The state of Docker on popular RISC-V platforms
<div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>I've been testing a <a href="https://github.com/geerlingguy/sbc-reviews/issues/47">Milk-V Jupiter</a> this week, and have tested a number of other RISC-V development boards over the past two years.</p>
As with any new CPU architecture, software support and ease of adoption are extremely important if you want to reach a wider audience. I wouldn’t expect every developer and SBC hobbyist to be able to compile the Linux kernel, and the need to compile much of anything these days is getting rare. So having any instance where one has to know how to tweak a Makefile or pass in different flags to a compiler is a bit of a turn-off for platform adoption.
So one thing I’ve followed closely is how easy it is for me to get my own software running on RISC-V boards. It’s one thing to run some vendor-provided demos. It’s another entirely to take my real-world applications and infrastructure apps, and get them to work without hassle.
And to that end, Docker and Ansible, two tools I use extensively for dev/ops work, both run stably—though with plenty of caveats since RISC-V is still so new.
<span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>Jeff Geerling</span></span>
https://www.jeffgeerling.com/blog/2024/state-docker-on-popular-risc-v-platforms
date: 2024-07-22, updated: 2024-07-22, from: Jason Kittke’s blog
https://kottke.org/24/07/0044988-kamala-harris-and-her-vie
date: 2024-07-22, updated: 2024-07-22, from: Jason Kittke’s blog
https://kottke.org/24/07/0044987-news-happening-faster-tha
date: 2024-07-22, from: Heather Cox Richardson blog
https://heathercoxrichardson.substack.com/p/july-21-2024-655
date: 2024-07-22, from: Anton Zhiyanov blog
Which major features appeared in which versions of Go.
date: 2024-07-22, from: Dave Winer’s Scripting News
I grew up in the same part of Queens as Trump, about ten years after he did. His family was in Jamaica, mine in Flushing. Here’s a map that shows you where the two houses are. 4.0 miles apart if you take Utopia Parkway. A great name for a street, but it’s not a parkway and it’s nice but definitely not a utopia.
People who aren’t from huge cities like New York don’t know that Trump what our losers look like. They probably have their own loser types. I think that’s where 99% of the confusion is. They really don’t believe he’s so bad. Don’t hold that against them, that’s nowhere near as bad as knowing what he is and being okay with that.
He’s a mean bully type. The name-calling is a big clue. Distracts from his weaknesses, which are very obvious. I don’t believe in body shaming, because I care about other people’s feelings. If I criticize his appearance it might reflect poorly on nice people who have his body type who may not be mean bully losers like Trump.
He’s also a really good comedian if you don’t think he wants to have the power to kill millions of people and control many more people. Last time he was our president just through incompetence, without trying, he was responsible for the deaths of hundreds of thousands of Americans in the Covid disaster. He also wanted the army shoot protestors, that’s the mean part of our former president. Luckily the people who worked for him told him to fuck off. They saved us from going into a very deep hole that would have been hard to escape from.
I watched the coverage of the aftermath of the assassination attempt, and listened to the Americans they interviewed, not the actors they put behind him on stage, to make him look like a badass I guess, these were just normal people who mostly like Trump, but seem pretty likeable themselves. The one thing you heard over and over was how If you don’t like a candidate vote against them don’t shoot them. That’s American and it’s not fascist at all. I don’t think they know that he wants to make big changes in how our politics work. People think if he’s bad they can just vote him out next time. He tells them this will be the last election if he wins, he actually says that, but somehow it doesn’t seem to register.
Of course the journalists are distorting who Trump supporters are. Trump is deplorable if you take him at his word. Some of Trump’s followers are deplorable too, like the ones who rioted at our Capitol and January 6 and the people who are lined up to work in his next administration if he wins. They are awful people who want to control all of us. They’re already doing it via the Supreme Court. It’s going to get a lot worse if we go the wrong way. We shouldn’t accept that we’re horribly divided. The powerful media people want us to be divided, I don’t know why and I don’t care, I just know they do, based on their actions.
Anyway I know we’re at a high moment, we’re excited, and I’m going to enjoy the feeling. We all seem to be pulling the same way, at least on “our side” but I hold out hope that being an American still means something, that we can be friends, and fellow countrymen, and work together. I think that’s still our greatest challange and our greatest opportunity. Yeah I am woke, that means I care about all of us. I think most of us do no matter who you vote for.
http://scripting.com/2024/07/22/165652.html?title=imFromQueensToo
@Dave Winer’s Scripting News (date: 2024-07-22, from: Dave Winer’s Scripting News)
For the DNC in 2004, we had a site called Convention Bloggers. It was a river of news feed reader, clearly done with Frontier, of blogs run by people who were at the convention.
http://scripting.com/2024/07/22.html#a141250
@Dave Winer’s Scripting News (date: 2024-07-22, from: Dave Winer’s Scripting News)
Looking forward to the NYT deeply analyzing Trump‘s 78 year old mind and body and his Hannibal Lecter stories.
http://scripting.com/2024/07/22.html#a125843
date: 2024-07-22, from: Alex Schroeder’s Blog
Today I couldn’t log into the server. ssh
just sat there,
waiting for the server. Some web page loaded a few bytes and stopped. I
knew it: some idiot had once again written a bot that was hitting my web
apps (also known as “expensive endpoints”) because they ignored all the
rules. They also didn’t get caught by fail2ban because of they were
using cloud services, of course. And the only thing that helps against
these fuckers is banning the whole network. Time to get working.
First, I had to reboot the server via the website of my service provider.
Then I had to figure out which app it was. It’s impossible for me to
find out. All my expensive apps are from a directory called
/home/alex/farm
.
When I look at the system log file I, find entries like these:
grep "Out of memory" /var/log/syslog | tail | cut -b 72-
Out of memory: Killed process 1525 (/home/alex/farm) total-vm:95736kB, anon-rss:7700kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:208kB oom_score_adj:0
Out of memory: Killed process 521 (node) total-vm:1268068kB, anon-rss:63440kB, file-rss:0kB, shmem-rss:0kB, UID:118 pgtables:2112kB oom_score_adj:0
Out of memory: Killed process 12302 (/home/alex/farm) total-vm:92464kB, anon-rss:54820kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:208kB oom_score_adj:0
Out of memory: Killed process 12622 (/home/alex/farm) total-vm:92420kB, anon-rss:53040kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:208kB oom_score_adj:0
Out of memory: Killed process 12628 (/home/alex/farm) total-vm:92712kB, anon-rss:51460kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:212kB oom_score_adj:0
Out of memory: Killed process 12632 (/home/alex/farm) total-vm:92556kB, anon-rss:51916kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:208kB oom_score_adj:0
Out of memory: Killed process 12206 (/home/alex/farm) total-vm:92320kB, anon-rss:57256kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:208kB oom_score_adj:0
Out of memory: Killed process 12016 (/home/alex/farm) total-vm:92292kB, anon-rss:57740kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:208kB oom_score_adj:0
Out of memory: Killed process 12689 (/home/alex/farm) total-vm:92728kB, anon-rss:57444kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:212kB oom_score_adj:0
Out of memory: Killed process 12041 (/home/alex/farm) total-vm:92484kB, anon-rss:58288kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:208kB oom_score_adj:0
This is not helping. Who is 12041? There are large lists of the process identifiers and some numbers in the log, but the name is always shortened:
grep "12041" /var/log/syslog | tail -n 3
2024-07-20T19:51:03.968678+02:00 sibirocobombus kernel: [ 3275.028117] [ 12041] 1000 12041 23121 14572 212992 4117 0 /home/alex/farm
2024-07-20T19:51:03.968882+02:00 sibirocobombus kernel: [ 3275.028363] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/monit.service,task=/home/alex/farm,pid=12041,uid=1000
2024-07-20T19:51:03.968883+02:00 sibirocobombus kernel: [ 3275.028378] Out of memory: Killed process 12041 (/home/alex/farm) total-vm:92484kB, anon-rss:58288kB, file-rss:0kB, shmem-rss:0kB, UID:1000 pgtables:208kB oom_score_adj:0
Useless.
By that time, however, the system was slowing down again. I fired up
htop
and saw a gazillion instances of the Community Wiki
script. Looking at the /etc/log/apache2/access.log
file
shows that bots were requesting the edit pages (!) of all the thousands
of Community Wiki pages.
Thanks, idiots.
I needed to find where these requests where coming from. My
leech-detector
script was as limited to single IP numbers as fail2ban. So the first
order of business was to add some functionality: If given the option
–networks
, it now looks up the network range the requests
come from and reports those:
tail -n 50 /var/log/apache2/access.log | grep communitywiki | bin/admin/leech-detector --networks
This is expensive, of course, so I try to cache the Route View ASN lookups but the cache doesn’t persist between calls. Using a small number of rows is the correct approach, here.
The result is a table like the one below. When I ran it, I used 400 rows or so.
IP | Hits | Bandw. | Rel. | Interv. | Status |
---|---|---|---|---|---|
117.22.0.0/15 | 1 | 6K | 25% | 200 (100%) | |
59.172.0.0/14 | 1 | 6K | 25% | 200 (100%) | |
114.104.0.0/14 | 1 | 6K | 25% | 200 (100%) | |
220.184.0.0/13 | 1 | 6K | 25% | 200 (100%) |
If you then start using whois
on the numbers, you’ll see:
I think you know where this is going.
And so I copying the network IP, calling whois
, verifying
that it was Chinese Telecom or related, and added it to my
ban-cidr script.
(Note how I’m using netfilter-persistent
these days so that
I don’t have to run ban-cidr
after every server restart.)
And now I’m going to add the ranges above to the script.
Some days I feel like I’m slowly starting to ban the whole commercial cloud service internet because nothing good ever seems to come of it. Do you feel the same?
#Administration #Bots #Butlerian Jihad
2024-07-22. Here’s another slight annoyance, for
ngircd
. There are a lot of log lines for a day:
journalctl --unit ngircd.service|grep "Jul 21"|wc -l
7436
More than half of them come from a single IP hosted by Octopuce:
journalctl --unit ngircd.service|grep "Jul 21.*2001:67c:288:2::231"|wc -l
4347
They all have this format:
Jul 21 11:39:51 sibirocobombus ngircd[594]: Accepted connection 16 from "[2001:67c:288:2::231]:41240" on socket 8.
Jul 21 11:39:51 sibirocobombus ngircd[594]: Using X509 credentials from slot 0
Jul 21 11:39:51 sibirocobombus ngircd[594]: Shutting down connection 16 (SSL accept error, closing socket) with "[2001:67c:288:2::231]:41240" ...
Jul 21 11:39:51 sibirocobombus ngircd[594]: Client unregistered (connection 16): SSL accept error, closing socket.
Jul 21 11:39:51 sibirocobombus ngircd[594]: Connection 16 with "[2001:67c:288:2::231]:41240" closed (in: 0.0k, out: 0.0k).
I’m going to try and use fail2ban
for this.
Looks like this is happening every 10 seconds:
journalctl --unit ngircd.service|grep "Jul 21.*Shutting down"|tail|cut -d ' ' -f 3
23:58:23
23:58:33
23:58:43
23:58:53
23:59:03
23:59:13
23:59:23
23:59:33
23:59:43
23:59:53
So here’s my attempt at a filter,
/etc/fail2ban/filter.d/ngircd.conf
:
# Fail2Ban filter for failed ssl connections to the ngIRC daemon
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf
[Definition]
# Example:
# Shutting down connection 16 (SSL accept error, closing socket) with "[2001:67c:288:2::231]:44846"
_daemon = ngircd
failregex = ^%(__prefix_line)sShutting down connection [0-9]+ \(SSL accept error, closing socket\) with "<HOST>:[0-9]+" \.\.\.$
ignoreregex =
[Init]
journalmatch = _SYSTEMD_UNIT=ngircd.service + _COMM=ngircd
# Author: Alex Schroeder
And this is the jail, /etc/fail2ban/jail.d/ngircd.conf
–
and here I want to ban them after four failed connects in a minute.
Remember the default ban lasts 10 minutes. Since this attack is moving
so slowly, I want to increase this ban time to an hour.
[ngircd]
enabled = true
findtime = 60
maxretry = 4
bantime = 60m
Let’s give it a try!
systemctl reload fail2ban
Then again: fail2ban is only for future attacks. The current level of persistency also deserves its own treatment:
ipset create banlist6 hash:net family inet6
ip6tables -I INPUT -m set --match-set banlist6 src -j DROP
ip6tables -I FORWARD -m set --match-set banlist6 src -j DROP
ipset add banlist6 2001:67c:288:2::231
There we go.
Oh, and as soon as I did that, it switched to 91.194.61.231, but only once every two or three minutes. Still Octopuce, though.
ipset add banlist 91.194.60.0/23
2024-07-22. Back to Community Wiki and its enemies, however.
1.92GiB for the bots?
https://alexschroeder.ch/view/2024-07-20-bots-again
@Dave Winer’s Scripting News (date: 2024-07-22, from: Dave Winer’s Scripting News)
Show notes for 2004 pre-DNC podcast, part of the Podcast0 series.
http://scripting.com/2024/07/22.html#a124622
@Dave Winer’s Scripting News (date: 2024-07-22, from: Dave Winer’s Scripting News)
I’m doing something new. Trying to initiate topics on the social web. We almost totally respond to external stuff, I wonder how different it would be if we engaged on a more individual level. I’ve been doing this for a while, but only now am able to explain it.
http://scripting.com/2024/07/22.html#a122821
date: 2024-07-22, updated: 2024-07-22, from: Bruce Schneier blog
This is a fantastic video. It’s an Iranian spider-tailed horned viper (Pseudocerastes urarachnoides). Its tail looks like a spider, which the snake uses to fool passing birds looking for a meal.
https://www.schneier.com/blog/archives/2024/07/snake-mimics-a-spider.html
date: 2024-07-22, from: Robert Reich’s blog
Friends,
https://robertreich.substack.com/p/what-dems-must-do-now
date: 2024-07-22, from: Heather Cox Richardson blog
“My Fellow Americans,
https://heathercoxrichardson.substack.com/p/july-21-2024
date: 2024-07-22, from: Tracy Durnell Blog
This whole album is good. I also had a collection called Gerry Mulligan Meets the Saxophonists that drew from his combos with Ben Webster, Zoot Sims, and Johnny Hodges.* I’m partial to the Ben Webster myself. *(Then, being somewhat obsessive about jazz in HS and college, I got all the original albums, which included ordering […]
https://tracydurnell.com/2024/07/21/straight-no-chaser-gerry-mulligan-and-thelonius-monk/
date: 2024-07-22, from: Robert Reich’s blog
Friends,
https://robertreich.substack.com/p/thank-you-joe
date: 2024-07-21, from: John Naughton’s online diary
Evolution Of one thing at least we can be sure: ‘soapy Sam’ would not have approved of the graphic. Quote of the Day With the birth of the artist came the inevitable afterbirth… the critic.” Mel Brooks Musical alternative to … Continue reading
https://memex.naughtons.org/monday-22-july-2024/39655/
date: 2024-07-21, from: Dan Rather’s Steady
Americans, every one of us, are about to be tested as never before.
https://steady.substack.com/p/biden-bows-out
date: 2024-07-21, from: James Fallows, Substack
A sitting president changes everything about the race. We’ll remember where we were, when we heard this news.
https://fallows.substack.com/p/election-countdown-107-days-to-go
date: 2024-07-21, from: Dave Winer’s Scripting News
BTW, there is a totally legit and legal way to deal with the issue people are grappling with, w/o any fancy new extra-legal ways of nominating a president that resolves it in a minute, if the Cabinet goes along with the idea that the current president isn’t able to do the job, and if being re-elected is a legitimate part of doing the job.
Pretty sure most people don’t get that being president is a job, not a role someone plays in a TV sitcom.
Great wealth is poison, that’s what’s playing out in the NYT-orchestrated overthrow of the American government. They’re driving us into the arms of the Nazis. Who knows why, or even if there is a reason, other than their drive to find meaning in their great wealth. Their problem, and ours, is that it has no meaning, no human can use the money they’ve accumulated. These are not human-size fortunes, playing a game of make-believe, what if we really were as smart as we think our money says we are. Well you ain’t that smart.
http://scripting.com/2024/07/21/212648.html?title=todaysOtherStuff
@Dave Winer’s Scripting News (date: 2024-07-21, from: Dave Winer’s Scripting News)
The earth shook today. I’m watching the news like everyone else after President Biden withdrew. There really is a lot happening very quickly, and the Dems all sound like they got their story straight, for once the Dems sound like a party. How did that happen. NakedJen says we need a miracle. I said that’s her department. ❤️
http://scripting.com/2024/07/21.html#a212256
date: 2024-07-21, updated: 2024-07-21, from: Daring Fireball
https://x.com/JoeBiden/status/1815080881981190320
date: 2024-07-21, from: Dave Winer’s Scripting News
A two-minute podcast where I dictate an op-ed the NYT should run in its own name, apologizing for trying to take over the US government, and promising to return to being a news organization.
I am so fed up with it. Today they ran an op-ed written by Aaron Sorkin giving advice to Democrats based on his experience writing scripts for a fictional White House television show in the late 90s and early 00s.
Yeah the NYT has lost its way. I hope some people down there think they’re way out on a limb and it’s time to get back to what they do. They are not qualified or entitled to do what they are doing.
http://scripting.com/2024/07/21/125022.html?title=nytJustStopPodcast
date: 2024-07-21, from: Dan Rather’s Steady
A Reason To Smile
https://steady.substack.com/p/alison-krauss
date: 2024-07-21, from: Robert Reich’s blog
And last week’s winner
https://robertreich.substack.com/p/sunday-caption-contest-the-republican-029
date: 2024-07-21, from: Heather Cox Richardson blog
Spent the evening with family, and my photographer nephew showed me today’s capture: a seagull trying to move in on an osprey’s catch.
https://heathercoxrichardson.substack.com/p/july-20-2024
date: 2024-07-21, from: Om Malik blog
I had to bite my tongue and not comment on this tweet from FTC Chair Lina Khan, who tried to make the current CrowdStrike situation a crisis because of “big tech” and “consolidation.” “How is it that you don’t understand systems, or their inherent complexity?”, I wanted to scream. Well, if you give someone a …
https://om.co/2024/07/20/what-crowdstrike-crisis-teaches-us-about-risks-resilience/
date: 2024-07-21, from: Dave Winer’s Scripting News
One great use for ChatGPT, simple recipes.
If you try looking for a recipe on Google they take forever to get to the point, and pop up all kinds of offers when all you wanted was a checklist of ingredients and steps.
For example, how to make hard-boiled eggs.
Try doing the same thing on Google to see what I mean.
http://scripting.com/2024/07/20/021006.html?title=whyChatgptIsSimplyBetter
@Dave Winer’s Scripting News (date: 2024-07-21, from: Dave Winer’s Scripting News)
I trust that President Biden will do what’s best for the country.
http://scripting.com/2024/07/20.html#a020610
@Dave Winer’s Scripting News (date: 2024-07-21, from: Dave Winer’s Scripting News)
Pete Buttigieg should be the Democrats’ official blogger. Every day a new insight into what makes people do what they do and why the Dems have all the right ideas. He’s a perfect spokesperson in that role. A daily Pete. He should do it.