Saturday, March 28, 2020

Thesis update

The only good thing for me about being at home because of Corona is that I have plenty of time to work on my thesis. Over the past week, I've worked between 1-3 hours each day, including a very productive talk with my supervisor, which I recorded. Today I completed everything that I wanted/was required to add (except something to do with the literature review), and this morning two new ideas popped up for the conclusions section:
  • It would be very interesting to determine a time-line of enhancements, to try and see when each enhancement was deployed and what each enhancement does. The idea is to try and see when more essential enhancements are made as opposed to less essential. On the other hand, essential enhancements can appear at any time due to changing market conditions (this is one my major points in the introductory chapter). Doing so would of course require several longitudinal studies which is a bit beyond my capabilities at the moment.
  • Should enhancements be developed and deployed in areas which are not part of a company's core business? One can argue that it is essential to optimize the core business (normally production) and that it is a waste of resources to improve non-essential functionality. This researcher believes in empowering all employees, and the improvement of non-essential functionality can free time which can then be spent on more important matters.
Out of curiosity, I also noted down for the past eight versions how many words each version contains.
DateNumber of wordsWords added

The version from 06/11/18 was the intermediate submission which was accepted by the research committee. There are a few reasons why there was a five month gap before the next version, which strangely had a decrease in the number of words: one reason was that the thesis underwent an almost complete rewrite and one section was discarded. Since then, "the only way is up". Note also that there have been four versions in the past two months whereas previously there had been four versions in fifteen months (this is partially because I was performing the actual research in the first half of 2019 so I couldn't write about it). After splitting the introductory chapter into two, the section which was discarded earlier has returned to what is now the second chapter which is all about ERP.

My supervisor wants me to improve the literature review chapter, not by adding more subjects or papers but by adding links between the papers. I don't quite see how this can be done.

Thursday, March 26, 2020

Days of Corona (2)

I wrote ten days ago that I underwent a surgical removal of a cyst on my neck. If ten days have passed then it's time to have the stitches removed. The surgeon told me (half in jest) that next time I should try and have the cyst in an easier place to get to. The same thing happened today: the nurse couldn't access the stitches which had intertwined with the scab, so she had to call the doctor (GP) who also had problems but eventually succeeded.

So it's another couple of days of antibiotic cream covered with a plaster.

The accompanying picture is just to give an idea of what it is like to visit the clinic these days. One has to call the nurse in advance in order to book an appointment; they call back to say when to come. Outside of the clinic I was outfitted with gloves and mask, which I removed after the treatment had been completed. The gloves go into a bin, then it's wash the hands with alcogel. Incidentally, someone sent me a warning film about alcogel this morning: one has to wait a minute or two after applying before being next to a flame (cooking on a gas stove, lighting a cigarette): people have applied alcogel, lit a flame and then gotten burnt. I don't smoke and I haven't used the stove all week.

Back at home, we've just had a visit from the grandchildren: my wife and I stood on the balcony and waved to our grandchildren who were on the path outside. We can't come any closer than that. I miss them.

Counting beats with van der Graaf (2)

Nearly 11 years ago I wrote a blog entry about the used of varying time signatures appearing in the album 'Godbluff' by Van der Graaf Generator, noting that "I haven't figured out yet in which time signature the opening verse" of 'The Sleepwalkers'. Yesterday I heard the song once again and this time I made some progress in deciphering.

I wrote then that the final verse has the structure 4-2-4-4 (as also appears in "My room"), and this section has always given me the feeling of 'arriving home'. I now understand why I feel like this: the opening verse appears to have the following number of beats 6-3-6-6 (although this final 6 seems to be truncated); it's so fast that it's hard to count. The 'cha cha' section is definitely in 3/4. Looking at the first verse, if one takes the beats to be crotchet triplets, then the structure is 4-2-4-4! Very familiar.  In other words, the opening verse is the same as the closing verse but metrically is played as triplets as opposed to 'straight' crotchets. I wonder who is the clever dick who thought this up.

Monday, March 23, 2020

Days of Corona

The day after writing my previous blog was the day that I received feedback from my doctoral supervisor about the latest version of my thesis. I was quite proud of that version and so was somewhat surprised when I noticed the quantity and quality of remarks. I spent a few hours on Friday briefly going over the remarks then creating a new section on biases and fallacies by collecting material which was scattered around the thesis (the status quo bias, selection bias, confirmation bias, halo effect - I know them all). I shall have to add to this section some material about how the biases were mitigated. On Saturday I thought about writing a program which would store the various issues which my supervisor had found, along with the progress of my handling these issues. For some reason, I didn't turn these thoughts into a program.

Sunday found me sitting at the kitchen table with two computers, one of which is connected to work and the other to Microsoft Teams (for video conferencing). I had about four hours of concentrated work on Sunday after which I turned to 'standby mode'; I decided to use the time in order to write the supervision program. At first this started very badly: normally I take an existing program and adapt it to what I need, but this time there seemed to be so much that needed to be changed that it seemed easier to start from scratch. Throughout the day I worked on the program, getting it to the state that I could enter data then see what problems remained with the program. I thought it best to record all the supervisor's feedback before starting to change things.

This morning I carried on like the day before: a few hours of concentrated work (including a video meeting with six other people) then standby. In the down time, I continued entering the supervisor's comment into the program, and in doing so discovered a few things that needed improving. After I finished, I counted how many issues there are: 42! Of these, 18 are flagged, meaning that I need to talk to the supervisor about them. I'm sure there have never been so many issues, especially since I thought that the previous version was good. Some of these issues are solved easily - move one section from where it is currently to a different chapter, change a section's title, etc - whereas some (all of the flagged issues) are more demanding. I added two paragraphs on ontology and constructivism: tomorrow I will continue with this.

Just after 4 pm, I downed tools and took the dog for a 4 km walk. This went a bit faster than yesterday's walk which means that I'm getting fit again. All this sitting around at home isn't good for one's health; I found myself on Sunday eating a biscuit or a slice of bread every time I made myself a cup of tea, which is once an hour. Today I resolved to do something about this and so I sliced a red pepper, like I used to do when I didn't work at home, and munched on the slices contentedly throughout the day. I'm pleased to say that I ate only one biscuit today and that was at 5 pm, after returning home from the long walk.

The next few days promise to be more of the same: devoting time to work (I'm still in full employment, being paid my regular wage and so my employers expect that I work as hard at home as I did when not at home) and spending my down time reading academic papers and writing about them. 

One spanner in the works is that I found a copy of the 2015 biography of John Le Carré (né David Cornwell) which I find extremely interesting, especially the parts of his childhood which appear in his novels. I knew that 'A perfect spy' had a great deal of autobiography, but there are plenty of other episodes in his life which crop up in his books. The school in 'Tinker Tailor' is very reminiscent of Cornwell's primary school; a description of Cornwell's father 'always waiting for someone [a jailor] to open doors for him' pops up in Charlie's description of her father in 'The little drummer girl', etc.

Morale is high, although I miss my grand-daughters. On Saturday we were sent a video of grand-daughter #2 taking her first walk (hurray!) but apparently she's lazy and hasn't repeated this feat. Her sister is bored and wants to go back to kindergarten. We're not allowed to see them as children are likely to infect their grandparents - this is a country wide injunction.

Thursday, March 19, 2020

1300 blogs and still counting

It's meta-blogging time: let's see what I've been writing about in the past 100 blogs. First of all, blog entry 1201 was written on 16/02/19 so the current rate is 100 / 13 months = 7.7 blogs/month. That's the same rate as 1101-1200, but slower than 1001-1100 and 901-1000. There aren't many surprises in the top few topics.

1=Priority tips13
7=Song writing6
10Mobile phone5

Wednesday, March 18, 2020

Strange days

Strange days have found us 
Strange days have tracked us down 
They're going to destroy
 Our casual joys
 We shall go on playing
 Or find a new town
(The Doors)

After the apocalyptic events of Thursday night, things returned to normal (or, at least, what passes for 'normal' in these days of Corona). Every evening we listen to two or three hours of news which update us regarding the number of ill people in Israel and the latest instructions for containing the disease. I went into work as usual on Sunday and Monday - there aren't many people there and anyway, most of my time I spend almost in isolation in my 'office' which is like a cubicle. Schools were closed from Friday.

As opposed to the weekend, the weather was spring-like (or even summer-like), so as soon as I got home at 4:45 (no travelling this week!), I would change my shoes and shirt in order to take the dog for a long walk. It's rare to see people on my route, so I was continuing my isolation even though I was out of the house. The news in the evening showed crowded streets in Tel Aviv as well as crowded beaches: this captured our leaders' ire. As it appears that young, gregarious, people are the main spreaders of Covid-19 (or Corona, as it is known here), even though they aren't the ones becoming ill, having them in large concentrations is the complete opposite of the 'social distancing' which the Ministry of Health is trying to create.

On Monday I participated in a video conference: we now have software which enables peer to peer conferencing, as opposed to the 'client server' software which we had been using with special projectors. As a result, six or seven people connected up: most of the time there were only four active windows with two being hidden, although I think that everyone was visible at first. Another surreal event in increasingly surreal times. We were discussing (as we do every week) changes which are to be made to the factory in Karmiel; the biggest change is the installation of two huge 'nesting' machines which perform a variety of tasks connected with wood. These machines are being supplied by a company in Italy ... with whom all contact has been lost. It is clear that there will be a three month moratorium on these machines, if not longer.

On Monday evening, there was an announcement that manufacturing companies should have a maximum of 30% of their workers present at any site, so I decided to work from home on Tuesday. I had an appointment for a specialist doctor in the morning so I could save a journey. At about 8am, someone phoned to say that the CEO had called for a 10:30 am meeting; we assumed that this would be another video conferencing call so I said that I would come to the factory at 10 am, set up the computer and stay for part of the meeting, then go to my appointment. At about 9 am, the electricity went off in our building - the electricians and gardeners were cleaning up the mess left from the gales of Thursday night - so I went into work an hour earlier.

The 'meeting' was by phone, not video, so my preparations were worthless. The CEO was asking all the various department heads how we can organise ourselves in order to meet both the demands of public health and those of our customers - mainly organisations. One would imagine that most of our customers are in exactly the same position as we are and are cutting down their operations, so receiving office furniture is probably not high on their list of priorities. All 'computerised' personnel will work from home and the factories will work two shifts with the minimum number of people working each shift (30% of a given site's personnel can be on site at any given time, so 30% will work one shift, 30% will work another shift, those that can will work from home, and those that can't will be sent on unpaid leave). National Insurance has pledged to pay 70% of the salary (up to 10,000 NIS) of workers set on unpaid leave so they won't be too disadvantaged (I wonder what happens about contributions to pension funds and similar).

I had to leave in the middle of the meeting (I wasn't actually invited and it dealt with matters which don't directly concern me) in order to drive to the clinic in Bet Shemesh. I had called a few days before hand in order to verify that the appointment would take place - I wouldn't have been surprised had it been cancelled. There were a few receptionists in place, wearing masks, but no customers. The appointment had been set up in the first place because I noticed several months ago that I had a lump on my neck - I assumed that this was a subcutaneous sebaceous cyst. Whilst this has to be treated, it's not important (unless it gets infected) so I wasn't bothered about making an appointment in January to be seen in March. The masked doctor agreed with my diagnosis; I assumed that he would write up the examination then suggest that I make another appointment to have the cyst removed. But no, he took me to the next room, which is like a small operating theatre which is where I have had most of my previous BCCs and cysts removed. There was another doctor there who felt the lump and agreed as to its provenance. I went to make the appointment to have the cyst removed and was surprised to be handed a piece of paper which said that the appointment was for now. "Why wait when you're already here?" asked the receptionist. Well, Corona ....

Back I went to the operating room; after an unexplained wait (I could hear the doctor chatting to one of the nurses in Russian), I was called in and the procedure took place. I think that the doctor's shift didn't start until 12 am which is why I had to wait about ten minutes. During the time that I was on the table, the weather changed: from sunny it turned to rain, and since then it's been raining on and off, sometimes heavily and sometimes lightly. 28.7 mm fell by 8 am this morning, which is quite a fair amount. It also rained on and off on Saturday, and at one stage I found myself composing the beginning of a tune whose first line is "I like (love?) to listen to the rain" - I think this is going to be minimalistic as I couldn't develop the tune very much. At the moment it has a very big range - from G below middle C, a note which I can't reach in a dependable manner, to B above middle C, in other words an octave and a half. We'll see.....

Anyway, I now have a plaster on my neck, covering a slightly painful wound. I can take the large plaster off this evening and wash; not having a plaster will improve the flexibility of my skin and reduce the rigidity that I feel.

Today (Wednesday) I am of course working from home. I was busy for a few hours, but now things have settled down and I'm on standby.

Friday, March 13, 2020

Apocalypse now (continued)

Here are some more pictures from yesterday evening

This is the tree by the entrance to the kibbutz whose branches touched the electricity wires. This is what caused the first power cut.
This is a tree which fell down near the old school buildings and crushed a football net frame.
This is the tree that fell down next to our neighbours. The roots came out of the ground. Fortunately the tree lay across the path and didn't bring down the wooden balcony. This is what I saw when I came out of my house and looked right.
And this is what I saw when I came out of the house and looked left. 

At about 11pm, the winds, which had been blowing at 60-80 km/hour, relaxed somewhat, which is when the rain started falling. At first the rain was quite light, but it became heavier as time went by. I was surprised to read that only 11 mm fell; I got the impression that it was much more.

All of the fallen trees have been cut with power saws into smaller pieces, allowing them to be moved and so allow access through the paths. They'll be collected on Sunday.

All of the above shows how fragile our existence really is. We should be thankful that we have a roof over our heads and that a tree did not fall on that roof.

Another cause of the apocalypse is the political situation in Israel: three times we have gone to the polls in less than 12 months and no one has been able to form a government. There were calls last night for an emergency government to be formed, maybe one with a limited tenure of three to six months. Because the current government is transitory (the same government which was in place a year ago), they can't pass any emergency laws and they also can't make any personnel changes. An emergency government is sorely needed to pass certain legislation which would make life much easier. They can agree to disagree on foreign/defence policy, but at the moment everyone around the world is looking inwards.

Thursday, March 12, 2020

Apocalypse now

I don't need to tell anyone about the steps being taken to prevent the spread of the Corona virus. The television news here has just informed us that schools are going to be closed for the next few weeks; congregations of more than 100 people have been banned. As a result, many business sectors are in trouble: airlines, hotels, restaurants, concerts, railways......

I haven't been feeling well all week: I had a slightly sore throat and a cough on Sunday which has gotten worse over the past few days. Yesterday I felt bad enough to come home at lunchtime: my head was woolly and I am coughing and sneezing frequently. I don't think that I have contracted the Corona virus as I haven't been anywhere that could have led me to catching it, but who knows. I went to our clinic this morning and was almost told off: the new rules are that the nurses will make home visits. I had a temperature of 37.7°C which is higher than what it should be but not too high to worry. After two rounds of paracetamol, the temperature has gone down, but I'm still coughing and/or sneezing. Maybe it's just as well that I'm staying at home.

At around 5 pm, the wind suddenly picked up. Predictions for weather for today and tomorrow are very strong winds and heavy rain; the rain hasn't come yet but the winds are so strong that trees are falling down all over the kibbutz. Just after 6 pm, the electricity went off ... really apocalypse now. Of course, our telephones had only about 30% charge, so it was time to bring out the candles. Our emergency light didn't work. The picture on the left was taken about 20 metres from our house: we're just out of the picture on the left hand side.

The electricity came back after about half an hour and the first thing that we did was to charge the phones as well as this computer on which I am typing. 

God knows what tomorrow will bring ....

Edit: the power went off again at about 19:45. It sounded like another tree  outside our house fell. Three people have just come in and are standing on our balcony, chopping down part of a tree. I'm typing this with one finger on my phone which miraculously has connected somehow to the internet. The people who came in are now in the garden, chopping down what is left of a eucalyptus tree. Someone sent us a video of a tree in the entrance to the kibbutz whose branches were touching a power line; the branch caught fire. Maybe I'll be able to make a photo of it.

Saturday, March 07, 2020

Thesis dilemma

I wrote the following in the introduction section of my thesis:  At first glance, it might seem that ERP Enhancement Management (EEM) is merely a special case of Engineering Change Management (ECM); whilst there are similarities, there are also significant differences which are discussed in the literature review and synthesis chapters. The most significant difference is that ECM is concerned with product management, whereas EEM is concerned at root with people management. This statement implies that the topics of change management and user resistance are relevant to EEM: even the most successful enhancement on paper will fail if no user is prepared to use it. Furthermore, in the researcher's opinion, ECM is concerned with developing physical products which are used by people outside of the developing organisation, whereas EEM is concerned with software and business processes, both non-physical entities, which are used inside the developing organisation.

My supervisor wrote as a comment: Might be worthwhile looking up the definition of a product and a service and using this to support your view concerning the difference between an ECM and EEM.

I looked for a definition of a product and found this: A product is the item offered for sale. A product can be a service or an item. It can be physical or in virtual or cyber form. Every product is made at a cost and each is sold at a price.

According to this definition, an enhancement is a product as it is a service in virtual form; it is made at a cost (employee's time) and is sold at a price. Whilst in-company enhancements are not offered by for sale and are not sold at a price, an enhancement which I might develop for an external client certainly is sold at a price. I can't use this quote to 'support my view concerning the difference' because it seems that there is no difference! Even my emphasis about 'outside' and 'inside' does not cause a difference when one considers (again) the case of a consultant. One can't say that a product is mass produced and than an enhancement is bespoke - my automatic reaction to the word 'bespoke' is tailoring a suit (or a dress) specifically for a client.

Yet I am convinced that there is a difference. I think that I will have to pass this topic on to my right hemisphere in the hope that it will provide a solution to my dilemma.

Friday, March 06, 2020

Sorting out the hardware

Despite my unsuccessful morning ruining hardware the other day, everything has now more or less been sorted. My diagnosis of the computer that wouldn't boot was correct: the boot sequence had been reset. For some reason, I couldn't correct it, but my computer repairman did. I still have to configure the PCI music card which I installed: the driver and associated software came on one of those mini-discs and the CD drive in the computer can't read it (actually, the drive can't read anything, but that's another story). I'll get out my external CD drive and try and read the disk from there. In the mean time, I'm back to using my external sound card.

After wasting a fair amount of time with the television screen, I decided that we should buy a new one. Today's screens can connect to the internet via a wireless router - I'm listening to Japanese ambient sounds from YouTube playing from the television. Once I set the screen up, I discovered quickly that the new screen was displaying exactly the same error message as its predecessor did, which fairly annoyed me. My son in law was enlisted to help: he discovered that the error message was due to the satellite receiver not being able to read its card properly. He took the card out, cleaned it slightly, reset the receiver ... and now everything works as it should: the satellite on HDMI 1 and the DVD on HDMI 2. I haven't had any chance to watch anything on the DVD in the past few days but I'm sure it will be ok. I understand that I can use the screen as a display for my computer but I haven't looked for the technical explanation yet.

Tuesday, March 03, 2020

Sending a report via email in English (Priority)

I was asked to create a report which shows all the purchase order lines for which we have not yet received confirmation from the vendor. This is not much of a problem, but once my clients saw the report, they wanted to send a copy to each vendor, where of course each vendor sees only their orders.

Following on from my successful 'all in one HTML report', I suggested doing something similar: creating a letter with a few lines of explaining what the attached report was and then attaching the report, which is now in the form of an HTML document. Although this wasn't particularly straight-forward (the main problem was writing a query which would loop through all the vendors in order to find to whom the letter should be sent), it wasn't too difficult.

Then the problems began. "The HTML report should be in English", I was told. OK; I started researching how certain HTML documents in the system 'know' to print themselves in English. It took me several passes over such a document before I noticed that there was a flag in the procedure definition which had a different value to what I've always used; the 'HTML document' flag was marked E and not Y. Once I saw this, I was able to get the report to print itself in English.

Full of confidence, I then scheduled the report so that the letters would be sent to my client (as opposed to the vendors). He returned the letters to me saying that they should be in English. Huh, I wondered? How is it possible that that the document displays left to right when I create it manually but right to left when it is created programmatically?

I decided to read the (almost incomprehensible) documentation again (shown below) and discovered that I need to add a flag to the command which creates the document; this flag overrides the E flag within the procedure. RTFM. Even the 'E' flag in the procedure is documented. Now everything works correctly, although I'm sure that the client will find something else to be changed.

Monday, March 02, 2020

Election day

It's election day once again in Israel - the third time in a year - and we get a day off work. I've been saving up a few things to do on this day. Let's see how far I've got ....

About two months ago, I had problems with my development computer. The repairman said that there were many connections which were half-fried on the motherboard and he was surprised that the computer worked at all. This might explain some of the problems which I had been experiencing with my internet browser. He replaced the motherboard which works fine (as does the browser) but the onboard music card was terrible: it seemed to work only on one channel and even then barely. So I connected my external music 'card' to a USB port and I was back in business. When I complained to the repairman about the sound card, he gave me a real sound card, the likes of which I haven't seen for a long time.

One of today's tasks was to open up the computer and insert the sound card. This is not a problem, but after I connected everything up, the computer refused to boot, claiming that it couldn't find a boot device - even though it recognised the hard disks. Back to the repairman. Score so far: 0 out of 1.

Another thing which has been bothering me is that I couldn't get the DVD recorder to display via HDMI. I am convinced that the problem lies with the screen, but we're not about to replace it. One day I had an idea: if the screen can take one HDMI input, buy an HDMI switcher which allows several HDMI sources: as far as the screen is concerned, there is only one HDMI cable connected which should be ok. I ordered a switcher about two months ago: this arrived about a week ago and I've been waiting for today to connect it. I made all the connections, but the screen would only display what was connected to one input socket on the switcher. I moved everything around with no improvement. Now the screen won't even display the one HDMI source! Score so far: 0 out of 2 (actually, -1 out of 2 because I haven't succeeded in getting the screen to display anything now).

For the past year, one kibbutz member has set up a bakery: he bought equipment, found an unused store-room of the kitchens and started work. He bakes lovely bread and sells once a week on Friday mornings. Almost every week I buy a loaf made with 50% spelt flour (let's hope that the other half is wholewheat flour), honey and walnuts. Every time I go to collect my loaf, I see that they struggle with what appears to be a spreadsheet in which they keep details of who has ordered what and how much to charge. Last Friday the penny dropped: why should they struggle with such a 'program' when I can write something which will make their life much easier. For fun, I started work on Friday evening, writing a program in which every screen is non-modal (this should be an interesting experiment), continued on Saturday and finished yesterday evening with a few reports. 

I intend to show him the program which means that I have to copy it onto a mobile computer and also ensure that the Firebird database manager is running on the same computer and can show the program in Hebrew. My first step was to try and install my old version of Firebird (1.5) on my mobile - Windows refused to accept it. I then tried on my work computer with the same results. I have another version of Firebird which should work, but I was afraid that this version wouldn't be compatible with my program. I installed Firebird 2.1 on my work computer, copied the files which I had backed up last night ... and the program worked directly out of the box! I went through the same procedure on my mobile; the program works but the Hebrew doesn't display correctly in all places and the program displays left to right. Obviously there are some locale kinks to sort out. Now I can report a score of 1 out of 3.

I've voted, and I'm going to devote the rest of the day to programming in Priority for one of my clients. At least this will go ok. It only goes to show that I am a software person and not a hardware one.

Saturday, February 29, 2020

Thesis update at the end of February

Following on from the previous blog on this topic: my supervisor referred me to the book "Change management - a guide to effective implementation" by Robert A. Paton and James McCalman. It seems that my supervisor was a colleague of at least one of these authors and has published joint papers with one or the other. I was lucky to find a PDF scan of the book on the Internet - I converted it to a form which the Kindle can handle, but this was fairly incomprehensible - so I read the PDF. This was an extremely interesting document and it seemed that almost on every page I could find something to include in my thesis. I think that I got up to about page 70 and found so much that I had to stop! There are about eight references to this book scattered around the thesis.

After this, I turned my attention to the final chapters: the data collected in the research and my conclusions from them. The external reviewer pointed out that this material was extremely thin and needed more work. When I looked at the case studies report chapter, I was shocked at how little I had written here, so the comment by the external reviewer is correct.

The first thing which I did was to move the few conclusions which I had written from one central section to each question (i.e. the conclusions regarding question 1 were placed after question 1, etc). Then I started work on enhancing these conclusions. Maybe at first this went quite slowly but after a while I discovered that I was adding quite a lot of new material. I would work on this one day, adding material, then look at the chapter the next day, editing what I had written before and adding even more material.

This process has gone on for two weeks and whilst the chapter has not doubled in size, it is certainly much much larger. I added to the case studies another enhancement which had been developed recently in my company; there were some interesting insights to be gleaned from this case. Of course, it didn't hurt that another enhancement added more material to the chapter.

The subject of pilot studies caught my attention: some of the interviewees mentioned that they had carried out a pilot study but the data weren't necessarily representative of data found 'in the wild'. This topic occupied me for a few days: I was hoping to find some academic literature on how to choose data for testing, but I didn't look very hard and couldn't find anything. A day or two later, I could write that sometimes a 'proof of concept' is developed that inadvertently becomes the final procedure; a proof of concept will naturally work on data which is known to be good and deliberately is not tested on 'pathological' data. I think that this is good material.

This morning I was working on the thesis again, this time (once again) writing about user resistance. At first I wrote something about user ambivalence, but then the old topic of knowledge hoarding came to mind. This is one of the ten most read blog entries of mine and it is very suitable for the thesis, so I included part of it, rewritten to the thesis style.

Let's see what my supervisor says about this version. There is one area which is still weak - the philosophical basis of the research. This part seems so unnecessary to me: after all, the research committee knows this material much better than I, but I understand that they want to see that I understand it too.

Saturday, February 15, 2020

Appropriating the 'HTML document' framework

It all started when I was asked to prepare a report for the CEO ... well, three reports if you don't mind, and the CEO would like to have them all in one email. My thinking process went something like this: to send the reports in an email, we will have to build a letter and attach the files to the letter (I've done this before), but the only way that I know to save a report automatically as a file (so that it can be attached) is to save it as a pdf file, and the only way that I know to accomplish this is to use an 'HTML document', like a delivery note or an invoice. Anyway, there's no connection between the three reports so there's no way I can define a suitable HTML document.

Or is there? Looking at this problem laterally, an HTML document is built from several sub-reports, all of which display data which is connected to a single item, be it order, delivery note or invoice. But when one looks at this, there's no mandatory reason that all the sub-reports have to look at the same item, or even look at it at all. I could pass an item which is guaranteed to exist (like part 000 or customer www) then ignore it.

So I set about writing an HTML document from scratch: this used to be a daunting experience, especially seeing as it is almost totally undocumented and very fragile, but now I've got some experience in this and know that I am capable of the required programming. Speaking abstractly, there are three sections to an HTML document: the first is composed of three (or possibly four) stages, these being INPUT, HTMLCURSOR, possibly HTMLEXTFILES and SQLI. The second stage comprises the various reports which need to be displayed, and the final section is another INPUT stage where various parameters are displayed.

The input stage generally has one parameter named PAR which gets linked to a table holding the values which are being passed to the document. The table can have one row or many, depending on how the document is being invoked (one row if invoked from a form, several rows if invoked from a menu). The HTMLCURSOR stage seems like black magic: normally one would visibly link the PAR parameter to a table but here it seems to be done automatically (presumably based on information in the INPUT stage). This stage simply consists of a statement like SELECT ORD FROM ORDERS WHERE ORD > 0; this assumes that PAR consists of a linked table of orders. Ignoring the HTMLEXTFILES stage for the moment (this selects any attachments or 'ext[ernal] files' connected to the given record), the SQLI statement at a minimum seems to be a recapitulation of the HTMLCURSOR stage as it extracts the key field from the current record and saves it as a parameter for the sub-reports.

But nowhere does it say that the sub-reports have to use this key field! Obviously, a normal HTML document would use this key field, but here I am appropriating the framework of the HTML document and I couldn't care less about this key field. It seems that I have to extract it though and even pass it to the sub-reports (where it gets ignored) otherwise the document doesn't display.

The SQLI stage can also issue SQL queries and store the results in linked temporary files for the following sub-reports to use. As two of the three reports which are to be displayed require some data mining, I can do this during the SQLI stage.

Assuming now that I have an HTML document which actually displays the three disparate reports, how do I invoke it to create a PDF file then send an email with the PDF file attached? I've done this bit before: one uses the WINHTML program to create the document and save it as a PDF, then one builds an email and sends it (I wrote about this some years ago)
I don't imagine that I will frequently use this technique of making a fake HTML document composed of unrelated sub-reports, but it is an interesting technique.

Saturday, February 08, 2020

The little drummer girl (TV)

A few days ago, whilst looking at the list of TV programmes to be broadcast, I noticed on a little watched channel the series "The little drummer girl" which is, of course, based on the book by John Le Carré. This is one of my favourite JlC books, and part of our itinerary last year in Greece was not completely by chance. 

Unfortunately, I had missed the first four parts of this six part series, but I managed to catch the last two parts. Maybe they'll show this again after a while - one of our satellite channels rebroadcasts series after six months or a year after the initial screening. I've set the series to be recorded, so if it does return, it will be recorded automatically.

There was a film made of this book which was a complete travesty. It starred Diane Keaton of all people as the eponymous girl, which is wrong on so many levels. I have a video of this somewhere but as it was such a poor rendition of the book, I haven't seen it for a long time. I don't know how someone who had not read the book would take the film.

The tv series was much more on the ball. The fifth episode was very close to the book, but the sixth and final episode took several liberties with the source material. It didn't ruin the story but took it in a slightly different direction. 

As is common with dramatisations of favourite books, the characters didn't look very much as I imagined them, although Charlie, the heroine, was a much better match for her character than most of the other actors. At least there weren't unexplicable name changes although there were location changes: the final scenes play out in London and Britain instead of Germany.

I thought that the two episodes that I saw were of high standard and I hope that some day I'll be able to see the previous episodes.

Saturday, February 01, 2020

Thesis update

I see that I haven't written on this topic for over two months: this is not to say that nothing has been happening, just that I haven't written about it.

During November and part of December, I carried on working on the thesis, trying to implement the changes which had been suggested by the external reviewer. Like previous occasions, I felt at times that I was working in the dark and that I needed supervision. Unfortunately, once again my supervisor had disappeared - it turns out that his mother had died.

Eventually I received feedback on what I had written and as a result, we had a good discussion in mid-January. I was heading in the correct direction but there was still plenty to be done: mainly (once again) explaining the importance of the topic and explaining my choices. I worked solidly on the first four chapters for just over a week then submitted yet another version.

I received feedback on this late Thursday evening (I only saw it on Friday morning) in preparation for another discussion scheduled for Friday morning. This version was considered to be much better and is nearly complete. We talked quite a bit about managing engineering change as opposed to managing enhancements, which is a central point. I am not differentiating sufficiently between the two.

My supervisor said that he will send me references to some relevant literature; it will be up to me to read then decide what I am taking from this material in order to improve the thesis. It might even come down to me changing the thesis title to something like 'Applying ... change techniques to ERP enhancement management', which will require some restructuring but will be interesting. I don't know at the moment because I haven't seen the material yet - I tried finding some on the basis of our discussion but couldn't find anything relevant.

My supervisor has realised that I want to up the pace as much as possible; I would really like to have a new complete thesis by the end of February which allows sufficient time for another external review before the final viva and the graduation ceremony in June. But quality should not be sacrificed for speed, and if this means graduating at the end of the year, then so be it.

Strangely enough, the end of the session was devoted to talking about the research process: while it is important to have initial ideas, these should be influenced by other people's ideas so that in the end, the final product has been improved. This is remarkably like some of the things which have been happening at work: there is a problem, I might suggest a partial solution which then gets worked on by other people in order to reach a much better solution.

Wednesday, January 29, 2020

XML files in Priority

Two new programming projects landed on my desk today. That's not to say that they were completely new, but rather they had progressed from the conceptual stage to the prototype stage. Each one will require further development but I'm very satisfied with my progress today.

The first was reading barcodes with a mobile barcode scanner; the idea is that we will issue each worker in one department with a personalised scanner, each one with the worker's id. Every day the workers will be issued with a page listing all the tasks which they have to perform, where each task has its own barcode. The barcodes are read on the factory floor and are broadcast to a docking station which is connected to a computer running a specific screen in Priority. As a result, we can know on-line what has been produced and who produced it. This has been forced upon us because according to the standard times in each work order and the number of work orders completed, we seem to be overstaffed by nearly a factor of two in this department.

The second project is more complicated: this involves reading an XML file which is created by a computerised design program which is supposed to contain sufficient information for me (or rather, the program that I am writing) to create parts within Priority and to create a bill of materials. I've done similar projects in the past for two other design programs, but the incoming data was somewhat lacking. It looks like we are going to make a large investment in this program (both money and time) and finally we have the possibility of tailoring the interface to our requirements.

I sent the representatives a sample XML file which contained some of the data that I require, and they sent me back a full XML file which contains much more information than I require at the moment. I knew that I had once written some form of procedure in Priority for reading XML files but I couldn't find it. Then I remembered that I had previously written a blog entry on reading XML files, and once I found this, by the date I could find what I had previously written.

I tried to use what I had previously written, but this didn't work for unknown reasons. As I wrote then, although there is some mention of XML files in the documentation, as usual this is so opaque as to be useless.  Maybe I now have a newer version of the documentation, for this time it made a bit more sense (even though there is a mistake in the code); instead of writing an interface, I could use an external program which deals with all the XML parsing, presenting me with a table where each tuple has a row number (not important for me), a tag (i.e. the XML tag) and the value of the tag.

It didn't take me long to adapt the example to what I needed; one line per tag is somewhat awkward when I want to create a tuple consisting of several tags, but this was easily overcome. So quite quickly I had a program which read the XML file and saved the parsed version in an existing table (or work area, as Priority terms it). The next stage was to take the information in this table and turn it into the format required for creating parts and a BOM; this is somewhat tedious and finicky, but I've done it before so I copied almost word for word my original code into this new program, and soon I had a program which achieved this second stage.

There is one more stage which needs to be done in the program but this will require the representatives and our engineering people to define exactly the required data. 

The lesson learned today is to use the XMLParse program instead of mucking around with a complicated interface.

Monday, January 27, 2020

The third way, continued

I had another example of finding a third way solution today, although this one is more convoluted and it would be hard to explain. Again there was a situation where one 'side' wanted something whereas the other 'side' wanted something which was mutually incompatible. 

But I found a solution. This 'third way' stuff seems to be good. 

Sunday, January 26, 2020

Thinking outside of the box: the third way

I want to document something which happened to me last week, not in order to show how wonderful I am or to pat myself on the back, but in an attempt to learn something and internalise a way of thinking, a way to solve one type of problem.

First of all, the background. Priority has a type of data known as 'business opportunities', otherwise known as presales. The salespeople open these opportunities, recording the customer and the approximate value of the opportunity. When the opportunity reaches the status where the customer sends in his order, automatically a project is opened from the opportunity and the scope of management changes. After all, a customer order is a 100% promise of further work and so we should know how much work is going on the books and when it is going to be produced.

Priority has two kinds of customers: temporary and permanent. A permanent customer is what we normally think of as a customer: there are orders, delivery notes, invoices and receipts. Naturally a permanent customer has an account in the financial 'books'. A temporary customer, on the other hand, is the complete opposite: no orders and no financial record. About the only data types that are suitable for temporary customers are business opportunities and price quotations; we can hand out price quotations like chocolates, but only a certain percentage will turn into orders and so we don't want to open permanent customers for those that don't. A temporary customer still has all the contact details so in a sense, we're not losing anything.

This is where we have the conflict: what happens when a business opportunity for a temporary customer reaches the status which causes a project to be opened automatically? It's not possible to open a project for a temporary customer, and so when this happens, I get a phone call from a salesperson saying that no project has been opened - or worse, the salesperson opens the project manually (after the customer has been converted from temporary to permanent) and doesn't fill in key fields correctly.

My knee-jerk reaction when I heard about this was to prevent opportunities for temporary customers reaching the critical status. The sales people were up in arms, for apart from anything else, they had no way of signalling to the accounts department that the customer status needed to be changed - this was done by a message being sent when the opportunity reached the critical status. 

So we had a situation with two mutually opposite requirements, with no real way of solving the problem. A third option is required. My usual technique at times like these is to go for a walk; getting away from the computer generally allows a solution to pop up. It's also good to get some exercise, especially in these cold and rainy days.  

After walking up and down the warehouse aisles a few times, a solution did appear. Somehow it must be signalled that the automatic opening of the project must be delayed until the customer becomes permanent. My first instinct was to save the opportunity number in a table and then have a program traverse this table periodically. A few more aisles gave me a better solution: there is no need for a table; instead a flag can be set in the opportunity. Once I had this idea, it wasn't difficult to write the program which opens the project; most of the code was based on the original code which executes when the opportunity changes status.

I was disappointed in that none of the sales staff appreciated - or even understood - the solution. On two successive days, different sales staff contacted me to say that no project had been opened; I told them to wait a little and that soon they would receive an email saying that a project had been opened for a given opportunity. As I had written this in an explanatory email, I can conclude that either people don't read my emails (quite probably) or that they don't understand them. After all, sales people have to sell (they have skills that I certainly don't), and in the same way that I don't understand the ins and outs of selling and of the finer points of our products, they don't understand anything of my world and the constraints under which I have to work. 

But we're not here to talk about how the idea was executed in Priority, but rather how to find a solution when there seem to be two mutually opposite requirements. Step back from the problem and try to find a third way! Don't fixate on those requirements; almost certainly there will be a way of getting around them.

Saturday, January 25, 2020

Another record @ 50 - Hot Rats

When writing about four records which were made in 1969, which I heard in 1969-70 and still listen to today with enjoyment, Frank Zappa's 'Hot Rats' was inexplicably left out. Thinking about it today, there are three reasons why I didn't think about this record: it's by an American and is almost completely instrumental, but the crowning reason is that there was no continuation. I have purchased uncountable albums by Fairport, Van der Graaf, 'Crimso' and the Beatles, but this is the only record by Frank Zappa that I ever purchased and the only one which I enjoyed. I did listen to other records that he made, but the 'satirical' (or scatalogical) lyrics and general style turned me off. This record really is unique in his catalogue.

I think that it's also relevant to state that it was the only one of the five which was made with a 16 track tape recorder (although VdGG's 'After the flood' was also recorded on 16 track). All the others were recorded with 8 track machines, which whilst allowing greater freedom that the previous 4 track machines ('Sgt Pepper' not withstanding), were still somewhat restricting (although not necessarily so for Fairport, who didn't indulge/require multiple overdubs). The wiki article explains how the 16 tracks allowed multiple instrumental overdubs by Ian Underwood, resulting in a very rich sound.

'Peaches en regalia' of course is an excellent overture, but I enjoy the closing track, 'It must be a camel' even more; there's something wonderful about those piano chords. Zappa's son, Dweezil, has been touring the 'Hot Rats' album, and somewhere he wonders how on Earth papa Zappa come up with that music.

The only thing that I dislike about the digital version is that there are several versions of it! Zappa felt free to edit his performances after the original record was released and as a result the version that I have is slightly different to the one that I remember (bought in April 1970). Apart from a few extra minutes added to 'The gumbo variations' (I would have preferred that several minutes be removed from this track), there is a very noticeable edit (to me) in 'Willie the pimp', and I'm fairly certain that bits of 'Son of Mr Green Genes' have been remixed, as I don't remember the horns being so prominent at the end.

Monday, January 20, 2020

Granddaughter #2 standing

Granddaughter #2, aged 13 months, is now standing, but she is not yet walking unaided. For some reason, she always seems pleased to see me, and was very upset one evening after I brought her sister home and turned to leave.

Wednesday, January 08, 2020

Priority tips: clever report hack

Today someone asked for a report which shows per part how many have been sold in a given time period and for how much money. That's fairly simple. The request, though, had a twist: there should be the possibility of showing how much per week or how much per month. Does this mean that I have to write two very similar reports which differ only in how they are aggregated?

A clever hack occurred to me which allows me to write only one report which will dynamically display data either by week or by month. Normally I would write a procedure which consists of the following steps (in reality, each number is multiplied by 10, so step 1 is actually step 10):

  1. Collect detailed data and save in a temporary table
  2. Ask the user to choose an option
  3. Go to that option
  4. Report for detailed data
  5. Go back to stage 2
  6. Report for aggregated data per week
  7. Go back to stage 2
  8. Report for aggregated data per month
  9. Go back to stage 2
My idea was that stages 6 and 8 could be one stage with one shared report. But how to do this in practice?

The first problem was the 'choose' step, step 2 above. Both the weekly and monthly options should have the value 6 (or rather, 60) so that the 'goto' step could jump to the correct report. But then how can the report know how to aggregate? My solution was to use the value 61 for the weekly report and 62 for the monthly report, then insert a code step between the 'choose' step and the 'goto' step as follows
:$.C9 = 10 * (:$.C0 / 10);
:$.C0 is the value returned from the 'choose' step; it will be either 40, 61 or 62. The simple code above stores a truncated version of this number in :$.C9, which will be either 40 or 60. This number is used as the parameter for the 'goto' step and not :$.C0, as I normally would write.

The next stage in the hack is to turn stage 60 into a code step and stage 70 into the report step. In the code step, I assign a dynamic name to the report and a dynamic name to a field in the report (this has been documented since Feb 2018).
This piece of gobbledegook means the following:
  1. Use dynamic column titles
  2. Read what would be called a 'resource string' in Delphi number :$.C0 into the variable 'title'. As :$.C0 holds the value returned from the 'choose' step; it will be either 61 or 62, so resource string 61 is 'week' and resource string 62 is 'month'. 
  3. Set the title of column 100 in the following report to be the value of 'title'.
  4. Set the variable 'rtitle' to be the value of resource string 10 ('sales by part by ').
  5. Set the report title to be rtitle + title, i.e. 'sales by part by month' or 'sales by part by week' (the variables are in reverse order because this is done in Hebrew).
Finally we get to the report itself. There are two important columns here, the first naturally being number 100 whose title has been set dynamically. This should hold either the week number or the month name; this is complicated slightly because the week number is an integer whereas the month name is a string. This does not faze us: turn the integer into a string then select according to the value of :$.C0 which is passed as a parameter to the report.
Very easy. Normally this would be a sorting key in the report, but that's not a good idea as 1/19 would be followed by 10/19, then 11/19, then 12/19 then finally 2/19 - the date is a string, not a number. So the sorting key has to be a numerical representation: not a problem for the week as this is already an integer. The month/year combination is turned into a sortable integer by extracting the year and multiplying by 12, then adding the month. This is written as follows
This is quite a good hack and I should add it to the syllabus of my 'developing for Priority' course. As it happens, I have a teaching appointment for this evening when I intended to talk about complicated reports, so this is ideal timing.