Of Scoop Shovels and Men

My grandfather was born before the turn of the 20th century, supposedly in Luxembourg (although that is not really important), and, by his own telling, was a child labourer in the mines somewhere in Europe during the Great War.

I seem to recall my grandfather saying, “that’s better than a shot in the ass with a scoop shovel“, or something to that effect – I don’t recall if he really did say it that way, or even if he really did say it – but I’ve taken that saying to heart, you may hear me say it often, heh heh.

I’m pretty sure that my grandfather knew what a shot in the ass with a scoop shovel felt like.  I had no desire to feel it myself, and that’s one of the primary things that drove me to get an education and work in the tech sector.

I am too puny, too weak, too whimpy to man up and be a miner!

That’s *Mister* IRIG to you, sir…

I’m a bit of a time-nut…  well, not quite as adamant as some of those on that list  ( Allen deviations?   Seriously?   Who would talk about Allen that way?!? ), but I am crazy about keeping time, accurate time (well to within the millisecond or so, anyway), and distributing time.

IRIG-B Decoder Box

Since my first encounter with IRIG-B in, oh, was that 1988 (?), doing an IRIG-B decoder box at Vansco, on contract for Manitoba Hydro, I’ve been fascinated by the IRIG-B time code.  Here’s the official specification, and an unofficial site by someone trying to sell you something.  Truth be told, the original MC68xx (might have been MC68701 because it had both accumulators and more than one TCAP pin) IRIG-B decoder firmware was written by Filipe Fernandes…   then I took it from there, as Filipe got gobbled up by all the other stuff going on at Vansco 🙂  That decoder box took in modulated IRIG-B only, put out a contact for when it was valid or invalid, and had an RS-232 interface for another device to tell it the IRIG-B time.  What fun!

Extensions

Then came the IEEE 1344 extensions, which defined a use for the extra IRIG-B undefined bits, giving more information that originally intended.  The original IRIG-B decoder box did not support these extensions, but our next product did.

APT Power Technologies had IRIG-B

Anyways, while tangled up in all the other matters during development of the APT relay, like running the APT division, hiring staff, arranging trade shows, and designing the entire data acquisition system, I designed the hardware and ported & upgraded the firmware for the on-board MC68711 IRIG-B decoder.  Oh yes, and designed the time coordination system between the multiple processors in the system, which one had the master time and when, etc.  Very interesting.  During that time, we added unmodulated IRIG-B input as well.  The unit cycles between searching for valid modulated IRIG-B and unmodulated IRIG-B.

Getting IRIG-B for Testing

The only way that we had to generate IRIG-B was with an Arbiter 1084 satellite clock.  It would put out a modulated IRIG-B stream, and an unmodulated IRIG-B stream (TTL level), and a 1 pulse-per-second (generally referred to as 1 PPS or just “PPS”) (also TTL level).  There was also a serial interface – reminiscent of what we did in the original IRIG-B decoder box – but we rarely used it.  It could change settings on the IRIG-B interface signal, but we generally had models with the front panel buttons and display, so we changed parameters using that.

Satellite clocks were expensive back then.  Well, industrial grade ones still are – but we needed IRIG-B signals for testing – in product development, but also in manufacturing test.  So, we had one central satellite clock, and distributed IRIG-B through the building using CAT5 twisted pair, with specially marked RJ45 drops at developer’s desks, in production, in customer support, etc.

Experimenting with various formats was a pain.  We had to get access to the satellite clock (it was in the locked server room), change the settings, then get other users’ acceptance of the change…  oops, did I get that out of sequence?  Ha ha, I did get that out of sequence several times.  It turned out that most locations only had a single drop, so if I changed from unmodulated to modulated when users weren’t expecting it, ugh it caused us some heartache.  To the point where production got two separate direct wire drops.  Then, we had loading issues, so production got its own clock.  It didn’t have to be accurate, just functional, so I’m not sure that it was even always satellite locked.

Rudimentary Test Recordings

Sometimes, we recorded IRIG-B signals and just played them back.  After all, modulated IRIG-B was developed in the 50s (or was it 60s?) and was intended to be recorded on multi-track audio recorders and strip chart recorders for the telemetry of various military tests (think nuclear weapons testing).  I experimented with cassette tape recorderings in the early days, then with MP3 players like my little Samsung YP-U3 that we used on our trip to England & Scotland in 2005.  It had mixed results.  Modulated worked quite well, but unmodulated was unreliable – since it’s not really audio, and requires DC offset to be maintained, or restored, or something.

Enter tg

Around 2005, I found out that the NTP project had a program called tg in its “utils” subdirectory.   tg stands for “Timecode Generator”, and it was designed to put out modulated simulated IRIG-B or WWV through the audio output port of a Sun workstation computer (I suspect that this was the original target for the NTP executable).  I could be wrong, maybe it was a different *NIX system, but anyway, it didn’t work on the LINUX that I was running at the time, probably Mandrake LINUX.  So, I hacked it to use OSS to make it run on my computer.  What fun!

tg isn’t good enough for really accurate time sync!  It’s just good enough to test the decoder, test edge cases, etc.

Deano went a-hacking

Of course, I couldn’t leave well enough alone, so I Weiten-ified it, as Michael Miller used to say.  I added a slew of options and tweaks.  I added optional unmodulated IRIG-B output, tweaked its time code generation, added IEEE 1344 extension support, added the ability to start at an arbitrary specified time & date, added the ability to insert and remove leap seconds on demand, and much more.  I found that the audio card output sample rate wasn’t quite good enough over long term testing to keep accurate time – the output sample rate of 8,000 samples per second and the sinewaves were precisely, you know, 8 samples or 80 samples (IRIG or WWV) per cycle, so if the output sample rate were off by 0.1%, the frequency was off by 0.1%, and this would accumulate to eventually cause time drift.

So, I arranged to insert or remove a single cycle (1 mSec or 10 mSec) at what I decided was an innocuous part of the time code – at least for my decoders, heh heh.  The program compared the time to the LINUX real-time clock (which often is sync’d to global standard using NTP, how cool is that), and if the amount became detectable, it would slip in an extra cycle, or remove an extra cycle per second, to get back in sync.

I also added options to create file output instead of audio, so could be played back later (through audio port, as before, or through an Arbitrary Waveform Generator).

The Fork Less Travelled

So anyways, when I was done, I was quite proud of my work, so I sent it back to the NTP project – specifically to Dr. David Mills, chief NTP guy , and author of the book on network time sync – and I’m sure he was absolutely horrified at what I had done to the program.  In retrospect, I didn’t read nor respect the code formatting guidelines, I hacked and slashed the original audio driver code, yikes.  Dr. Mills was very polite, but wouldn’t accept my changes to tg on top of tg itself, but instead called it tg2.  If you download NTP today, you will see util/tg2 in there, waiting to be hacked some more 🙂

Oh, and I have hacked it some more.    Source code in tarball with RCS tracking available online.  I am trying to be more respectful of code formatting guidelines, and maintaining backward compatibility these days.

tg2‘s Greatest Hits?

