mailto: blog -at- heyrick -dot- eu

Navi: Previous entry Display calendar Next entry
Switch to desktop version

FYI! Last read at 18:37 on 2024/11/21.

Happy holiday!

Well, my holiday got off to a good start. Sunday night, well, 3am Monday morning. Let's just say the bottom fell out of my world and the world fell out of my bottom. I'd have understood if I had eaten raw pork, green lamb, or a biscuit covered in mould. But no, dinner was burger, peas and carrots all boiled in the rice cooker for about an hour. No sauce. All very well cooked. Lunch? I was busy writing some software on Sunday, so I skipped lunch. I had a few cups of tea and some tea biscuits. My hands were washed after using the toilet, etc etc. So, honestly, I don't know what it was. But it was.
So Monday I mostly sat on my bed watching movies or listening to music and a self-imposed diet of rice and toast. Not quite how I planned things to go, but at least, I guess, it wasn't a work day.

 

The painted door

Today, to make up for the lack of having done anything useful yesterday, I got up and threw some tea in me and then painted the front door. Like one does. ☺
The painted door
I scraped off where the old paint was flaking away. I didn't strip the paint completely, I have neither a paint stripper nor the inclination to spend forever doing so. The parts where you can see there was no paint? Bare wood. Facing the weather. So I took the time-honoured approach that I saw demonstrated a couple of times on the S.S. Canberra and basically just slapped a new coat of paint on. It's not perfect, and I think I'll need to give it a second coat, but it's better than bare wood.
At some stage I'll need to do the front windows. Oh joy, that's going to be fiddly.

I did that while wearing black. And didn't end up with a single drop on my clothing. I'm coming and going by way of the living room window right now, because there's only so much one can tempt fate. And the paint is taking forever to dry. Every so often I have to carefully pull bugs off. <sigh>

 

Towards another lockdown?

Lockdowns have been eased for two reasons. The first is that the number of infected people dropped below a certain level, so restrictions could be eased. And the second? The obvious economic damage of remaining in lockdown.

Unfortunately, with the easing of restrictions comes a lot of stupidity. It is with some degree of irony that while every country has their share of idiots, British holidaymakers abroad (especially in Spain) seem to be especially egrarious. And then the UK has the gall to enforce quarantines on people returning from Spain...

Understand this - the virus has not gone. There is still no vaccine. This is not a "new normal". Inexplicable delays in requiring people to wear face masks in public, and having people all mingle amongst one another again means that - quite obviously - the infection rate is going to rise.
This is obvious to anybody who isn't a 5G-hating anti-vaxxer dipshit.

Right now, France is considering whether or not to close bars again. And other eating establishments may well follow. I'm quite sure that the government doesn't want to introduce a second lockdown. That would send the economy right over the edge, and quite possibly the sanities of a fair number of citizens may go with it.

However, unless more people understand that we are very far from normal and stop treating the pandemic as a done deal where everything can go back to how it was, unless people get out of that mindset, a second lockdown may be necessary. Perhaps, even, inevitable?

 

Or, look at it another way. I have a car now. I have lots of time to do what I want. And I have money in my bank account. So why don't I have any desire to go out, other than to go shopping? I have pretty much run my life exactly as I did during lockdown. Ask yourself why.

And, if you aren't doing likewise... ask yourself why.

 

Sunday software

A long running argument (well, disagreement) that I have had on the RISC OS forum is an application called Store (a cross between a package manager and an app store) appears to be unable to automatically notify the user when something that they have downloaded has been updated.

This isn't strictly true. There is a menu option called My software that will do so, but it is only active once you have created an account with Store and signed in.
This is ridiculous.

I understand that Store's approach to things is to track purchases so that products you have paid for can be downloaded again and/or updated (if said update is free). To this end, I would imagine that the free offerings appear to the system as purchases of £0.00.
However, sadly, conflating the concept of purchase tracking and update tracking means that if you start Store anonymously (not signed in), it will provide no information on what has been updated.

