Monday, February 26, 2018

DBA news

There's been nothing on this blog about my doctorate since the end of November when my research proposal was accepted. I was informed who my new doctoral supervisor would be and then ... silence. After a month of hearing nothing, I asked the DBA administrator what had happened. It turned out that the supervisor had been ill with a pulmonary infection. Eventually we started swapping emails.

During this period of silence, I started work in converting my research proposal back into the opening chapters of my thesis. This was based on the 'original' version which I had written in May, but of course, since then there have been changes in the direction of the research, in an attempt to make it more palatable for a business degree. So there was a certain amount of material which had to be thrown out, replaced by new material on engineering change management and benefits realisation management. I completed a reasonable version of the 'intermediate submission' then sent it to my supervisor for scrutiny.

After another period of silence, we have been corresponding more frequently. Fortunately, working with this supervisor is much easier than the mentor which I had for the research proposal. His remarks have been with regard to the topics which I am discussing as opposed to correcting my English.

Last week, I wrote that I felt that I was close to completion of the current stage but that I was lacking for the literature review papers which discussed the human element in terms of developing enhancements. I asked if he could suggest some keywords which would be relevant to what I wanted, intending that I would do the searching. To my surprise, I received a letter on Friday morning with a list of about eight papers which he considered to be relevant (one of which he wrote himself). Armed with his references, I started hunting the papers via Google Scholar, then reading them.

It seems that most of the papers that he suggested were not what I was looking for, but inspired, I found some recent papers which are much closer to what I want. After printing them, I began reading them and considering what use I could make of them. In the evening, I spent about an hour and a half reading two or three papers closely and adding them to my literature review.

This morning I found one of the papers mentioned as a reference (with the unforgettable author list of Wu, Fang, Wang, Yu and Kao) but decided - so far - not to use this. Although this paper is about engineering change management and ERP, it's about recording engineering changes in ERP and not about appropriating the techniques of ECM for ERP. Writing up another paper led to me searching for the term "cross-functional cooperation", i.e. people in different departments cooperating. This is very important, for the type of enhancement which I intend to research usually benefits one department, possibly at a cost to another department (of course, the best enhancements are when everybody wins). I found one recent (2014) paper which is about cross-functional awareness, SMEs and ERP, so it hits many buttons. I haven't read this yet, but will probably do so this evening.

The work of the past few days has widened my literature review; I also included a portion which was in my original thesis, about user resistance. I would like to finish up all this work by the end of the week and send an updated version to my supervisor, but I doubt that is going to happen: Tuesdays through to Fridays tend to very busy these days, either with the day job or with consultancies (I have two new pupils). I think that I will take this last paper with me and read it on the train tomorrow and on Wednesday; I doubt that I will have suitable conditions for writing about it, though. 

Monday, February 19, 2018

Left joins in Priority

I landed a new consultancy gig yesterday, helping improve a programmer who is currently at intermediate level. It's much easier working with someone who already knows a fair amount of Priority programming as opposed to working with someone who is new to the subject. During the course of yesterday's session, we came across a subject which is slightly complicated, left joins. I feel that I didn't explain it very well yesterday, but this morning, when walking the dog, I found a much better way of explaining.

The standard definition of a left join is the LEFT JOIN keyword returns all records from the left table (table1), and the matched records from the right table (table2). The result is NULL from the right side, if there is no match. The Priority programmer's bible (aka the SDK) calls this an outer join and explains it thus: An outer join is represented in Priority’s syntax by a question mark (?) following the table ID:
SELECT ... FROM FNCITEMS, FNCITEMSB ? WHERE FNCITEMSB.FNCTRANS = FNCITEMS.FNCTRANS AND FNCITEMSB.KLINE = FNCITEMS.KLINE;
As opposed to regular joins, an outer join preserves unmatched rows. Thus, if there is no join record, a null record will be retrieved from the join table and the query will succeed. Is that any clearer?

I explained it by saying that when we need a join to a second table but we are not sure that there is a matching record in the second table, then use the question mark. Here is an example: in one of my company's divisions, use is made of the status of an order line, whereas in other divisions, the order lines do not have a status. As the order line status is not stored in the order lines table but in a secondary table, we cannot be sure whether there is a matching record in the secondary table and so every join to this table should use a question mark. The above syntax is fine in an SQLI step but isn't suitable when programming a screen, and of course yesterday we were programming a screen.

All the above is about as clear as mud. The explanation which I hit upon this morning requires the use of two concepts which Priority skirts around: primary keys and foreign keys. In Priority-speak, a primary key is normally the auto-unique key of a table, but in some cases it can be two fields taken together (this of course is what we had yesterday evening). Priority doesn't have the concept of a foreign key which is defined in standard SQL as a field (or collection of fields) in one table that refers to the PRIMARY KEY in another table. For example, an order line has a field PART which refers to the primary key (part) in the parts table; from the point of view of the order lines table, PART is a foreign key.