Around 2006, I re-mastered a Knoppix CD with tg2 built in, so I could demo all its features on a live CD.  At the time, Jason Fuith and I were operating our own business called Elecsys Solutions (and starving, at least financially, while doing it), and we wanted to maybe sell it to folks like Krish Narendra, who was now in charge of Product Development at ERLPhase, and still faced all the problems of satellite clocks, IRIG-B distribution etc.

The idea that we had wasn’t necessarily to sell the code, but to sell support of it – maybe install it on custom embedded hardware, or put in specific customization, etc.

tg2 + Knoppix = NAN

Although interesting, it didn’t sweep Krish off his feet, and even at a modest cost, he could not justify the expenditure.  Well, I gave him the CD anyway, and I don’t think it went any further.

After Krish left ERLPhase, I worked out of his office for a while in 2018, and I stumbled across that CD, heh heh.  I gave it to Mark Poole, as he is now ERLPhase’s IRIG-B guy – and he was quite interested.  Mark and I had a long chat, and my next “hobby” project was born!  More on that later.

Meanwhile, Back doing Real Work

I tinkered with tg2 from time to time, per above, but didn’t do much with it.  In the meantime, Elecsys was purchased by Norscan Instruments and I went to work there as Product Development Manager for 3-1/2 years.  They didn’t have any specific interest in IRIG-B, NTP, or tg2 – they needed to make some money to pay our wages, imagine that!

Then back to ERLPhase for a bit, a great year at GE Multilin in Markham, back in Winnipeg for a short time, and off to Phoenix to work for Alstom Grid Digital Instrument Transformers, or Alstom Grid DIT (now GE Grid Solutions DIT).

Optical IRIG

Now, at DIT, they used satellite clocks all right – Arbiter 1084s, in fact, among others (like Reason, now GE, ones).  There was one important difference though – DIT used the now-standard orange 62.5/125 multimode fibre with 820 nm pulsed light (using the Avago/Broadcom HFPL1414TZ transmitter).  On the Arbiter 1084, this option is called “option 20”, and the single ST output can be configured to output IRIG-B unmodulated (of course 🙂 ), IRIG-B modified manchester coding, or 1 PPS.  DIT used the 1 PPS, because its primary use was to synchronize sampling / output of its product – what’s now known in the industry as a “primary converter merging unit” – so that it can be synchronized in time to other merging units in the system.

We did switch our satellite clocks back and forth between 1 PPS and IRIG-B unmodulated, when we were synchronizing with Reason (now GE) merging units.  I was intrigued.

Dean Scores!  ( an Arbiter 1084C satellite clock )

I always wanted a satellite clock, but, as I said before, they are expensive.  I started trolling for one in late 2015.  They are still expensive – generally selling for US700 used, and up to US2100 if new in box.  I just happened to find one selling at BMI Surplus for something like US250, talked them down to US236 inc shipping and tax, and it was mine, yay!  As a bonus, it was the Arbiter 1084C model, which has the big seven segment LED display on the front, way cool 🙂

Satellite Clock
Arbiter 1084C Satellite Clock

It didn’t come with option 20, so I (carefully!) disassembled one of DIT’s 1084 clocks, made a parts list and took pictures, ordered what I needed, and installed them in my clock.  Now I have option 20, heh heh heh.

This came in handy for testing of the Reason merging unit with RogoFlex at PowerTech in Vancouver in August 2017, when I took my own 1084 clock to sync the systems together.

What to Do with a Satellite Clock?

My satellite clock didn’t come with a GPS antenna, so I got one through Amazon, of course, put that up with the many other antennas above my house, and got the clock working.

I had a lot of fun with the Arbiter 1084C and my oscilloscope – marvelling at the time code, watching the different signals, cross referencing the different formats (yes, I am that weird).

The clock was affected by a rollover bug.  I ordered new EPROMs for US$60 from Arbiter.  Easy peasy, replaced those, just like in my early days.

GPS Module Troubles

At one point, the clock stopped working properly.  Sad day!  The GPS module had died.  It seems that it’s writing something to the flash on the GPS module constantly, and it just wore out.

The module, an old Motorola OnCore unit, is of course obsolete.  There are non-drop-in replacements, but they aren’t binary compatible.  Arbiter will upgrade your unit – as I recall, it’s about US$300 – more than I paid for the satellite clock in the first place!  Now that was a very sad day.

I bought a SMT soldering/desoldering station, flash programmer and some spare flash parts, pulled the old flash off the board and rolled it out to disk… programmed the new part, but could not get it installed back on the board properly.  Seems as though I damaged the board removing the parts, so sad.

Fortunately, I found a (less) used GPS module of the exact same model, at some place in the far east.  I received it, plugged it in, and was back in business.

Oh, and the backup battery had of course died – being nickel-cadmium and probably 25 years old!  But, it had also corroded its connections badly.  I repaired the board and replaced the battery, and all is good again.   The battery is actually optional, probably should have just left it off.

Now What to do with a Satellite Clock?

The satellite clock sat running on my shelf for a year or so, before I got to thinking that I should use the IRIG-B signal output.  At first, I wanted to time sync a local computer and create my own (effectively) stratum 1 NTP time reference.  I don’t recall, I might have even had it working briefly, but what do I need a stratum 1 NTP time reference for?  That’s kind of a dead-end project, at least for me.

If You Can’t Generate ‘Em, Decode ‘Em?

Back to that conversation with Mark Poole, he mused that it would be nice to have a tool that could display the details of IRIG-B signals, so Customer Service, Applications and Product Development personnel, could trouble shoot issues, including various clocks that apparently give wrong or conflicting information, get the parity wrong, use reversed time zone-to-UTC offset etc.

So I started playing with NTP’s refclock_irig, not to sync my computer’s clock (in fact, I neutered it, so it would not), but to fully decode and display the signal.  Along the way, I added support for unmodulated IRIG-B as well – that was a challenge, since an audio input port is used to read the signal, and it does not maintain DC levels.  In fact, I did a lot of work on DC restoration à la NTSC TV signal recovery, back in the day.  That was fraught with peril, eventually causing a numerical overflow or a drifting DC baseline, so I eventually settled on a much simpler “look for fast shifts” solution, and that worked well.  I made the printout of the time code optional, using “fudge” tweak configuration bits already in the code, to dump output to the existing log, then tail -f in a separate console to display them.  I also generated some (huge) CSVs from time to time, both raw analog data (do you see what I see?) and various decode internals (do you decode what I decode?).  A lot of work to keep putting debug in, take it out, etc.  There are only 4 fudge tweak bits, and 3 of them are already in use… I pulled one back, so I could use 2, but still, too much hassle to tweak it inside the NTP framework.

Stand-Alone Decoder Program

Eventually, I undertook an effort to break my refclock_irig code away from NTP, creating read_irig.  This program stands alone, and supports too many options:

Read and decode modulated/unmodulated IRIG-B/modulated IRIG-E from audio signal, v0.43, 2019-05-08 dmw

RCS Info:
  Header: /home/dmw/src/ntp/refclock_irig/RCS/read_irig.c,v 1.57 2019/05/08 06:07:07 dmw Exp

