The photos are stored as JPGs which can be read by any normal graphics program. They also contain the thermal metadata which you can extract with specialist tools.
Here's the full photo taken with the camera. It shows the interior of an office with some computer equipment on a shelf.
Because the optical camera is quite some distance from the thermal camera, it doesn't cope well with close ups - as you can see. Luckily, this can be adjusted in the UI by pressing the up and down keys.
As well as static shots, it will take video - 240x320 resolution and 25fps - well, ish. It looks a bit jerkier than that to me. But it is good enough to see what's going on.
In this video, I've recorded a bath filling up. Towards the end, I've changed the settings so it shows more of the real-colour video with the heat overlayed.
Amusingly, it shows up as 1f3a:1000 Allwinner Technology Prestigio PER3464B ebook reader (Mass storage mode). Nevertheless, the 30GB volume was mountable and had an IMGS/ directory full of JPGs.
There is a Windows app, which I was able to run in PlayOnLinux. It offers a few features, such as being able to change the colour scheme of the photo, and pick out specific temperature points.
The button layout is a little odd. The buttons feel nice and are responsive. But I would have expected the "Enter" button to be in the centre of the directional buttons.
It is a little slow booting up - but then, this isn't designed for quick action shots.
After taking a photo or a video, it asks if you want to save it every time. That's a little annoying. There's 30GB of storage and photos are only about 300KB - so it should be good for about 100,000 photos.
The videos are recorded without sound. A cheap microphone would make it easy to narrate what's going on in a shot.
Weirdly, the bundled app doesn't work on videos.
There's no expandable storage - the 30GB is plenty, but sometimes it is easier to shove an SD card into a computer.
Finally, there's no mounting point. Other cameras I've tried have a connector so they can be attached to a tripod. This is strictly hand-held only.
This costs £200 - £250 depending on whether the algorithm likes you. Astonishingly, that's cheap for a thermal camera of this quality!
If you're into DIY, or you want to check the thermal efficiency of your home, or you just want to see how hot things are - this is a useful bit of kit. It's sturdy and well built. Dragging images and videos off it is a breeze - even if you don't use the official app.
The interface isn't the greatest thing in the world. But all you need to do is point and click. It's the sort of thing that's unexpectedly handy around the house with all sorts of tasks - from checking if the radiators are balanced, to seeing if a hidden plug is spewing heat.
£200ish isn't cheap cheap. But it is cheap enough that most geeks should have something like this. Also worth buying for community groups who want to check for heat leaks in their properties.
If you are happy with the slight user-interface oddities, and don't need a tripod mount, this is an excellent gadget.
There are a few heartstopping moments when you have to transfer a Very Large Amount of Money. Will the bank deny the transaction? Will I have to remember my mother's cousin's dog's maiden name? Will the money arrive safely?
I clicked the "Transfer Your Life Savings" button on the website. An hourglass appeared. I flipped into the other tab and hit refresh. My balance went from zero to quite-a-bit-more. I flipped back to the first tab. The hourglass faded away and I saw the words "Transfer Succeeded".
For all intents and purposes, money transfer in the UK is free and - just as important - instant. In this case the receiving bank told me the funds were present before the JavaScript on the sending bank had updated.
When I'm due to receive a parcel, most reputable couriers tell me exactly where it is at all times. I can see it transit through customs. I can see it get stuck in Antwerp. I can see it is due to be delivered tomorrow. I can see that it is only 3 stops away. I can see a photo of it hidden in my porch.
I think back to the days when I had to carry a paper cheque between branches to transfer funds - and then wait until my monthly statement to see if they'd been processed. I remember ordering goods from far off lands and never quite knowing when or if they'd arrive.
Nowadays I can play Scrabble against my mother-in-law while she's 18,000Km away - and the moves ping across the æther in an instant.
I applied for a new credit card. The ID verification was pretty much instant but the physical card was going to take a few days to arrive. So they let me create a virtual card number which I could use instantly.
Having sold a property recently, there are so many bewildering slow steps that it's hard not to imagine a conspiracy of lawyers keeping things churning along to pad out their fees.
It bemuses me that so many computer games are multi-GB downloads - why don't they stream to start? Wither Stadia!
There are still long lead times on some physical items. For some reason sofas and spare parts for washing machines are all made by hand and travel on the same slow boat.
Education still hasn't reached the "I know Kung-Fu" stage. Sure, we can dial up a YouTube video on any esoteric subject and watch it at double-speed. But we're stuck with pedagogy which hasn't changed in a thousand years. Read, listen, practice, repeat.
As I've said before, slowness can . Perhaps insurance payouts should wait until an investigation has been completed. And it probably isn't the worst idea in the world to wait between getting a marriage licence and tying the knot.
In the desktop version of BitWarden, go to File → Export Vault. Choose the JSON format (this doesn't work for CSV) and follow the on-screen instructions.
This command pipes your export to JQ. It selects all the items, then it sorts by when the item was last edited. It then displays the name of the account and the date, followed by a newline.
It would be great if BitWarden allowed sorting by date in their UI. Even better if they could sort by usage. Until then, I'll spend every Valentine's Day manually deleting old and unloved accounts.
I've written an ActivityPub server which . That's all it does. It won't record favourites or reposts. There's no support for following other accounts or receiving replies. It cannot delete or update posts nor can it verify signatures. It doesn't have a database or any storage beyond flat files.
But it will happily send messages and allow itself to be followed.
This shows that it is totally possible to broadcast fully-featured ActivityPub messages to the Fediverse with minimal coding skills and modest resources.
I wanted to create a service a bit like FourSquare. For this, I needed an ActivityPub server which allows posting geotagged locations to the Fediverse.
I didn't want to install a fully-featured server with lots of complex parts. So I (foolishly) decided to write my own. I had a lot of trouble with HTTP Signatures. Because they are cursed and I cannot read documentation. But mostly the cursed thing.
Creating a minimum viable Mastodon instance can be done with half a dozen static files. That gets you an account that people can see. They can't follow it or receive any posts though.
I wanted to use PHP to build an interactive server. PHP is supported everywhere and is simple to deploy. Luckily, Robb Knight has written an excellent tutorial, so I ripped off his code and rewrote it for Symfony.
The structure is relatively straightforward.
/.well-known/webfinger is a static file which gives information about where to find details of the account.
/[username] is a static file which has the user's metadata, public key, and links to avatar images.
/following and /followers are also static files which say how many users are being followed / are following.
/posts/[GUID] a directory with JSON files saved to disk - each ones contains the published ActivityPub note.
/photos/ is a directory with any uploaded media in it.
/outbox is a list of all the posts which have been published.
/inbox is an external API endpoint. An ActivityPub server sends it a follow request, the endpoint then POSTs a cryptographically signed Accept message to the follower's inbox. The follower's inbox address is saved to disk.
/logs is a listing of all the messages received by the inbox.
/new is a password protected page which lets you write a message. This is then sent to...
/send is an internal API endpoint. It constructs an ActivityPub note, with attached location metadata, and POSTs it to each follower's inbox with a cryptographic signature.
That's it.
The front-end grabs my phone's geolocation and shows the 25 nearest places within 100 metres. One click and the page posts to the /send endpoint which then publishes a message saying I'm checked in. It is also possible to attach to the post a short message and a single photo with alt text.
There's no database. Posts are saved as JSON documents. Images are uploaded to a directory. It is single-user, so there is no account management.
I've raised an issue on Mastodon to see if they can support showing locations in posts. Hopefully, one day, they'll allow adding locations and then I can shut this down.
The code needs tidying up - it is very much a scratch-my-own-itch development. Probably riddled with bugs and security holes.
24 by women - although that doesn't include compilations which had a mixture of genders. So fairly even handed.
As per usual, I alternated between fiction and non-fiction. I find my brain gets confused otherwise. I also set my eReader to have a different font per book so they don't start bleeding in to each other.
This year, I deliberately set out to read some older books - not just those on the modern best-sellers list.
At some stage I'll have to take all the review data and see if I prefer fiction to non-fiction, men to women, or older books to newer ones. But, for now, here are some of the highlights:
The recent news that MoneyDashboard is suddenly shutting down has exposed a gap in the way OpenBanking works. It is simply impossible for a user to get read-only access to their own data without using an aggregator. And there are very few aggregators around.
Why is it impossible for me to get programmatic access to my own data?
There are two interlinked reasons which I'd like to discuss.
OpenBanking is a brilliant idea encoded in an excellent standard wrapped in some very complex processes and with some rather unfair limitations.
OpenBanking presents a standardised API to allow read and write access to a financial account. So I could give a smartphone app read-only access to my credit card and let it automatically tell me when I've spent more than £50 on sausage rolls this week. Or I could add all my bank accounts to one service which would let me see my net worth. Or any of a hundred ideas.
I could also connect my accounts in such a way that when Bank Account A drop below £100, an OpenBanking API request is sent to Bank Account B to transfer some money to A.
But here's the first problem. The only way you can get access to a bank's API is if you have a licence. And you only get a licence if you're a financial institution who can prove that they have robust security controls. Which means that individuals have to go through an aggregator. Or, in OpenBanking terms, an "Account Information Service Provider".
Some OpenBanking providers will let individuals play in a "sandbox" to test out the API. There are no real accounts and no real money, it's just a way to test how the API works.
I can see why that makes sense for write access. You don't want a user's unpatched Raspberry Pi suddenly sending all their money to Russia.
And I can see why that makes sense for organisations which deal with data from multiple people. One leak and everyone is exposed.
But I'm not convinced that it makes sense to deny an individual read-only API access to their own account. Sure, I might accidentally leak my own data - but the same risk exists if I download a PDF statement from my bank.
The second problem is that not every OpenBanking consumer will talk to every OpenBanking provider.
For example, I have an account with Coventry Building society. They have an OpenBanking API which no one uses! They're not the largest financial institution in the UK, but have a fair few customers. And yet all the OpenBanking apps refuse to work with it.
So even if I did find an aggregator with an API, it may not work with all my financial institutions.
If you've ever learned Mandarin Chinese, you'll know about "measure words". They're the sort of thing that trip up all new learners of the language. While 个 (gè) can be used as a generic measure word, using it everywhere makes you sound like an idiot (according to my old teacher). So you learn to use 个 for people, 包 for packets, and 根 for things which are long and thin.
English has a similar construct. You might say "one bunch of flowers" or "two glasses of wine" or "three bowls of soup".
You could say "one thing of flowers" or "two things of wines" or "three things of soups" but the measure words give much needed context and semantics.
If you get it wrong and said to a publican "four mugs of beer please" they'd probably know what you meant but it could be a bit confusing.
And isn't that very much like HTML?
The language of the web gives us semantic elements for our markup. When you use <button> to draw a button on screen, the browser knows exactly what to expect, how to display the content, and what it should do. A search engine can extract meaning from the page. Users of assistive technology can be told that they're on a button. Everything is lovely!
You don't have to do that, of course. You could use <div class="button" onclick="something()"> - with enough CSS and JS you'll have something which looks and acts more-or-less like a button. But you'll lose all the semantics which make life easier for browsers, search engines, assistive technologies, and anything else that a user uses to interact with your site.
HTML has dozens of semantic elements. There's <address> for contact details, <time> for dates and times, <nav> for navigation elements.
There are two main "generic" elements. <div> for blocks of stuff, and <span> for a short run of text. I find that most modern websites over-use these elements. I want to reiterate, there's nothing illegal or immoral about doing so; the web police aren't going to take you to gaol. I personally think that writing semantic HTML is easier to maintain, easier to understand, easier for accessibility, and easier for automatically extracting meaning.
So, for a while now, I've been slowly working on my blog's theme in order to remove as many <div>s and <span>s as possible. I started out with a couple of hundred of each. I'm now down to about 35 of each - depending on which page you're on.
I use Schema.org microdata in my HTML. For example, when a user has left a comment, I might indicate their name by using <span itemprop="name">Juliet Capulet</span>
Or, in the heading of a post I might use
This post has<span itemprop="https://schema.org/commentCount">3</span> comments and is<span itemprop="https://schema.org/wordCount">400</span> words long
Because there's no HTML element like <commentcount> or <wordcount>, I have to wrap those numbers in something if I want to indicate the semantic content behind them. I could "cheat" and use something like <var> or <output> but they're as semantically irrelevant as <span>.
I have a large calendar at the bottom of every page showing my archives. Each calendar is its own "thing" and so is wrapped in a <div> which controls its style and layout. That group of calendars is also its own thing - because .
They're inside a widget - which itself is inside of an <aside>.
I was using a <table> layout for them, but it wasn't flexible and it ballooned the size of the DOM. Perhaps I should treat them as lists? At least then they'd be easier to skip?
I'm going to continue hacking away out of a sense of masochism. Perhaps the only person who will notice (other than me) is someone accidentally viewing the source of this page.
But I think it's worth it. There's that story about how the original Mac circuit board was laid out so that, despite never being seen by normal people, it was part of the overall æsthetic. And I think that's what I'm going for - something that I can be satisfied with.
#Bluesky developers literally do not care about #phishing at all. Anyone can manipulate link card previews to read whatever one fucking wants them to read, independent from the actual website URL and content.