Current Events Players Programming Reading Material Tampa Bay

Local hero: Mike Dominick and his tech podcast, The Mike Dominick Show

Mike Dominick, who runs The Mad Botter — which develops automation/integration software — moved to the Tampa Bay area three years ago. It’s been my experience that Tampa Bay techies don’t do things halfway, so it shouldn’t be a surprise that in addition to the day job, he also has a technology- and open source-focused podcast named The Mike Dominick Show.

I had the privilege of being the guest for Episode 25 of the Mike Dominick Show, which we recorded yesterday afternoon (that’s its player above), and it was a fun conversation that covered:

  • The Toronto tech scene
  • Taking up the accordion
  • How I got into developer evangelism
  • Learning iOS programming via and then joining them
  • Remote work and the pandemic
  • WWDC 2020 and SwiftUI, Python and Burning Man
  • Windows Phone and my time as a Windows Phone Champ
  • What I’ve been doing while looking for work
  • The hidden opportunities that come with having to stay inside

Scrabble tiles in a tile holder spelling 'QUESTIONS'Mike ends each podcast with two questions — one tough and one easy. The tough question he asked me was “What question should I have asked you that I didn’t?” You’ll have to listen to hear how I answered that one.

Don’t just listen to my episode — be sure to check out previous ones, including these ones that I’ve enjoyed on my daily bike rides:

Programming Reading Material

My Smalltalk-80 literature and monitor stand

A couple of readers noticed my makeshift monitor stand pictured in the article Building a lean and mean (and frugal!) Python development machine with Peppermint OS:

Yup, it’s the holy trinity of books for Smalltalk-80, the definitive release of original recipe Smalltalk. You probably haven’t used Smalltalk, but you probably use a programming language influenced by it: Dart, Go, Java, Kotlin, Objective-C, PHP, Python, Ruby, Swift, and Scala, to name just a few.

They were a lucky find: they were in a banker’s box in a trash pile on the east side of downtown Toronto, sometime in late 1998. It’s probably my best dumpster-dive find, beating out even that still-functional cable modem or e-Machines starter Pentium machine that I would find a few months later. (Boom times make for great dumpster diving.)

The books are historically interesting. They’re written for readers who would spent all their computing time in the command line, and probably had never seen a GUI before, and they most definitely had never used an IDE. That’s why one of the books is devoted to Smalltalk’s interactive environment, and why one of the first illustrations in that book is this one:

A mid-1980s system capable of running the Smalltalk interactive environment, from page 6 of “Smalltalk-80: The Interactive Programming Environment”. Tap the photo to see it at full size.

Here’s a sample from the biggest of the books: Smalltalk-80: The Language and its Implementation. It’s the definition of a class named FinancialHistory:

The “FinancialHistory” class from pages 43 and 44 of “Smalltalk-80: The Language and its Implementation”. Tap the photo to see it at full size.

To a present-day programmer, the syntax may seem a little weird (it’ll be a little less weird to Objective-C and Swift programmers; now you know where that method-calling syntax comes from!), but they’d still find it familiar. To a programmer in 1984, the year the book was published, who probably subsisted on a steady diet of structured programming, this must’ve been positively mindblowing.

For the curious, here’s how you’d create an instance of FinancialHistory named HouseholdFinances with an initial balance of $350:

Once created, we’d record household spending like so:

(I just felt a disturbance in the Force, as if millions of Objective-C and Swift programmers cried out, saying “So it’s Smalltalk’s fault!”)

The smallest of the books, Smalltalk-80: Bits of History, Words of Advice, gets deep into the implementation details of Smalltalk-80. And I do mean deep: there’s a whole chapter devoted to an implementation of a Smalltalk garbage collector.

I’ll eventually return these books to their proper place on the bookshelf and replace them with a proper monitor stand, but in the meantime, they’re doing a pretty good job as the basis for my monitor, just as their content did a pretty good job as the basis for the programming languages I use.

do try to take care of these books, as their scarcity has made them a little more expensive than your standard textbook:

The current Amazon prices for the two hardcover Smalltalk-80 books.
Current Events Reading Material

I’ve finished revising the book!

I just put the last chapter of my revisions to iOS Apprentice, 8th edition to bed. It’s in the editors’ and layout’s hands now.