Usage: read_irig [option]*

Options: -b                             Disable automatic input gain control
         -c <csv_output_filename>       Put out CSV file of bunch of internal values for portion of time
         -e <lines_between_headers>     Repeat full header every this many lines (default 20)
         -f <format_type>               Force only format:
                                             0 = Any (default)
                                             1 = Normal Modulated
                                             2 = Normal Unmodulated
                                             3 = Inverted Unmodulated
                                             4 = Normal or Inverted Unmodulated
         -g <initial_gain>              Initial gain setting (default 50), from 10 to 100
         -i <input_file>                Input file instead of audio input
         -j <csv_output_delay_samples>  Delay in samples for "-c" CSV output after startup (default 8000)
         -m                             Enable IRIG-B modulated bandpass filter
         -n                             Non-inverting input stream (normally input is inverted)
         -o <raw_signal_csv_out>        Put out CSV file of just raw input for as long as program runs
         -r <bitmap_of_outputs>         Bitmap of outputs:
                                             bit 0 = decoded data
                                             bit 1 = raw data
                                             bit 2 = do not repeat full header while in low verbosity
                                             bit 3 = 8 lines x 16 chars/line flat panel display output (disables all others)
                                             (default value shows raw and decoded data, and repeats full header periodically)
         -s <seconds_to_run>            Run this many seconds then exit (default forever), must be greater than 7
         -t <timeout_seconds>           Change timeout on successful decode, must be greater than 4.0 sec
         -v                             Increase verbosity of output
         -x                             Use 2nd stream (right? left?) instead of 1st
         -y                             Invert raw_signal_csv_out from "-o" option
         -z <threshold_amount>          Unmodulated edge detect threshold amount (default +/-0.20) in +/- amount of max

Notes: 1. Starting with "  Normal Unmodulated" format, default time out after about 64,000 samples
          (about 8.0 sec) without successful decode, then will cycle through "  Normal   Modulated",
          "  Normal Unmodulated", and "Inverted Unmodulated", with about 8.0 sec timeout on each format.
       2. Setting timeout on successful decode to less than about 8 sec may produce intermittent lock or
          failure to lock on modulated IRIG carrier.
       3. It can take a few seconds to lock onto a signal, so output may not be <seconds_to_run> frames.
       4. Modulated bandpass filter for IRIG-B tends to "shmoosh" the input signal and make it difficult
          to decode, and most IRIG-B signals are very clean, so it's not generally necessary.
       5. Default outputs include both raw and decoded data.  If both are turned off using "-r" option,
          decoded data is turned on alone.

This software licenced under the GPL, derived from refclock_irig, changes made 2018, 2019 by Dean Weiten
Contact: Dean Weiten, Winnipeg, MB, Canada, ph (204)-888-1334, E-mail dmw@weiten.com

The output, I think, is way cool:

#
#--------------------------------------------------------------------------------------------------||------------------------------------------------------------|
#         Inverted Unmodulated IRIG-B Raw (inverted audio) (Gain 100 giving -12.9 dB)              || Inverted Unmodulated IRIG-B (inv   , gain 100 -> -12.9 dB) |
# StrtBinSecs (SBS) |    Control Bits   |   Year  |    Day of Year    |  Hours  | Minutes |Seconds ||Day|   Date and Time    |SBS hex|Leap| DST |Offset|Qual|Par |
# ........ .........|......... .........|.... ....|       .. .... ....|  .. ....| ... ....|........||...|.... .. .. .. .. .. | . ....|....|.....|......|  ..|....|
#                   |                   |         |                   |         |         |        ||   |                    |       |    |     |      |    |    |
.001010000.000011001.000100000.010111000.000101001.000000001.001100000.000100001.001000011.00000101. 130 2019-05-10 11:23:05   0_A019 !lsp  DST  UTC-05   00 1 ok 
.001010000.000011010.000100000.010111000.000101001.000000001.001100000.000100001.001000011.00000110. 130 2019-05-10 11:23:06   0_A01A !lsp  DST  UTC-05   00 1 ok 
.001010000.000011011.000000000.010111000.000101001.000000001.001100000.000100001.001000011.00000111. 130 2019-05-10 11:23:07   0_A01B !lsp  DST  UTC-05   00 0 ok 
.001010000.000011100.000000000.010111000.000101001.000000001.001100000.000100001.001000011.00001000. 130 2019-05-10 11:23:08   0_A01C !lsp  DST  UTC-05   00 0 ok 
...

The raw and inverted decode sections can be enabled independently, and the program can auto-detect (slowly, mind you) modulated IRIG, unmodulated IRIG, and inverted unmodulated IRIG.

I’m still a sad case… I can sit and watch the codes go by, constantly.  It turns in a separate TTY on my computer, in the background, all the time.  Heh heh heh.

Source code in tarball with RCS tracking available online.

What Now?

In keeping with How Could They Possibly Improve Upon That?, you have to wonder where I could go from there.  Stay tuned! 🙂

How Could They Possibly Improve on That?

My father told me a story about my grandfather, Michael Weiten.  The story goes like this: my grandfather lived on a hard scrabble farm just south of Makinak, Manitoba, which just east of the boundary for Riding Mountain National Park.  Now, during the 30s and 40s, apparently there were plenty of wildlife in the area, especially up near the park.  Don’t tell anyone, but my grandfather and the other hard-scrabble settlers in the area, would hunt near, and sometimes in, the park (shhhhh!).

My grandfather and his buddy, whom I think was Archie, used to hunt together.  Archie had an old wobbly Ford, probably a Model “A”, but quite possibly a Model “T” – life was pretty hard in the area.  My grandfather quite likely, had no vehicle.

Did I mention it was hard scrabble?  He used his back to clear land, build railroad, and build road.  Ugh, I am tired, just thinking of it!

Anyway, Archie and my grandfather had been out hunting (probably poaching) one day, and they were grinding their way back in the old Ford, bouncing down the rutted, muddy rural road.  They are talking about cars, the amazing technology they contained, and how it made life so much better than walking, quicker and more convenient even than horseback.

Archie pats his trusty Ford, leans over to my grandfather and says:

Yeah, Mike, they can’t improve on this much, can they?

Bwa-ha-ha-ha!

For Those of You Who Need The Humour Explained…

Yes, that was probably 1935 or so.  The car was possibly a model “T”.  The roads in rural Manitoba up near Skane’s Crossing were probably mostly mud.   Maybe, just maybe, things have improved somewhat in the 80-plus years since then.

Waxing Philosophically for a Moment

I sometimes think of this story when I’m cruising in my DTS at 80 MPH down the Interstate, sipping my Diet Pepsi(tm) and listening to old Robert Johnson delta blues music.  Damn, grandfather would have appreciated the good life!  Because of his effort, I am able to live it.

Here’s to those who’ve gone before us.

Encrypting a Disk Partition with LUKS

I need to encrypt the contents of my Drobo – at least the Drobo partitions that are going to contain my personal data. The Drobo is too old to natively support encryption.

