Monday, December 31, 2018

Love is all you need (film)

I had recorded some time ago a film whose unpromising blurb was something like 'Romantic comedy in which Pierce Brosnan attends his son's wedding in Italy'. As our Yes Max video recorder is due to be replaced today, I thought it prudent to actually watch the film before it gets lost. The first few minutes were disconcerting: a woman had gone to see an oncologist ... and they were speaking in some foreign language which I originally took be Swedish but turned out to be Danish. Then there was a scene with Brosnan as the CEO of a vegetable/fruit company ... not very promising. I fast forwarded about 15 minutes to a 'meet cute' between the above woman and Brosnan which was taken straight out of 'Cold Feet': the woman backs into Brosnan's car in an airport car park. This reminded me of the exchange between Adam and Rachel in CF: "Who was your driving instructor, Stevie Wonder?" "At least I had a driving instructor".

Once they calm down a little, it turns out that the woman is flying to Italy to attend the wedding of her daughter; strangely enough, Brosnan is flying to Italy to attend the wedding of his son. Of course, it is her daughter marrying his son. Cut to a local Italian airport and then to a drive along countryside which looks extremely familiar: they were driving on the road between Sorrento and Amalfi! From this point on, the charm of this area took over the film, which improved immensely. There were many romantic shots of the gulf of Naples, both early morning and evening, which placed Brosnan's villas in the hills above Sorrento, in the Sant' Agata area.

Apart from general scenic shots, there were a few places which I recognised immediately. There were a few shots of Marina Grande, which is right next to where we stayed in Sorrento the first time. When the ladies went "into town to buy clothes", there was a shot which started with the bell tower then ran down the lane where the 100m pizza was served and into a junction where we ate Gnocchi alla Sorrentina. The wedding took place in the cloisters of San Francesco (pictured on the left). It should be noted that all the locations in Sorrento looked cleaner and less run down than they did when we were there. The film was released in 2012, meaning that it was probably filmed a year earlier, whereas we didn't go to Sorrento until 2014, so the intervening years may have contributed to removing the sparkle from the locations.

There was one thing which nagged at me: wedding guests are seen arriving and departing from Marina Grande by boat. Apart from the fact that most boats leave from Marina Piccolo, why would one travel by boat from Sorrento to Naples (airport)? Obviously, the scenic factor plays a part, but Brosnan was shown arriving by car. Only when watching the credits did this become clear: they all arrived at Salerno airport, not Naples. This explains how come Brosnan travelled by car along the Amalfi coast and why the guests travelled by boat.

In the end, I found the film much more enjoyable than the opening minutes suggested.

Friday, December 28, 2018

Amos Oz (1939-2018)

I have just learned that esteemed Israeli novelist Amos Oz has died at the age of 79 from cancer.

I first became aware of Oz around 1975, when I read the English translation of his (then) most famous book, 'My Michael'. This was a story set in Jerusalem just after the creation of the state of Israel. Probably most of the allusions passed me by, but I remember going past certain buildings and thinking to myself that these were mentioned in the book. I read another of his books in translation a year or two later ('Elsewhere perhaps') which was set in a fictional kibbutz, one which was quite unlike the kibbutzim which I had already begun to know and love.