To me, this isn’t just any book. I learned iOS programming from an earlier edition, and from there, became a regular reader of the site that publishes the book, When the opportunity to write an article for them, I took it, and I gladly switched gears to Android, learned Google’s Face API, and the result was the highly rated Augmented Reality in Android with Google’s Face API.

From there, it led to all sorts of things, including not one, but two speaker sessions at their annual RWDevCon conference, where I did presentations on building iOS augmented reality apps — a two-hour intro session and a four-hour workshop. They were the highest-rated sessions of the entire conference. Here’s the two-hour version…

…and you can watch the four-hour version on

I also have a video series on developing ARKit apps. Here are some samples:

I was also a technical editor on the book ARKit by Tutorials, author of the Android articles Kotlin Cheat Sheet and Quick Reference and What’s New in Kotlin 1.3.

Now that I’ve finished writing the revision for the book, it’s time to look for my next gig. My last one — mobile developer at Lilypadevaporated in the COVID-19 economic downturn. In the meantime, I’ll be keeping busy as I continue to sharpen my development skills, write this blog, and do what I can for the Tampa tech community.

Are you looking for someone with both strong development and “soft” skills? Someone who’s comfortable either being in a team of developers or leading one? Someone who can handle code, coders, and customers? Someone who can clearly communicate with both humans and technology? Someone who literally wrote the book on iPhone development? The first step in finding this person is to check out my LinkedIn profile.

Deals Reading Material

Today only: Manning has data science courses for $10 (instead of the regular $50 or $60)

Yes, the title of that 2012 article in Harvard Business Review may have stretched things a bit. If you’re a regular reader of this blog, you know that any scientific, tech, or engineering endeavor has its long stretches of dullness and drudgery. You also know that if you can make it past those stretches, the work’s pretty rewarding.

If you’d been meaning to get into data science, today’s your day. For the entire day of Monday, April 27, 2020 and only until the stroke of midnight that marks the start of Tuesday, April 28, 2020, Manning’s solo liveProject courses are selling for $10 instead of the usual $50 or $60.

Manning liveProjects are learn-by-doing exercises. They start with a challenge that isn’t all that different from one you might encounter on the job, and the project is about addressing that challenge.The project is broken into several milestones where you can check your progress against a tested reference implementation. Along the way, you’ll have access to book and video resources selected for your project, as well as opportunities to collaborate with other participants. You do it at your own pace, and if you’d like extra help, there’s a (pricier) version with a mentor.

Here are the liveProjects on sale:

Discovering Disease Outbreaks from News Headlines
Imagine this: You are a data scientist at the WHO trying to get a handle on a virus outbreak. Your task? Use machine learning techniques to analyze news headlines gathered from around the globe for clues about its spread. What do you do?

Work and learn with over 1000 other participants in this liveProject. In Discovering Disease Outbreaks from News Headlines, you’ll analyze a database of headlines gathered clusters on a map to find patterns indicating an epidemic. As you work through this liveProject, you’ll develop techniques for text extraction, data manipulation, clustering, interpreting algorithm outputs, and producing an actionable report.

Decoding Data Science Job Postings to Improve Your Resume
Imagine this: You step into the life of a budding data scientist looking for their first job in the industry. There are thousands of potential roles being advertised online, but only a few that are a good match to your skill set. What do you do?

In Decoding Data Science Job Postings to Improve Your Resume, you’ll learn how to use libraries in the Python data ecosystem to analyze text-based data, such as resumes and job listings. As you build this project, you’ll clean data from HTML files, use text similarity analysis to find the perfect job, and visualize your results using word clouds and plots. When you finish, you’ll be ready to apply your new skills to any text analysis task.

Human Pose Estimation with Deep Neural Networks
Imagine this: You are a machine learning engineer working for a company developing augmented reality apps, including apps like fitness coaches that need to be able to reliably recognize the shape of a human body. Your challenge is to create an application for human pose estimation: detecting a human body in an image and estimating its key points such as knees and elbows. What do you do?

In Human Pose Estimation with Deep Neural Networks you’ll build a convolutional neural network from scratch, training your model using Google Colab and your GPU. At the end of this liveProject, you’ll have completed an interactive demo application that uses a webcam to detect and predict human keypoints!

Training Models on Imbalanced Text Data:
Imagine this: You are a data scientist working for an online movie streaming service. Your bosses want a machine learning model that can analyze written customer reviews of your movies, but you discover that the data is biased towards negative reviews. Training a model on this imbalanced data would hurt its accuracy, and so your challenge is to create a balanced dataset for your model to learn from. What do you do?

