Why I dig chatbots.

Chatbots are the new app.

Yes, it’s still a walled garden. Unless you own the messaging client, you’re at the mercy of the owners. Those owners being the bigger client providers whose messaging market you want to access. These days, that means Messenger (Facebook), Slack, Skype or WhatsApp.

Still, it’s a way in.

I’m working on another one. There’s largely no client, yet. I just have few ideas about how it could be profitable. But I really dig how easy it is, relatively speaking, to give an idea legs (or a mouth) so to speak.

I’ve been using Microsoft’s Bot Framework and together with their documentation, the process has been good. That they let you “write once, run anywhere” in a bot context is very savvy. The framework lets you deploy bots via their platform and have access to a laundry list of messaging channels, including:

  1. Text/sms
  2. Office 365 mail
  3. Skype (auto-configured)
  4. Slack
  5. GroupMe
  6. Telegram
  7. Facebook Messenger
  8. Kik
  9. Web (auto-configured, embeddable)
  10. Direct Line (API to host your bot in your app)

OK, let me head back to my next bot.

Advertisements

(the) Hansard Speaks!

We built a bot at Teleios.

Well, we’ve built bots before. In fact, one time, we built this amazing one that was over SMS – part of a game called MeggieWars. It was hilarious and fun. Personally, I’ve been a fan of using messenger platforms to do fancy stuff for a long time. Way back in 2005 my friend, Kevin Weekes and I attempted to use the MSN Messenger api to do automatic translation between IMs using the babelfish web service. We got as far as the semi-finals for the Imagine Cup that year.

378849_10150330509175060_580830935_n
Irwin and Kevin, Imagine Cup Participants, circa 2005.

Anyway, we built a bot in our last Teleios Power Hour episode for 2016 – Hansard Speaks. I had been thinking about doing something like Hansard Speaks for a least a year. It lets you search parliamentary proceedings (thus the name Hansard) via Facebook Messenger, thus the Speaks. Any text you type, it will search and then it gives you either a YouTube link of the moment it was spoken in the parliament or a link to the PDF containing the passage.

Right now, it works with a snapshot of the Trinidad and Tobago Parliament data from YouTube and their website.

In terms of the tech we used, we put together Azure Media Services – for the media ingestions – with a Lucene Search in ASP .Net  and did the bot stuff using Microsoft Bot Framework.

As the world goes crazy for bots, I hope to build a few more soon.

Teaching Cloud Technologies (2016/2017)

We just concluded another run of the Cloud Technologies course at the University of the West Indies. This course is part of the MSc Computer Science program.

As lecturer, I had to come up with the course outline as well as the content. In so doing, I get the opportunity to refresh what we talk about as well as how we approach assignments.

This course comprised of ten modules:

  1. Intro to Cloud Technologies
  2. Cloud computing infrastructure
  3. Virtualization
  4. Big data
  5. Cloud development patterns
  6. Cloud resource management
  7. IaaS Automation
  8. Microservices
  9. IoT
  10. Cloud for Research

Though our primary cloud platform is Microsoft Azure, students are free during assignments and project submission to use other cloud providers.

One of the assignments involves virtual machine scale sets and containers. The draught goes like this:

Z. Zanko Systems provide sales processing systems for large commercial banks.

They receive more than 5 million JSON requests per hour (revised to 300,000).
Each request must be stored in permanent storage. The format of the request is:
“{“TransactionID”:”1″,”UserId”:”A1″,”SellerID”:”S1″,”Product Name”:”Financial Trap”,”Sale Price”:1000000,”Transaction Date”:” “}”

You have been hired as a System Developer by Zanko. You have access to VMs whose capacity is equal to that of A1 VMs in Azure IaaS or Containers of similar capacity.

Develop a mechanism to generate the requests your system faces.

Design and implement a solution using a container-based approach or a
virtual machine-based one to process 5 million requests in an hour.
For your receivers introduce a failure rate.
Store the occurrence of failures.
Justify how you chose to store and monitor failures.

Though most students can build this out using azure, one enterprising student chose to use AWS and reading his submission was a nice view of getting this done using Amazon’s resources vs Azure.

This year, Microsoft put a halt to the Azure for Education Academic grant, but did have a number of other ways for students to get into cloud, including DreamSpark and other offers.