I emigrated to Israel in 1978, to a kibbutz called Mishmar David, whose closest neighbour is kibbutz Hulda, where Amos Oz was living. I remember that during the first weekend after emigrating, a group of us went to Hulda in order to use their swimming pool (we didn't have one at the time in Mishmar David). If I remember the story correctly, after we had left the pool, Amos Oz arrived with Jane Fonda.

A few years later, in an attempt to improve relations between the two kibbutzim (there were no arguments between the two ...), probably at Sukkot (when it is traditional to entertain guests), we went to Hulda and were hosted by several families. My wife was talking to the family that entertained us about their house, and our hostess said something like "I'll show you something else". She went outside, knocked on the door of the next apartment and was bidden to enter with us. "Thank you, Amos", she said. Only afterwards did my wife realise that we had been in the house of Amos Oz.

An apocryphal story which was making the rounds at this time had the treasurer of Hulda calling upon Oz and telling him that he was the most successful branch of the kibbutz (in monetary terms); the treasurer wanted to improve the income of this branch by allowing a few pensioners to work with Oz and so increase the work force.... Maybe this story loses something in translation.

A few years later, Oz and his family moved to the desert town of Arad in order to ease his son's asthma, and so our paths ceased to cross.

The last book of his which I bought was a non-fiction book about the Israeli elections in 1982, when Oz visited several cities, towns and settlements.

Saturday, December 08, 2018

Friday, December 07, 2018

24 hours and 180 degrees

Yesterday, shall we say, was not a very good day. In the morning, I travelled to Tel Aviv and got soaked to the skin. I don't like rain very much, but once I was wet, it didn't bother me any more as I couldn't get any wetter than I already was. I dried off slightly whilst in the train, but the rain at the other end of the journey ensured that I arrived home wet - I went straight into the shower, taking off my wet clothing and hanging it to dry. To add insult to injury, I tried to get some cash from the ATM at our local bank branch; the machine swallowed the card!

Overnight 70 mm (2.8inches) of rain fell on the kibbutz, which is a very large amount! About 11% of our annual rainfall. I was about to take the dog for a walk at about 4pm when there was a break in the rain, but by the time I had put on my raincoat (fortunately I have two, for the first got soaked in the morning) and put the dog on the lead, the rain had started again. We managed a walk later on in the evening.

This morning, a telephone call woke us at 5:40am; it was our daughter telling us that it was time for her to go to the hospital in order to give birth to her second daughter. At 10:30am, she sent us a message telling us that she had given birth to a 3.20kg baby! Our other grand-daughter has been with us for most of the day and will stay with us until tomorrow evening when presumably her father will come back to the kibbutz (he will stay overnight with his family in Jerusalem).

I had a nagging feeling that there was something important about 7 December, but it took me a while to figure out what it was. Aside from it being the sixth candle of Chanuka, it is also the 70th birthday of our kibbutz! So we'll always remember this date! Since the formal announcement via the kibbutz website an hour ago, our phones have been beeping every few minutes with congratulations from our friends.

There's no formal picture of our new grand-daughter, but we do have a picture of us lighting the candles.

And to add icing to the cake, I was able to get my debit card back from the bank and was able to withdraw cash.

My world has changed 180 degrees in the last 24 hours!

Wednesday, November 28, 2018

Executing a program and waiting for it to finish

At the beginning of the month, I wrote "The next stage in the process is to convert the xlsx file (after completion) to a tab delimited file by means of the increasingly valuable program which I wrote with Delphi 10. This turns out to be much harder than expected - a topic for another blog entry."

Here is that second blog entry. In the past, I have used the ShellExecute procedure in Windows in order to execute a program in the context of another program; here is some sample code (taken from a 'program launcher'):
chdir (extractfiledir (path)); cmd:= ini.ReadString (key, 'Cmdline', '') + ' ' + pdata + #0; ShellExecute (handle, 'open', pchar (path), pchar (cmd), nil, sw_show)
Whilst this procedure does what it is supposed to do, the executing program has no way of knowing when the child program finishes. Sometimes this is not a problem, but sometimes it is. In the context of converting an xlsx file to tab delimited, it is very important to know when the child program has completed.

There is a second procedure in Windows called ShellExecuteEx which both executes the child program and also waits for it to finish. I am sure that I used this procedure once in a program, but I couldn't find the code and so had to rewrite it from scratch. Unfortunately, some of the examples which I looked at were misleading, so it took me some time to figure out exactly what had to be done. Here is the code which executes the converter program:

var exInfo: TShellExecuteInfo; exitcode: DWORD; prog: string; begin With exInfo Do begin cbSize:= Sizeof (exInfo); fMask:= SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; Wnd:= aHandle; lpVerb:= 'open'; lpFile:= pchar (extractfilename (prog)); prog:= extractfiledir (prog); if pos (' ', prog) > 0 then prog:= '"' + prog + '"'; lpDirectory:= pchar (prog); lpParameters:= pchar ('"' + f1 + '" "' + f2 + '" ' + flags); nShow:= SW_HIDE; end; if ShellExecuteEx (@exInfo) then begin while GetExitCodeProcess (exinfo.hProcess, exitcode) and (exitcode = STILL_ACTIVE) do Sleep (500); CloseHandle (exinfo.hProcess ); end;
I discovered that if the program to be executed has a space in its name (or more likely, in the directory name), then one has to put quotation marks around the name. Similarly, the parameters have to be protected by quotation marks. Since having written this code, it works very well in two programs of mine which execute the converter program.

This morning I had an epiphany about the above code: in a different program suite, there is a loader program which receives as input data from an examinee along with a list of exams (i.e. programs) that the examinee has to take. Each exam has to signal the loader program when it has been completed in order to cause the next exam to be executed. The loader program uses the ShellExecute method, which solves half of the problem; the second half of the problem (notification) is achieved by means of a complicated system of inter-program messages. Sometimes there are bugs with this method. It occurred to me this morning that I can drop all the message creating and receiving code: the launcher can use ShellExecuteEx in order to execute each exam, and of course, the launcher will receive a reliable message when the child program has completed. The child program doesn't even have to know that it is being run by the launcher, which simplifies a few things.

Tuesday, November 27, 2018

Intermediate thesis accepted!!

Following is the text of a letter which I received from the university today.

Dear No’am

I trust you are well.

The Doctoral Review Committee considered your intermediate thesis at their meeting this morning. I am delighted to inform you that they consider it to be of a very good standard and are happy for you to proceed to the main study.

You will soon receive detailed feedback from the reviewers via your supervisor. You are encouraged to discuss the feedback with your supervisor and address any issues to your supervisor’s satisfaction before progressing to the next stage.

Obviously it's a good idea to have undertaken a failed doctoral project before embarking on a successful one. The first time around, it took me eight months and one and a half attempts to get my research proposal accepted; second time, it took about three months, fighting my mentor almost all the way, to have the proposal accepted at its first meeting. The first time, it took about two years and two attempts to have the intermediate thesis accepted; second time, it took exactly one year and one attempt!

Of course, it's not such a good idea to have a failed project as it ate time and money which could have been put to better purposes. On the other hand, the experience gained from failing allowed me to know in advance what I needed to know in order to succeed. 

So what lies ahead? First, I have to see the detailed feedback - I suspect that the paragraph about feedback in the letter is boilerplate. Assuming that there is nothing serious there, the next step is to start the interviewing process. At the same time, I have to discuss how results will be presented in the thesis. It would have been much clearer how to present results in a thesis based on statistics which prove or disprove hypotheses.

Monday, November 19, 2018

E Dorian

Throughout October, I was toying with a chord sequence which I developed, trying to turn it into a song. I think that the fact that I was toying or dabbling means that I wasn't very happy with it. About a week ago, I sat at the piano and played the sequence once again, trying to find a tune which would work; after knocking around for a bit, I discovered that I was playing a song written by someone else (I don't recall now which song, not that it matters) and that the rhythm had changed from 4/4 to 6/8. I started to sequence this variation, but didn't get very far.