What does this have to do with left joins? I'm glad you asked. My insight this morning was: whenever we join two tables, there is no need for the question mark (left join) if we are joining between a foreign key from the 'home' table (e.g. order lines) to the primary key of the joined table (e.g. ORDERITEMS.PART = PART.PART). If ORDERITEMS.PART has 'no' value (i.e. its value is 0), it will match the zero record in table PART and so everything is ok. But if we are doing the reverse - in which we join via the primary key of the 'home' table to a field in the joined table (normally this field will be part of the joined table's primary key) - we have to use the question mark (aka left join) syntax as there is not necessarily a record in the joined table which matches the primary key of the 'home' table.

Here's an example: the PART table contains many fields, some of which are foreign keys and some hold values of the given part. There is a table called PARTEXTFILE, which contains the names of external files connected to the part; in other words, there exists a 1 to many relationship between PART and PARTEXTFILE.  The primary key of PARTEXTFILE is the part number and a counter for that part; if that counter is -1, then the external file is a picture of the given part. There may be no picture for a given part, so we need to use a left join when using PARTEXTFILE; put another way, we are joining on the basis of the 'home' table's primary key to a field in the joined table, which means that we have to use the question mark.

So why not use the question mark in every join, I was asked. Using the question mark where it is not called for will join many records which should not be joined otherwise. I'll sum this up with a little table to make things as clear as I possibly can:

Home tableJoined tableJoin
Foreign keyPrimary keyregular
Primary key[Primary key]LEFT

Sunday, February 18, 2018

More headphones

Yesterday I finally got around to 'ripping' some songs from a singer's cds to mp3 format so that I could hear them on my 'regular' headphones (not the noise cancelling ones). I extracted the memory card from the headphones, put them in an adapter and connected it to the computer in order to copy the mp3 files. Easy as pie.

The problems started when I went to put the memory card back into the headphones. This is always a tricky operation as the memory card has to be inserted in one specific way and I can never remember which way that is. This time, when inserting the card, it slipped from my fingers and fell into the innards of the headphones. I tried to extract the card but it seems that my efforts only made things worse by pushing the card further into the socket (or into the space around the socket). I tried widening the socket opening with pliers but again, my attempts to do so only worsened the problem.

Why was it so important for me to extract the memory card, even at the price of trashing the 'phones? After all, a new memory card would cost less than another set of 'phones. Well, as it happens, I have a spare set of 'phones doing nothing, so their cost is effectively zero. Also, the price of a memory card does not take into account all the time and effort I have spent in ripping songs to the card (there are something like 64 directories on the card, where a directory can hold between ten and a hundred files, so we're talking about a few thousand songs).

Somehow my wife managed to extract the card using nothing more than her nails. I popped the card very carefully into the spare set of 'phones and I was set. As I wrote before, the controls are harder to access than the trashed 'phones, and these don't fold, but then I don't intend to take them on train journeys.

One huge advantage which the traditional mp3 players have is that the USB socket has two functions: it both charges the internal battery and allows access to the file system of the memory card. In all of the mp3 headphones which I have bought, the USB socket is used solely for charging; one has to extract the memory card in order to add (or delete) files. 

On the basis of this experience, I am going to be very careful if I ever extract the memory card from the new headphones.

Saturday, February 10, 2018

Yoni Rechter and the Philharmonic

I went to concerts held in what was the Mann Auditorium (and is now the Charles Bronfman Auditorium) several times in the 1980s. I remember concerts by Randy Newman, Leonard Cohen and Don McLean, as well as one by Matti Caspi. There may have been more, but if so, they have been washed away from my memory by time. I saw most Israeli acts at the concert hall at nearby kibbutz Kfar Menahem, but again, I haven't been there for years.

By chance, I happened to hear on the radio a few weeks ago that Yoni Rechter is playing two concerts at the Charles Bronfman Auditorium along with an orchestra. I wasn't too sure that I heard correctly (I wasn't exactly listening to the radio, but I heard it) so I checked on the maestro's facebook page, and sure enough, two concerts were listed, on the 7th and 8th of February. After a small amount of dithering, I booked seats (which are very expensive, as far as I am concerned: 350NIS each, which these days is equivalent to nearly $100 each); I haven't got tickets but rather a QR code on my telephone which I hope can be bartered for seats. I suppose that the price can be explained by the orchestra and also the few special guests who will be appearing: all of these people have to be paid for their time, both in rehearsal and in performance.


