Saturday, July 27, 2019

10 years of post-graduate study

Ten years ago, I wrote "As of yesterday, I am a fully paid-up student in an MBA programme which is being run at Ramat Gan college. The degree is awarded by Heriot-Watt University, or the Edinburgh School of Business". I didn't go deeply into the reasons for starting that MBA degree, and from there, the doctorate, but today I can state them simply as
  • wanting to alleviate my intellectual 'itch'
  • wanting to see whether I was worth something in objective terms
I can see that both those reasons were fulfilled - one might say, even over-filled. I have learnt a great deal throughout these years although to be honest, I haven't seen myself applying much of the material. What I have learnt is an intellectual rigour which I certainly do apply frequently. 

One thing which I do regret is not making more contacts. As I wrote during the MBA years, everything was anonymous and I only got to know a few people by name. Most people use an MBA degree as a means of making contacts, but that wasn't the case here. On the other hand, I doubt whether there were many ERP managers in the programme.

Friday, July 26, 2019

Smart watch? I call it 'stupid watch'

I ordered via the Internet for about $5 this soi disant 'smart' watch  which arrived a few days ago. Since then I have been scratching my head in order to discover how to charge the internal battery: the instructions say to separate the strap from the watch itself, which will reveal a USB plug. I did this, but the revealed 'plug' seemed somewhat unusual and was also at a strange angle which made fitting it into a computer USB port problematic. Today I finally figured out how to charge the battery, and after an hour or two, I was finally able to turn the watch on.

Originally the watch showed the time 00:00, but at some stage it managed to synchronise itself, so it is now showing the correct time and date. The skimpy instructions said to download a specific app on one's smart phone then to bind the watch to the phone via Bluetooth. So far, so good. It might well be that this binding caused the watch's hour to synchronise.

Apart from that, there has been virtually no contact between the watch and the phone. At one stage I accessed the 'healthy menu' on the watch which supposedly showed my pulse, blood pressure and oxygenation level (and broadcast them to the phone) but I take those values with a grain of salt. These values have been transferred only once. I've just come back from a dog walk which the phone reports as about 2000 steps but the watch seems blissfully unaware of this. Via the 'sports menu' I activated the 'walking' option but it seems not to recognise my steps. 

I bought the watch primarily in order to measure something about my swimming. If the walking is any indication, then I'm not going to get any information about the swimming either. As this watch is a no-name brand, there's no specific place from which I can get more detailed information. Maybe it will be like my mp3 player which has a terrible user interface but works well when one understands (or figures out by serendipity) how to use it.

Presumably I had high expectations which have not been matched. What do you expect for $5?

Thursday, July 25, 2019

Running a procedure from a screen trigger

My experience of Priority version 18.2 is that whenever I do any screen programming such as adding a field to a form or debugging a trigger, other users get an ugly error message on their screens which they promptly send to me. As a result, I have stopped doing such programming during the day (although I often prepare triggers in Notepad so that I can copy them later on).

In an attempt to improve the situation, I wrote a minimal trigger which then calls an external procedure (this was hinted at in an earlier post). This technique allows me to make changes in the procedure without updating the screen and so is very useful.

Of course, these procedures work when I run them, but it transpires that users have problems with them - they are lacking the required permission to run the procedure. There is a simple solution to this which I have to remember: the procedure has to be added to a menu and the users have to have permission to this menu option.

Sunday, July 21, 2019

Saturday swimming

As opposed to the previous Saturday, yesterday I woke up at 6 am, feeling fresh and sharp. I took the dog for a 3.5 km walk, had breakfast, put chicken drumsticks and frozen vegetables in the slow cooker for lunch then got ready for swimming.

This time I swam 30 lengths, being prevented once again from swimming any more by the need to urinate. I looked this up on the Internet and here is an explanation in layman's terms.
  1. The cold water [in the pool] leaches the heat of the blood vessels that lie near the skin surface.
  2. The blood vessels constrict, hence there is decreased flow of blood in the body’s extremities in a bid to conserve heat.
  3. This prompts a quick increase in blood pressure.
  4. The body responds to this by compensating for the increased arterial blood pressure by relieving itself of liquid.
  5. The quickest and easiest way for your body to do this is to pee. 