In Training Models on Imbalanced Text Data, your challenge is to create a balanced dataset for your model to learn from. You’ll start by simulating your company’s data by deliberately introducing imbalance to an IMDb (Internet Movie Database) review dataset, experimenting with two different methods for balancing this dataset. You’ll build and train a simple machine learning model on each dataset to compare the effectiveness of each approach.

Use Machine Learning to Detect Phishing Websites:
Imagine this: You’re a data scientist employed by the cybersecurity manager of a large organization. Recently, your colleagues have received multiple fake emails containing phishing attacks, one of the most common—and most effective—online security threats. Your manager is worried that passwords or other information will be given to an attacker. What do you do?

In Use Machine Learning to Detect Phishing Websites, you’ll build a machine learning model that can detect whether a linked website is a phishing site. As you go, you’ll sort out what’s safe and what’s a security risk, use common Python libraries, clean and query datasets, learn performing hyperparameter tuning, and summarize the performance of your models.

Building Domain Specific Language Models
Imagine this: You’re a NLP data scientist working for Stack Exchange. Your boss wants you to create language models that are tuned to the particular vocabulary of different Stack Exchange sites. Language is domain specific, so an insurance company’s documents will use very different terminology than a post on a social media site. Because of this, off-the-shelf NLP models trained on generic text can be inaccurate for specialized domains. What do you do?

In Building Domain Specific Language Models you’ll build a language model capable of query completion, text generation, and sentence selection for the domain-specific language of the Cross Validated statistics and machine learning site. Challenges you’ll face include preparing your datasets, building and evaluating n-gram word-based language models, and building a character-based language model with AllenNLP. At the end, you’ll have built a foundation for any domain specific NLP system by creating specialized, robust and efficient language models!

Training and Deploying an ML Model as a Microservice
Imagine this: You’re a developer for an ecommerce company. Customers provide reviews of your company’s products, which are used to give a product rating. Until now, assigning a rating has been manual. Your boss has decided that this is too expensive and time consuming. Your mission is to automate this process. What do you do?

In Training and Deploying an ML Model as a Microservice you will have to train a machine learning model to recognize and rank positive and negative reviews, expose this model to an API so your website and partner sites can benefit from automatic ratings, and build a small webpage using FaaS, containers, and microservices that can run your model for demonstration. You’ll learn how all parts of machine learning tie together, and how to effectively deploy a model to production.

Monitoring Changes in Surface Water Using Satellite Image Data
Imagine this: You’re a data scientist at UNESCO. Your job involves assessing long-term changes to freshwater deposits. Recently, two satellites have given you a massive amount of new data in the form of satellite imagery. Your task is to build a deep learning algorithm that can process this data and automatically detect water pixels in the imagery of a region. What do you do?

With Monitoring Changes in Surface Water Using Satellite Image Data, you will design, implement, and evaluate a convolutional neural network model for image pixel classification, or image segmentation. Your challenges will include compiling your data, training your model, evaluating its performance, and providing a summary of your findings to your superiors. Throughout, you’ll use the Google Collaboratory coding environment to access free GPU computer resources and speed up your training times!

3D Medical Image Analysis with PyTorch
Imagine this: You’re a machine learning engineer at a healthcare imaging company, processing and analyzing MR brain images. Your current medical image analysis pipelines are set up to use two types, but a new set of customer data has only one of those types! What do you do?

In 3D Medical Image Analysis with PyTorch your challenge is to build a convolutional neural network that can perform an image translation to provide you with your missing data. Utilizing the powerful PyTorch deep learning framework, you’ll learn techniques for computer vision that are easily transferable outside of medical imaging, such as depth estimation in natural images for self-driving cars, removing rain from natural images, and working with 3D data.

I ordered them all, paying $90 in the process. I’ll write about my experiences as I do each of these courses.

If you’re interested, go visit the promo page for these discounted liveProjects and place your order before midnight!

Deals Programming Reading Material

COBOL roundup: Save $20 on a COBOL book, recent articles, COBOL on Cloudflare, and how to code in COBOL on macOS

Save $20 on Beginning COBOL for Programmers — today only!

Don’t forget that today, Thursday, April 16, 2020, is the last day that you can get Apress’ Beginning COBOL for Programmers at a discount! Use the coupon code SPRING20A when checking out to get $20 off orders $40 and above. That knocks down the price to $29.99 — but only for today.