Article about hard disk partition encryption using LINUX Unified Key Setup (LUKS). Herein, I will copy portions of this article, and adjust it for my own purposes. Thanks to nixCraft for a great article, their source data is gratefully acknowledged.

Prerequisite: cryptsetup utility

To do LUKS, you need cryptsetup package. Use apt-get or apt command.

Configure LUKS partition

WARNING! The following command will remove all data on the partition that you are encrypting. You WILL lose all your information! So make sure you backup your data to an external source such as NAS or hard disk before typing any one of the following command.

In this example, I’m going to encrpt /dev/sdj1. Type the following command:
# cryptsetup -y -v luksFormat /dev/sdj1

Sample outputs:

WARNING!
========
This will overwrite data on /dev/sdj1 irrevocably.
 
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: 
Verify passphrase: 
Command successful.

This command initializes the volume, and sets an initial key or passphrase. Please note that the passphrase is not recoverable so do not forget it.

Switching to UUID Instead of Block Device Name

At this point, you can switch to using UUID reference, so the mapping won’t change if, say, your block devices show up in a different sequence.  To find the UUID for a given partition, do the following:

# lsblk -f 

Sample output:

NAME               FSTYPE      LABEL           UUID                                 MOUNTPOINT
...
sdj                                                                                 
└─sdj1             crypto_LUKS                 85af2419-bde3-49e7-939a-2f231532a8b2 
...

Now, wherever you would see “/dev/sdj1”, you put UUID=<the UUID number copied from above>.

Open the Crypto Block Device

Type the following command create a mapping:
# cryptsetup luksOpen /dev/sdj1 crypt_drobo2-5

Or, using UUID:
# cryptsetup luksOpen UUID=85af2419-bde3-49e7-939a-2f231532a8b2 crypt_drobo2-5

Sample outputs:

Enter passphrase for /dev/sdj1:

You can see a mapping name /dev/mapper/crypt_drobo2-5 after successful verification of the supplied key material which was created with luksFormat command extension:
# ls -l /dev/mapper/crypt_drobo2-5

Sample outputs:

lrwxrwxrwx 1 root root 7 Oct 19 19:37 /dev/mapper/crypt_drobo2-5 -> ../dm-0

You can use the following command to see the status for the mapping:
# cryptsetup -v status crypt_drobo2-5

Sample outputs:

/dev/mapper/crypt_drobo2-5 is active.
  type:    LUKS1
  cipher:  aes-cbc-essiv:sha256
  keysize: 256 bits
  device:  /dev/sdj1
  offset:  4096 sectors
  size:    419426304 sectors
  mode:    read/write
Command successful.

You can dump LUKS headers using the following command:
# cryptsetup luksDump /dev/sdj1

Or, using UUID:
# cryptsetup luksDump UUID=85af2419-bde3-49e7-939a-2f231532a8b2

Sample outputs:

LUKS header information for /dev/sdj1
 
Version:       	1
Cipher name:   	aes
Cipher mode:   	xts-plain64
Hash spec:     	sha256
Payload offset:	4096
MK bits:       	256
MK digest:     	21 07 68 54 77 96 11 34 f2 ec 17 e9 85 8a 12 c3 1f 3e cf 5f 
MK salt:       	8c a6 3d 8c e9 de 16 fb 07 fd 8e d3 72 d7 db 94 
               	7e e0 75 f9 e0 23 24 df 50 26 fb 92 f8 b5 dd 70 
MK iterations: 	222000
UUID:          	4dd563a9-5bff-4fea-b51d-b4124f7185d1
 
Key Slot 0: ENABLED
	Iterations:         	2245613
	Salt:               	05 a8 b4 a2 54 f7 c6 ee 52 db 60 b6 12 7f 2f 53 
	                      	3f 5d 2d 62 fb 5a b1 c3 52 da d5 5f 7b 2d 38 32 
	Key material offset:	8
	AF stripes:            	4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Optional: Wipe LUKS partition

First, you need to write zeros to /dev/mapper/crypt_drobo2-5 encrypted device. This will allocate block data with zeros. This ensures that outside world will see this as random data i.e. it protect against disclosure of usage patterns:
# dd if=/dev/zero of=/dev/mapper/crypt_drobo2-5

The dd command may take many hours to complete. I suggest that you use pv command to monitor the progress:
# pv -tpreb /dev/zero | dd of=/dev/mapper/crypt_drobo2-5 bs=128M

Sample outputs:

dd: error writing '/dev/mapper/crypt_drobo2-5': No space left on device                                                                                                            ]
 200GiB 0:16:47 [ 203MiB/s] [                      <=>                                                                                                                      ]
1600+1 records in
1599+1 records out
214746267648 bytes (215 GB, 200 GiB) copied, 1008.19 s, 213 MB/s

You can also pass the status=progress option to the dd command:
# dd if=/dev/zero of=/dev/mapper/crypt_drobo2-5 status=progress

Sample outputs:

2133934592 bytes (2.1 GB, 2.0 GiB) copied, 142 s, 15.0 MB/s

Create Filesystem on LUKS partition

Next, create a filesystem i.e. format filesystem, enter:
# mkfs.ext4 /dev/mapper/crypt_drobo2-5

Or, using UUID:
# mkfs.ext4 UUID=85af2419-bde3-49e7-939a-2f231532a8b2

Sample outputs:

mke2fs 1.42.13 (17-May-2015)
Creating filesystem with 52428288 4k blocks and 13107200 inodes
Filesystem UUID: 1c71b0f4-f95d-46d6-93e0-cbd19cb95edb
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Mounting Partition

To mount the new filesystem at /backup2, enter:
# mkdir /mnt/drobo2-5
# mount /dev/mapper/crypt_drobo2-5 /mnt/drobo2-5
# df -H
# cd /mnt/drobo2-5
# ls -l

Closing the Paritition

Type the following commands:
# umount /mnt/drobo2-5
# cryptsetup luksClose backup2

Re-Opening the Paritition

Type the following command:
# cryptsetup luksOpen /dev/sdj1 backup2
# mount /dev/mapper/crypt_drobo2-5 /mnt/drobo2-5
# df -H
# mount

Sample outputs:

Fig.01: Encrypted partition mounted on /mnt/drobo2-5
Fig.01: Encrypted partition mounted on /mnt/drobo2-5

See shell script wrapper that opens LUKS partition and sets up a mapping for nas devices.

Changing Passphrase (password) on the Partition

Type the following command
### see key slots, max -8 i.e. max 8 passwords can be setup for each device ####
# cryptsetup luksDump /dev/sdj1
# cryptsetup luksAddKey /dev/sdj1

Enter any passphrase: 
Enter new passphrase for key slot: 
Verify passphrase: 

Remove or delete the old password:
# cryptsetup luksRemoveKey /dev/sdj1
Please note that you need to enter the old password / passphrase.

Using the Encrypted Partition

This article outlines how to run fsck on an encrypted partition.

Check out the man page for cypttab. It’s a bit cryptic, heh heh.

A shell script for automating the mount/unmount process.

Here’s some further information on configuration and management of encrypted drives. And, a Red Hat Tutorial that gives step-by-step setup and use.