I get out of the pool and make my way swiftly but in a dignified manner to the toilet in the changing rooms. On my return, I drink a bottle of water, thus countering the mild dehydration which occurs in the pool. I seem to be the only swimmer affected by this: maybe the others pee in the pool (although I doubt it).

Yesterday I tried something new (not connected with urination): instead of simply moving my arms as part of the swimming motions, I tried stretching them out and tensing the muscles. The idea was to have a little more exercise. I've noticed that this year I'm swimming with much less effort than before: in the past, I had to concentrate on matters like breathing properly but this year the swimming seems effortless. Despite this, my throat dries out: that's what happens when one breathes through the mouth all the time. This is unpleasant when I have to swallow, but then I don't swallow when I'm swimming, only when I have a brief rest after every ten lengths.

Saturday, July 20, 2019

More on Movie Maker

I remember reading a few years ago a question which asked which version of Movie Maker (MM) was recommended for Windows 7 (it might have been Windows 8 or even Windows 10) as MM no longer comes bundled with Windows. The answer was version 6.2, which was regarded as a compromise between interface, functionality and memory handling. 

After the great disk failure, I had to find to find the source to this version again. I ended up with version 6.0.6002.18005 which had the interface and functionality that I remembered along with poor memory handling. The problems which I had yesterday when working with the Greece video were exacerbated when I tried to 'publish' the movie, i.e. create a composite which can be viewed by the computer, on the television or even on a mobile phone. The program choked after completing about 81% of the video: the resulting file was watchable but lacked the last few minutes (Delphi). I tried to publish the file several times, but each time it crashed at the same spot. I don't know whether there was something wrong with the video stream at this point or whether the program was not capable of more; I don't really care what the reason is, only that I didn't have a complete film.

I tried to find a solution on the Internet; I came out empty handed regarding the version which I have but there was a suggestion to use a more modern version, so I downloaded something which turned out to be MM 2012. This is 'abandonware' which is problematic. The interface is completely different, using the ribbon as in Office programs from 2007 upwards. The program read in the project file and pointed out that some functionality might be lost. Otherwise it seemed that the program could deal with the Greece video: publishing created an mp4 file which was just under 2GB in size (about twice the size of the file from MM 6). I transferred the file to a memory stick, then connected the stick to the television in order to watch in style. Most of the video was ok, but some of the pictures had not been rotated - this is probably what the warning message was about.

This morning, I reloaded the project file (there is now a new one with a different format) and tried to use MM 2012 to correct the rotations. First of all, the program runs very smoothly, which is a great improvement on the earlier version. I was able to find the pictures and rotate them, then publish the project. There are several publishing options available, each resulting in a different sized file. The one I'm using requires about 43 MB/minute; there's one format which requires about 170 MB/minute! There is also a more compressed format (about 10 MB/minute): I'll try that and see what the output is like.

It is not clear how to use the interface of MM 2012 in order to create a video from scratch. I shall have to play with it a little in order to learn it. There appear to be very few effects and transitions, which some might view as a loss: the only effects that I use regularly are rotating pictures and cross-fading between shots, so this isn't a problem. So far, I've found nothing like the 'story board' view which MM 6 has and makes creating videos easy. Should I start a video with MM 6 then transfer to MM 2012? Maybe.

Friday, July 19, 2019

Making the Greece holiday video

The OP is on holiday (again) so I have time on Fridays for my personal projects: the major one is completion of the video of our Greek holiday. I had worked on this in the past as the Andros section was complete; over the past few days I have completed the Athens/Delphi section. I am making the video by means of the program Movie Maker (MM), which works well when a video is only a few minutes in length, but slows down tremendously when working with a long video. The Greece video is just short of an hour in length, so progress in the past few days has been tortuous.

I discovered a new technique with this program - fading the audio track. In one of my previous holiday versions, I created and edited the audio clips outside of MM, trying to ensure that they were of the correct length. Today I found out how to do this within MM: one has to split the audio at the place where the fade is to begin, then marks the split portion as 'fade out' (or in). This was necessary as the pieces of music didn't match well with the video.

For the first twenty plus minutes (the entire Andros section), I used traditional Greek music featuring the bouzouki. I had to search quite hard to find something which wasn't fast and rhythmic. The Mars Hill section naturally has a soundtrack of hang drum; the changing of the guard, Segway and Delphi sections have a soundtrack of traditional lyre music.