The thing is, Store has all of this information. It knows what you download and it knows what versions of things have been downloaded. It is entirely feasible to record this information client-side and do a simple comparison as the software catalogue is loaded (as happens when Store is started if it's been more than n hours since it was last updated) in order to highlight anything that has changed.
I really do not see the need to sign in to have the system highlight changes. This ought to be considered fundamental behaviour.

And since talk is cheap and any asshole can have an opinion (you're currently reading the opinions of this asshole!), I decided to make a proof of concept to both be useful to me and to ram the point home.

Enter PSVUNT. Pronounce it how you like, I lean towards "pee-ess-vunt" but only because the alternative sounds like "piss-vunt".
It stands for PlingStore Version Update Notification Tool. The module name is not officially registered, but since this was a Sunday hack and I'm not really anticipating any name clashes...

The tool is implemented as a module, because it hooks into FindV to track files being opened and closed. When a file is opened (type &83 - create a new file with no path; as is used by Store) the module will examine the filename and path of the file requesting to be opened.

If it is the Store catalogue file (written after a successful update), then the module will request a callback in order to handle catalogue updates, with the file handle set to zero.

If it is the information file written once an application has been downloaded, then the module will extract the filename from the path, record this as the app ID, and request a callback for handling a file update.

If a file is being closed (type &00), the module conpares the file handle of the file being closed with the handle of the catalogue file. If they match, then the module will request a callback in order to handle catalogue updated, with the file handle not being zero.

There are two callback routines. These are called by RISC OS at an indeterminate time in the future (usually microseconds) when RISC OS is no longer threaded, no longer busy, and it is safe to do stuff.

The first callback routine does two different things, depending upon whether the file handle of the catalogue is zero or not.

If the catalogue handle is zero, then the module will enumerate all open file handles looking for the catalogue file. It does this because at this point the file has been opened by Store, so we cannot access it. So instead we record its handle so we can notice it being closed and then access it.
This might seem like a long-winded way of doing things, but the problem is that in order to snarf the handle of an opened file, we would need to intercept FileV, push our own address into the stack, fiddle with things to let the function be run by the OS and have us get called on the rebound so we can pick up the results. Doable in assembler, somewhat more complicated bouncing in and out of the C runtime environment. So I decided it would be much simpler, and cleaner, just to evaluate open handles until we find the one we need. Note, also, that enumeration provides the full canonicalised path, so we can only scan for nomenclature as of the !Store part of he path, as we don't know what "<PlingStore$Dir>" refers to. We could look it up, but since the rest of the name is unique, there's no point.
We use the old method of evaluating open files (assuming handles count down from 255) because the newer OS_Args call that can provide handles is only available on RISC OS5.17 or later. Using it would preclude any earlier system.

If, however, the catalogue handle is not zero, then we know that the catalogue file has been closed. At this point we jump in and open it, parse out all of the software (beginning with the line "AppID:" and ending with the line "Categories:"). We build up an array consisting of the application's ID, name, version, and the sizes of the application and the demo version. Both of the sizes can be zero, but it's usually the demo size that is.
Once the catalogue has been refreshed, a comparison is made between the software packages that we know about, and the data in the catalogue. If the version (treated as a string) is different, or if the application size is different, then the package will be flagged "new" to indicate that there is a new one available.
Whilst the demo size is remembered, it is not used in the comparison. This is to cater for situations such as happens with OvationPro where the 'reader' version has its timeout updated (hence a new demo) but the main app hasn't been updated. Consequently, you will not be notified of demo version updates.
You should be notified of full version updates. While these tend to appear as zero bytes in the catalogue (I don't know if the catalogue changes when you're signed in, or if there's a different mechanism for paid software), one would assume that the version number would change. If it doesn't (hello AcornSSL!) then we have bigger problems than whether or not my Sunday hack notices.

If any packages are flagged as new, then a text file will be created listing all of the updated packages (giving their name, the version you have, and the version available). This is Filer_Run so it should appear in your editor.
Since there's no integration between PSVUNT and Store, you'll need to find and update manually. Hopefully a future update to Store will render this module obsolete, but since several people on the forum think that it's no big deal to be signed in for basic functionality, I won't hold by breath.

The second callback is for dealing with software updates. In this case, we have extracted the application's ID from the filename being opened. That's all we need, so we simply look up the ID in the catalogue, and copy across the details to our array of software we know about. Assuming that a successful download means that you now how the version indicated.
If the package was already known to PSVUNT, it is updated. If it wasn't known, it is added to the end of the array.

A big limitation of the system is that PSVUNT is unable to cater for any packages previously downloaded. Although Store writes little files keeping a record of all of the packages that were downloaded, rather usefully the "version" indication in those files is...a blank string. Brilliant! Since there is no programmatic way of determining the version of things that have already been downloaded, PSVUNT simply doesn't bother.

The arrays (catalogue and software downloaded) are 512 elements long. There are about 290 entries in Store, so we're not in any danger of overflowing. I simply couldn't be bothered writing a smarter memory allocation scheme.

Two files are written into Store (naughty, but what the heck...). The first is !Store.DataStore.PSVUNTapps which is a data file consisting of the number of catalogue entries as a 16 bit value (low byte first) followed by a dump of the catalogue array as it is held in memory.
The second file is !Store.DataStore.UpdatedApps and this is the text file that loads into your editor to notify you of what has been updated.

You can find the application at:

https://heyrick.eu/blog/files/psvunt_0-01.zip (14.32KiB)
It is licenced under the EUPLv1.1, so source code is provided. Feel free to fiddle. It is written in C and compiles with the DDE.

 

Rick'sNetRadio stations update

Some stations come, some go, and things may change. I have programmed a variety of stations into my net radio to cater for how I may feel at any given time. There's "general classics" (Eagle), eighties, symphonic metal (PPN), a bit of goth, some classical, French contemporary, JPOP, and for when all else fails...some chirps, cheeps, and peeps.

struct stationdef station[10] =
{
   // First station - this is the station played at startup
   "Heart 80s",
   "media-ice.musicradio.com",  // may be updated if there's a redirection
   "/Heart80s",                 // may be updated if there's a redirection
   80,

   // Second station
   "Eagle 96.4FM",
   "streaming.ukrd.com",
   "/eagle.mp3",
   80,

   // Third station
   "Classic FM",
   "media-ice.musicradio.com",
   "/ClassicFM",
   80,

   // Fourth station
   "Retro Hits Canada",
   "149.56.183.178",
   "/stream",
   8300,

   // Fifth station
   "BBC Radio 4 FM",
   "bbcmedia.ic.llnwd.net",
   "/stream/bbcmedia_radio4fm_mf_p",
   80,

   // Sixth station
   "Alouette",
   "broadcast.infomaniak.net",
   "/alouette-high.mp3",
   80,

   // Seventh station
   "JPopsuki Radio!",
   "jpopsuki.fm",
   "/stream",
   8000,

   // Eighth station
   "Birdsong FM",
   "streaming.radio.co",
   "/s5c5da6a36/listen",
   80,

   // Ninth station
   "Gothique13",
   "66.55.145.43",
   "/",
   7037,

   // Tenth station (here, so it can be accessed quickly by going back once)
   "PPNR02",
   "streamingV2.shoutcast.com",
   "/PPNR02",
   80

   // Don't forget to update stationcount below
};

No, don't forget to update stationcount. ☺

 

If your browser is capable of streaming MP3, then...

 

Glasses

New glasses, as I mentioned the other day. The gun logo isn't Zeiss, it's the frames maker who are called Clyde with the symbol of a gun. A part of me wonders what sort of deranged troll logic names a glasses frame maker after a long-dead gangster...

My new glasses

Polarised sunglasses which give everything a strong sepia tint. It can make looking at glass objects...fascinating. ☺

The normal glasses, a shade more fragile than my current ones (so I might keep them for work) having an anti-UV filter and blue light reduction, although as you can see they don't tint much (my previous glasses made everything slightly yellow) so I wonder how strong the blue filtering is? The glasses do look purple when light is reflected off of the lens, I think this is a side effect of the UV filtering.
Both bring a blurry world into focus. I paid €61 for the sunglasses, and the regular pair was free (paid for by my medical). They paid less too, as summer sales, the frames were reduced.
The faint horn-rim effect isn't really my style, but my second choice, I didn't like the style. The frames, although metal, were heavier and the lenses more squared. It just didn't look... me.

 

 

Your comments:

David Pilling, 29th July 2020, 13:51
Experiment - keep reducing measures until there is an upturn and then reintroduce them. No one seems to know where the real danger lies - shopping or holidays. Pubs or schools. Masks or hand washing which is most effective. Presumably they could not just have said in April "no holidays outside the UK this summer" because it would ruin many businesses. 
The UK government has a "Behavioural Insights Team" (or Nudge unit), so getting lots of people into Spain and then telling them they would not get back easily was intended to teach them something. 
It is always Spitfires and railings (they took down all the railings to make Spitfires at the start of WW2, only they didn't, wrong sort of metal, but gave a message). 

Add a comment (v0.11) [help?]
Your name:

 
Your email (optional):

 
Validation:
Please type 53889 backwards.

 
Your comment:

 

Navi: Previous entry Display calendar Next entry
Switch to desktop version

Search:

See the rest of HeyRick :-)