Current COBOL news articles

Every time ancient banking and government software that’s still in use on “big iron” runs headlong into a problem it was never meant to handle, from Y2K to the COVID-19 stimulus check program, COBOL returns to the spotlight. Here are some recent news articles featuring the language. Most of these have been published in the last seven days:

Cloudflare now supports COBOL?!

There’s a fine line between genius and madness, and Cloudflare are riding that line by making it so that you can code Cloudflare workers in COBOL! They have a number of simple examples posted, including a Rock, Paper, Scissors web applet written in COBOL (pictured in the screenshot above).

It looks as though they’re using GnuCobol to compile COBOL code into C, and then compiling that C into WebAssembly. I like to refer to this sort of cobbling as “the Flintstones-Jetsons approach”.

Once again, how to start programming in COBOL on macOS

If you’re on a Mac and want to dive into COBOL coding, don’t forget that I have a quick and dirty to installing a COBOL compiler and IDE on macOS. If you’ve already got Homebrew and Python 3 installed, you can probably go through the process in about a minute.

Are you looking for someone with both strong development and “soft” skills? Someone who’s comfortable either being in a team of developers or leading one? Someone who can handle code, coders, and customers? Someone who can clearly communicate with both humans and technology? Someone who can pick up COBOL well enough to write useful articles about it on short notice? The first step in finding this person is to check out my LinkedIn profile.


Deals Programming Reading Material

A quick and dirty guide to installing a COBOL compiler and IDE on macOS (and get a COBOL book at a discount)

OpenCobolIDE running on macOS, displaying the code for the “Chunky Bacon” version of “Hello, World!”.

OpenCobolIDE running on my MacBook Pro. Tap the screen shot to see it at full size.

In an earlier post, I played around with an online COBOL compiler. Seeing as I’m a COVID-19 unemployment statistic and there’s a call for COBOL developers to help shore up ancient programs that are supposed to be issuing relief checks, I’ve decided to devote a little more time next week (this week, I have to finish revising a book) to playing with the ancient programming language. I’ll write about my experiences here, and I’ll also post some videos on YouTube.

If you want to try your hand at COBOL on the Mac, you’re in luck: it’s a lot easier than I expected it would be!

Get the compiler: GnuCOBOL

COBOL isn’t used much outside enterprise environments, which means that COBOL compilers and IDEs are sold at enterprise prices. If you’re an individual programmer without the backing of a company with a budget to pay for developer tools, your only real option is GnuCOBOL.

On macOS, the simplest way to install GnuCOBOL is to use Homebrew.

If Homebrew isn’t already installed on your system (and seriously, you should have it if you’re using your Mac as a development machine), open a terminal window and enter this to install it:

If Homebrew is installed on your system, first make sure that it’s up to date by using this command in a terminal window:

Then install GnuCOBOL by entering the following:

Once that’s done, GnuCOBOL should be on your system under the name cobc. You can confirm that it’s on your system with the following command…

…which should result in a message like this:

cobc (GnuCOBOL) 2.2.0
Built Aug 20 2018 15:48:14 Packaged Sep 06 2017 18:48:43 UTC
C version "4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.10.43.1)"
loading standard configuration file 'default.conf'
cobc: error: no input files

Get the IDE: OpenCobolIDE

Unless you’ve got some way to configure your text editor to deal with the language’s quirks, you really want to use an IDE when coding in COBOL. Once again, an open source project comes to the rescue: OpenCobolIDE.

OpenCobolIDE relies on Python 3, so make sure you’ve installed Python 3 before installing OpenCobolIDE. I installed it on my computer by installing the Python 3 version of Anaconda Individual Edition.

If Python 3 is already on your system, you have a couple of options for installing OpenCobolIDE:

  1. Installing OpenCobolIDE using the Python 3 package installer, pip3, which gives you a program that you launch via the command line. This gives you OpenCobolIDE version 4.7.6.
  2. Downloading the .dmg disk image file, which gives you an app lives in the Applications folder and which you launch by clicking an icon. This gives you OpenCobolIDE version 4.7.4.