Thursday, July 18, 2019

Sending data to a procedure

Within Priority, there exists a documented method for sending data from one procedure or trigger to another procedure or report. I use this frequently when building procedures which by means of the scheduler will send reports by mail. The procedure uses a local copy of one of the 'stack' tables (normally STACK which has precisely one field - ELEMENT - which is of course the table's primary key). For example,
:GROUP = 'NO_CNC'; EXECUTE WINACTIV '-R', 'TEST_NOPROD_METAL', 'STACK', :$.STK, '-g', :GROUP;
What if one wants to send an order to be printed? In this example, an entire record from PORDERS (purchase orders) is copied into a linked table of purchase orders, which is then sent to the WINHTML program.
INSERT INTO PORDERS SELECT * FROM PORDERS O WHERE ORD = :PORD; :FNAME = STRCAT ('D:/PR_SQL/GLASS/', :PAR2, '.pdf'); EXECUTE WINHTML '-d', 'TECH_WWWSHOWPORDER', 'PORDERS', :TMPORDERS, '-pdf', :FNAME;
Sometimes I want to be 'clever' - whenever I hear someone say that, there exists the possibility of making an error. When I want to expand a part's bill of materials, I use a similar technique of entering data into a linked table of parts, but I can also add specific data into a field, data which does not exist in the 'real' table of parts, e.g.
INSERT INTO PART (PART, PARTNAME, FATQUANT) VALUES (:PART, :PNAME, :QUANT);
where :QUANT is a variable which receives its value during the procedure. The very laboured point which I am trying to make here is that at a minimum, one has to insert into the linked table the unique key of the record, along with the automatic key, if it exists. I forgot this the other day when I was working on the procedure to print a chained list of meetings: at first, I used only the automatic key without success. Only when I added the unique key did the called procedure do its job. Had I used the 'INSERT INTO TEST_PHMEETINGS SELECT * FROM TEST_PHMEETINGS A' technique then I wouldn't have had a problem.

Later that evening whilst showering (which is where I do all my heavy thinking), I realised that I could have used a linked STACK table and pass the automatic key. Yes ... and no. This became clear to me during the training session for the meetings when I wanted to print just the current meeting: there would have been no result had I used the STACK technique, for the screen passes a record of meetings to the procedure. Fortunately I had used the correct technique for the printing procedure so this wasn't a problem.

So again: at a minimum, one has to insert into the linked table the unique key of the record, along with the automatic key, if it exists. It might well be easier simply to insert a complete record.

Wednesday, July 17, 2019

Losing weight

Although I have hinted in the past few months that I have been losing weight, I haven't made a clear statement on the subject.

On 8 Feb 2019 I weighed 83.0 kg and on 15 March I weighed 82.8 kg: I thought that this was the heaviest I have ever been but checking my records, I see that on 4 Oct 2013 I apparently weighed 85 kg! Obviously I must have done some dieting for my weight went down to 78.5 kg by 31 May 2014.

This morning I weighed myself and apparently I now weigh only 77.9 kg which means that I have lost 5 kg since February. My BMI is now less than 30 which is very good news. I wonder how much more weight I can lose ... and not regain.

Over the past few weeks, I have been slowly extending the distance that I walk in the evenings (or early Friday and Saturday mornings): on Sunday and Tuesday I walked just over 4 km in around 40 minutes, a pace of 10 minutes/km or 6 km/hour. This is on roads, including going up and down a hill, so there is more effort required than walking on the level for the same distance. I would have walked on Monday as well, but at around 2:30 pm I was suddenly struck by a headache and felt out of focus all afternoon and evening. I don't know whether it was a migraine as paracetamol seemed sufficient to take away the pain. I didn't go swimming on Saturday either as I woke up late (for me - 7:15 am) and was dopey until about 10 am. Obviously the body needs some rest.

All this is very good. I don't get a "walker's high" (i.e. release of endorphins) which is a shame: by the time I get home, my shirt is wet with sweat and I am breathing heavily. I drink a few glasses of cold water (calorie free!) to help me get my breath back. The dog breathes heavily as well.

Monday, July 15, 2019

'Meetings' module in Priority - complicated!

My CEO asked me several years ago to develop a module in Priority in which would be recorded all the visits to our display rooms by outside visitors. I developed something but no one used it and so it lay forgotten. About a month ago, the CEO again made the request as we now have a receptionist who is 'prepared' to enter the relevant data, so I examined what I had developed previously. 

The first major problem was that my original development assumed that visitors would already have an entry in the Contacts table of Priority, linked to a customer. The CEO specifically requested that this module be able to record details of any visitor, not just those who already have a record. This required adding three fields to the Visits table: name, mobile number and email. I went a bit further with this: if the name already exists in the Contacts table only once, the mobile number, email and customer will be taken from the Contacts table and added to the Visitors table. If the name exists several times, the user can choose one of the customers to which the contact is connected. I added a mechanism to connect the visitor to a customer post factum, assuming that a suitable customer had been created.

My original development included the possibility of chaining visits: if the outcome of a visit is a continued visit then the module would automatically add a new visit with the same details as the original visit but taking place a week later. On the basis of this chaining, I developed a report which would give details of all the chained meetings, including free text. This included some code to find the 'head' of a chain and then continue from there.

Whilst discussing the module with the receptionist who is going to enter the data (this was not the training session), I realised that a meeting could take place with several outside visitors. How would this work? My solution was to add a details table in which extra visitors could be added; in order to simplify reports, the contact details in the main screen would be added to this details table. As a result, any report which wants to list all the participants need access the details table only.

But this addition ruined the chained meeting report: apart from the singular data of a meeting (person, place, time, etc), there are also multiple data - the free text. Adding more multiple data - the participants - caused the text to appear for every participant. This is what happens with many documents in Priority: an order has a header, order lines and order text. One expects that each will appear separately. This is achieved by creating what we call an HTML document, which is a complicated type of procedure.

Here the real problems started and it took me a while to figure out what to do. My intention was to build a list of visits then send this list to the procedure which would print them out. First I had to develop the HTML document which is far from simple. There were two main "gotchas" -
  • The procedure starts with an INPUT stage, where there is a parameter PAR linked to the field DOCNO. As there is no screen with the same name as the Visits table, one has to enter into the continuation sub-form the name of the screen. This is the same as in WWWCUSTCAMPAIGN.
  • In order to display the name of each sub-report in the final document (e.g. 'Participants'), one enters the HTML definitions sub-form of the the sub-report and records D in the field 'display title'.
After a bit of playing around, I managed to get the HTML document to display as I wanted it. The next step was to write a separate procedure which would build the chained list of visits. I cannibalised my original procedure, getting the key fields for each visit then inserting them into a linked table of visits. This took a few attempts to get right, but eventually I succeeded. 

So now I have what seems like an effortless way of printing chained visits. Tomorrow I will be giving the training session so there may be more changes on the way. One problem which I can foresee is that at the moment all the participants have to come from the same company, or not come from any company at all. It is conceivable that they will want to document a visit in which participate several people from several companies. This will probably mean adding a customer field to the details table and changing the 'find person' code.

Thursday, July 11, 2019

The difficult negotiator returns

Several years ago, whilst in the middle of my MBA course on negotiation, I quoted a chunk of the text as it describes beautifully someone with whom I have to deal with occasionally at work. There is not one person that I know who has a positive relationship with this person, except perhaps his wife who also works with us - a clear conflict of interests.

Today this person telephoned me and proceeded to rant for several minutes, claiming that his emails are the epitome of clarity and that there must be something wrong with me that I don't understand grade 1 Hebrew. At the end of the call, I was shaking like a leaf and my mouth had gone dry: a pure physiological reaction to speaking (or rather, listening: he doesn't let me say anything and ignores most of what I have to say anyway ) to this person. 