exFAT? Who are you calling exFAT?

Yeah, in the machinations around my phones and breaking them, I wanted to put a few files onto the microSD card from the phone. I put it into an adapter, put the adapter into my computer, and… filesystem exFAT not recognized?!? Hmm.

I guess when I loaded up Ubuntu 18.04 onto this computer, I didn’t put the exFAT utilities onto it.

It turns out that it’s as simple as:
sudo su -
apt-get update
apt-get install exfat-utils

Of course, you need to enter the root password when you “sudo su”.

Centre Button BullSomething on LINUX

It has been a minor annoyance for as long as I can remember. When using LINUX, or more specifically X-Windows on LINUX, clicking the mouse centre button would perform a paste wherever the cursor is right now. When you are using the scroll-wheel to scroll through a document, often the centre button has a hair-trigger and will perform a click (and therefore a paste) without even realizing it – and, boom! You have random (well, arbitrary) text in the middle of your document. Fortunately, if it’s source code, the compile or execution will almost always fail… so you can fix it. But, when it’s a word processing document… ugh!
Continue reading “Centre Button BullSomething on LINUX”

S5 Flip Flap Flop

When we last left our hero (me? ha ha), he had installed the latest LineageOS installed on my second T-Mobile Samsung S5 (actually my original from T-Mobile). I like it! It’s not quite as pretty as the stock O/S (OK OK, stock ROM), but it works well, more quickly, and, most importantly (related to the quickness), uses much, much less flash!

I had to (re-re-) install all of my programs, of course, and that was a pain. Worse, several of my “go to” programs are now “abandonware”. Sigh. Notably, “Profiles”, which gave me one-touch change of settings – I used this to turn off BlueTooth, dim display, and, in earlier phones, change volumes etc. However, in the S5, even with the T-Mobile ROM, I had to use “do not disturb” to prevent overnight E-mail & text notifications.

Anyway, so now the phone works… mostly. Still adding programs…

My use case is to leave the phone plugged in, face down, on my dresser overnight. Often my tablet is sitting there as well, plugged in, because I like to read the news, devotions, etc., before going to sleep. Well, what do you know, the tablet is large and thin, so I put it on the dresser first, then the phone on top, face down.

The past two mornings, the phone is working – I can see notifications in my web-based “WhatsApp” and text messages on “PushBullet” – but it seems to be locked up! The clock is present on a blue background in the top half of the screen, but the bottom half of the screen is black 🙁 It’s doing the haptic feedback on button presses (including the “soft” buttons), but won’t change screens for anything. If you plug it into the charger, the blue background changes to yellow, whoo hoo. My only recourse was to open it up, remove the battery, and reboot the phone that way.

Well, it turns out that this is a known problem with the Galaxy S5 – well, actually, a feature! Ugh. Apparently, there are some cases out there (or “covers” as they are sometimes called) that have a magnet in them, so that the S5 knows when the face is closed. It’s called a “flip flap”. Well, when the face is closed for a period of time, it automatically goes into “flipflap” mode, which shows the clock on the solid background, per above, through a lightly tinted upper window in the cover.

There were posts on this issue from a year ago – see https://www.reddit.com/r/LineageOS/comments/6yzpn1/how_to_disable_flip_flap_klte/ . Apparently there was a setting to disable this so-called “feature” (does my disdain show here?), but it would keep re-enabling itself “automagically”, as one post put it. You have to use “debloat” under “Magisk”. Now, here is a journey down a rabbit hole.

Installing Terminal Emulator
Go to the Google Play store and install Terminal Emulator from Jack Palevich. It will eventually need root privileges, but that should be automatic. Just remember that.

Installing Magisk
There are two parts of Magisk – the actual program, which you download as a ZIP archive and install in TWRP Recovery, and the manager program, which is an Android program but is no longer in the Google Play store, so you have to download the APK and sideload it. Here is the installation guide. To perform the sideload, you download the APK, find it in your file explorer and click on it to “open” it. I use ES Explorer. This will ask if you want to sideload this ultra-dangerous application, to which you reply “yes”, and there you have it!

Optionally Check for Root
The next part requires root access, so you can check for root with Root Checker from joeykrim. This may fail the first time, because Magisk has to wake up and ask to give it root privileges, which, if you want it to detect root privileges, you will say “yes” to. Ha ha.

Installing Debloater
Unfortunately, you are just getting started. You may have to reboot to get Magisk Manager fully loaded. Open Magisk Manager, click the upper left menu, go to Modules. It will be empty. OK then, click the upper left menu, go to Downloads. Install Bash for Android. Do not install Debloater from here, unless you are on Magisk 19 or later – this is a bug in my opinion. Instead, that thread leads to a scary filesharing site to get old version. Now go back to Modules, click the bottom middle plus, navigate and select the downloaded older debloat ZIP archive, and it will install.

Now, reboot.

