Monday, October 31, 2022

Extending cooking length for chicken

As I once wrote, I haven't blogged about food for several months, not so much because I haven't been eating but more because I haven't tried any new dishes. One Friday night a few weeks ago, there were complaints that the chicken drumsticks served were slightly undercooked, in that the meat didn't separate easily from the bone; they were cooked for 1.5 hours. So the next time that I cooked chicken, I gave the pieces another hour, and the results were so spectacular, no only in the ease of separating the meat from the bone but also in the taste, that I resolved to continue cooking for this extended time. 

Apart from the extra time, I also cover the chicken with parchment/baking paper and on top of that, aluminium foil. According to my wife, the paper prevents contamination of the food by chemicals emanating from the foil; this might be true, but it also has the effect of retaining liquid and not allowing the pieces to dry out. 

Since then I've carried out a few experiments: rolling the pieces in a mixture of olive oil and date honey (instead of honey) before placing them in the tray, adding water (with or without soup powder), adding almonds, and today's experiment, adding some pearl barley to soak up some of the excess liquid. I like pearl barley but my wife doesn't, so I've got to find a way of keeping the barley separate but also allowing it free access to the liquid. The next experiment will probably be removing the almonds (that don't seem to contribute very much) and adding plums.

The results have been spectacular!

I find this slightly ironic, as at the beginning of the year, I was conducting experiments with the Ninja grill to reduce the cooking time, and here am I extending the time. The Ninja has lain almost unused for the last six months: it seems that it's only going to be used for grilling steaks and my wife and I don't eat steak (our son does, though). It's the same story with every new cooking appliance: I use it exclusively for a few months, then go back to cooking in the oven.



From the 'this day in my blogging history', I discover that today is Tom Paxton's 85th birthday.

Sunday, October 30, 2022

Adding more old blog entries

Over the past few weeks, I've been adding more old blog entries: of the 599 non-recorded entries, I've so far entered 164. During this time, I've found myself adding additional tags to maybe 10% of those entries. I think that this is primarily because Blogger doesn't present an easy-to-choose-from list of tags: one can type the first letter of a tag and suggestions will be made, but this doesn't allow for the possibility of choosing a tag that exists but that I've forgotten about. I'm not going to update the online blogs but choosing tags for new blogs should be done by means of looking at all the tags in the blogs program. For example, I added a 'Greece' tag to blogs that were about Rodos, Santorini, Andros and Athens.

New ideas for the blog program: add a 'this day in history' button (in other words, display all the blogs that were entered on 30th October, regardless of year. This was quite simple, but first I had to see how Firebird refers to a day and a month that are contained within a date. The answer was slightly more complicated than how Priority refers to dates.

select * from entries where extract (month from curdate) = 10 and extract (day from curdate) = 30
(in the program, 10 and 30 are replaced by parameters). This query is different from the dynamic 'where' statement that the program (and others of its ilk that I have written) uses, so pressing this button creates the query and executes it immediately, thus short-circuiting the normal code. For the record, there are at the moment four blogs for 30th October:

ID Year Title
771 2014 Another good idea
1181 2018 Losing an old friend, gaining a new one
1433 2021 Binaural beats and deep sleep
1543 2022 Adding more old blog entries

Of course, accessing these blog entries in Blogger is not very easy because Blogger doesn't allow access via id number. Presumably these entries also have different tags. My blog program does allow direct access: clicking on the entry should open Blogger with the correct blog entry, at least for those entries that have the address stored. There are about 930 than don't!

The next idea will be much more complicated and will involve programming something that is completely outside my comfort zone, or even my knowledge bank. In the past, I knew how many blog entries there were for King Crimson (15); with the improvements from about a month ago, I now know how many of these entries also have the Van der Graaf Generator tag (6) and how many don't (obviously 9). I also know how many VdGG entries don't have the KC tag (16). I would like to display this data in a Venn Diagram. Not only that, I would like that the size of the two circles, as well as the overlapping area, be relative to the number of tags.

This will give me something to do in my spare time!

Saturday, October 29, 2022

The 8-puzzle

I have just received a communication from someone (unknown to me) via LinkedIn, asking about a computer program that I wrote (and continually revised) throughout the 1980s that solved the '8-puzzle'. I replied that I would have to get into my time machine and set it to return 34 years, but first I'll retrieve whatever shreds of memory I can find for the blog.

I came across this puzzle in a book written by David Levy; looking at the list of publications on his wiki page, this was probably 'Computer Gamesmanship: Elements of Intelligent Game Design' , published in the early 80s. One has to remember that I first 'met' a computer at the end of 1982: this was a teletype connected to a phone line that was connected to a PDP-11 computer about 20 miles away. I also had absolutely no background in programming, so this book talked about topics that were far above my ability. The 8-puzzle problem served as an introduction to all kinds of topics in computer science: how to draw a grid on a VT-100 screen, how to get direct input, how to check for legal moves, linked lists, hash tables ... there's a lot in there.

Looking for the 8-puzzle on the Internet now, I see that it's a favourite topic of computer science degree courses, which makes sense. I think that this site gives a good introduction to what the 8-puzzle is, who developed it (I remember it as a plastic toy from my childhood) and how to solve it with the computer. Note that this assignment is numbered COS 226 that probably means that this is an intermediate course in computer science. This site gives another good explanation of the puzzle and how to solve it.

I wish I had access to these web pages back in the day instead of having to stumble in the dark, teaching myself all kinds of techniques. All I had were a few pages in Levy's book and another book about data structures in Pascal, instead of detailed guides.

My program had two modes: user and computer. First the computer would create a random initial configuration, then the user would be given the opportunity to solve the problem, whilst the computer counted how many moves the user required. For my program, this mode taught me about user interface: how to react to user input and how to change the display depending on the input. 

But it was the second mode that was the more interesting: 'teaching' the computer how to solve the puzzle. Levy wrote about the 'minimax' algorithm, but it wasn't until one day I was in the computer science library of Bar Ilan university that I found out what this was. I imagine that I was doing some reserve army service in the lab at Tel Hashomer hospital, as the university was within walking distance (don't forget that I was/am a good walker; this was probably 2 km away). I acted like I had the right to access books and journals, and no one asked me who I was.

Every few months I would have a new idea as to how I could improve the evaluation function of the current configuration (basically, how far the current configuration is from the goal) in order to figure out what the next move should be. I also stored the various configurations for two reasons: I wanted to prevent the computer getting into a loop, and I wanted to look at the configurations myself to see how I would have acted. I remember now that I had a standard configuration that took me something like 37 moves to solve; any program version that took more moves needed to be improved. I also wanted to surprise myself and see whether the computer could solve this test configuration in fewer moves; after all, I'm no expert in this puzzle, and so it would be quite possible that the computer could beat me.

On the left is a picture of the solved 8-puzzle, or as we would call it in computing terms, the goal configuration. I note one major difference from this configuration and my goal configuration (that presumably came from the Levy book): mine had the empty space in the middle, so that the second row would be '4/ /5' and the third row would be '6/7/8'. This may seem like a minor point but it's very important.

Looking at the program code that has been stored here (I wonder how; did I give permission for this?), I am sad to say that although there are comments, they rarely state anything that is not obvious. There is certainly no explanation about the algorithm or how the evaluation function works. 

What Levy called IIRC the move generator (i.e. which tile should be moved next) appears to be implemented in the function makenode. Going back to the first picture of a real 8-puzzle, there are only two moves possible in this configuration: either the 1-tile would be moved down or the 5-tile be moved left. I would think that this latter move would be better then the 5-tile would be in the correct column but in the wrong row. Moving the 1-tile wouldn't appear to do much. But that's why the program has its evaluation function in order to calculate which move is better.
function evaluate (var p:square): integer; var i, tmp: integer; ch: char; blank: boolean; begin tmp:= 0; i:= 0; while i < 9 do begin i:= i + 1; ch:= p[i]; blank:= ch = ' '; if not blank then tmp:= tmp + table[(i-1)*9 + ord(ch) - zero] else tmp:= tmp + table[i*9]; if blank then if i <> 5 then tmp:= tmp + 2 else else case i of 5:; 2,4,6,8: if p[5] <> ' ' then if (p[preint[i]] <> prech[ch]) and (ch <> prech[p[5]]) then tmp:= tmp + 5 else else if p[preint[i]] <> prech[ch] then tmp:= tmp + 5; 1,3,7,9: if p[preint[i]] <> prech[ch] then tmp:= tmp + 3 end end; evaluate:= tmp end { evaluate };
The above is not spaghetti code: it's actually presented in quite a logical format, but there's no explanation. Earlier in the table there are definitions of tables used in this function, but these definitions are opaque: I don't remember why certain values were chosen or what they do. The name 'prech' implies to me that there function checked which tile preceeded which; apparently this was an effective approach. 

Friday, October 28, 2022

Unfamiliar photo from 10 years ago

My mobile phone was kind enough to display the photo (pictured below) with the caption '10 years ago'. I have no recollection of this photo whatsoever, but it clearly shows my father (then aged 90) and myself sitting on our balcony and talking about something. 




Thursday, October 27, 2022

Emergency surgery

Got you going, right? 

This wasn't emergency surgery on one of the family, but rather on my mobile computer. As can be seen in the picture on the left, the frame that holds the screen has warped and the screen is no longer attached to the frame. I'm not sure when this started (certainly before Bari), but for some time there has been a little difficulty in closing the top of the computer. This has been getting worse and worse until the other night, when the plastic hinge that holds the frame snapped in two and the screen almost fell out.

Of course, I could continue working without problem, but obviously I had to seek help as soon as possible. I sent the picture to my computer repairman and he said that it would be a very easy fix (although clearly the frame has to match the screen size). 

As I needed the computer for consultancy work yesterday (Wednesday), I took it to him at about 8:30 pm last night. I received a whatsapp message at 7:05 am this morning that the computer was ready. So I walked over to his house (on the other side of the kibbutz, a good work-out) and picked up the computer on which I'm typing now. I've forgotten what it's like to close the lid properly.


Tuesday, October 25, 2022

Roland J-6 minisynth: a serious musical instrument or an expensive toy?

Towards the end of September, I received (yet another) SMS from one of the musical instrument shops in Israel where I have purchased items. I had a look at their site and resisted the temptation to buy yet another guitar that would probably hang on the wall, gather dust and never get played. On the other hand, I saw that there was a synthesizer on sale for about 850 NIS, about $240. As the shop was prepared to spread the payments over two years, the cost each month would be 35 NIS, which the same cost as a few bars of chocolate. I decided that it was time to spoil myself and that I could afford the cost.

The manufacturer's website describes the device thus: The J-6 Chord Synthesizer is an endless well of musical inspiration, pairing a powerful chord sequencer with the lavish tones of the renowned JUNO-60 synth. Generate soul-stirring song ideas in seconds, and experiment with styles and variations to coax dancing lines and rhythmic patterns from your chords. Add lush effects to frost your sound, and expand your possibilities by interfacing with other AIRA Compacts, MIDI hardware, and music production software.

Only after ordering was I smart enough to go looking for videos about this device on the Internet.  Here are a few videos: one, two, three and four (there are more). The fourth video asks the very important question: is this a serious musical instrument or an expensive toy? In the time before the synth was delivered, I found the user manual on the internet and tried to figure out how I might be able to use it in order to turn it into a serious musical instrument. There is a sequencer contained within the synth but this has only 64 steps; I spent some mental time figuring out how I could use this within my recordings. The first conclusion was obviously that an entire song could not be sequenced within the synth, but it should be possible to record sections and paste them in to the multi-track recorder in the same way that I include my vocal parts. There were listed a huge variety of chords available, but these seemed not to be labelled so I would have to figure out by myself what each chord is.

The synth arrived yesterday and with no ado I began charging it, before playing with it slightly. The first thing that strikes one is its size: it's tiny, about the size of a trade paperback, 188 (W) x 106 (D) x 36.2 (H) mm! Obviously this isn't meant to be an instrument that one plays live!  I played around with it for a while and couldn't get much out of it (RTFM). The synth comes with a card embossed with a QC code holding a web address which when followed causes allows the owner (me) to register his purchase. The web site also contained an updated manual so I downloaded this and glanced through it. 

My first observation about the manual was that the chords have now been named; my second was that each chord family contains one chord per each chromatic note (i.e. for family #1, the chords are Cadd 9, C#M9/C, Dm7, D#M7, Cadd9/E, FM9, Dadd9/F#, Em7/G, F/A, Gm/Bb, G/b) where there is no direct correspondence between the 'note' being pressed and the chord played. In other words, pressing the A key will produce an F/A chord.  What if I want to play Am7 followed by BbMaj7? Do I have to play (and sequence) an Am7 chord from family #18 (that seems to contain the 12 minor chords), followed by a BbMaj7 chord from family #19 (all major seventh chords)? A better solution would be to transpose the keyboard by five semitones then play Em7 and FM7 from family #2. OK: how does one transpose the keyboard?

The manual explains the basics of working with the synth; for transposition, the manual says

1. Hold down the [SHIFT] button and press the [A (KEY)] keyboard button. This returns you to the transpose setting screen. 2. Turn the [TEMPO/VALUE] knob to edit the value. 3. When you are finished, press the [C (EXIT)] keyboard button on the left side.

I suppose that's reasonably clear although a bit confusing. Most of the other instructions are similar.

After fiddling around a bit and discovering odd snippets, I realised that I would have to learn to operate the synth in the same manner as I learnt how to write reports in Priority: read the manual/SDK, try out small things, then build on this knowledge in order to build larger things, and so on. I was somewhat confused at first as all the youtube videos had arpeggios running: I discovered that in order to do this, one has to press the 'chord' button then hold the desired key (e.g. A) for a few seconds: this will cause the synth to play the chord defined by the chord family according to the pattern defined with the defined sound. The arpeggio will play as long as the note key is pressed. But notice: one has to define a sound (there are 64 predefined sounds) that can be altered by changing its envelope and by adding delay and reverb; one has to choose the arpeggio pattern and one has to choose the chord family (and that's before the sequencer enters the picture). 

In other words, it's going to take some time before I can use this device in an intelligent manner. But at least, I now have a mental path as how to progress. 

It seems that in order to create a sound file on a computer, I have to connect the sound out socket (where headphones are connected at the moment) to the input on the computer's sound card. Supposedly MIDI data can also be recorded but how to do that is even less clear than how to choose the arpeggio pattern. This can wait for later.

I am going to try very hard in order to turn this tiny device into a serious musical instrument.

Sunday, October 16, 2022

Indexing blogs

Towards the end of 2014, I wrote a simple database program to record all the blogs that I write. The need for this came when I reached 700 blogs and wanted to table the most popular tags in the past 100 blogs. Whilst the blog site allows one to retrieve blogs according to tag, the possibility to retrieve by date is more limited. The external interface allows one to see how many blogs were written in a given month and in a given year, but the blogs themselves can only be accessed individually (the internal interface lacks this). As a database programmer, I am used to more sophisticated options, such as showing all the blogs that were written in a given time period with a given tag. There is no option whatsoever to access blog entries by number.

So I wrote that simple program: it allows me to record the blog titles and their tags (a blog can have more than one tag). The most sophisticated part of the program automatically outputs a 'league table' of tags and counts that I can paste into this blog, as I have done here, for example. I've been content with the program for nearly eight years, but the last few days have seen various developments (or more accurately and in the language of my thesis, enhancements).

The picture on the left shows the parameters tab - one can choose to retrieve from a given date, until a given date, from ID until ID and by tag (ignore for the time being the radio button 'choose multiple tags') and the combobox 'tag 2'). As can be seen (with a little difficulty), I have chosen to display all the blogs written since 01/10/2022.
The lower picture displays the result of that database query. At the moment, 6 blogs have been written since the beginning of the month: they are displayed along with their id number, which is not particularly useful, and the date they were posted (ignore the 'web' column for the time being).

My first improvement was to handle the problem that I couldn't simply switch to the 'data' tab in order to enter new blogs: first I had to retrieve a list of blogs (e.g. from today or the beginning of the month) and only then could I make new entries. In technical terms, the query that displays the blogs hadn't been opened and so I couldn't make new entries. The fix was first to determine when this event would occur (pressing on the 'add' button when the query is closed), then to retrieve the id of the last blog entered, then to increment this number by 1 and place it in the 'from id' edit box, and finally to simulate pressing the 'show' button. This may sound like a lot but it's only a few lines of code. Then I could add new blog entries that would be displayed, because their id would be greater or equal to the value in the 'from id' edit box.

Writing the above makes me realise that I have not made the other buttons ('edit', 'set tags' and others) 'unabled' when there are no blogs displayed. This is a program for my personal use and I am not likely to press one of these buttons! Anyway, I don't think that anything would happen if I pressed those buttons when no data is being displayed.

The second improvement embodied thoughts on a more general topic: I use the above two-tab dialog box frequently in the OP's management 'ERP' program and I use the blog program as a test bed for the ERP program. The 'tag' combobox allows the choice of only one tag: in English, the query would be 'show me all the blogs that have the tag <something>'. In the ERP program, this would be 'show me all the entries for customer X'. I would like to extend this by allowing what is technically called an 'or' query: show me all the blogs that have the tag <X> or those that have the tag <Y>.

I solved this by reusing the dialog box that allows me to choose multiple tags for a given entry (see the picture on the left). Instead of attaching tags to an entry, I created a new table, tmptags,  that consists of one field only, tag; the chosen tags go into this table instead of the 'tag2entry' table.

Then the query in the main form had to be changed in order to use the 'tmptags' table; this was very easy. More difficult was deciding when to bring up this dialog and choose the tags, and how the code called by pressing the 'show' button should use the 'tmptags' table or the tag chosen in the 'tag 1' comboxbox, if at all.

Once I figured this out, it occurred to me that I could make a useful extension, and allow my program to execute the Internet browser and display a given blog. So I added an 'address' field both to the 'entries' table and to the form that allows me to enter or edit an entry. Going back to one of the earlier pictures, the tick in the (new) 'web' column means that double pressing a line will cause that blog to be displayed.

My final improvement (as of last night, of course) was to allow the possibility of choosing two tags and displaying only the entries that have both tags (in SQL, this is an 'and' query). The implementation was fairly simple: add another combobox and alter once again the SQL code for the query. Unfortunately, this time the SQL is complicated, as the 'tag2entry' and 'tags' table have to be referenced twice, meaning that aliases have to be used. Not only that, an alias is required in both usages of each table. This leads to code that looks like this...
select id, case when address is null then 0 else 1 end as web, curdate, name, address from entries inner join tag2entry t2e1 on t2e1.entry = entries.id inner join tags t1 on t1.id = t2e1.tag inner join tag2entry t2e2 on t2e2.entry = entries.id inner join tags t2 on t2.id = t2e2.tag where 1 = 1 and t1.name = '....' and t2.name = '....'
The 'where 1 = 1' is simply a placeholder line for the 'where' clause; this will always be true and is probably ignored by the SQL engine. Its purpose is to allow the following clauses to begin with 'and'; there's no need to check whether a 'where' line has already been added when building the dynamic query.

I have to remember that if I alias one appearance of a table (e.g. tags) in a query, then all appearances of the same table have to be aliased. This probably is the basis for the tendency of beginning programmers in SQL Server to alias everything, regardless of whether there is a need to do so.

The next improvement will be probably be something like 'when was each tag last used', which could be extended to 'which tags haven't been used since date X'.



Following the recent entry about Gillian McPherson, I was interested in seeing what else I had written with the tag '1971'; almost nothing appeared. I thought that this was due to a problem in my code, but eventually I remembered that I hadn't entered the first 600 blogs into my program. As from last night, I intend to enter maybe ten old blogs a day; this isn't easy as noted above: the blogger interface doesn't allow me access by id number. I'll use the external interface (as shown in the picture on the left) to access all the posts in 2005 - these obviously will be numbered 1 - 22. From thereon, I'll have to calculate what will be the id of the next entry that I intend to save in my program.

I thought that somewhere I had documented how to insert two pictures side by side in a blog; here I wrote that I've learnt how to place two pictures side by side in the blog, but I can't find now how I did this. I remember that it had to be done in the HTML view and that no positioning be chosen, but I'm sure that there's more to it than that. I found this morning a blog that shows how to do this with a table, but that wasn't too successful either. After another search, I've found the page that I remember. I'm going to reproduce part of the solution here; this assumes that the pictures have already been loaded into the HTML page.

Each image is surrounded by an opening DIV line.

<div class="separator" style="clear: both;">

and a closing one

</div>

You need to remove all those lines of code.

Then finally for each image you will see this code

style="display: block; padding: 1em 0; text-align: center; "

Remove the display:block; part so that it looks like this.

style="padding: 1em 0; text-align: center; "

Then if you have done it all, when you goto Preview or Compose mode you should see all your images together.

Saturday, October 15, 2022

Peter Robinson, RIP

This is a blog written in surprise, sadness and mild shock, certainly not a blog that I thought about prior to writing. As is my habit, I begin my mornings by glancing at the headlines of the International Guardian web-page: there may be an article or two that grabs my interest. Before leaving, I check the obituaries page, in case there might be an article about someone who interests me.

Today it was first Robbie Coltrane, the Scottish giant. I'm not sure where I first saw him and recognised him for who he is; I have just discovered that he appeared in two Bond films, one of which ('Goldeneye') I'm quite fond of. It certainly wasn't Hagrid, the role that probably he will be most remembered for. He also appeared in the video for Kate Bush's song, "Deeper understanding", that I've seen a few times in the Bush renaissance.

Then I saw Peter Robinson's name on the obituaries page. Robinson writes/wrote the DCI Banks series of novels that I've written about many times. Normally there is a new Banks book most summers, but this year and last year there was nothing. Covid-19, I told myself. Now I discover that Robinson completed another Banks novel, "Standing in the shadows", that is to be published next year.

Robinson died "suddenly after a brief illness"; this is obviously a euphemism,  although for what I do not know. The same is written on his web site, that reveals that Robinson actually died nearly two weeks ago, on 4 October. I was going to write about the coincidence of Robinson dying the same day that Ian Rankin publishes what is guaranteed to be the last Rebus novel (although he could always write about the young Rebus).

Peter Robinson was an immensely talented writer over a very wide range, from poetry, to short stories, noir thrillers to more literary works. He was in fact Dr Robinson, with a PhD in literature, and we saw glimpses of that, and sometimes his poetry, in his novels – as well of course of his very eclectic love of music, shared by Banks. His novels are superbly plotted (one reviewer said he had the precision of Swiss watchmaker) and the settings are vivid and fully real, but it’s the richness and depth of his characters that keep the readers – including me – coming back for more.  [Thus writes Carolyn Mays, who was Peter Robinson's editor]

I am greatly saddened by this news.

Friday, October 14, 2022

Gillian McPherson

This afternoon I conducted one of those aimless Internet searches, where I started with one obscure folk singer, then by a series of links ended up with a name that I haven't seen for about 50 years - Gillian McPherson.

I remember seeing her at the Bristol University Students' Union in March or April 1971: she appeared solo, of that I am certain. I think that she was the third act of three, but I have no idea who the headliner might have been, and presumably the reason why I had gone to this concert. I was moderately impressed by her performance, especially by one song, "Look what we've got to do". It must have been shortly after that a favourable review of her (apparently only) record, "Poets and painters and performers of blues" appeared in Melody Maker, so off I went to the record shop to buy this.

On record, Gillian was far from unaccompanied: some tracks had strings arranged by Robert Kirby (very much the flavour of the time after his work with Nick Drake) and some tracks had backing by Tommy Eyre (producer?), Jon Mark (?) and Johnny Almond, who were three quarters of the group 'Mark Almond' that I liked at the time. "Look what we've got to do" received a good arrangement and production, and I recall that I used to play this song myself - it had the decending G6 F#7 FMaj7 E chord run that I like.

I have another hazy memory of Gillian: either I went to see her at a concert a bit later but she cancelled, or someone else cancelled and she played. It's a shame that I threw away my 'concert log' several years ago. Anyway Gillian disappeared and she hasn't crossed my mind since. The entire album can be found here.

Information about the album or the singer seems scarce; from one source, I see that she apparently was born in Belfast, 1949; this explains the background behind the song "They all want somebody to blame", a waltz that I remember (now) being introduced as about "the troubles", ie Belfast. It also means that she was only 22/3 when I saw her.

What are the songs like? An awkward mixture, it sounds to me now. "Is somebody in tune with my song" has a string arrangement far better than the song itself. "Who's at the deceiving end?" is sung archly - maybe an attempt at a single. The afore-mentioned "Look what we've got to do" and "We can't be the last line" have good arrangements and performances; no doubt these are the songs that attracted me. "Flight" features a complex guitar (Jon Mark?) and cello arrangement, again far better than the song warrants; a bit too precious for me. "Lazy dreamer" is jaunty and probably wouldn't have found favour with the soon-to-be 15 year old; I don't care for it now. The title track (the final song) features clumsy drums.

I get the feeling that I was less impressed with the record than with the performance, which is probably another reason why I haven't thought about these songs for 50 years.

Tuesday, October 11, 2022

Another DBA update

As I wrote only two days ago, I'm not going to continue working on the thesis until I receive my supervisor's feedback. Yeah, right (that's how two positives can make a negative). That blog entry was posted at 16:40; I took the dog for a long walk and think, and when I came back, I had more ideas for the thesis. Yesterday I worked another three hours on the thesis, and today I worked another two. As far as I can see, the thesis is now complete, except for the following:

  1. More interviews for the main case study which should lead to the presentation of more data [whilst writing this blog, one of the intended interviewees has asked me to call tomorrow]
  2. Presentation of data for the second case study
  3. Presentation of data for the third case study - this will be easy.
That's it! On the basis of the first case study, I created a 14 point model (as noted in that previous blog). I then compared the processes of the second and third case studies to this model, and enlarged it slightly, to 16 points. I also retroactively analysed the the enhancement used in the pilot study; the model showed where and why I (and the CEO) consider it to be a failure: the first part of 'continue managerial and technical support' didn't happen.

Yesterday afternoon, I took the final, conclusions, chapter of the previous thesis and plunked it down at the end of the current thesis. I then went through it with a very blunt editorial knife, cutting out everything that seemed not relevant to the current thesis. This morning, I went over this chapter again with a much sharper knife, cutting out more sentences that no longer made any sense. I then had to repopulate parts of the chapter with new material. It may not be the final version, but it's definitely a step in the right direction.

As I've noted above, one of the intended interviewees sent me a message whilst I was writing the previous paragraph, so I'll interview her tomorrow, and hopefully I'll have more data to add. This interview will be recorded on the telephone, so it's less likely that the problems that dogged the first interview will return (that interview was via Teams, with video).


Sunday, October 09, 2022

DBA update

This is the religious holiday period in Israel where it seems that we work one day, have two days off, work another day, have more days off, etc. Being an office worker means that officially I don't work on the mornings prior to a festival (Jewish festivals start in the evening: tonight is the first night of 'The festival of booths', so today is very similar to a Friday. Officially I don't work in the morning, although I did connect for an hour and a half), meaning that I have several stretches of no work. I have been using that time diligently.

Last week I interviewed our external consultant; our talk lasted about 35 minutes. Obviously there is no way that I am going to transcribe this, so I sent the recording off to the company that transcribes my interviews. After I sent it, I noticed that I had received the transcript of the first interview. Armed with an abundance of time and two interviews, along with my own self-interview, I started work again on the thesis.

The first thing that I did - that took a few days, an hour or two at a time - was to reread the thesis from the beginning. Here and there I added sentences or changed the phrasing. I was specifically looking for sentences that referred to the previous examined version of the thesis that was multi-company; such sentences had to be either emended or removed. Once I had done that, I applied the advice from my supervisor from six months ago: he said that I was mixing up the data from the case studies with the discussion of those studies. 

I had been thinking about this as well, so a big change structually was to chop chapter 7 - the case studies - into two. Remaining in chapter 7 is the presentation of each case study followed by what might be termed the meta-data, namely the time-line of the enhancement being studied and data about the interviews. This is part and parcel of the Action Reseach paradigm. The new chapter 8 will eventually consist of four or five sections: a miniscule introduction, one section each for the three case studies and possibly one concluding section (this might possibly become a chapter in its own right). Each case study section will then again consist of three sections: data, discussion and conclusions (is there a synonym for 'conclusions' that begins with the letter 'd'? 'Deduction' isn't right, and 'denouement' is too fancy, although it's possible).

Once I did this, I then considered how to display the data for the case studies; after all, I'm discussing the data but the data hasn't been shown. I thought of a tabular display, where each row displays a question and in each column appears the interviewees' remarks. After working on this for a bit, I realised that it was not practical as in most cases, the answers were more or less the same. So I converted this table into a new one; each row is still one question, but there is only one 'responses' column, where the text is prefaced by either [All], showing that everyone said the same, or [NN] (or whatever) when one person had a specific point to make that wasn't covered in the general remarks. This caused me to move some material from the discussion section into the data section.

I was working towards the concluding questions when I wanted to include a quote or two from the first, transcribed, interview. I couldn't find the appropriate questions and answers, so I played the recording, hoping to find the answers there. Nothing. The recording 'said' that it was 26 minutes long, but there is nothing recorded after 16 minutes - very annoying, very strange. I noted this fact in the meta-data section.

I then wrote a letter to the transcribing company, pointing out that the price I was quoted was based on a 26 minute long interview, but in fact it only lasted 16 minutes and so I should have been charged less. Also there were words missing in the transcript (there are a few examples where it is written 'the - ', so the transcriber was aware that words were missing); to make things worse, the transcription was referenced with line numbers (e.g. the 10th line of an answer) which is totally useless for my purposes. I need time stamps, when a question begins and when the corresponding answer begins. This way I can easily check the recording when the transcript seems unclear. I don't know when I'll get a reply to this letter - probably only in a week or so.

I sent this version off to my supervisor, asking whether this format of data was suitable. I had intended to take some time off from the thesis, but after taking the dog for a long walk, I was back at work, created the conclusions section for the first case study. This is the really important section: it's where I present my analysis of the process followed in developing and deploying the enhancement, along with any improvements that I or the interviewees think is necessary. This is going to form the process or model for the successful development and deployment of enhancements in Priority, which aside from being a mouthful, is also the central issue of my thesis.

Four years ago I had a seven stage framework for the successful d&d; this was something that I had dreamed up and I wanted to see how real-world d&d matched this framework. One major criticism of the first examined version of the thesis was that I had things backwards: instead of proposing the framework then seeing how this worked in practice, I should have examined real-life examples then derived from them the process. 

This is what I have done now: the process that I 'extracted' from the case study has 14 (!) different stages and it might be that another one or two are  required. One can be stated as 'enlist user support' (or 'create perceived user value'); I don't want to check this at the moment, because (a) I'm writing this blog and don't want to get side-tracked, (b) I think that tactically it would be better if this stage came from the discussion of the third case study, which was an example of failure, specifically for this reason (there was no user enlistment, but plenty of user resistance). I should also apply these stages to the pilot study.

I'm not going to continue working on the thesis until I receive my supervisor's feedback, but I am trying my hardest to conduct two more interviews that I badly need/want for the first case study.


When I am not working on the thesis, I am reading a fascinating book called "The code breaker: Jennifer Doudna, Gene Editing, and the Future of the Human Race" by Walter Isaacson. To quote part of the blurb, "The bestselling author of Leonardo da Vinci and Steve Jobs returns with a "compelling" (The Washington Post) account of how Nobel Prize winner Jennifer Doudna and her colleagues launched a revolution that will allow us to cure diseases, fend off viruses, and have healthier babies". By chance, today I discovered that Doudna and her main colleague won the Nobel Prize for Chemistry two years ago for this work - I haven't got that far in the book yet. I have the impression that there will be a chapter or two about working with Covid-19, but I don't want to get ahead of myself yet.

I find the book fascinating, but there's one thing that niggles slightly. In this book and others similar to it, it often reads as if one waves a magic wand and achieves a doctorate. The following snippet is an example: "[Barrangou] enrolled at North Carolina State in Raleigh and got his master’s degree in the science of pickle and sauerkraut fermentation. He went on to get his doctorate there, married a food scientist he met in class ...". There doesn't seem to be a hint of the struggle that I've had. On the other hand, all these doctorates have been achieved by people working full-time in a university laboratory, normally with defined experiments to carry out. I'm not sure about early doctorates in computer science: I get the impression that once it was enough to pick a topic and write a program about that topic. I used to have a copy of someone's doctoral dissertation about writing a Prolog interpreter in C. I doubt very much that I still have this, as it would make interesting reading. When I found it - probably at the end of the 1980s - I knew much less about Prolog and doctorates than I do now.

Thursday, October 06, 2022

Weight and bp confirmed

I went to the clinic today, primarily to receive a flu innoculation (they had run out) but also to check my weight and blood pressure, to see if there is any significant difference between what I am measuring at home and what is measured at the clinic.

The blood pressure is slightly better than what I have been measuring, so I am somewhat reassured. But my weight is ± 85.5 kg, meaning that I have indeed added over 3 kg to my weight over the summer. The nurse was not particularly impressed and didn't suggest that I see a doctor about this.

I am taking matters into my own hands: I stopped eating rice biscuits at the beginning of the week after a television dietician said that these do not cause weight loss. I have gone back to my old habit of slicing a yellow bell pepper and eating the slices throughout the day. I am considering making changes in my oat cookies, replacing the jam, raisins and chocolate buttons with peanut butter; obviously this is going to change the taste, but also hopefully reduce the number of calories in each cookie. Finally I started this morning to eat bread without butter; whilst this affects the taste of the bread, it should again reduce the number of calories. Obviously I don't expect to see any difference this week, but hopefully next week's weighing will show an improvement.

Saturday, October 01, 2022

The 2022 swimming season finishes

Excuse the poor selfie: this was an attempt to capture myself in my dressing gown next to the pool, prior to my entering it for the final swim of the year. 

In 3½ months of visiting the pool, apparently I have swum 567 lengths, or just over 14 km. I thought that after a shaky start, I swam 20 lengths every Friday and Saturday, but it seems that I didn't do so in June and some of July. I swim at a pace of about 1 length per minute, but the entire process lasts just over an hour (walking to the pool, swimming, resting, walking home then showering). So I'll have two more hours a week at my disposal.

With all this swimming and also walking (almost every day over 10,000 steps, which is about 8.5 km), one would think that my weight has decreased. Somehow, since the first of June, my weight has ballooned from 81.8 kg to 85.1 kg! That is not very encouraging.

Last week was the vernal equinox and the Jewish New Year; the nights have been getting longer and cooler. Despite this, the days have been very hot, reaching 35-37°C at midday. Something else has changed as well: along with the heat, I've started having headaches that range from the mild to the annoying - minor migraines. The first time I was taken unaware and had a miserable day; since then I've taken two half pills, but I'd prefer not to have to take anything at all.

I'll close off  this portion of the blog with a long quote from the book "Blue mind":
But there’s much more to the experience of swimming than buoyancy. Water has a tangible quality, a weight, and it has 600 times the resistance of air. Unlike earth or air, we can explore water in multiple dimensions — up, down, sideways; as neurologist Oliver Sacks comments, we feel tangibly supported and embraced by this “thick, transparent medium.” The resistance and pressure of water contribute to swimming’s role as one of the best forms of both aerobic exercise and muscle toning. Because the pressure of water outside the body is greater than the pressure inside, explains Bruce E. Becker, director of the National Aquatics and Sports Medicine Institute at Washington State University, water forces blood away from the extremities and toward the heart and lungs. The heart responds by upping its effort, pushing this extra volume of blood more efficiently with each heartbeat, and thus circulating upwards of 30 percent more blood volume than normal throughout the body. To cope with this increased load, the arterial blood vessels relax and create less resistance to blood flow. 

Here’s the intriguing part: one of the hormones that regulates arterial function is catecholamine, and catecholamines are part of the body’s response to stress. As Becker describes it, “During immersion, the body sends out a signal to alter the balance of catecholamines in a manner that is similar to the balance found during relaxation or meditation.” In other words, just being in the water can create a feeling of relaxation and a decrease in stress.  

But that’s not all. The lungs are receiving a greater volume of blood as well, which, combined with the pressure that water exerts on the chest wall, makes them work harder to breathe — approximately 60 percent harder than on land. This means that aquatic exercise can strengthen the respiratory muscles and improve their efficiency. In one study that compared aquatic aerobics with “dry” aerobics, Becker discovered that while various forms of aerobics improved fitness levels and some respiratory capacity, only aquatic exercise improved respiratory endurance. The muscles, too, are benefiting from the increased circulation as they receive greater amounts of blood and oxygen. And it’s a good thing, too, because it requires effort to propel the body through water; in swimming, every muscle is benefiting from what is essentially resistance training (one of the best ways to increase both tone and strength). In addition, swimming works the large, smooth muscles of the body, stretching and lengthening the muscles, joints, and ligaments with each stroke, while the head and spine get a good workout with every breath you take. It all means that stroking through the water not only puts you into a psychologically relaxed state, but also makes you physically stronger.  

Like other forms of aerobic exercise, swimming can produce the release of endorphins and endocannabinoids  (the brain’s natural cannabis-like substances), which reduce the brain’s response to stress and anxiety. Some theorize that the feel-good effects of swimming are related to the same “relaxation response” triggered by activities like hatha yoga. In swimming, the muscles are constantly stretching and relaxing in a rhythmic manner, and this movement is accompanied by deep, rhythmic breathing, all of which help to put swimmers into a quasi-meditative state.

(Nichols, Wallace J., "Blue Mind: How Water Makes You Happier, More Connected and Better at What You Do" (pp. 108-110). Little, Brown Book Group. Kindle Edition. )

I don't know about that quasi-meditative state. I do know that I find it easier to swim when I am thinking about anything but swimming; for example, last week I was working out the algorithm for improving the correlation calculations, and the lengths went by swiftly. But the day before, ironically I was thinking about perseverance and how it applies to swimming; I had slight problems in maintaining rhythm. I have overcome this in the past via the use of headphones, but I have become very dissatisfied with them: when I manage to get them to work, my ears get blocked so I can't hear anything anyway.

There appears to be a solution for this: one day, I was talking with a swimmer older than I, and I could hear something emanating from around his head. He explained that he gets very bored when swimming (aha! I'm not the only one) and so he found headphones that work by bone conduction. After walking home, showering and decompressing, I went looking for such headphones on the Internet and ordered a pair. Obviously they were not going to arrive in time for this year's swimming, but I'll have them for next year. They'll also be useful when walking the dog in rainy weather: I should be easily able to fit those headphone on my head then put on a woolly cap and possibly a waterproof-cover.

As Wikipedia puts it, Bone conduction is the conduction of sound to the inner ear primarily through the bones of the skull, allowing the hearer to perceive audio content without blocking the ear canal. Bone conduction transmission occurs constantly as sound waves vibrate bone, specifically the bones in the skull, although it is hard for the average individual to distinguish sound being conveyed through the bone as opposed to the sound being conveyed through the air via the ear canal. Intentional transmission of sound through bone can be used with individuals with normal hearing — as with bone-conduction headphones — or as a treatment option for certain types of hearing impairment. Bone generally conveys lower-frequency sounds better than higher frequency sounds. 

I didn't know about the frequency filter until reading this now; this is a bit disappointing but I suppose that it's not that important in the long run. I wonder whether I should listen to songs with vocals or instrumentals; I think that songs will help me keep more focused on the music and less on the swimming, which is the whole point. 8 GB storage is huge! I calculate that I swam for about 9½ hours for the entire period this year, which means that fully loading the storage will cause no song will repeat. I'll write more about this once the headphones arrive and I start using them. Ironically, the wiki article doesn't mention the possibility of using bone conduction headphones when swimming.