A few minutes after this, my manager called to see whether I was OK. She didn't know about the above phone call but presumably intuited that something like this would happen. If I were not such a dedicated worker, I would go to a doctor to try and get sick leave: this person is causing me psychological and physical damage and it's not something that I can control. She is going to tell this person not to telephone me ever and that every communication must be by email. Let's see how long that will last.

When I managed to calm down sufficiently, I looked at the email which I had difficulty in understanding. It turns out that there is a small but very significant spelling mistake which totally changes the meaning of a sentence. No wonder that I misunderstood.

I sent another email, explaining that I had implemented the changes that he wanted and that he would have to make a small change to a certain screen in order to see the change. The response: "I don't understand". This is not the first time that he has written thus.

This is someone who berates me for not understanding his unclear Hebrew, but when I write something (and many people have told me how clearly I write), he doesn't understand. So I spell it out in complete detail whilst trying very hard not to condescend or patronise. 

This kind of person always has to have the last word and is always right, even when he is demonstrably wrong. We had another exchange of emails a week or so ago which left me scratching my head - he had made a mistake in a part number which I didn't understand. When I pointed this out in excruciating detail, he finally admitted that he had made a mistake. People on my side considered making a poster from that email.

Sunday, July 07, 2019

Changes in the music room

Previous photographs of my music room have shown a semi acoustic bass guitar, similar to the one used by Paul McCartney in The Beatles. I have noticed over the months that there is a widening gap between the back the guitar and the body - the guitar is literally falling apart. Since there was no damage done to the guitar in the 30+ years in which it was stored under my bed, I can only conclude that hanging it on the wall is deleterious.

