Wednesday, January 26, 2022

Janis Ian is retiring from recording

The Guardian posted a long article about Janis Ian today.

Tuesday, January 25, 2022

Demoing a new song

About this time last month, I had finished working on and recording a new song. I felt that I was out of ideas and that I'd never write another song (this happens quite frequently). After a few days of nothing, I remember sitting down one evening at the end of December with a guitar and absent-mindedly fingering chords, until something began to crystallise. I took this snippet and made a brief sequence - just the chords and a tune. A few days later the chords to a complete verse emerged; don't ask me what key this is in because the key changes every four bars (G Dm G Dm E Bm E Bm C BbM7 C BbM7 Em A Em A).

So: at the beginning of January I had the semblance of a new song. Every few days I would sit down and add another bit to the sequence, be it a second verse, an instrumental link, a third verse, another link, a solo, a bridge and a coda. Of course, at the same time as I was adding sections, I was also working on the instrumentation, for example beefing up the bass part in the second verse, etc. I spent a few interesting hours trying to figure out how I could return from the instrumental to the verse; this was because the bridge started in C# after a link in Dm; the instrumental was alternating four bar phrases of C#m and Bm. In the end, I realised that I could turn a Bm into a B diminished (by changing one note) and thence to A that would lead cleanly to Dm, the instrumental link prior to the final verse.

By Saturday morning, I had a version that was complete (or almost so: there were still a few tweaks to be made in the evening); during the day I eked out the words (these had eluded me during the month). On Sunday I thought that I would add a petite reprise to the final verse, so I inserted an extra four bars with changing instrumentation.

Yesterday evening I decided to make a demo of the song: this was primarily intended to check that the song was singable. I didn't mention this in the previous paragraph, but the tune changed about three times during the month and I wanted a vocal version that I could 'fix' in my mind. Singing the song aloud for a recording for the first time went very well: I remembered the tune (with all its variations) and sang it in tune without stumbling anywhere. I should confess that I made two musical versions of the song: one complete arrangement without tune, and one with tune but without certain instrumentation. I sang along to the version with the tune which might explain why there were no mistakes.

I view this version as a pilot test: to find where the problems are. I intend to lower the song by a tone to make it slightly easier to sing. I intend to remove the petite reprise and revert to the original instrumentation for this part. I intend to change some instrumental fills in the second verse so that they don't clash with the singing. 

Friday, January 21, 2022

The Auditorium

This was a moribund site whose mission is A place to share music as you write it and other stuff like that. Someone asked for criticism of their music on the Music: Practice and Theory site on Stack Exchange, and someone mentioned (and reactivated) the Auditorium. Intrigued, I uploaded a link to the YouTube version of "My father's eyes". So far, there seems to be only three other people active, all names known to me from MPT.

Following is their criticism (names omitted; each person has their own paragraph):

  • I listened to your song and I think it has great "bones". The song structure is good, the lyrics are clearly heartfelt. I think the performance and production are holding it back. For my tastes, the drums are mechanical and the high hat in particular is insistent and not exactly a good fit for the theme of the song. I might replace it with lazy, quiet, ride cymbal. The best thing would be to find or hire some great musicians to handle the most important parts and re-record it. I think the melody could really soar with a great singer (no offense), and having at least a human drummer lay the foundation would improve it a lot. A soloist might be nice, also. Not to play an actual solo, but to fill in the sound, play counterpoint with the vocals, and "humanize" the whole thing.
  • I think your recording as is makes a descent [sic] demo. Song structure, melody, etc. are solid. There are so many ways you could work the demo to a final performance. A general idea: think dynamics and expression rather than singer with a rhythm section. The lyrics express some heavy feeling, disappointment, frustration, even some bitterness. A singer could go from nearly speaking the lyrics to singing to howling and really let their feelings out.
  • I listened to your other YouTube songs. Your style is consistent, good stuff. I'm reminded of some songs by Elvis Costello like Almost Blue and Kid About It. There is some similarities with the basic song material, but his recordings show how it can be presented more dynamically.