I strongly recommend going with option 1. OpenCobolIDE is no longer maintained, so you might as well go with the latest version, which you can only get by installing it using Homebrew. Version 4.7.6 has a couple of key additional features that you’ll find handy, including:

  • Support for all the COBOL keywords in GnuCOBOL 2.x. This is a big deal in COBOL, which has something in the area of 400 reserved words. For comparison, C and Python have fewer than 40 reserved words each.
  • Better indentation support (and you want that in COBOL, thanks to its ridiculous column rules from the 1960s).
  • Support for compiler flags like -W and -Wall — and hey, warning flags are useful!

To install OpenCobolIDE using the Python 3 package installer, pip3, enter the following in a terminal window:

To launch OpenCobolIDE, enter this:

You’ll be greeted with this window:

Tap New file. You’ll see this:

For Template, select Program, enter the name and location for your program file, and tap OK.

You should see this:

Tap the screen shot to see it at full size.

Don’t mistake those red vertical lines for glitches. They’re column guides. COBOL is from the days of punched cards, and is one of those programming languages that’s really fussy about columns:

  • The first 6 columns are reserved for sequence numbers.
  • Column 7 is reserved for a line continuation character, an asterisk (which denotes a comment) or another special character.
  • Columns 8 through 72 are for code, and are broken down into 2 zones:
    • Area A: Columns 8 through 11, which are used for DIVISIONS, SECTIONS, and PARAGRAPHS, as well as specifying levels 01 through 77 (COBOL is weird).
    • Area B: Columns 12 through 72, which is for the rest of the code.
  • Columns 73 through 80 make up the “identification” area and are ignored by the compiler. It’s useful for very short comments along the lines of “TODO” or “HACK”.

Get the book: Beginning Cobol for Programmers

There aren’t many current books on COBOL out there. Apress’ Beginning COBOL for Programmers is probably the best of the bunch, and unlike many old COBOL books, makes sense to developers with a solid grounding in modern programming languages.

The ebook is available for US$49.99, but if you use the coupon code SPRING20A by the end of Thursday, April 16, you can get a $20 discount, reducing the price to $29.99. If you want the book for this price, take action before it’s too late!

Are you looking for someone with both strong development and “soft” skills? Someone who’s comfortable either being in a team of developers or leading one? Someone who can handle code, coders, and customers? Someone who can clearly communicate with both humans and technology? Someone who can pick up COBOL well enough to write useful articles about it on short notice? The first step in finding this person is to check out my LinkedIn profile.

Current Events Programming Reading Material

Did I mention that I’m revising a book that I co-wrote last year?

Cover of “iOS Apprentice, 8th edition”

I may be out of a job, but from now until the end of next week, I do have work: finishing the revision of iOS Apprentice, Eighth Edition, a book that teaches you how to write iPhone and iPad apps, even if you have no prior programming experience.

In its 1200+ pages, the book walks you through building 4 apps:

  1. Bullseye, a simple game where you learn the basics of iOS programming,
  2. Checklists, a “to-do” lists app that teaches you how to make use of table views, one of the most common and useful interface elements,
  3. My Locations, which introduces maps and geolocation in apps,
  4. Store Search, a project that introduces iPad development and which uses networking to search the iTunes Store.

iOS Apprentice is a special book for me, because I learned iOS programming back in 2012 (when the iPhone 4S was the newest model) from an earlier edition. The book launched me into the world of iPhone development, and as a result of that, into the world of mobile and IoT development in general. Since then, I’ve always wanted to repay the book by writing a later edition. Last year, I got my chance when I interviewed to become one of its authors and was chosen.

For a taste of what iOS Apprentice is like, check out this video series below, which is based on the first 8 chapters of the book, which I wrote. It shows you how to get started as an iOS developer by walking you through the process of making Bullseye, a simple game:

You can get your hands on this book in a couple of ways. If you want the paperback edition, you can get it at…

Screen capture of the page for “iOS Apprentice 8th edition”

…and if you want the ebook edition (which comes with free updates, including the one I’m working on right now), you can get it at the site:

I’m also bringing back the Tampa iOS Meetup in the next couple of weeks, where I’ll use the programming exercises in iOS Apprentice as a starting point. If you’ve been meaning to learn iOS programming, keep an eye on Tampa iOS Meetup — it’s coming back!

Are you looking for someone with both strong development and “soft” skills? Someone who’s comfortable either being in a team of developers or leading one? Someone who can handle code, coders, and customers? Someone who can clearly communicate with both humans and technology? The first step in finding this person is to check out my LinkedIn profile.