The project component this year changed a bit, too. In the two years prior, we asked students to build working cloud services themselves. This year, we asked them to propose a cloud service that featured understanding of:

  • Cloud service definition
  • Cloud service models
  • Cloud delivery models
  • Cloud for research
  • Cloud development with a regional focus

We saw some excellent solutions that we hope to hear more about in the future.

The Mark of a Good Programmer

The mark of a mature programmer is willingness to throw out code you spent time on when you realize it’s pointless. (Bram Cohen)

I saw that quip on the Xamarin bug list.

I’m building an IoT solution using a Raspberry Pi 3 device. It’s been a while since I looked at the solution, so I ran, “sudo apt-get update” to refresh the OS and various utilities on the Pi. After the slew of upgrades, things seemed to be faster and amazing.

Included in those upgrades was one that moved my version of mono (I use C# on the Pi) from 4.0.something to 4.6.2. Which led me to exceptions like listed here. Problems with SSL authentication. I spent a few days digging around for solutions. I went from custom SSL handler code, to setting up a reverse proxy with nginx, to trying to use libcurl.

When I have a solution that worked and then “suddenly” stops working, I generally find myself trying to find a quick approach that lets me move on to what I actually want to build. This strategy is very breadth-first. After all, that thing that stopped working, as far as I’m concerned, worked, so I’m about to make the next big thing. I don’t want to redo that which I’ve already covered. So searching gets frantic sometimes. And I get distracted more easily.

Which brings me to that quote above. I just kind of caught me in that place between distraction and frustration. As I thought about it, a big part of what I was doing on the Pi and that bug was tied to a strong desire to keep my solution working in C# even though there was a likely better approach with some other stack on the device. So, I switched, used Node.js for where the communication pathway was breaking down and I could move on.

I don’t expect this is the final architecture for what I’m building, but it lets me build out higher priority areas, while that bug gets resolved or I understand with a bit more depth what broke between versions. Either way, here’s to realizing pointlessness.

Basket of (open data) goods

Last year, Anand, Nigel and I won the Trinidad and Tobago leg of the Caribbean Open Data Sprint. (woohoo!)
It was Anand and my second or third time at the event. We didn’t expect to do so well, we largely went for the vibes, bounced up Nigel there and it was nice.

This year, there apparently won’t be a Trinidad and Tobago leg for the first time since the thing started.Screen Shot 2016-04-22 at 12.38.46 AM However, getting involved in Open Data projects never needs invitation or formalities. If the data’s there, people will try to make magic.

Trinidad and Tobago is in a recession. So, people have been more price conscious than usual. Not just people but even ministries in government and their units.

One such unit, the Consumer Affairs Division, released a booklet that tracks the cost of goods across a range of grocery stores around the country.

The data was locked in a PDF-formatted file, across 32 pages.

I grabbed the file and spent sometime thinking about how it could be liberated and what could be done after that.

Fortunately, because the PDF itself was structured fairly well, an online service was able to render it as excel.
From there, we converted it to a more app and website friendly format – json.

A small site was built which provided a view of the data, and works fine in a desktop browser. The site can be seen here:

http://irwinwilliams.github.io/price-range/#/prices

I was motivated to do this because it was a good demonstration of the innovation possible as more and more data becomes available.

Edit (April 30, 2016) [and super-technical note]:

I really wanted to start some sort of basket functionality on this PoC, and so I just added the start of that functionality into price range.  Ideally, it should do a version of what “Knapsack” does, which is, for a given set of items in the basket, what is the best place to get all the items? #KnapsackInRealLife

IoT Perspectives

Recently, I represented Teleios at a Microsoft Trinidad Event: “Innovating your Business with Microsoft’s Cloud”.

I presented on the Internet of Things, together with Darryl Ramdin. I spoke in general about the Internet of Things, providing definitions and context. Darryl followed up with real world examples and case studies from Microsoft.

The Internet of Things is a global phenomenon, and I wanted to bring that sense to the participants in the room, who before this may have only been exposed to IoT as a buzzword.

According to a 2016 study from Evans Data Corp, APAC and North American developers are most likely to engage in IoT:

global-distribution-of-internet-of-things-development

For the crowd in the room, that meant our region is definitely on track to feature more and more of these projects. Going further, IoT is expected to hit mainstream by 2020, with 25B connected devices projected.

So, what is IoT?

I’ve been using the “connecting everyday devices to the Internet” as a starting point for a long time. However, in talking with Darryl, he shared with me a simple, yet powerful set of points that are meaningful. The Internet of Things can be seen as the set of technologies that feature “things”, data, connectivity & analysis. Things here, being sensors, smart devices & other points of input.  Connectivity speaks to how that Data is communicated and analysis – finding meaning in the mass of readings.

Consumers tend to see this as remote management of their devices, including thermostats, home security systems and automobiles.  And the more they see, the more they want. Connected cameras, thermostats, door locks and other appliances are among the expected popular items, according to this study.

In our seminar though, we had representation from Manufacturing, Transport, Oil & Gas and Government Administration.  They expressed interest primarily in a range of Asset Tracking situations, as well as Document Management.  A Cisco report on IoT in the Enterprise concluded that  Asset utilization could be a $2.5 trillion component of the IoT pie, overall expected to be in the region of $14.4 trillion in 2022.

At the moment, one of the things that is jumping out at me is that many, many firms can benefit from considering and implementing IoT solutions. While waiting to present I met someone from the Trinidad and Tobago Fire Service, stationed in Tobago.  Of course, some quick searching pointed out that there is in fact an innovative use of Smart Textiles in that space – the Firefighter jacket or Turnout Gear in professional speak, with integrated Thermal Sensor Technology (TST) directly into the fabric.

viking_turnout_gear_tstSo that while there has been moves since the 80s to ensure suits are able to stand the heat, now, fire fighters can be more proactively informed about the nature of the danger they are in.

This can help fire fighters know when the temperature has become to hot for them to stay in those conditions any longer.

 

 

 

All this pointing to the understanding that there are great moves happening in the IoT space and as we’ve shown with the Teleios Code Jam, the barriers to entry are getting lower and lower, as university students continue to present compelling solutions in this space.

 

 

 

Defining Cloud

When we teach on Cloud Technologies at UWI, we start with building the context.

Many students come to class with ideas about what cloud is from their experience with service providers. Perhaps they use Gmail for email, or One Drive for storage.  What they know is that some provider manages the concerns attached to a service they use.

We start off with a definition investigated and shared by the US National Institute of Science and Technology (NIST). As outlined by NIST, when they developed their definition, they were going for a yardstick that could allow consistent comparison among service providers, deployments and strategies.

According to NIST, cloud computing is a model. A way of thinking with regard to requesting, deploying, managing and monitoring computing resources. This model anticipates broad network access as the means to interacting with service providers. The resources being provisioned are expected to be shared.

In the NIST version of the cloud model,

  • There are 5 key characteristics.
  • There are 3 service models.
  • There are 4 deployment models.

When delivering this understanding we tend to repeat those characteristics often.  They are:

  • Self-service
  • Network accessibility
  • Pooled resources
  • Elastic resourcing
  • Closely monitoring

Services being built today may feature the use of cloud resources but themselves may not actually be cloud services.  Walking along with those characteristics, we encourage students to ask, “can I order this up, pay and have it available, without human involvement?”. Then it’s self-service. Can service modification be done over a network? Does the underlying infrastructure automatically assign and un-assign the use of resources? Does the billing reflect up-to-the-minute information on when a customer provisioned/de-provisioned services?

Those are the starting questions that can be used to evaluate services when spotted, or as they are being built.

The service models are Software-, Platform-, Infrastructure- as a Service.  The concept of “[x] as a Service” is essential to understand when considering the degree of abstraction.

Breakdown of Cloud Computing Services
Cloud Services, image via Wikipedia

Service models let a person evaluating or implementing cloud to know what will be in their hands to manage vs what is being managed by a service provider.

And finally in the NIST-defined model  of cloud computing there are the deployment models – private, public, community & hybrid.

We start with this definition because from there we expect students to be understanding how in an MSc focused on Cloud Technology, they need to be oriented.

There are two forms of orientation I’ve experienced. It is knowing the responsibility for developers & software designers to build with cloud in mind, paying attention to relevant patterns & principles, such as service orientation.

And it is also the great empowerment one should feel when embracing use of these services. Literally, the savvy can provision servers, services and other resources via code. That is tremendously advantageous. The course is about exploring how so.

When I teach these courses, I come at the students as someone who’s been witnessing the change in how software is conceptualized, built & delivered.  It’s hoped that from the experiences shared, they’d be empowered to jump in, and take part.