My reaction: Thanks for the feedback. I'm well aware of my (lacking) abilities as a singer and also the lack of dynamics. I do try to introduce dynamics into the music but as a singer I try to model myself on Nick Drake or Randy Newman: they don't have dynamics and Randy isn't exactly a singer! If I were to describe my recordings in one word, they're too "polite".

Thursday, January 20, 2022

Accountant's gloves

As the weather has continued to be extremely cold in the mornings, I asked my wife to buy a pair of what I call "accountant's gloves" - gloves leaving the final joint of each finger uncovered so that one can write with a pencil or type/enter data into a computer with ease, whilst keeping the hands warm. I used to have a pair of gloves maybe 40 years ago, although I don't remember where I got them from.

Apparently my wife snapped up the last pair of gloves for sale from the shop - other people reached the same conclusion as I and bought gloves so that they can work with their computers.  


Wednesday, January 19, 2022

Late afternoon walking

Over the past few days, we've had rather extreme weather, at least by our standards. On Friday morning, it started raining and didn't stop until Sunday afternoon. About 145 mm rain fell (about 6 inches) during this period; we're in what might be called a dry patch in Israel. Elsewhere the rainfall reached twice this level. Then on Monday, "the mercury fell out of the thermometer": when I got up at 5:30 am, the temperature outside was 2.8°C, very low for us. During the day, the temperature rose to maybe 10°C. Working from home, I turned the air conditioner on at about 6 am, so at least inside was fairly normal.

Tuesday was like Monday, albeit slightly warmer early in the morning, "only" 4.5°C. Again, during the day the temperature rose, reaching a peak of about 15°C by 3 pm, before a quick descent. Taking the dog for a walk was a fairly painful process at first as my legs didn't adjust to the cold very well. Despite this, we got in a few circuits of the area where we walk before night descended. There was a full moon that rose fairly early, as can be seen in the accompanying picture (somehow the picture has been reversed left to right, not that it matters very much; we don't normally walk down the road).

Today was "warm": 9.5°C at 5:30 am. But there was a little rain overnight, and it's raining now, not too heavily. Tonight there may be snow in Jerusalem. We are promised more rain next week. Walking the dog in the evening may be problematic.


There was a brief on-off-on power cut on Sunday night (what is termed a "brown-out"); this is the worst kind of power cut as it has the potential to cause more problems with electrical equipment than a regular power cut. When I came to measure my blood pressure and record it early on Monday morning, I saw that the screen of my music/programming computer (that runs XP) was displaying the 'blue screen of death', with a message that strikes terror into the heart of any computer person: "Unmountable boot volume". In other words, something happened to the hard disk to make it unreadable.

In the evening, I took the computer to my repairman: he saw that capacitors on the motherboard had blown, probably as a result of old-age and the brown-out. By yesterday evening, he had the computer fixed; I brought it home in the cold and set it up. After waiting some time for the computer to boot, I discovered that the external soundcard wasn't working, but this was easy to fix. Now the computer is back on line.

Sunday, January 16, 2022

Turning the DBA research around: the research journal

