Just completed the 2017 edition of the University of the West Indies’ International Half Marathon.

This was a brutal run in beautiful weather. The “race” starts at 5:30 am. Last week, stormy weather was on the cards. Some might believe running in the rain is a joy, but not for 13.1 miles. Thankfully, it was very cool for the duration of my run, no sun, no rain & a light breeze.

I often start off too quickly. The PhillyNet Half Marathon training started just before the middle of the year in earnest and through a series of long and short runs, strength work and other training, the team and I got in to racing shape. 11 of us ran the race, but more than double that at times trained with the team. We had many supporters, on the course and online. But anyway, I still start off too quickly. I may have some overall race pace that I want to maintain, and invariably, my first mile is off. That’s where Endomondo comes in. I start it up on my phone, and at the end of mile 1, the Endomondo Lady announces, “Aye! Stop! You’re going too fast, slow down!”. OK, no, she doesn’t do that. Instead, she announces that I’m running at 8-something a mile or some such and I know,
“Oh, if I want to finish this race in a decent overall time, I have to slow down”. Today, E. Lady was quiet. I got to mile 1 and heard nothing.

Immediately disappointed, I expected it was because even though I started it at the start of the race, bad GPS or some android-y thing had thrown things off. Since a mile had passed, I was not interested in getting it going if it was off. Anyway, I felt good. I just didn’t know what time it was.

I would have run the entire race time-blind, if not for this year’s UWI half innovation: race pacers. Either they were provided by UWI or some other club, but they were golden. Well, not literally. I saw a 1:50:00 pacer and a 2:00:00 one. Keeping up with them would essentially give you a race result of their stated times. The 1:50:00 one flew past me after mile 2. And since I hadn’t seen the 2:00:00 for the first half, I judged to be between those finishing times. But having a pacer in no wise means having the power to finish at those times. So, I had to be careful.

With no E. Lady in my ear, improvisation became necessary. Since there were so many runners, finding and keeping pace with someone on the course became a fun, mini-game. At first there was the lady from +One a Week, I kept up with her for about half a mile. Two ladies overtook me and ran on that spot I started to like – the exact middle of the road on the white line. So, I overtook them to reclaim my land. That cat and mouse lasted for a mile and then they bested me.

Coming up to mile 4, there was loud music. I liked it, then it got too loud, then I liked it again. The DJ seemed very proud to remix “Full Extreme” into “We Runnin Still”.

“The buildings,

Could fall down,

We running still… we runnin still.

The treasury,

Could fall down,

We running still… we runnin still…”

I mean, it sorta worked. Something about the loud music added some energy to my run that I intended to use later.

I met up with someone from TT Road Runners and that partnership lasted probably two miles. We got up to the turn together. Mind you, these aren’t announced things. It’s just that as a runner, you realize someone is next to you, they’re keeping pace and either you increase yours to leave them in your dust or you chill and maybe see how far it goes.

She eventually outran me and I was alone. The 2:00:00 pacer passed me at mile 7 or so, but then, my family, immediate and extended was there at mile 8, being raucous and extremely encouraging. Sophie, my 10-month-old, even deigned to give me a look and a small smile. All this probably being a bit much for her thankyouverymuch. I knew the pressure miles for me would be between mile 10 and 11 and a little after. By the time I got past the Eddie Hart ground, which is about a quarter mile after the 10 mile mark, I got into my head that I needed something to distract me. So, I started to count. I just picked a number and counted up to it.

Somewhere between 300 and 400 “counts” I met up TT Road Runner lady. She seemed to be having a hard time. So, I tried to return the favor. Shouting out encouragement to other runners gives me a slight jolt myself. I yelled things like “keep it up”, “this is the hardest one” and such. I don’t know if it worked. Running is a physical thing. Not a talking thing. To a guy who passed me that I was meeting up to, I yelled some more. For some reason, I was legit feeling OK, coming in to mile 11. There’s a hill up to mile 11 and another one up to mile 12.

To keep pace up the mile 12 hill, I pulled out and old trick: Father Abraham.  I just sang the song and sort of performed the steps. Way, it’s a long song. It worked, though. All the while, I kept 2:00:00 in sight. By mile 12, I returned to counting.  This time, down from 900. 900 because it would take me about 10 minutes to get to 1. I saw my wife, Sophie and #TeamPhillyNetSupporters again. Again providing a burst of joy.

I settled in my mind, a few weeks before the race that the half marathon is a 12.75 mile jog and a quarter mile race. I only really care to finish ahead of people at the very last piece of the run. So that’s what I did. I essentially pelted through the straightaway and for my effort, copped a really good time.

Going in to the run, I was expecting and said as much to do the race in 2:10:00 or 2:15:00. This result was very surprising and I think the combination of decent training with PhillyNet and random race partnerships helped me discover some new things about running.

WhatsApp Image 2017-10-29 at 10.53.39 AM
PhillyNet Runners and Supporters

PS: Oh, as it turns out, Endomondo was fine. I had my audio settings too low, so she was talking, just at a whisper.



Provisioning some test storage accounts for class

I wanted to create a few storage accounts for students in my class to complete an assignment featuring Event Sourcing and Material Views.

So, here’s what I did.

Download/install the latest azure command line interface (cli).
(While doing this, I realized I could have just used the cloud shell. I soldiered on with the dl)

Create a resource group to contain the accounts we’d need.

Create the accounts and output the storage account keys
The command to make a single storage account is pretty straightforward:

But I wanted to also output the keys and display them on a single line. The command to get the keys after the account is created is this:

So, I used the jq program in bash to parse the json result and display both keys on a line. Thus, I created a script that would create the accounts and then output their storage account keys.
This is the script that produced the accounts and keys:

Overall, the longest part of the exercise was dealing with the way the files were being saved in windows vs how they were being saved and read by bash. But the accounts were created and class can get on with assignment 2.

Patterns for Cloud Computing Software Development


Our text today came from the Cloud Architecture Patterns from Microsoft. This was our first class on cloud architecture and so we spent time looking at several popular patterns, including,

Circuit Breaker

I called back to that night I built a website for tracking the St. Joseph By-election in 2015 and how I could have used this on the client side when things became too intense for the database server.

Compensating Transaction

The writing on this is great, but Clemens Vasters explanation of  Sagas really brought this home to the class.

Competing Consumers Pattern

This is one of the patterns we’ve used a lot for our messaging solutions at Teleios, so it was easy to walk through and talk about messaging demos featuring it with the class.

Compute Resource Consolidation Pattern

I used this pattern to start the discussion on how containers are a great way of consolidating a set of compute-based activities. From the patterns guide, there was a great example though of the need for care to ensure that the right kinds of tasks are consolidated. Tasks with dissimilar characteristics can reduce the efficiency gained from pursuing consolidation.

In talking about this pattern, this amazing quote was uttered in class:

The next assignment is based on Event Sourcing and Materialized Views, where students have to come up with a scenario that features the use of ES and MV and then build a demo that explores their chosen scenario.

It was also cool to see the call back from our big data class last week because I highlighted that Apache’s HBase might be a good data store for building a solution involving Event Sourcing.  There’s also a great article talking about the Command & Query Responsibility Separation pattern in the context of Event Sourcing, too.



Stormy Weather and Nurse Carter

Just a small note to say I’ve added in to Nurse Carter the ability to provide information about shelters and emergency contact numbers.

Of course, there’s a wider story around this. About #OpenData and being able to leverage that for future needs. But I won’t go in to that now.

I did some scrounging around online, found the PDFs and stored them on github in case the Office of Disaster Preparedness and Management’s site goes down during build up to a hurricane again.  And that’s about it.

Time For Water: The bot edition.

Back in 2013, I built a small site that took some data that the Water and Sewage Authority released (@wasatnt on Twitter) and remixed it, to make it easier to consume.

Recently, @wasatnt released a document detailing the current distribution schedule in this dry season, 2017.  It’s a PDF doc, listing the data for all regions in Trinidad and Tobago. Hundreds of rows, I discovered.

It seemed  like a good idea to build a simple bot to provide information about service at a particular area. So, I did. Listed below are some  of the steps it took from prepping the data to working prototype.

  • Get the data
    • It’s a PDF, so this means downloading and then converting.
    • I converted using
  • Clean the data
    • Small PDF gave me an excel workbook with 15 worksheets
    • All the worksheets contained merged cells, so I un-merged them.
    • Delete unnecessary columns
    • Then, I duplicated the row data so that every row could stand on it’s own. That’s important for the look-ups I’ll do later on.
  • Convert the data
  • Finally, I was able to build a bot, Time For Water, that would respond to messages with look-ups of the data in the original schedule.

Forum on the Internet of Things: Smarter Living in the Caribbean

On April 24, I had the opportunity to be a panelist, presenting a project I built for my MSc final submission.

This was at the ITU’s Forum on IoT, held at the Trinidad and Tobago Parliament building.

My solution that demonstrated the use of RFID for collecting traffic data and using cloud computing to process and communicate that data.

While preparing the presentation I was asked to explore what elements may need to exist to create an “An Enabling Ecosystem for IoT use and monetisation”.

It was such a good opportunity to explore this idea. In researching that very thing, I found, “Understanding business ecosystem using a 6C framework in Internet-of-Things-based sectors”. A great paper that helped me contextualize the work I did, along with the challenges and opportunities that came after.

The actual presentation can be found here.

Beyond​ just presenting, the forum proved a good place to meet up real practitioners. From Fasove and their boat monitoring device, to Ancel Bhagwandeen and the work he’s done with restoring automobile batteries, to the recently-graduated University students making waves with company after company.

Some good connections were made and I look forward to following up with them soon.

Who is Nurse Carter?

I was on vacation over the 2016 Christmas period. At the office, we had recently concluded our Power Hour series for the year with an episode describing how we built a virtual assistant that made parliamentary recordings discoverable via Facebook messenger. 

We called that Hansard Speaks, and you can check out that episode here

So, I’m home thinking, ‘what next?’ when we had a new beginning of our own: my baby girl was born! Apart from the explosion of joy with her arrival, I was home for a month. 

Mind you: I understand that paternity leave is officially 3 days in Trinidad & Tobago. My company, Teleios Systems gives us a week. So, my wife and I agreed that I’d augment that with 3 weeks of vacation. In the end, we’re very glad we did. 

Anyway, being home with baby, witnessing the pains, frustrations & gladness of interacting with our public health systems, gave me the idea for my next virtual assistant: Nurse Carter

Nurse Carter is a virtual assistant that you can ask questions (kind of) and it will tell you when & where you can get access to various kinds of health services.
A few years ago, I used the data located on the Trinidad and Tobago Ministry of Health‘s web pages as the base for a mobile app. I called the app, TT Health Facilities and I used it to list all the health facilities and the services they provided based on their schedule. So, I knew there was a place to retrieve this data from.

As we did when we built Hansard Speaks, I used the Microsoft Bot Framework, this time using NodeJS rather than C#. This one took a while to put together because crying baby trumps messy JavaScript. But it’s finally done, and you can access it directly on  the web or Facebook.

This was another opportunity to get into the technology around Lucene and that type of search experience, everything else was mostly hacking around in Node. I guess I’m sort of working my way up towards more natural language interactions. So maybe next time I’ll use Microsoft’s Cognitive Services’ Language Understanding Intelligent Service.