After a few days cogitation, I decided to start afresh, keeping only an instrumental portion from the song. I decided arbitrarily that the song would use the E Dorian scale (E F# G A B C# D), and unusually for me, all the chords used (at least, in the verse) are based on this scale: Em F#m G A Bm and D. I quickly developed a 15 bar sequence for the verse and even built a complete arrangement. 

As someone noted on the Music Practice and Theory stack exchange site, this scale doesn't really have the concept of perfect cadences (e.g. B -> Em); the normal cadence for the Dorian mode is D -> Em. Thinking about this, I decided to reverse the chords in the last three bars of the verse, from Em D A to A D Em, as this would have a better 'cadential' feel. This meant that I had to change several bars in the arrangement. Sitting down once more at the piano in order to develop a tune, I realised that I needed a 16th bar to the verse; back to the sequencer in order to add this bar to every verse, and then restructure the drum loops. The tune may be a bit too high for me to sing comfortably: it ranges from D above middle C to C# an octave higher. Lowering the key by two or three semitones would bring it into my comfort zone, although I have reached that high C# without help in the past.

That's all behind me now. The song - or rather, the arrangement - is now complete, at least until I have some more ideas. All that's left to do is write the words. I haven't given this much thought as I was waiting for the melody to settle down. The current idea is to call the song 'Wide awake', where the lyrics are something like 'Wide awake at five past one, the daily grind has just begun; wide awake at ten past two, ......'. I don't know whether those words even fit the new rhythm and I'm unsure as to whether this is a topic which will maintain an entire song.

Friday, November 09, 2018

Improving a solution

I thought that I had written about a problem which I had with loading external files containing Hebrew into Priority; the Hebrew text wasn't being reversed when read by Priority (or rather, it was being reversed but not unreversed). One day, I realised that I could write a program which would reverse the Hebrew in advance (this would have the Hebrew left to right). Once read into Priority, the left to right Hebrew would then be corrected to right to left, which is the way it should be.

The original data flow was:
  1. Copy the external file to a special directory, changing its name (this is so the interface program in Priority can find its input)
  2. Read this file into a holding area within Priority, very basic structure
  3. Move the data from the holding area into another holding area with better defined structure
  4. Convert the data in the holding area to the customer order format.
The problem with the Hebrew was in the first stage: the basic holding area had reversed Hebrew strings. The original program - which stopped working - corrected the data in this holding area, between stages 2 and 3. As I am not able to write a program which accesses data within Priority tables, this option was denied to me, so I decided to attack the first stage: my program ('RevHebrew') altered the original external file prior to its being read into Priority.

At some stage, I realised that I only need create a backup file if RevHebrew actually reversed anything in the file; this cut the number of backup files by at least 50%.

A few days ago, it occurred to me that I could simplify matters if I used RevHebrew at a later stage. I wrote a new version of the program which didn't save its original file with a new extension (this required removing exactly one line from the original program) and set this to work on the file which has been copied to the special directory. 

The benefits of this are two-fold: there is no 'original backup' file, and the file which is backed up by the Priority program has the Hebrew in its correct form, not in reversed form. Thus if we ever need to input the file again (which I sometimes do in order to check where a problem occurred with a file's contents), there won't be a problem with the Hebrew.

The programming house who were supposed to check the original program and write a replacement had the cheek to send me a bill for work done. I returned this, noting that their 'solution' is not a solution and that the assigned programmer obviously did not understand the problem, judging by his solution. This was only yesterday, so of course I have yet to receive any response from them.

Wednesday, November 07, 2018

Improving Bill of Materials data in Priority

I have often wanted in Priority that the lines in the Bills of Material (BOM) would show when a given line was added. Looking at the screen which displays this data yesterday, I discovered that there is indeed such a field and that there is a screen trigger which fills that field (and also stores the name of whoever added the line). So why were all our BOMs lacking this data?

I don't know whether the company for which I work is exceptional in this, but I estimate that 99.99% of our BOMs are created by copying previously existing parts. Obviously, changes are made in the BOMs themselves, but again about 99.99% of these are made by a configuration program. It seems as though the copying program and the configurator, both of which are external C programs, directly insert parts into the BOM without using the screen interface. So these lines lack the date they were entered, and by whom.

This is how the COPYPART procedure works: first, the user is asked for the catalogue number of the part which is to be copied. Then an empty screen is presented, in which the user writes the catalogue number(s) of the new part (s) - one can copy an existing part to a new part, or to several parts. Then the copying begins. My code takes advantage of the screen in which the new part numbers are written: these numbers are stored in a table called NPART.

My code runs at the very end of the COPYPART procedure: it loops over all the parts in the NPART table created by the current user and inserts a tuple into the 'extended BOM table', storing the user name and date. PARTARC is the name of the table which stores the BOM data.

DECLARE D1 CURSOR FOR SELECT PART.PART FROM NPART, PART WHERE NPART.PARTNAME = PART.PARTNAME AND NPART.USER = SQL.USER AND PART.TYPE = 'P'; OPEN D1; GOTO 300 WHERE :RETVAL <= 0; LABEL 100; FETCH D1 INTO :NPART; GOTO 200 WHERE :RETVAL <= 0; DECLARE D2 CURSOR FOR SELECT SON, SONACT, ACT, RVFROMDATE FROM PARTARC WHERE PART = :NPART; OPEN D2; LOOP 100 WHERE :RETVAL <= 0; LABEL 110; FETCH D2 INTO :SON, :SONACT, :ACT, :RVDATE; GOTO 120 WHERE :RETVAL <= 0; /* This is effectively PARTARC/BUF5 */ INSERT INTO PARTARCA (PART, SON, SONACT, ACT, RVFROMDATE) VALUES (:NPART, :SON, :SONACT, :ACT, :RVDATE); UPDATE PARTARCA SET USER = SQL.USER, UDATE = SQL.DATE WHERE PART = :NPART AND SON = :SON AND SONACT = :SONACT AND ACT = :ACT AND RVFROMDATE = :RVDATE; LOOP 110; LABEL 120; CLOSE D2; LOOP 100; LABEL 200; CLOSE D1; LABEL 300;
The only strange part of this is code which was adapted from the existing screen trigger (PARTARC/BUF5): first an insert is performed into PARTARCA and then the same table is updated. As I understand it, this code first inserts a new record; the insertion could fail if there were no existing record - if someone were editing an existing BOM line. The update naturally updates; this is now guaranteed to work. If there were only an update without an insert, then new lines would not be inserted. Inserting without updating would fail when editing. So this slightly odd approach has been used.

I suppose I could simply have written an insert for my code, as at the time when it executes, there is guaranteed to be no existing line. I've kept it like it is in order not to depart too far from the original.

Tuesday, November 06, 2018

Intermediate thesis submitted!

Since I last wrote about my thesis, there have been great improvements. I utilised the Succot holiday to improve the research methodology. After this was approved by my advisor, I commenced the pilot study. As I wrote in the thesis:

The pilot study was conducted with a manager responsible inter alia for Priority development, testing the proposed approach and methodology. The objectives of the pilot study were:
  • to verify that the questions proposed in section 4.2 are appropriate
  • to discover whether there are additional questions which need to be asked
  • to determine how much time is needed for an interview
  • to determine how much time is needed to analyse the interview
  • to determine the suitability of the general structure of the interview.

Originally I reported on the pilot study without any defined structure, but after finding a recent thesis from my department which was accepted, I adopted the structure of the report as appeared in that thesis. I sent this version off to my advisor a few days ago; yesterday evening I received his approval, and so this morning I submitted the thesis to the research committee.

The committee will be sitting towards the end of the month. As with the research proposal, the submission is sent two weeks prior to a meeting of the research committee; two members read the document, make notes and present their findings to the committee which then decides whether to accept or reject the document.

Unlike my first research project, where I adopted the strategy of submitting the first time a version that I think is good but probably not good enough, I have high confidence in this version. As my supervisor wrote yesterday, I think that you and I have spent enough time reviewing this and it now needs some 'external' eyes on it. I think you've really created a document, easy to follow and understand... which is the absolute core skill of a good researcher.

So there's going to be a hold on reporting DBA activity until the end of the month. Ironically, I received an email this morning asking for my quarterly progress report. As my plans for the next quarter depend entirely on the research committee's decision, I think that I will delay sending in the report until the committee's meeting.

Saturday, November 03, 2018

Protecting cells in Excel files

Yesterday the OP and I were discussing time sheets: some of her psychologists prefer to fill an Excel worksheet with their hours worked. Looking at this (and bearing in mind recent work of mine in Priority), I said that I could write a program which would input the data from the worksheet into the appropriate table within the OP's management program. Of course, I noted, we would need to have a standard file format, so then I found myself agreeing to write a program which would output such a file.

The first stages in writing the 'calendar' program were very simple; there was a certain amount of 'fun' involving saving the file in xlsx format, but this was swiftly overcome. I realised that I would have to protect the format of the file - I don't want people changing the structure. In order to do this, I would have to protect the cells in two columns (date and day name) whilst leaving the third column (hours worked) editable. I've never done this with an Excel file, let alone with automation, so first I had to learn how to protect the cells, then how to do this within the framework of a Delphi program.

The necessary code appears below:
// allow users to edit only the hours sheet.Protection.AllowEditRanges.Add (Title:= 'range1', range:= sheet.columns['C:C']); sheet.protect; sheet.Range['C2'].Select; // save as xlsx XLApp.Workbooks[1].saveas (filename:= copy (s, 1, length (s) - 3) + 'xlsx', FileFormat:= xlOpenXMLWorkbook);
The final line is required as the Excel file is created by loading a csv file, thus a regular 'save' would save the file as csv, not xlsx.

The next stage in the process is to convert the xlsx file (after completion) to a tab delimited file by means of the increasingly valuable program which I wrote with Delphi 10. This turns out to be much harder than expected - a topic for another blog entry.

Tuesday, October 30, 2018

Losing an old friend, gaining a new one

Today my mobile computer for work will be replaced. I thought that I had written about receiving it several years ago, but I only noted its predecessor from slightly over five years ago. There were several problems with the Dell that I received then, mainly that there were almost no sockets. I had the computer replaced with a Toshiba Portege Z30T-A which I have liked very much.

True, I've had problems with the jittery mouse, and the network adapter socket sometimes causes problems, but this computer fits neatly into my backpack, it has plenty of memory and has a very fast disk. So what happened?

Last week (Monday), I travelled to Karmiel on the train. I used the computer for about fifteen minutes at the beginning of the journey with power supplied by the battery. After I had been working at Karmiel for a few hours, I noticed that the battery was empty, even though the computer was connected to the mains. In other words, it should have been charged to full and stayed that way. I disconnected the mains, and as expected, the computer turned itself off. I called our technical support (normally they call me about Priority problems); the technician wanted me to remove the battery from the computer, but this computer doesn't allow easy access to its gizzards, so we had to leave things as they were.

The next day, I looked at the computer again: still the battery was empty despite being connected to the mains. Technical support said that they were ordering me a new computer. On Wednesday out of habit, I took out the mobile computer in order to connect to one of the companies for whom I consult - and lo and behold! The battery started charging. I informed technical support, but they said that the new computer had already been ordered, and anyway this computer is 'old' - after five years!

As it happens, I worked early this morning for about an hour with the battery with absolutely no problems. But progress is progress, and so in a few hours time I will be receiving a new computer. Then will start the awkward process of transferring as much as possible; I keep very few data files on this computer so that won't be a problem, but it's the programs (and their associated definitions) that I'm worried about.

---- to be continued on the new computer ---

So here I am on my new Dell Vostro computer, running Windows 10. I spent some time yesterday getting the computer set up the way that I want it. Earlier this morning I imported all my bookmarks along with VPN settings, so almost everything is ready. I had to look up my gmail password; I haven't yet got access to my home router (!) and there are AnyDesk settings to be imported (?) or reset. Otherwise ....

Friday, October 26, 2018

First rain

The weather forecasts have been predicting a rainstorm which is due to hit on Thursday morning and evening, then lightening up. In reality, Thursday morning was overcast, but by lunchtime the clouds had disappeared and it was quite hot. I went to bed early as I have had a very tough week and my eyes were hurting.

At about 10:30pm, I was wakened by a very strange sound, as if someone was moving wooden tiles around on the small balcony outside our bedroom window. Then the rain started. The balcony has a roof consisting of bamboo and plastic which does not let the rain through - but makes a sound when rain falls on it. And what a sound!

I have on my mobile phone an application which I originally loaded in order to measure how much noise a worker makes, close to my cubicle. He is a big man with a loud voice who speaks Russian, which I find extremely distracting. Normally his voice is in the 45-55dB range, but it has passed the 60dB mark and maybe hit 70bB.

The noise from the rain last night reached 70dB, which the application describes as 'busy traffic, vacuum cleaner', so of course it was impossible to sleep at this stage. After at least an hour, the rain eventually weakened, making it was possible to sleep again.

There were puddles everywhere this morning, but clear skies. The sun is shining now and probably causing all the water to evaporate, so by this afternoon there will be few signs of the heavy rain. I haven't seen yet the report of how much rain there was*. In Israel, we don't have the various types of rain that Britain does - drizzle, a polite rain, medium rain or heavy rain. We just have heavy rain, which isn't too good for the ground, as it quickly becomes saturated with water and can't absorb any more. This means that a fair amount of last night's rain will find its way to the sea without being absorbed into the soil. A shame.

* About 36mm, which is about 5% of the annual rainfall.

Thursday, October 18, 2018

Conditional choose-field trigger (2)

Almost exactly one year ago, I wrote a convoluted blog entry about choose-field triggers in Priority. It might be that I was wasting my time as there is a documented solution for what I was trying to achieve. From chapter 5 of the Priority SDK:

You can also write a specific CHOOSE-FIELD or SEARCH-FIELD for the procedure. Your trigger can contain references to any input value specified by the user within the same [emphasis mine] procedure step. For instance, if the procedure step contains an input parameter called CST, its value will be stored in the :PROGPAR.CST variable. This is useful, for example, if a given procedure step contains an input column for a Sales Rep and another input column for a Customer, and you want the Choose list for the latter column to display only those customers that are associated with the specified sales rep.

I emphasize the word 'same'. Looking again at the code which I presented in the blog from last year, the 'input value specified by the user' comes from a previous step in the procedure and not the same step. 

Friday, October 05, 2018

Geoff Emerick, 1945-2018

I have just learned that Geoff Emerick, who was the recording engineer for the Beatles from 'Revolver' onwards died a few days ago aged 72 from a heart attack.

His book, "Here, there and everywhere", should be compulsory reading for all Beatles fans and also for all people interested in how records were made in the analog days. It should be noted that this book is controversial "for its allegedly unfavourable portrayal of Harrison,bias towards McCartney, and belittling and dismissal of Harrison and Starr's contributions" as well as "the most negative depiction of Martin as a record producer" (quotes from Geoff's wiki page).

Wednesday, October 03, 2018

Knocking my head against a brick wall

I wrote at the beginning of September that Embarcadero has decided to make the current version of Delphi (10.2) free to freelance developers, startups, students and non-profits. After playing with it for some time, I discovered that it does not come with the components which I used for connecting to the Firebird database server, meaning that I would have to translate all the code which I currently have into new code. This is the same as I did several years ago when I transferred old BDE code to Firebird. I don't have the time to do this now, and there is no guarantee that my copy of 10.2 Delphi will work after September 2019.

I also wrote that writing a translator from Excel's newish XLSX format to tab delimited seemed possible with the new Delphi. This took about an hour as I had to figure out new components. I tried the program out and it seemed to work fine.

But there were problems every time that I ran the converter on real files at work. The program is command line driven, so that it can be called from Priority. I could see that the program was being invoked but nothing was happening. After spending no small amount of time on this (and figuratively knocking my head against a brick wall), I decided to write a manually driven program to convert input files, thus allowing me to concentrate on writing whatever code was needed in Priority.

But the fact that my program worked once but not afterwards continued to niggle me so I decided to spend some time debugging with a clean head. First I wrote a very simple 'Hello world' program to verify that Priority was invoking my program. Then I expanded the program to print its parameters. This is where the penny dropped. Assuming that I had a command line like 'x:\1\soul and pepper.xlsx', the default command line parser in the Delphi program saw that there were three parameters: 'x:\1\soul', 'and' and 'pepper.xlsx'! As my program checks to see whether exists a file which matches the first parameter ('x:\1\soul'), it is not surprising that the program did not continue - although the error logging should have displayed that the file does not exist.

OK, where to go from here? My first thought was that I should correct my Delphi program, but this was going to be problematic as there are supposed to be three parameters to the program (the input file, the output file and flags). Handling these parameters when the input file could in itself produce several parameters seemed problematic.

My next thought was to enclose the input file name with quotation marks - "x:\1\soul and pepper.xlsx". The Delphi program should see this as one file, but I couldn't get Priority to do this (string operations are problematic in Priority). I then wrote some complicated and ultimately stupid code to convert spaces in the filename to underscores - this gave me 'x:\1\soul_and_pepper.xlsx', which worked. Priority has a way of copying files which ignores the space problem, so I copied the original file to the new file and called my converter with this new name.

Then I had the proper insight: copy the original file - whatever its name - to a new file whose name I control (no spaces!), then convert the new file. Simplicity. Now my converter program works properly!


Friday, September 28, 2018

Walking the dog leads to epiphanies

I've known this for a long time: walking the dog allows my mind to become unfettered, thus allowing new and surprising thoughts to enter my mind.

Today I was thinking (once more) about applying my enhancements model in my company. It occurred to me that one of the problems that we have with the salespeople is that they are paid a basic wage along with commission. It might well be that these people are loathe to participate in development meetings because they are not working on new projects while they are in meetings. This leads to the absurd that salespeople have to be compensated for their time if they participate! Everyone else is a salaried worker so they can participate in meetings all day long.

From there, I developed my thinking about the research phase for my doctorate: I realised that this has to be divided into four stages, namely
  1. Raw data collection - by means of semi-structured interviews, backed up with documents if they exist
  2. Data analysis - examining how close the practices used by the participating companies match the proposed model, paying close attention to the failed enhancement
  3. Discussing the model with the companies, showing how use of the model could have prevented the problems with the failed enhancements (this assumes that the model is 'correct'; it may get changed during stage 2)
  4. Revised raw data collection - seeing how successful were the enhancements developed by means of the model.
The methodology chapter as it currently stands only references the first stage. The 'why' of the above is derived from a quotation from one of the papers which I found the other day: The validity of a method can only be established by applicative success in practice.

As Israel is entering yet another long weekend (today is Friday and I go back to work on Tuesday), I have a few days which I can devote to writing about the four stages of the research phase.

Wednesday, September 26, 2018

Turnitin

A few weeks ago, I was sent a letter from my university about a website, Turnitin, which provides a 'plagiarism prevention service'; yesterday I finally got around to using this site. One uploads scholastic work (i.e. turns it in) to the website which analyses the work, showing what percentage is found elsewhere. At the end, one receives a report.

I tried to upload the entire intermediate submission, but that must have been too large as the site timed out. Instead, I uploaded the rewritten chapter four, which introduces my proposed framework for managing enhancements. At first, my work received a 20% mark, although this was reduced to 16% after I defined the 'ignore direct quotes' flag. 16%?? How come? This is all my own work!

The report also provides data as to the sources of the plagiarism - it turns out that 12% (that's 72% of all the report) comes from my blog! Specifically, the material which I wrote just under a year ago when I first developed the framework. That's not plagiarism, but the site doesn't have an option (that I could see) for ignoring specific sites. This means that from now on, I will refrain from including material here which I also include in my thesis. 

The first chapter showed about 40% copied material, which was reduced slightly when I marked the 'ignore direct quotes' option. Here, there was very little material from my blog, but many quotes and paraphrases which come from multiple papers. At the moment I'm going to ignore Turnitin.

That's a shame, because yesterday I came across a paper which provided a very useful paragraph. Perhaps Turnitin will ignore it if I enclose it in quotation marks:
"Rescher (1977) divides human knowledge into two types:
(a) Theses, or "knowledge that", defining statements or assertions about the world
(b) Methods, or "knowledge how", defining ways of doing things.

Moody and Shanks (2003) argue that the major focus of scientific research has been aimed at theses, which are proved by hypotheses, whereas a different approach is required to validate methods. A hypothesis is either proven or not, whereas a method can be effective or ineffective. "Factual theses can either be established deductively from other theses or inductively from observations. The validity of a method can only be established by applicative success in practice" (Moody and Shanks, 2003, p. 624)."

This is the kind of material that I require which gives my research approach - developing a framework, comparing this to what actually happens in the real world and then verifying it by using it (as I am trying to do at work) - the academic credentials that it needs.

Tuesday, September 25, 2018

It was 40 years ago today

On the left is a picture taken in the morning of 25 September 1978, featuring my parents and I outside their bungalow in Cyn Coed, Cardiff. In a few minutes, we will load my luggage - one suitcase, one rucksack, two guitars and a mandolin (I'm holding it in my right hand - if one looks closely, the tuning pegs can be seen) - into the car before we set off for Heathrow Airport. My parents will return home at the end of the day; I will be starting a new chapter in my life as I emigrate to Israel.

I wonder what I am wearing on my head: I don't remember ever having a straw hat (prior to Italy this year) so it can't have lasted long. I also wonder what happened to that rain coat.

Despite the fact that there were 10-12 of us emigrating this year, only myself and two others flew today as we had settled our affairs and were ready. I remember that my parents had wished that I delay my departure by another two weeks - I emigrated just before the Jewish New Year and they wished that I wait until after Yom Kippur. But I had absolutely nothing to do in Cardiff; I also had very few possessions with me - everything else was packed away.

I remember being disappointed that no fuss was made of us on the plane - I half-heartedly complained to the stewardess that we should at least be served champagne as we were the only olim on the plane (we were flying El Al). When we arrived at Lod Airport (it hadn't yet been renamed Ben Gurion), we were whisked into a side office where we received our documents as new immigrants.

At some stage we left the offices, met the friends who had come to welcome us, and drove to Kibbutz Mishmar David, which was about half an hour away, in order to begin our new lives.

Unlike so many of my friends, I have stayed in Israel and have never contemplated returning to Britain. Apart from anything else, I didn't have anything to return to, especially after my parents emigrated four years later. I get contrasting pictures about modern-day Britain: it seems to be a less welcoming place than it was 40 years ago, but I have to remember that I never lived there as an adult. True, I did spend a year working in London, but that was limited in time and I had a huge safety net behind me. 

I do not regret for one moment my decision to live in Israel.

Monday, September 24, 2018

The 'festival of booths'

I recommend reading the Wikipedia article about the festival Sukkot for those who haven't a clue what I'm writing about.

The story starts, I suppose, on Saturday morning when I was waiting for the lifeguard to open the swimming pool. Almost every week, the first three people there are Orna, Yael and myself. Orna was singing some song which she had discovered, saying that it was perfect for the short Sukkot 'ceremony' which would take place on Sunday evening. She asked whether I would be prepared to accompany her; I answered that it would not be a problem, but that she would have to send me a link to the song as the likelihood of me learning the song from her singing was low. Yael is responsible for culture on the kibbutz, so this was a done deal.

Yesterday morning I listened to the song on the computer and figured out how to play it; it wasn't very difficult although the chord sequence struck me as very weak. My major worry was in which key we would be playing, as Orna is, how can I put this diplomatically, full of enthusiasm but not so keen on the formal points of music. I assumed that she would sing in the same key as the recording, which was Gm. I decided to play the song on the 12 string guitar with a capo. She also wanted to sing another song which I vaguely knew, so whilst I could work it out fairly quickly, I wouldn't know in which key it would be until the ceremony, which was due to start at 8:30pm.

At about 7:50pm yesterday, Yael phoned me, asking whether I had a classical guitar. After the short ceremony, it was planned that a small musical group would appear, singing songs of Arik Einstein; it seemed that the guitarist had forgotten to bring his guitar (!). I said that I don't have a classical guitar, but then the guitarist got on the line and asked whether I have an amplified acoustic. Of course I do: the Ovation. Could I also bring a capo and a plectrum? No problem. I terminated the phone call only to be called again after a minute or two. Did I have a microphone available? I do, but its plug is not suitable for professional use.

I left the house with two guitars: the 12 string in its bag on my back, and the Ovation in its heavy case in my hand, along with plectra, capo and guitar leads. When I arrived at the lawn outside the dining room, I was greeted like a long lost friend. Whilst taking the Ovation out of the case, I asked how a musician could travel to a gig and forget his guitar. I received an explanation but it's not really important. Both the guitarist and the drummer had a quick play on the guitar: they said it was a good guitar, as smooth as butter to play and with a good sound. I pointed out the strangely shaped back which makes the guitar difficult to hold.

The short ceremony was shambolic but was ok. I played the 12 string through the group's PA system thus allowing its volume to match Orna's singing. No one said a word to me afterwards about the guitar....

The musical group were good but not ambitious.The small crowd which turned out for the evening (apparently many families were on holiday outside of the kibbutz) sang along with almost all of the songs. The guitar sounded very good although at times its sound had a bit too much treble. Look, ma; he's playing my guitar!

Sunday, September 23, 2018

Vinyl log #31 - 23 September

DayMonthYearArtistTitle
23September197410ccSheet music

More symbolism: if vinyl log #30 was about the last records that I bought as a Londoner, this log is about the first record that I bought as a Londoner. 

In the second half of September 1974, I moved from Cardiff to London, and probably during the first week of my move, I bought this record at the 'Our Price' shop opposite Finchley Road tube station. This was to be my 'local' record shop for a few years until a branch was opened in Golders Green.

I had heard 'Silly love' and 'Wall Street shuffle' on the radio in during August and had loved them, so it wasn't much of a leap into the unknown to buy this record which contained those two songs. 

I loved this record from the start, being amazed at the flights of fantasy which used to occur in the middle of each song. There structures weren't verse/chorus/verse/chorus or verse/verse/bridge/verse - they would start off following a standard structure then suddenly veer off into uncharted territory. I found the writing credits very interesting: several were by Godley/Creme, a few by Gouldman/Stewart, but there were also songs written by all the possible combinations. 

A little of this wildness crept into some of my songs written in the same period; unfortunately only a little.

I have a memory - this must have been at the end of September or early October - where there was a group of us sitting in one of the smaller bedrooms of our communal house, playing some kind of board game. The record was playing in the background; a girl called Jeanette flashed her eyes during 'Hotel' but then dismissed the record. I haven't seen her since then, but I hear the record frequently and still derive intense enjoyment from it.

Saturday, September 22, 2018

A framework for the successful implementation of enhancements

Almost a year ago, I suggested a framework for the successful implementation of enhancements in ERP systems. This was discarded from the research proposal which I submitted at the end of 2017, but has now made its triumphant return into my intermediate submission, which is basically my doctoral thesis without the actual 'in the field' research.

I was discussing the framework with the OP a few weeks ago when the thorny subject of validation arose. Had I continued working on my original thesis topic, validation would have been subsumed into showing that there was support (or lack of) for my hypotheses. But the current thesis topic is not hypothesis based, instead suggesting a framework. In this context, validity of the framework means that developing enhancements by means of the framework will lead to successful implementations, whereas enhancements not developed by means of the framework are liable to fail.

I've been looking for supporting literature but not finding anything - although I'm sure that there must be. One good paper is called "The conundrum of verification and validation of social science-based models"; after having read this, I was able to write "Whereas 'validation' in systems engineering means that a system has been accurately built according to its specifications, in the social sciences it generally means that measurements are measuring what they are supposed to be measuring (Hahn, 2013). In the exact sciences, validation means that a theory accurately predicts values which have yet to be determined experimentally".

After spending several hours looking for papers yesterday, I found it difficult to sleep, leading me to awake in the middle of the night and sit naked in the lounge, typing notes into the computer. I am considering using the following sentence as the thesis epigram: Inquissima haec bellorum condicio est: prospera omnes sibi indicant, aduersa uni imputantur, which, when translated into English approximates to "This is an unfair thing about war: victory is claimed by all, failure to one alone". This is the antecedent to the more well-known phrase, "Success has many fathers but failure is an orphan". In the light of day, this seems less appropriate.

The subject of failure was very much on my mind yesterday; by placing more weight on investigating planned enhancements which failed, it becomes clearer what needs to be done in order to succeed. I wrote a new section in my thesis called 'Validating the framework', in which I analysed a failed enhancement in my company according to the framework, pointing out which stages were missed. I alluded to this enhancement in my second post from a year ago of the framework.

[SO: 4837; 5, 28, 44
MPP: 1263; 1, 6, 7]

Friday, September 21, 2018

Vinyl log #30 - 21 September

DayMonthYearArtistTitle
21September1978Sandy DennyThe original
21September1978Peter HammillThe future now

There's a great deal of symbolism going on here: one record collects together the earliest recordings made by an artist who had recently died, whereas the other looks towards the future by an artist who is still with us in 2018.

These are the last records which I purchased in Britain, during the final weekend that I spent in London. I have a vague recollection of buying these in a record shop 'in town', although I don't remember why I was there. I probably had a few hours to kill before attending the party for the new emigrants.

I had attended several of these parties previously, the first being in 1972, but this was my last, and obviously I was one of those being honoured instead of doing the honouring. I have basically no recollection of the party itself, although I sense that the 'show' wasn't very good and didn't match the level of the previous extravanganzae in which I had participated.

I managed to slip these two records into one of my boxes before it was loaded into our container. As there was no record player available, I didn't get a chance to listen to these records until several months later when our container finally arrived and I could extract my record player. Between the two records, there is only one song worth remembering - Peter's "If I could".

Tuesday, September 18, 2018

Vinyl log #29 - 18 September

DayMonthYearArtistTitle
17September1977City BoyYoung men gone west

I spent several hours yesterday looking for the vinyl log blog which mentions the first time that I heard Martin Allcock, and in doing so, I remembered that there were a few months not covered in the series. So I have decided to resurrect the idea and write about records which I bought in the last four months of the year.

I ended vinyl log #16 from 24 June with the words "[I] would buy the next [record of City Boy] on the day of its release". It was a fine September Saturday morning when I walked down to Our Price records in Golders Green and bought the third City Boy record on the day of its release. I listened to it as much as I could that day, but my attention was tied up with something different - rehearsals for the Belstaff Bouncers record. Apparently we also went in the morning to the West End in order to buy a bass guitar.

I found this record much more enjoyable than its predecessor, being more musical and less influenced by guitar rock. I tried to bring its influence into our recording, although how exactly that worked eludes me now. Maybe I was looking for something more fluid, but I can't hear that at all.

There would be more City Boy records in the future.

Monday, September 17, 2018

Maartin Allcock, 1957-2018

I caught a whisper on the Internet last night which was confirmed this morning: Martin Allcock (aka Maaart - that's what a Manchester accent will do for you) had died. His website - which has yet to be updated at the time of writing - says the following:

Hello everyone. People were saying after my appearances at Cropredy last year that I was unwell. I was not. I'd lost weight because I had discovered the joy of exercise and was working out regularly. I was actually very fit and any illness was far beyond the horizon.

This year was meant to be my travel gap year. I was going to revisit friends and favourite places around the world before slowing down to enjoy the evening of my years. I made it as far as Madeira in January for some heat, a place I'd never considered before, but I loved it. Such a beautiful fragrant isle, truly a paradise. A week after my return, I developed jaundice, and had to go to hospital. Scans and tests revealed that there were more sinister things happening inside me. Now the race is run and the final chapter has begun, and my liver cancer is terminal. I am in absolutely no pain or discomfort at this time. For the time being, to look at, you wouldn't think there was much wrong with me. I am fully mobile, with energy, eating and sleeping well, and totally at peace with what the future holds. How long that future lasts is anyone's guess, but I probably won't make it to next summer. I shall play my final live performance at the Fairport Cropredy Convention this August, but I shall continue to make music while I draw breath. My main priority now is to finish the autobiography I began in January, and which now has an additional final chapter. I had no idea the deadline was so strict then. I will go with dignity, good humour and good grace. I just have to wait now for transport back to my own planet. I only came for the curry anyway.

So, do not be sad. I achieved everything I ever wanted to do from daydreaming in a council house in north Manchester to travelling the world with my heroes, playing to thousands and thousands of people, and getting paid for it. I have lived a lot, laughed a lot and loved a lot, and I shall leave this planet with eternal love and gratitude for my wife Jan, my three children Madeleine, Jered and Jane, and their mum Gill, and all of you who took any interest in this mad northerner. Thank you all so much. Be happy and shower the people you love with love. 

Maart
Still here for now ... 
Harlech, Cymru, June 2018

As I have written elsewhere,  I became aware of Maart when I bought the "Expletive Delighted" lp in the summer of 1988. He was the multi-instrumentalist in the revived Fairport Convention, and in my humble opinion he brought a great deal of musical intelligence to the band. He didn't write songs but did contribute labyrinthine instrumentals which seemed to change time signature almost every bar. Maart might not have added depth to the band's sound but he definitely added width as a proper lead guitarist and as a keyboard player. He introduced MIDI to Fairport.

He was the original promoted fanboy, having learned much music from Fairport in the 70s, then joining them in the 80s and leaving in the 90s. It was whispered at the time that he had become unreliable, giving in to the demon drink.

I bumped into Maart at the 1996 Cropredy festival; along with my recently met friend Chris, we had just entered the main field when we came across him. After greeting, I asked how old Maart was: he told me that he had been born in January 1957; I was quite pleased at this and crowed that finally I was older than someone in the band (I'm also older than his replacement, Chris Leslie). I was very disappointed when I learned the following year that he had left, as Chris - however nice he may be - lacked the Allcock touch.

Maart appears in the picture above with Yusuf Islam, aka Cat Stevens (which is also a nom de guerre). It's amazing how similar he looks to me in that picture, although he smiles much more than I do. 

Go gently into the long night, Maart. You were appreciated.

Tuesday, September 11, 2018

New Year holiday

Due to the timing of the Jewish New Year, we had a five day holiday this year (Friday through to Tuesday). I spent a few hours every day working on my doctoral submission, which to me was the most important use of my time. In perfect synchronicity, I received a notification this morning that an academic paper had been uploaded which matched my interests. In the flash of an eye, I downloaded it, read it and managed to incorporate a paragraph about this paper in my submission. I sent the submission to my supervisor today. I know that it's still not ready for submission to the research committee but it's definitely getting there.

Another activity on which I spent time was swimming. Equipped with my new mp3 player and increased stamina, I knocked off 32 lengths of Saturday. I thought that I would go swimming each day for a slightly shorter distance; 20 lengths on Sunday left me too tired to swim on Monday, but today I swam 24. I only woke up at 8:15 (very unusual for me) and the pool opened at 9am.

I also devoted a fair amount of time to that particularly Jewish trait, cooking for festivals. I cooked meat balls on Friday, salmon on Saturday, had Sunday off, and cooked chicken drumsticks last night. The fridge is full of left-over food.

Yesterday morning, I recorded vocals for my new song, "Say what you will". I should have spent more time singing the song, as the takes which I kept were very bassy, and there were also phrasing issues. I solved the phrasing issues by "getting out the razor blade" and editing the take which I had designated as the keeper; until the final mix I was still removing fractions of seconds of silence in order to align the words correctly. Mixing the song was problematic: I had great difficulty in getting a good tone for the vocals and then getting the vocals to be at the correct volume. I 'mastered' the song maybe twenty times, each time making small changes in the vocal volume in order to get the result which I wanted. I've left the song for the time being, but will probably return to it on Friday with fresh ears. 

But funnily enough, most of my spare time went to cricket: the five day holiday coincided with the five days of the last test match this summer, between England and India. I have, in fact, been following all the games this year, although I have no way of actually watching them; the Guardian had an over by over website which tells what happens for those unable to watch. Almost all of the matches have been intriguing, but some have finished in four days.


This test might easily be called a fairy tale match, for several reasons. Firstly, it was the last test match of Alastair Cook (pictured right), England's opening batsman; he announced before the game that he was laying down his bat after 12 years of test match cricket. He had a good first innings, but what made it a fairy tale was his second innings of 147 runs. Not unsurprisingly he has been named Man of the Match.

The second reason was England fast bowler James Anderson (pictured left above), who also broke a record by taking 564 Test wickets - more than any quick bowler in the history of Test cricket. Although he equalled the record early on in the second Indian innings, it seemed that he would not progress - until he took the final Indian wicket.

Aside from these records being broken, the game itself was fascinating. England made 332 in their first innings, due to Cook but also due to a ninth wicket stand of 98. India tried hard but their innings ended on 292, giving England a 40 run lead. The second English innings didn't start too well, but then Cook and captain Root combined for a 260 run third wicket stand! Then both Root and Cook went, almost in consecutive balls. I thought that England would declare at this stage, or at tea, which shortly followed, but they carried on for nearly another hour, amassing a total of 423 runs.

The timing of a declaration can be a tricky business: I thought that Root hadn't left enough time for England to bowl out India, but at first it seemed that Root had been vindicated, when India lost their first three wickets for only two runs! Their captain went first ball. But then a partnership formed which saw out yesterday evening and the morning session today. For a short period, it seemed that India might even amass the total needed to win, although a draw seemed a likelier option. But then the English bowlers struck again, and India finally succumbed for a total of 345; England won by 118 runs - with only 13 overs remaining.

What a game! It was fascinating reading about it, and it must have been unbelievably tense to have actually been there.

And after all that - back to work tomorrow, with a trip to Karmiel.

Sunday, September 09, 2018

Saturday, September 08, 2018

Ikigai - a reason for being

I saw the graphic which appears below in a financial blog which I receive, and I wondered where I stand with respect to this in terms of my occupations as ERP developer +, musician and cook.


I enjoy cooking and I think that I'm good at it, but I don't have much passion for it and it certainly is not my profession. The world does not need another cook! So that dimension to my life doesn't get very far. 

The same, unfortunately, can be said about my music: I love it, I think that I'm good at it and I have a passion for it. But the world does not need another musician and I'm certainly not being paid for it!

As a Priority developer/implementer/educator: I certainly enjoy my work (or at least, most aspects of it), I'm good at it, it's my profession, I get paid for it and the world definitely needs more Priority developers. I modestly think that I have achieved Ikigai for this activity. Is it a reason to get up in the morning (which is how Ikagai is considered in Okinawa, Japan)? It would be if I my job consisted of development and teaching; I don't enjoy some of the managerial aspects and I certainly don't appreciate the constant travelling of the past few months.

It's worthwhile following the link for Ikigai above as the web page to which it leads is very illuminating.

Sunday, September 02, 2018

Delphi community edition

Sometimes there are weeks without blogging, sometimes once a day for several days.

By chance, I happened to see a reference to 'Delphi Community Edition': it seems that Embarcadero (the company that now owns Delphi) has decided to make the current version (10.2) free to freelance developers, startups, students and non-profits. I didn't notice this yesterday, but the license is limited to one year. What happens after that? This announcement was made on July 18, so I was lucky to find this early on. An eight week course on Delphi CE will be starting on Monday, so again, the timing was in my favour.

The big advantages for me of having this new version of Delphi are creating unicode programs in Hebrew and being able to program on my laptop. I imagine that I will get used to the new version by converting one of my 'exam programs' to Delphi 10. At some stage I will have to evaluate the database components: can I stay with Firebird or do I have to move to another database manager?

The most worrying aspect is that the license is for one year. What happens in September 2019? Will I be able to renew the license? If not, then there is no point in developing any programs now because I won't be able to maintain them in the future.

I confess that I had problems creating a user or logging back on to the Embarcadero site; it seems that at one stage my user name was being stored with a space at the end. It took me quite some time to discover this, but now things seemed to have improved. I have asked about the one year license.

I do have a specific task to program which will work well in this version of Delphi: writing a command line program which receives as input an Excel file (xlsx) and outputs a tab delimited text file. I need this for Priority: there is a program which does this and is distributed with version 18.2, but I can't get it to work. Having my own tool will help enormously.