After completing the pilot study chapter with some good material comparing the apparent development and deployment process with the various engineering change models (my supervisor writes I read through the pilot study section and I think you've done enough with that section now. I like the way you identified the different changes that emerged from the conclusions drawn from the study), I began contemplating which enhancements I would be covering in the major case studies. At the same time, I had written and extending a chapter about part of my company, showing major enhancements that had been enacted in the past two years. I wasn't too enthusiastic about researching these enhancements as some parts of them had taken place two years ago and so people's memories might not be too accurate. Also, these aren't 'classical' enhancements as I had defined them with one group of stakeholders entering information and another group utilising this information. If one takes a long view, then this is what's happening, but it's not initially apparent.

During a management meeting this week, part of which was devoted to plans for the coming year, I suddenly realised that I had a huge enhancement taking place underneath my nose. We intend to modernise and computerise the finished goods warehouse; as it is expected that the warehouse workers will be mobile within the warehouse (as opposed to workers on the factory floor who are in fixed positions), one of the requirements of the warehouse management system (WMS) is that it handle wireless communications via hand-held terminals. This is beyond my capabilities and so the enhancement will be delivered and developed by an outside vendor. There is a WMS module that exists within Priority although we don't have a license for it yet. Using a WMS that is an integral part of Priority is preferable than using an external program.

With this realisation, I quickly changed the order of presentation of enhancements and case studies, making the WMS the primary case study. The main advantage of researching an enhancement in real time is that I can maintain a research journal; I went over emails from the past four months and found a wealth of material for my journal. I also added some 'editorial comments' to this journal; these are also part of the research.

There are a few differences between this enhancement and others that I have discussed on a procedural level; as I wrote in the thesis, it will be beneficial for this research to see what changes in the development and deployment process arise through the choice of an external vendor (the choice itself is a step in the process that does not exist with an internal implementer). I am going to add some thoughts about that to the research journal.

We can also take advantage of some of the tentative conclusions from the pilot study, namely that the specification can include the definition of clear goals for the enhancement along with criteria for judging the success of the enhancement, thus improving the chances of the enhancement being successful. This is also an important part of the research: showing how steps that we might not have taken had it not been for my research do make a contribution. There are a few paragraphs devoted to the topic of validation in the version of the thesis that was presented last year; I'll have to dig them out.

In a sense, this blog too is part of my research journal!

Saturday, January 15, 2022

Another Ninja experiment

I know that the impression given by this blog over the past week or so is that all I do is experiment with the Ninja grill; this is far from true, but most of my activities aren't suitable for writing about (or they haven't yet reach fruition) whereas the cooking experiments are almost instantaneous and easy to write about.

As yesterday's Friday night supper was just my wife and I, I thought that we could experiment a little. I asked my wife to buy some shishlik sticks, i.e. cubes of chicken thigh threaded onto a stick, ready for easy grilling. The Greeks call this souvlaki; apart from the fact that they might use lamb instead of chicken, they also tend to thread cheese chunks (haloumi) and use a yoghurt dressing, which of course is a no-no for us. I've just discovered that shishlik basically means 'skewers'; these are also known in Israel as sichim, which apparently means 'skewers' in Arabic. The common Hebrew name is shipudim, which again means 'skewers'. Another common name is pargiot, which technically means young chickens but commonly means young chicken thighs. So how does one differentiate between deboned thighs that I cook in the slow cooker and chunks that are grilled? Presumably by shipudei pargiot.

So: she bought eight sticks, of which four I froze for later use and four I kept for dinner. Instead of placing them in a marinade as some recipes would have, I spread a little olive oil on them then sprinkled oregano. I then turned them over and sprinkled some more oregano. The olive oil was a mistake: the grilling takes place at a temperature well over the smoke point of olive oil. I should have used canola oil instead, although to be honest, I couldn't detect any detrimental taste or smoke from the olive oil.

The sticks were cooked by grilling them for seven minutes at 265°C, turned over and then another seven minutes grilling. The outside was pleasantly charred but inside something was slightly missing. It might be better to grill at a slightly lower temperature for longer, so that the inside cooks more. The sticks were accompanied by a simple cucumber/red bell pepper/yellow bell pepper/onion salad (plenty of vitamin C to help the body absorb the iron in the chicken); my wife had mashed potatoes whereas I had rice with onion and courgettes (no potatoes for me as they have high potassium).

It is becoming clearer that the Ninja is intended for couples, as mostly one can only cook two portions of whatever at a time. I have seen recipes for roast beef that obviously would feed more than a couple, but other dishes that I have cooked have only been two portions.

Thursday, January 13, 2022

Desiccated apple slices