We left home early for the concert (which is to start at 8pm) so that we could collect tickets and have something to eat at a nearby cafe. The box office is well organised, having about eight queues, each for two or three letters of the alphabet. I approached the 'N' queue, stated my name and waited for the tickets. The box office girl couldn't find them, so I repeated my name. Again, she searched but to no avail. After a few minutes of hopeless searching, a supervisor came over. I showed him the receipt on my telephone, but still no tickets. After some searching with a computer, the supervisor told me that my tickets had been for the previous night's concert (Wednesday)! Too say that I was taken aback would be an understatement. I wasn't bothered so much about the loss of the money as to the fact that I would miss the concert. Fortunately, the supervisor was able to find a pair of tickets for the Thursday concert, at a 20% discount (and paid over three months), seating us almost at the same place as we would have sat the night before. The evening was saved!


After a small pre-concert meal in a nearby cafe (which actually took reservations), we made our way into the concert hall. This time, there was a merchandise table but I didn't have to buy anything (as I already own most of the products displayed). Our seats were towards the back of the second floor, but this hall is very well designed such that we had a good view of the stage, and of course we could hear well. Two large screens had been erected on either side of the stage which showed close-ups fed from at least one camera. I think that I spotted one camera but I couldn't figure out where the others were.
The picture on the left gives an idea of what the stage was like (the screens can be seen on both sides). This picture was taken before the concert started, so there are only a few musicians warming up.

The concert opened with what might be termed an orchestral overture, which wove several tunes into one. The sound of a full orchestra is amazing: I think that I have never been to an orchestral concert in my life. The tune of 'Atur mizhech' (a song which several years ago was voted the best Israeli song of all time) emerged from the overture which is when Yoni took the stage. He played the tune whilst the orchestra played the accompaniment: this was breath-taking. This was the only non-vocal piece of the evening, which is possibly a shame.

Then the songs started: the first few were slightly obscure pieces from the repertoire, but as the show progressed, more and more familiar songs were played. The guest vocalists helped but didn't necessarily make a huge contribution. To be honest, I found the orchestrations to be conservative: they added but not as much as they could have done. As we say in Hebrew, the enemy of the very good is the excellent; here, Rechter and Ilan Mochiach (the conductor and arranger) played safe in order to achieve the very good.

Whilst looking for some background material, I came across this interesting interview with Yoni about progressive rock. The interviewer had picked up - as had I - what sounded like influences from progressive rock on a sequence of songs from Yoni's 2004 disc, "Another story". It seems that he does not listen very much to this genre, although he singles out Gentle Giant as an example.

Yoni also mentions that Danny Sanderson - the brain behind the first Kaveret album - also had progressive tendencies, which could be heard on "Despite everything" on their debut album and "Crowded in the ear", the title of their third album but only released on a collection from 2014. It was very interesting to read a little about the process of arranging material for Kaveret.

It would have been intriguing to hear that 'progressive' sequence of songs from "Another story" played with the orchestra: this would have been more challenging and more successful. But it seems that the organisers were conservative with the selection of tunes and resisted the opportunity to stretch out. One of the encores - "She's here again" - was played without orchestra, which is ironic as the original recording from 1979 features strings!

I wonder whether the performances were recorded, as it would be a shame not to enjoy them again and save them for posterity.

[SO: 4692; 5, 22, 44
MPP: 1165; 1, 6, 7] 

Edit: Someone posted a clip filmed (with a smartphone, so don't expect high quality) at this concert. Each singer sings in a different language: Russian, English, Polish, and of course Hebrew. I can't identify in which language Yoni is singing. Here's another song from those concerts.

Thursday, February 01, 2018

Travelling to Karmiel with my new headphones

As my grand-daughter would say, "Wow!". It would appear that these noise cancelling headphones are worth every penny which I spent on them. Ambient noise was reduced to almost nothing, allowing me to hear music at a very low level and not 'encourage' the high pitched white noise which I seem to hear all the time (aka tinnitus).

The noise cancellation was less good in the open air (specifically at the Tel Aviv University train station): there was definite muffling of noise, but it was still present. I used to turn off my headphones when at the station as the noise level was far too high; yesterday I could still listen to music despite the noise.

My only gripes are the cable connecting the headphones to the mp3 player (the cable itself is a story in itself: I tried two cables at home, neither of which worked well, before trying the cable which came with the headphones) and the mp3 player itself. Once upon a time, it used to remember what song was playing when it was turned off; it would resume in the same place when turned on again. Now it starts from the beginning every time. Maybe resetting the device will cure this problem. [Edited 02/02/18: Downloading and uploading the firmware fixed this problem]

I spent several hours on the train reading Tom Clancy's "Sum of all fears", a book which I seem to have never read before. This one goes on and on and on, although the amount of editorial writing seems less than in others by the same author. I think that I'm about half-way through the book but I'm not enjoying it very much.