I took down the guitar and replaced it with my Athenian bouzouki, which looks incredibly small when hung. We have added to the wall another Greek instrument, the lyre, which I bought recently from ... China. The lyre comes with a case, a tuning key and instructions: I tried tuning the strings, but the second string from the left 'refuses' to tune: I may have to add a shim to the tuning peg if I seriously want to tune it. Probably not.



I have also noticed that the 'sustain' pedal of the piano seems to be continually 'on', even though I'm not touching it. We definitely have to get someone to tune the piano, and the pedal can be fixed at the same time.

Saturday, July 06, 2019

New chicken dish (at least, for me)

I generally pride myself on cooking efficiently, getting everything organised so that preparation time will be a minimum. I don't know what happened today, but I prepared a new dish in the worst possible order.

The dish is 'chicken portions with sweet potatoes': done properly, one slices sweet potatoes, puts them on the bottom of a baking dish, lays on top of them chicken portions and finally one pours over the chicken a marinade made of olive (or canola) oil, sweet chili sauce, soy sauce and fig sauce.

But no: first I made the marinade in the baking dish, then added the chicken portions and rolled them in the marinade. I covered the dish then placed it in the fridge for about two hours (during which I swam for an hour). After showering from the swimming, I cut an onion into strips, peeled the sweet potatoes and sliced them, and also sliced some pumpkin. I mixed the vegetables with some canola, then placed them in the baking dish. I had to move the chicken portions out of the way so that I could place the vegetables at the bottom and then lay the chicken portions on top. I covered the dish with aluminium foil then placed it in the oven for an hour at 200ºC; then I'll remove the foil and reduce the heat to 150ºC for about half an hour. In the mean time, I can make mashed potatoes.

If the dish is successful and I decide to cook it again (this is dependent somewhat on the quality of the sweet potatoes), then I'll try to prepare it in the correct order.


Above is the chicken after having been cooked. Everyone said that it was very tasty so I'll add this dish to the repertoire. I'll use pumpkin if there are no sweet potatoes, and probably make a little less marinade.

Monday, July 01, 2019

Road 38 update

I wrote just under two years ago about the route from my home to work. At first, I enjoyed the ride to and from work, but after a while I discovered a problem when riding to work: both the main exit from the kibbutz and the side exit (which I usually take) interface with road 38 via traffic lights. These are 'clever' traffic lights in that they check whether there is traffic waiting for a green light, then change appropriately. My motorbike does not trigger this check, so it often happens that I will arrive at the traffic lights then wait - sometimes three cycles, or maybe five minutes - until a lorry or another car will pull up next to me and force the lights to change.

I discovered a few days ago that the 'back road which meanders through areas set aside for new industrial areas' has been greatly improved in the past year: there are new roads in the area and all of them have good surfaces. So yesterday morning, I set off through the side exit to the kibbutz and continued on these back roads. I reckon that I saved about five minutes on the trip - this may not sound much, but the entire trip takes only about five minutes! - and the ride was much more pleasant that being on the main road and having to 'duke it out' with lorries, buses and cars. 

Unfortunately I haven't been able to repeat this trip as there have been electricity problems which have caused the electric gate on the side exit to malfunction. Returning home isn't a problem anyway as I don't have to wait for any traffic lights. I will be travelling tomorrow and the day after, but I am looking forward to driving on these new roads on Thursday - and especially Friday (less traffic on the roads means waiting longer at the traffic lights).