Doing the Deed in Terminal Emulator
Once I got Terminal Emulator running, I just:

  • su – up to superuser mode
  • debloat – if it says “module not found” then you have too new of debloat, go to this thread which leads to a scary filesharing site to get old version
  • 2 System Priv-Apps – which will list available applications to be removed / masked by debloat
  • 25 – FlipFlap program!
  • exit – to get out of “su” mode
  • exit – to exit the terminal emulator
  • – now, reboot the phone to apply changes
  • Load Terminal Emulator again, do “su”, “debloat”, “2 System Priv-Apps” again, and “FlipFlap” is no longer in the list, yay!

    Blank Terminal Emulator Screen
    I goofed and uninstalled Bash for Android instead of the too-new version of Debloater. ( hint: there’s no double check, it just does it – so be careful! )

    After I reinstalled Bash for Android, Terminal Emulator just gave a blank screen! I’m not sure if it was related. Maybe I hit the “X” to close a window, rather than typing “exit”.

    Anyway, it did come in after some fiddling. Not sure what I did. I waited a long time, I went to “windows” and tried to add one (killed the program?), and I tried to add a window using the big plus on the screen. I uninstalled and reinstalled Terminal Emulator.

    If this does happen, be patient. Click things, try things, it will eventually work.

    Better, be careful when clicking things in Magisk.

    Shall see if this fixes the problem. Maybe will find out tomorrow morning 🙂

    Samsung Galaxy S5 needs a boost

    Well, the Galaxy S5 was a nice phone when I bought it from T-Mobile in 2015 in Phoenix. Not a fire breather, by any stretch, but nice. Unfortunately, it has become a dog. I’m not sure that it’s the phone’s fault – with Samsung and T-Mobile putting all that “crapware” on it, taking way too much memory all the time. In addition to all that, T-Mobile is responsible for the base Android firmware updates, even though I’ve moved back to Canada and put it on Bell-MTS… and they haven’t updated it in over 18 months. They probably will never update it again.

    So, now I’m thinking that I’ll have to do what I did on my trusty old Motorola Atrix phone when it started to dog out some 6 years ago – root it and put Cyanogenmod, or equivalent, on it. No crapware (nothing that you can’t delete anyway), only what you want, and up-to-date Android firmware. Cyanogenmod has morphed into Lineage OS. I don’t recall what the reason for the morph was, but I think it was that the Cyanogen corporation that was formed to maintain & support the O/S, got carried away and did some dumb things (including trying to make their own phone and compete with Apple/Samsung/LG etc.). Anyway, it’s Lineage OS now.

    I actually have two identical phones, so I can modify one and not take the hit when I goof up. So I’m actually changing my original T-Mobile S5 phone, and my “newer” phone still has the original firmware. Ugh, it’s so slow that I can barely use it.

    The T-Mobile Galaxy S5 is model SM-G900T. Lineage calls it “klte” and firmware for it is at this location on the LineageOS website. Note that it’s not an ARM64 but just ARM architecture.

    You first need to root the phone. Go to this article in Tom’s Guide which will show you how to root your phone with a program called Odin. You should be able to boot the original Android firmware, but it will moan and groan about being rooted. Good!

    Next you install TeamWin Recovery Program “TWRP”, which is a middle stage loader that allows you to change OSes (“ROMs” in Android parlance). To install TWRP, you use Odin again. You power down your phone, power up with a specific key combination to get into “recovery”, and then blast the TWRP image onto the phone. See this TWRP page to get the image, which right now is version twrp-3.2.3-0-klte.img.tar .

    The instructions for Lineage OS installation , but ignore the part about “heimdall”, that didn’t work for me at all. You did all that with Odin. Skip down and use ADB to “sideload” Lineage, Google Apps “GApps”, and LineageOS SU Addon. If you don’t have ADB, here it is. The Lineage image as of today, is lineage-16.0-20190324-nightly-klte-signed.zip . There are links in the instructions over to Google Apps, present version is 20190325. There are several sizes of download, check out the chart of the different sizes. I used “mini”. Then also install the optional LineageOS SU Addon. Do not reboot until all three packages are installed.

    It seemed to take forever for the phone to boot, the first time after installing Lineage, GApps and the SU Addon – but it did boot. Have patience.

    Once you log in to your Google account, you can restore your applications, etc. In may case, I “restored” it from what was saved by the other phone (grin). I had to re-delete some of the crapware, but that’s a small price to pay.

    April, May, and June: Travelling Man!

    You know what, I don’t travel nearly as much as my President & CEO-ish friend Jim Caldwell does, but I managed to rack up a few klicks this spring.

    28 April to 03 May: Winnipeg, Manitoba

    I zipped back to Winnipeg for a few days to be there for my mom’s 76th birthday.  James and his sons were there the week before, so I didn’t have to fight for a bed 🙂

    Happy 76th, Mom – Flowers from Me & Eric, Orchids from James

    I got a chance to visit with Eric and James Douglas, and a brief chat with Sandy.

    It wasn’t all fun & games – mom had a serious medical scare while I was there, but it turned out to be a minor issue.  Still, it was good that I was there to oversee the excitement, direct traffic, and keep everyone up to date!

    21 May to 04 June: Florianopolis Brazil

    We have a sister GE/Alstom division Reason Technologia (RTB) in Florianopolis, Brazil – the south of Brazil – where it is winter right now.  They design and manufacture complementary equipment to ours here in Phoenix.  We are undertaking a joint effort… of course I can’t say much about the details!  But I needed to get to Florianopolis to get things kicked off.  In mid April, the call came to go visit.  Well what do you know, I need a travel visa.  Well the visa takes 2 to 4 weeks, and I already have a trip to Winnipeg scheduled for 06 to 18 June (Men’s Camp and other things), so time is tight.

    I couldn’t give up my passport until returning from Winnipeg on 03 May, so was pretty tight for a trip.  With the passport out for Visa on 04 May, it came back 19 May (two weeks plus overnight transit), and I had planned on that, so was ready for travel to Brazil, plane ticket and all.  So… the odyssey begins!

    21/22 May: Getting There

    Ugh.  Well you know that I don’t sleep on planes, mostly because of my sleep apnea and the need for the CPAP machine.  Well plus, it’s not all that comfortable in cattle class anyway.  So with the 4 hour time difference, a layover in Atlanta and in Sao Paulo, I left Phoenix on Saturday morning and arrived in Florianopolis on Sunday morning.  Ugh.

    So.  Do not assume that anybody in an international airport will speak English.  Really.  Yikes.  Sao Paulo was confusing & difficult.  I had a couple of hours, but it was crazy.  I think I missed the luggage re-check belt after customs or something.  Then I had to try to get my luggage onto the next flight, which, although booked through Delta and having a Delta code share, was actually a Brazilian airline, GOL… which is fine, except being fully Brazilian, very few people speak English.  Finally I found the domestic bag drop line and got to the front… and found a woman who spoke a bit of English… and she cleared the way for me to the bag check station and got the bag on its way.  Then, back to security, racing to the gate… just in time for the main call for the cabin… poor young ladies sitting beside me, I was sweating profusely from the stress and dashing through the terminal.  Oh well, we survived!

    Celso, my host colleague at Reason, was leaving Sunday morning for a quick trip to Stafford, England, to meet with other colleagues about another aspect of the same project.  He was boarding his plane in Florianopolis while I was getting off of mine.  Fortunately, he left me in good hands – Leo, taxi driver who does most of the driving for Reason services, who speaks pretty good English.  Hotel.  Sleep.  Aaaah.

    22 May: Where’s the Beef?  Everywhere!  (and Beer too)

    In Celso’s absence, a couple of my other Reason colleagues picked me up later from the hotel and we went for burgers.  Bleh, you say – burgers.  No, no – these are serious burgers.  Amazing.  Well crafted, gourmet burgers, quite good.  Then you match them up with beer…

    Where’s the beef?  Yup, here it is.  Beer, too!

    23/24 May: Freezing? 

    It turns out that I was not prepared for the weather.  It’s beautiful, because Florianopolis is an island “almost” attached to the mainland, and jutting into the ocean – but it’s humid, so when it’s +15C overnight, it feels quite chilly.   They don’t have heat in the hotel, because, well, if it never dips below +10C, why would you ever need heat?

    The first day at the office, on Monday, I nearly froze my tail off.  On Tuesday, I wore my light jacket everywhere, but felt kind of silly.  So I had Leo take me to a large mall to buy a sweater.

    They treated me very well at Reason.  And, kept me busy!  Between meeting people, learning about their roles, and seeing how their systems & processes work, I barely had time to worry about anything.

    Leo drove me everywhere, but I wanted to wander around a bit too.

    24 May: At the Mall!  Valentine’s Day coming in June?

    Yes it was a beautiful evening, Leo took me to the Beira Mar shopping centre.  Something like eight stories!  But, only 4 levels of stores – the rest is access to parking on all sides.  What’s with all the hearts???   Valentine’s Day in June.  Well it’s not the same Valentine’s Day as in North America, subtly different, but it’s in June!

    Top Level of Eight
    Valentine’s Day coming up in June!?!
    Nighttime view of road along waterfront, from top of Beira Mar shopping centre

    The Credit Card Blues

    So we found a sweater that fit me – well, actually two sweaters – and they were a good price – but my US credit card was declined!  Both of my US credit cards were declined!  Argh!  I had to put it on my company Amex.  Hope they don’t invoke the “zero tolerance for personal expenses” thing!

    One of my US cards is a chip card but I have no PIN, so it was rejected flat out.  US banks, in all their wisdom, are using chip & signature instead of the chip & PIN like the rest of the world.  The other US card was rejected after a delay.  It turns out that they flagged it as a suspicious transaction, in spite of me having called them before going to Brazil.  Ugh.

    Oh well, the sweaters are nice, and no, there never was a problem with the expense thing.  The card is in my name, and I just paid the US$40 myself.  I never had any intention of expenses hanky panky.

    25 May: Checking out the Manufacturing Plant

    Leo took me and two of my Reason colleagues to visit the Reason assembly plant, and their local PCB assembly contract manufacturer.  Very cool.  Who wouldn’t love those zoot suits?

    Cute Disposable Clothes for Touring the Plant
    Very Nice Factory Floor at Reason manufacturing plant
    Electronics PCBA CM – Produza
    Beautiful Produza Production Floor

    25 May: Surprise, it’s Carlos!

    Sandy had mentioned that their family had hosted a young man from Florianopolis some years ago, and asked that I let her know if I met him.  Ha ha ha, millions of people, what’s the likelihood of that?

    It turns out, pretty likely.   His workstation was right behind me the whole time!  On our ride out to the manufacturing plant, he asked where I was from.  When I said “Winnipeg”, he said, “Oh, I spent a year near there – Carman – do you know where that is?”   AAAAAH!  Yes I know where that is!

    I keep buying lottery tickets, but I can’t beat those odds.

    OMG Not going to Starve in Florianopolis!

    Yes there were fantastic meals.  Lots of meat!  When Lucas says meat, he means meat – beef – and lots of it!  Here a re a few selected meals – OK not all beef, but always plenty to eat.

    26 May: Touring the Island with Lucas and Jamilly

    Although I missed the Memorial Day holiday in the USA, the first Thursday in Florianopolis was the Corpus Christi holiday.  My colleague Lucas and his girlfriend Jamilly took me on a day-long tour of the north half of the island.  It is so beautiful!  Although, being winter in the southern hemisphere, it was a little chilly on the beach.  I’ve been advised that I have to return in January, when it’s summer, and then I can see how beautiful the women on the beaches – oops, how beautiful the beaches themselves – really are 🙂

    28 May: Not-so-successful Cycling Trip (or, Carlos Tries to Kill Me)

    Ha ha, after talking to Carlos about the wonders of cycling, he invited me to cycle with him and his friends, 30 km to the south of the island and back, on Saturday morning.  Well, it was threatening rain (hmm, it was always threatening rain while I was there) so he decided we’d take the shorter route to the north.  Hmm, I just went through there with Lucas and Jamilly yesterday – doesn’t that involve climbing up through a high mountain pass?  No worries, just take it easy!

    I don’t look too bad – but looks can be deceiving!

    Well, apparently I do not know how to take it easy.  I did not feel good by the time I reached the top.  I had to rest, then felt rotten, then worse, then finally improved.  It was too much – the heat, humidity, the climb – and not taking it easy.  So Carlos’s dad came, picked me up, and took me back to my hotel.  So sad.  I had a nap then walked a couple of km over to the shopping centre, where I bought some DP and some wine, yay 🙂

    29 May: A Lovely Dinner with Celso at Sergio’s Home

     The engineering manager, Sergio, invited my colleague Celso and I to dinner with him and his wife.  We had a lovely time… what a meal!  And, what a house!  These photos do not do it justice.  Wine, food, yum!

    31 May: I Play the Designated Drinker / Garage Band Groupie!

    It turns out that Lucas and a few of the other staff at Reason set up their own rock band, and they practice most Tuesday evenings in the “Garage Band Room” in a condominium that one of their relatives lives in.  How cool!  Lucas claims they don’t play so well, but after a couple of beers, I cannot tell.  Still trying to get them on track with BTO’s “Takin’ Care of Business”.  They say they will play it next time I am there, ha ha!

    The band member selection goes like this: there’s a guy who plays great keyboards, so they make him play the drums.  There’s a guy who plays guitar, so they make him play the keyboards.  And so it goes.  Doesn’t matter, these guys are just getting together and having great fun.

    Business?  What Business?

    Oh yes, and I did attend a few business meetings while I was there.

    Anybody who complains about my antennas, I’ll show them this picture.

    I happened to notice, out of the top floor conference room window, that Reason has a few antennas on their roof.  Something like my roof at home, ha ha. 

    03/04 June: Travel Back

    The return wasn’t quite as tense as the way out.  Just as few people spoke English at the Sao Paulo airport, and I almost lost my exit visa (dropped it on floor at bag check and someone handed it back to me) – that would have meant going to a police station and getting a new one!  But I didn’t lose it, got to the gate “just” in time but the crew was late because of Sao Paulo traffic in the rain 🙂

    Once we landed in Atlanta, well, it all OK, I could understand the language.  Although, was a big delay in customs because I have to go in the “all others” line on account of my work visa – not the “US and Canadian Passports” line – made that mistake once – just once.  I was behind a lot of people who spoke only Portuguese.  They kept calling for Spanish interpreters at the wickets – joke’s on them, Spanish is not Portuguese.

    Some poor folks didn’t understand the English directions, and forgot to dump their big items back onto the checked luggage conveyor – tried to get through the bag check line with big items – don’t know what happened, but staff tried to tell them again and again, didn’t seem to help.  Sigh.  I was tired but OK.

    I got upgraded to first class on the last segment of the trip.  It was nice, because ugh was I tired.  That was a nice touch.

    I got home and thought I would sleep for a week, but I didn’t – only for about 14 hours.  Then off to church, the next day at work, and after that, off to Winnipeg!

    06 June to 18 June: Winnipeg Manitoba

    Yes, it was time for my annual June trek back to Winnipeg for Men’s Camp and other fun things.

    I had to renew my passport, and get a new 3 year TN work visa.

    While getting back to the car from picking up my passport, I spotted this scene that felt like a throwback – hidden in downtown Winnipeg!

    10 & 11 June: Men’s Camp 2016 – the Last One

    Yes, attendance has been dwindling.  We’ve lost so many of our older attendees who pass on each year, more in ill health and can’t get away for the weekend, and others still who have such hectic lives that they can’t make it out.  So this year, we did it – we closed down Riding Mountain Conference of Churchmen.  Sigh.  51 years.  It was a good topic, very much enjoyed.  But that’s it.

    Attendees at the 51st and Last Men’s Camp

    James Douglas, in full flight!

    Tim Olfrey sharing a devotion

    Harvey Douglas, chair of last Men’s Camp

    Speaker Presentation

    Path to the Lakeshore… kind of like life… can’t see clear path, but that’s OK!

    Clear Lake

    09 June: Getting the Call to Go to France

    I had a suspicion that I might have to go to France, or maybe do some tech support from Winnipeg, so as a minimum, I brought my office desktop computer.  Good thing.  Within a few days of arrival, I was asked to go to France immediately to work on RTE Poste Intelligent installation.

    My passport was out for renewal, so I couldn’t go right away, at least until I got it back.  That would have been the 2nd Tuesday.  I had a lot of arrangements to make, that would have taken up my Wednesday.  I couldn’t fly until Thursday… that means I would arrive on Friday afternoon… just in time to take the weekend off (no working in France on Saturday).

    I took no clothes with me to Winnipeg, as I keep clothes at my mother’s place.  I just had a little carry-on that I used to carry the computer, my CPAP machine, tablet and a few other things.  I had to go buy a suitcase in Winnipeg and take almost all of the clothes from my mother’s.  Hmm, the two pairs of pants that were there were rather ratty, so I bought two new pairs of pants too.

    I also had to buy power adapters (just in case mine from Phoenix didn’t arrive – still need to run my CPAP), and snagged magnifying glasses and safety glasses…

    So, I finished out my week, went through the Emerson/Pembina border crossing on Friday afternoon and got my TN visa, and stayed with Eric in Grand Forks overnight.  That let us go to the races!

    17 June: World of Outlaws

    I booked advance seats, so we got a prime spot, up high, down to the west end.  Not perfect, mind you – that would be further to the west, with the sun setting behind us – but they were pretty good.  Lots off thrills, spills, and yellow flags!  We had fun.

    18 June: Flying Away

    On Saturday, instead of driving further down the road to Fargo and flying back to Mesa, I left directly out of Grand Forks, through Minneapolis-St. Paul, and off to France.  Yikes.

    19 June to 24 June: Rouen France

    Taxi!  Taxi!

    Mehamed told me that there was no way that I’d get a rented car in France, since the Euro Cup football (what we call soccer) tournament was on.  Not a single rented car in France, wow.  Not that I wanted to drive in France – I don’t know the region, don’t know French all that well (not well enough to make decisions at 110 km/hr), and the road signs are different – not a great recipe for success.  So, Mehamed arranged a taxi & driver for me.  But, he said to bring ca$h with me.  Yup, 1000 € in cash!  Ouch.

    Money Changing and Stupid Credit Card Tricks!

    So 1000 € is a lot of money – something like CA1500 or more.  Where am I going to get that?  Well, there’s a big money changing place in downtown Winnipeg, they can easily do it.  I went downtown, paid for parking, waltzed in, and asked for 1000 €.  No problem.   I have CA1500 in cash?  Heck no!  Well then, off to the airport with you.  Sigh.

    At the airport, I tried to use my corporate American Express.  Nope.  My personal USA Visa.  Nope.  So I did a cash advance on my personal Canadian Visa.  Ouch.  Oh well, I’ll expense it later.

    When I got to France, I found out that American credit cards just don’t work well there.  I learned my lesson last year in France, and recently in Brazil, and took my Canadian Visa with me, just in case.  I would guess that 3/4 of the time, the American Express card was flatly turned down.  The rest of the time, only say 1/10 of the time did either one of my USA Visa cards work.  Most of the time, I had to use cash, or put it on my Canadian Visa.  My Canadian debit card worked like a champ too, then again, I don’t have much in that account to draw on… so Visa it was!

    A Personal Driver with Car

    It turned out that Mehamed arranged for a private car with driver, for me personally.  He picked me up at the airport and drove me directly to Rouen, where I was staying, about a 2-3 hour drive west out of Paris.

    Now, Hocine, the driver, spoke very little English.  Oy.  And my French isn’t very good.  I’ll tell you though, my French got better over the 5 days I was there!  Thank God for Google Translate, which I have on my phone.  When I was stuck, I’d get it to translate, either way.  It worked fairly well.  There were times though, when he spoke so quickly that I was completely lost.  It was a bit frustrating at times, but we got along OK.

    It was quite convenient and efficient, but also expensive.  Total cost was just under 1500 €… in cash!  I had to use French bank machines three times to get further cash advances on my Canadian Visa.  Ouch!

    Rouen – A Magnificent City with History

    The hotel that I stayed at was literally 1/2 block away from the Rouen Cathedral.  What a magnificent building!  Unfortunately, I didn’t get inside – I slept a bit on Sunday afternoon after getting to Rouen, and by the time I was up & around again, it was closed for the day.

    Hocine is from just outside Rouen, and is quite proud of the area.  He picked me up later in the afternoon and gave me a brief tour of the city, including a lookout where I could look down on all of Rouen.

    Dieppe – A Beautiful Coastal City

    On Monday evening, Hocine insisted that I had to see more of France.  We did a small detour to Dieppe.  It was unseasonably cold, but still quite nice.  Again, so much history.  

    Apparently, this is a very romantic town – the place for lovers to go.  Hmmm 🙂

    Work on Remote Site

    The actual work site is well north of Rouen, actually closer to Amiens.  It’s about a 45 to 55 minute drive each way, right near Restaurant le Coq Gaulois at Gauville.

    Briefly in Paris

    Travel

    24 April: It gets hot in April! Too much exertion?

    Ted Raguso has been on my case for a while, to go for lap swim after church.  I did a few times last year, and it was great… but then again at that time I was driving to church.  These days, I tend to cycle – but I took my swimming suit this morning, and figured I’d drop by the pool after service.

    It’s a bit of a trek – something like 35 km (21.8 mi) according to the Google!

    Right from the get-go, I felt tired this morning, not sure why.  But I got onto the bike and got rolling in decent time.  The service was fine, although, yikes, that last hymn – the Americans went and changed the tune for a familiar hymn, we sounded rather thin!

    After he service, I cycled over to the aquatic centre and had a nice swim in the pool – outdoor lap swim pool – I need to get some polarized swimming goggles or something!  I was only able to do 1/2 of my regular 60 lengths / 1500 metre swim – 30 lengths / 750 metre total.  I was tired when I got into the pool. and you know that I was even more tired when I got out.

    I left my swimming trunks on, put on my shoes and my cycling shirt, and headed for home.  Oof, I could not believe that I had no reserve, couldn’t kick it up when coming up on traffic lights….   and that hill at 13th Street, about 4 km (2.5 mi) from home, which is always a tough slug on the way home, was almost impossible!  I had to stop at the top for a minute, down a bunch of water, breathe deeply and let my heart rate recover 🙂  But, I made it!

    It took 1/2 hour at home before I could get up to shower.  I was going to jump in the pool, but it’s still a bit chilly – 24.2 C – I really want 25 C before I even think of going in.  After my shower, I was so whipped that I slept on & off for another hour.  Zounds, that’s not like me, to sleep in the afternoon.  Oh well.

    According to my weather station, the temperature peaked at about 35 C around the time that I got home (2 PM).  No wonder I was a little zoofed after the ride 🙂

    I’m still fighting to avoid turning on the air conditioning, save energy, save money, and all that stuff.  I bought a couple of box fans on Thursday, and put them in the windows all night, blasting away.  At the peak of the heat outside, it was 25 C inside, which is OK if you aren’t exerting yourself – with little to no humidity, 25C feels just nice.