While I was improving Lantern
I wanted to use the Haskell library
to monitor update search index events.
I was a little confused when I read the documentation of
getNotification and saw that it didn't take what channel to listen on
as an argument - having just read the PostgreSQL documentation of
NOTIFY channel +
LISTEN channel that was what I was expecting.
After some digging I found a test for the
and from that saw that the way to use D.P.S.Notification is to execute
one or more
LISTEN channel before calling
In hindsight it is obvious (you want to be able to listen to multiple
channels in the same
getNotification call), but to me, as a relative
beginner in Haskell and using postgresql-simple, and never having tried
LISTEN/NOTIFY before, it wasn't.
I have written to the maintainer and suggested that the documentation of
D.P.S.Notification mention this.
One thing I miss in the documentation of many Haskell libraries is a
couple of lines giving an example of how to use them - luckily I found
the solution in a test this time.
I may have a slight keyboard addiction. I picked up a Keychron
recently - it was on sale, and I haven't tried a keyboard as compact
Also, I wanted to try going wireless; I have always preferred wired mice
and keyboards - no batteries that run out - but since I work in an open
plan office with free seating these days, untangling wires every morning
after locating a free desk is starting to get old.
To make it work right under Linux, the keyboard needs to be in
"Win/Android" mode, and in
/etc/modprobe.d/hid_apple.conf the text
options hid_apple fnmode=2 needs to be added, and finally you need to
sudo update-initramfs -u.
To just fix it immediately until next reboot, do
echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode.
The company doesn't have Linux support itself, but it does direct
customers to a forum in the accompanying documentation.
I got the Keychron K6 connected via bluetooth to my Ubuntu 18.04-laptop,
but it doesn't stay that way after leaving it alone over night, and it
doesn't reconnect after rebooting the laptop. Which kind of defeats the
While I used the keyboard, I noticed that I sometimes reach for the
right Ctrl-key, which doesn't exist on this layout.
Oh well, it was worth a try.
The search functionality of my little NNTP engine for blogging,
Lantern, uses PostgreSQL's
full text search.
I have just made a
tsvector for each article, and searching is then done by
SELECT'ing from that view.
Recently using the view directly became a little too slow to my liking
(above 1 second), so I discussed with myself whether to include the
tsvector as a field on the article table with a trigger to update it
UPDATE or whether it would be better to make the view
Although the way the
tsvector is constructed hasn't changed much
recently, I felt that going the materialized view way was easier - it
doesn't take that long to update it all, and then I don't have to
think about old fields that are out of date.
So I added a trigger that would refresh the view on
DELETE on the table. That works nicely, but it does
give me an annoying pause when posting a new article, which is long
enough for my brain to go "Is something wrong?" before it completes.
I could move the refreshing to a cron job that would refresh the view
once in a while, but since posting is quite irregular that feels like a
Instead I looked into the
functionality in PostgreSQL - and changed the trigger from refreshing
the materialized view to executing a
NOTIFY on a channel, and then I
created a little
program that runs
continiously listening on the channel and refreshing the view when it
receives an event.
The only aber dabei is that if the little program isn't running when a
NOTIFY is sent, the event is lost. But I'll just start it before
everything else, and it should be fine.
A week ago ago the OpenWrt project
released a major new version,
I used the firmware
to download a "SYSUPGRADE" file, but when I tried uploading it on my
Netgear R6350, running OpenWrt
19.07.06, I got an error.
Searching for that error revealed that I had to install from scratch
instead of upgrading, due to a change in how networking is
So I decided to postpone updating until I had plenty of time.
Today I had plenty of time. And spent it.
Instead of thinking, I uploaded the second package I downloaded when I
read the announcement and just overrode all the warnings. Bad move - the
access point didn't come back online after that.
I had chosen the wrong package - I should have taken the "KERNEL
(SQUASHFS)", but instead I went for the "KERNEL (INITRAMFS)". I'm not
sure how I made that mistake, but, alas, I did.
After trying to trigger failsafe
and performing a factory
when that didn't work, without any luck, I took the access point apart
and located the place to solder on pins for serial port access.
Luckily I found a nice slide
showing exactly how to figure out which pin is which with a multi-meter,
and I dug out an old serial-usb dongle, some wires and my basic
However, soldering wires onto pcb's is not something I have attempted
before (I've used the soldering iron to make a cable for my Amiga 500 to
make the keyboard "external" in the 1990's, and then I've cobbled
together a cable for controlling my
that's my complete soldering experience). So before going further down
that route, I looked into one more
strategy, using the nmrpflash
tool, which conveniently is readily available in
I didn't have high hopes, because I saw no evidence of the access point
jumping into the network with tcpdump, but I thought I might as well try
In the first attempt I saw something transferred!
It ended with an error, so I tried a couple of more times, which also
ended with errors, but something worked, and the access point started
blinking, and then came up with OpenWrt 21.02.0 on 192.168.1.1!
After configuring it and testing that it worked, I put it back together
and hung it where it belongs. I even got
opkg update working, so I
could install the
crelay-package that I use to automatically control
the power to my
It could have taken 5 minutes, if I had taken the warnings seriously and
double checked the file I was uploading. Instead I spent most of the
afternoon recovering from my mistake. But it's working as it should now, so all's well that ends
well, I guess.
Professor of Atmospheric Sciences Andrew Dessler calmly takes
Ph.D. in political science Bjørn Lomborg's cherry picked, flawed EPA
Tellingly Bjørn Lomborg engages with petty replies in a tweet exchange
about it ("Wow so you're literally saying it is not okay to use EPA
data") - a good indication that his goal is attention rather than
The graph reflects some choices in interpretation of the raw
data, which makes the reply facetious: it's not just raw data, it's data
interpreted into information in a way that may or may not be meaningful,
which is what is discussed by the other party.
But this is how we've always known Bjørn Lomborg - his whole spiel is
"do cost/benefit analysis' and conclude that nothing can be done and
everything will be fine due to future inventions" and conveniently show
only information supporting that stance.
It is hard to tell if he is stupid, evil, or an attention seeking troll.
In this case, I am having a hard time applying Hanlon's
Last weekend Debian released version 11
After the release I upgraded my two small VPS's, which was smooth as can
be - they only run bind and
Postfix, plus one of them runs
I postponed the upgrade of my main/home server until today, a week
Upgrading was reasonably smooth this time, so far I have only had these
- I had to update my ejabberd.yml configuration file manually to make
ejabberd start - that took a while, as it
has changed quite a bit (mostly comments, though).
- I had to update my radicale/config file
manually in similar fashion, and it no longer supports sha1 in the
htpasswd file (but still md5!?) - so I switched to bcrypt. After that
it failed on VCARD entries with no UID, so I added those to the
various VCARD files.
- The old Hatta instance I run needed a
libapache2-mod-wsgi - which doesn't exist in Debian any more, as
Python 2.7 is gone. I had to "forward-port" the package from Debian 10.
It seems to run with the virtual environment I created during the
- Apache::Gallery uses
Text::Template, which had
to be patched to work around taint mode (again).
- For weewex I had to update the weewx-sdr
plugin to match the output
of the newer rtl_433 - 3
patches sent to the author.
I had to build all my Haskell-based websites
cabal new-build and adjust the paths to the binaries.
Interestingly, this time around none of my Perl
based websites broke.
Like this one:
They are a delight.
Follow by RSS - or by nntp on