As I mentioned about a week ago, our Ninja grill has five functions: grill, roast, air-fry, bake and dehydrate. I've already grilled and air fried; maybe one day I'll roast some beef in the machine but I can't see myself baking anything. This leaves the 'dehydrate' function. I made a quick search looking for recipes and found three variations on the same thing: desiccated apple slices. 

One slices an apple into thin slices (I found that the slices that I cut from the apple weren't particularly thin, but that I was able to slice them in two once they had already been cut from the apple) and places the pieces in the Ninja vegetable dish, adding a little lemon juice (to prevent browning) and cinnamon. One then chooses the 'dehydrate' function whose default temperature is 60°C and default time 6 hours (!). I was tempted to turn the Ninja on at 9 pm before going to bed; true, it would finish cooking at 3 am whereas I get up at 5:30 am, but in that extra time the heating would be turned off and anyway the extra time would serve to further desiccate the slices. But my wife demurred....

So I left the slices in the basket, and turned the Ninja on when I got up in the morning. After three hours, I opened the lid and tasted a slice - chewy and not dry. An hour later, the slices had improved but still not there yet. After five hours, I tasted a slice and decided that the slices had been dehydrated sufficiently.

I am now eating those slices; they're ok, although I just ate a slightly thicker slice and can tell that this one was not totally dehydrated. Whilst it might be cheaper to make one's own apple slices, I don't think that I'll repeat this. Maybe it would work better with banana slices, but I'm not allowed to eat bananas any more - too much potassium, and of course, the dehydration has no effect on the potassium level.

Tuesday, January 11, 2022

Ninja chicken (2)

Today was the turn of chicken drumsticks to be cooked in the Ninja grill. The recipe (if it can be called that as it's so simple) requires that the air fry option be chosen, as for a whole chicken. After drying the drumsticks, brushing on them a thin layer of canola oil and sprinkling on them some oregano, the drumsticks were cooked for 10 minutes at 200°C, turned over then cooked for another 10 minutes.

It is recommended not to cook more than six drumsticks at one time; I cooked three, more as a test than as a complete meal. Canola oil is used because the smoke point of olive oil is 180°C and is liable to break down and cause smelly by-products at this higher temperature.

Again, the primary saving is in cooking time; I would often cook the drumsticks for an hour and a half (albeit at 180°C) although this is probably too long. I would also cook potatoes with the drumsticks - something that is missing here. I meant to put a halved potato in with the drumsticks but I forgot.

Monday, January 10, 2022

Displaying hints (2)

Continuing from yesterday's presentation about hints in a non-modal form, a more modern way of writing the code that I showed yesterday for hooking the application.onhint method would be

procedure TMyForm.ApplicationEvents1Hint(Sender: TObject); begin StatusBar1.SimpleText := Application.Hint; end;

This achieves the same result as my naive code but is much simpler. Unfortunately, it is also wrong as it again causes the active form to display hints that arise from other forms. Somehow there should be a way of checking from where the hint arises. Apparently the ApplicationEvents.OnShowHint event exposes the HintInfo object that includes a pointer to the control that created the hint, but I haven't seen an example of this, and the structure that I described yesterday (a grid on a tabsheet on a page control on a form) is liable to confuse this event.

The given solution is actually quite simple and depends on a function that tests whether the control creating the hint resides upon the current form.

function IsHintFor(AForm: TCustomForm): Boolean; var local: TControl; begin Result:= False; local:= FindDragTarget (Mouse.CursorPos, True); if Assigned (local) then Result:= GetParentForm (local) = AForm; end;

One places on every form that requires the hint handling a TApplicationEvents component, whose OnHint event is as follows

procedure TMyForm.ApplicationEvents1Hint(Sender: TObject); begin StatusBar1.SimpleText := Application.Hint;
end;

Easy peasy. So yesterday evening I went through the 'ERP' application and changed the hint-handling code in about 30 forms. I also added the above to a form template, meaning that I won't have to define this manually in the future.

Sunday, January 09, 2022

Displaying hints

In the OP's "ERP" program, recently I have been adding screens that display a list of items, normally dockets, where an action can be applied to the list, such as sending emails to all the people connected to the dockets, or changing the status of all the dockets retrieved. It is prudent to allow the possibility of removing a docket from the list (displayed in a grid) prior to executing the action, so I implemented a very simple 'remove' action that deletes the current item from the clientdataset that is in the background. This deletion does not delete the record from the database, of course.

Then it occurred to me that it might be beneficial to allow marking several items then deleting these in one go. At work, I jest that I am paid a bonus for every key press that I save workers; in this case, n + 1 key presses are required to delete several consecutive items as opposed to 2n key presses for single choices. So far, so good.

I then wanted a way to signal to the user that the grid accepts multiple choices. After turning this over in my head for a little while, I realised that the way to signal to the user is via a hint. There's nothing dramatic about this: the speedbuttons used in saved queries (see here) have hints defined. The standard mechanism for displaying a hint is a small window that opens near the control, displaying the help text, whenever the mouse hovers over the control. I can't explain exactly why, but this mechanism seems out of place; seemingly a better technique is to display the hint in a status bar at the bottom of the form.

The canonical method of displaying hints in a status bar is via the following code:

Constructor TMyForm.Create; begin inherited create (nil); ... Application.OnHint:= MyHint; ... end; procedure TMyForm.MyHint (Sender: TObject); begin sb.simpletext:= Application.Hint; end; procedure TMyForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Application.OnHint:= nil; ... end;

I've used such code in several forms without any problem, but this time around, a warning light went on in my head: I keep on assigning application.onhint to a procedure local to a given form, but application is a global object! In other words, all hints will be displayed in the status bar of the last form to be created.  ☹️ I checked this out by creating two instances of the same form; one is active and one is inactive. When I moved the mouse over the inactive form, the hints appeared in the status bar of the active form. This approach is clearly wrong.

So how does one cause that each form displays only hints emanating from its own controls and not from other forms? After a great deal of spelunking, I found a partial solution that uses the undocumented messages CM_MouseEnter and CM_MouseLeave, that are sent whenever a mouse begins or stops hovering over a control. The form can trap these messages and display the appropriate hint.

This solution worked on one form but not on another; the first form had a grid placed directly to the form, whereas in the second form, the grid was placed on a tabsheet that is placed on a page control that is placed on the form. There was no way that my mouse messages approach would work here. It's time to escalate the problem to Stack Exchange.

... to be continued.

Saturday, January 08, 2022

Ninja chicken

The importers/distributors of the Ninja grills made an astute marketing decision when they managed to get one of their products placed in the Israeli 'Big brother' tv series. I don't watch such programmes but my wife does as do many other Israelis, and the demand for the grills was such that there was a three week month waiting period for them.

We purchased our grill (that has five functions: grill, air fry, bake, roast and dehydrate) a few weeks ago. We haven't done much with it so far: we grilled a few experimental steaks (that I don't eat) and I grilled some chicken breast with honey. Until now, I haven't been too impressed with the machine as it is recommended to grill only two portions at once. Today was a test of a different function: air frying. The test subject was a chicken.

The butcher was somewhat dubious that one could roast a chicken in the ninja (as the chicken would be too large), so we bought a small one. I found a recipe on the Internet that uses the air fry function - I wonder now why not use the roast function as that would seem to be more suitable.


The picture on the left above shows the closed ninja grill; the picture on the right above shows the uncooked chicken placed in the basket. There's plenty of room for some potatoes, had I decided to cook them as well. The recipe says to air fry for 30 minutes, after warming the ninja. The preparatory stage had finished when I took the second picture: the display is showing '[Add] food', so I added the food.

After 30 minutes, I opened the top and turned the chicken over, before air frying it for a further 30 minutes. On the chicken was olive oil and oregano.

The pictue on the above left shows the chicken at 'half time' and the one on the right shows it at 'full time'. The chicken tasted fine although it was somewhat bland (not necessarily a problem; I eat the breast which is always bland). We haven't had roast chicken for quite some time so I don't remember how roasting the chicken in the oven affects the taste.

Conclusions: cooking with the ninja required only 60 minutes as opposed to 90 minutes in the oven. I use the same temperatures (180°C) but the ninja has a smaller volume to heat and so should use less electricity (and of course, the cooking time is much reduced). On the other hand, one does have to clean the baskets in the ninja.

This experiment shows that one can easily roast a chicken in a ninja grill.

Note that I've learnt how to place two pictures side by side in the blog, although I would prefer a little space between them.

Friday, January 07, 2022

Fourth time around

Today was a crisp winter day: at 6 am, the skies were clear (although the sun wasn't up) and the temperature was a sprightly 11°C. By lunchtime the temperature had reached 22°C, making our afternoon walk very comfortable. Now (4 pm), we're starting the descent into darkness and lower temperatures. If only every winter day were like today.

But I'm not here to write about the weather: today I had my fourth Covid-19 vaccination, or my second booster, if you prefer. The announcement was made at the beginning of the week that over-60s would have the vaccination; via our health fund's website, I made an appointment for the next available slot, which was Friday morning. A minute later I logged on again to make an appointment for my wife - next Friday! Needless to say, I didn't make an appointment for her.

As I have probably written before, the vaccinations are done at the health centre in Bet Shemesh, which is sited at the end of a one way street with little parking. As a result, the road was almost impossible to traverse or park; as my wife still has an invalid badge on it, she felt entitled to take the vacant invalid parking spot in front of the building (if it had been me on my own, I would have parked a distance from the centre and walked).

Inside we saw about ten kibbutz members along with a similar number of town residents. I went to the ticket machine to get my reservation - R6 was my number. My wife received A35 - different queues. I was one of the few kibbutz members who bothered to book an appointment so I entered well before most of the others. Afterwards I had to wait about twenty minutes for my wife to come out.

So: yet another vaccination. A quick wipe of the shoulder, a prick, the muscle tightening, and then it's over. 10 seconds of exceedingly mild discomfort (and so hardly a discomfort: a light punch to the shoulder would have hurt more). Out of the three previous vaccinations, the only side effect that I had (twice) was a sore shoulder for maybe 12 hours, starting in the evening of the vaccination, so I'm not expecting anything more.

Of course, I'm hardly a person at risk of catching the omicron variant of Covid, as I stay at home most of the time, but one can never be sure. I do go out of the kibbutz every now and then, mainly for medical appointments (new sleep doctor next Tuesday!), so there does exist the small possibility of being infected. I believe that we'll all get infected at some stage, but that it will be a virus that causes almost no symptoms.

Wednesday, January 05, 2022

Sandy Denny would have been 75 years old today

One of the radio stations here in Israel just announced that had she lived, Sandy would have been 75 years old today. In her honour, they played "It'll take a long time", the opening track from her second solo album, "Sandy", from 1972. Tomorrow they promise to play many of her songs.

This isn't the first time they have played Sandy: quite often, the 'Unhalfbricking' version of "Who knows where the time goes" gets played, which is always a pleasure to hear.

I admit that apart from the songs that I have programmed onto my mp3 players (37 songs at various stages in her career: Fairport, Fotheringay, solo, Fairport, solo and a few demos), I don't hear that many outside of this group. I do have 'What we did on our holidays' and 'Unhalfbricking' ripped in their entirety on this computer to which I occasionally listen, but the unripped songs from 'Fotheringay', 'Fotheringay 2' and her solo albums remain a treasure that I am occasionally reminded of.

I find it hard now to listen to the early recordings, with all the beauty that they promised, and then remember her final recordings and what could be seen as a loss of talent and a tremendous waste. Who knows what would have happened had she lived; her early bandmates Richard, Simon and Ashley are still going strong whereas others have fallen by the way (Martin, Swarb, Trevor). Maybe at some time she would have regained her confidence and made good music?