The simplest proof that information security isn’t a priority

It’s all spelled out in this slide:

Photo via Clark Alloway and the Cult of the Dead Cow.

The text of the slide:

We’re building self-driving cars and planning Mars missions — but we haven’t even figured out how to make sure people’s vacuum cleaners don’t join botnets.

I’m reminded of those photos that show that “decisions were made”:

Want to find out more about botnets? Check out this article of mine from October 2016, when I wrote about the big Mirai botnet attack.


Tampa iOS Meetup on Tuesday, February 28: A “How to make a Magic 8-Ball” workshop

At the next Tampa iOS Meetup, you’ll learn how to make a Magic 8-Ball app…

…and an executive decision-maker app…

…and a fortune cookie app…

…because under the hood, they’re all the same thing!

Learn how to write your own apps for iPhone, iPad, Apple TV, and Apple Watch at Tampa iOS’ Meetup, the Tampa Bay area’s meetup for beginning programmers and developers new to iOS development. Our next session — the one where we’ll cover writing Magic 8-Ball/executive decision-maker/fortune cookie apps — will take place on Tuesday, February 28th, 2017 at 6:30 p.m. at Wolters Kluwer’s Westshore office (1410 North Westshore Blvd, suite 400). This meetup is free to attend.

The meetup will have two parts:

  1. The presentation, where we’ll cover the concepts you’ll need to write a Magic 8-Ball/executive decision-maker/fortune cookie, followed by
  2. The workshop, where we’ll actually code a Magic 8-Ball/executive decision-maker/fortune cookie app using the concepts covered in the presentation.

The meetup works best if you bring a Mac laptop with the current version of Xcode (the tool we’ll use to develop iOS apps) installed. If you don’t have one, don’t worry; you don’t need one for the presentation part, and we can form teams for the workshop.

For more details about our upcoming meetup and to sign up to attend, visit our event page.

Tampa iOS Meetup wouldn’t be possible without the help of Wolters Kluwer, who are providing us with the space for the meetup, as well as food and drinks. For their kindness and generosity, I salute them with a filet mignon on a flaming sword!

Current Events Tampa Bay Uncategorized

The Tampa Bay tech scene, February 7 – 17, 2017

Figures in map show incoming LinkedIn members per 10,000 LinkedIn users. For example, for every 10,000 LinkedIn members in the Tampa Bay area, 48.7 have moved in since December.
Click the map to see the source article.

According to LinkedIn’s February 2017 workforce report, the Tampa Bay area is one of the top 10 U.S. cities that recently gained the most workers. That’s one of the reasons why there’s a lot happening in the local tech scene, and here’s what’s happening over the next couple of weeks…

St. Pete .NET’s Using Docker for development and production (Tuesday, February 7)

Using Docker for development and production: “We are going to explore how we can leverage Docker for use while we develop our applications as well as once we are ready to deploy. We will discuss creating a container that will allow us to work on our .NET Core application in a way that incorporates live rebuilds, debugging, and continuous testing.”

Tampa Bay Android Developer Group’s monthly meetup (Tuesday, February 7)

 The Tampa Bay Android Developers Group holds its monthly “30-minute talks, roundtable and socializing” meetup at The Iron Yard on the first Tuesday of the month, which is this Tuesday.

MADTampa’s Windows Developer Day get-together (Wednesday, February 8)

 The Mobile App Development Tampa group — MADTampa for short — is hosting an event where you can watch Microsoft’s big Windows Developer Day livestream at the Tampa Microsoft office. Join the Fustino Brothers and watch the livestream to see:

  • What’s new with Windows developer tooling: UWP tooling, BASH, Developer mode, and more
  • Learn about the latest XAML advancements, and how UWP helps you build Windows apps that are more personal and productive
  • Hear the developer story behind the recent announcements of Cortana skills and the new Windows mixed reality headsets
  • We’ll also close out the event with a live Q&A panel, where anyone can ask their questions
  • RSVP for this event at EventBrite
  • 12:00 p.m. – 3:30 p.m. @ Microsoft Tampa (5426 Bay Center Dr. in Tampa, Suite 700)

Suncoast Developers Guild’s Open Code (Wednesday, February 8)

 Every Wednesday, the Suncoast Developers Guild holds an Open Code night in The Iron Yard. It’s a great opportunity to work on your projects and meet other local developers in a fantastic space (The Iron Yard is in a lovely old factory building).

Tampa Bay UX’s How to be a badass designer in 2017 (Thursday, February 9)

 The Tampa Bay UX Meetup this Thursday will feature Krissy Scoufis talking about how to be a badass designer in 2017. She’ll talk about hot UX topics including:

Tampa Bay Cocoaheads’ talk on making Swift and Objective-C work together and book giveaway (Thursday, February 9)

 Another Tampa Bay Meetup that covers iOS development — Chris Woodard’s Tampa Bay Cocoaheads — is holding its first meetup of the year on Thursday. The topic of the evening will be making Swift and Objective-C work together, based on his experiences migrating a large codebase.

This meetup will feature a giveaway: autographed copies of Swift Programming: The Big Nerd Ranch Guide and iOS Development: The Big Nerd Ranch Guide.

Demo Day at The Iron Yard (Friday, February 10)

 The Iron Yard is a coding school, and on Friday, its 6th cohort will present their capstone Ruby on Rails, JavaScript, and .NET projects. These projects are the culmination of their 12 weeks of intensive training. They’ll present them to an audience of local tech companies, engineers, and supporters of the tech community, after which they’ll be happy to personally demonstrate their projects to you. There’ll be drinks and appetizers, too!

Tampa Bay Startup Week 2017 (week of Monday, February 13 through Friday, February 17)

It’s that time of the year again: Tampa Bay Startup Week! It’s a week-long series of events for local entrepreneurs, techies, and interested parties to get together, learn, chat, conspire, and break bread and clink glasses. Visit their site and see (and sign up for) events that you might be interested in!

Ybor Tech’s February OpenHack (Tuesday, February 14)

 One of my favorite local events is Ybor Tech’s OpenHack, which is simply an excuse for local developers, techies, entrepreneurs, and other similar people to get together at New World Brewery in Ybor City to enjoy pizza, beer (or cider), and each other’s company.


BenQ’s console marketing game is on point, or if you like fake words like they do, “on fleek”

Click the screenshot to see the original page.

Kudos to the marketing people at BenQ, who are promoting their Zowie line of monitors not just as computer monitors, but as monitors for that most fakety-fake of categories, e-sports. Better still, they weren’t satisfied with just using e-sports as a respectable-sounding neologism of “not actually participating in a sport, but sitting on your ass for hours playing videogames”, but inventing two subcategories, “console e-sports” and “PC e-sports”.

Videogaming is fantastic fun and has many merits and requires skill, so there’s no need to gussy it up with a purposely misleading name like e-sports. Let it be what it is.


Tampa iOS Meetup: The dreaded tip calculator, part 2

Here’s the second in a series of articles based on the most recent Tampa iOS Meetup, where I walked the group through building a tip calculator. If you’re new to iOS development, you’ll may find this series a useful introduction.

(And if you’re in the Tampa Bay area, perhaps you’d like to join us at the next Tampa iOS Meetup, currently scheduled for Tuesday, February 28th.)

Other articles in this series:

The story so far: What we did in the previous article

In the previous article, we put together a simple application featuring one button and one label:

If you tap the button, the text of the label changes to Hi there!

Right now, the app doesn’t act anything like a tip calculator should, but over this series of article, we’ll turn it into one. Along that way, you’ll become familiar with a number of aspects of iOS programming, including Xcode, the Swift programming language, and a couple of iOS user interface objects.

This article will start from where the previous article left off. You can either follow its steps, or if you prefer, you can start with the completed projects from the previous article.

What we’ll do in this article

A tip calculator has to have some way for the user to enter a dollar amount so that a tip for that amount can be calculated. In this article, we’re going to add a text field to our app as the first step in converting our simple app into a tip calculator.

By the end of this article, our app will look like this:

The user will be able to type text into the text field, and when s/he taps the Tap me button, the label will display the text in the text field:

I’ll admit that it won’t calculate tips, but by providing a text field and being able to read its contents, we’ll be a step closer to having a functioning tip calculator.

Let’s add a text field to our app

A tip calculator has to have some way for the user to enter a dollar amount so that a tip for that amount can be calculated. We’ll use a text field as that way.

We want to put the text field near the top of the view, so we’ll need to:

  • Move both the button and label farther down on the view so that there’s enough space near the top to place a text field.

Like the button and the label, the text field is a user interface object that you can get from the Object Library, which is part of the Libraries section of the Xcode interface, and located near the lower right-hand corner. Look at the lower right-hand corner and make sure that the Object Library icon is highlighted…

…and then look for the Text Field object in that list. There are a lot of objects in the Object Library, so you can either scroll around for Text Field, or you can pare down what’s shown in the list by using the Filter box at the bottom:

Do the following:

  • Type text into the box.
  • The Objects Library will respond by displaying only those objects with text in their names. One of them is the Text Field, and that’s what we want to add to our app’s view.

  • Drag a Text Field from the Object Library and onto the view. Place it near the upper left-hand corner of the view. As you bring the button close to that corner, Xcode will cause a couple of guides to appear. Line the text field up with those guides.

  • We want to provide the user with enough room to enter a few words into our text field, so widen it so that it goes about two-thirds of the way across the view.

Connect the text field to the view controller

Now that we’ve added a text field to the view, we need to make a connection between it and the view controller. In the previous article, we said that there were two kinds of connections you could make:

  1. Outlet:
    • In the view controller, an outlet is a variable that contains a reference to a specific object (such as a label, button, or text field) in the view. It’s marked with the @IBOutlet keyword, which tells Xcode that it isn’t just a variable, but an outlet.
    • Allows the code in the view controller to “talk” to an object in the view.
    • By connecting an object in the view to the view controller with an outlet, the view controller can:
      • call that object’s methods,
      • set one of its properties (such as the text it displays, its color, and so on), and
      • get the value of any of its properties.
    • The bottom line: If you want to call the methods for an object in the view, or get or set its properties, use an outlet.
  2. Action:
    • In the view controller, an action is a method that gets called in response to a specific event occurring for an object in the view (such as when a button is tapped, or the text in a text field is changed). It’s marked with the @IBAction keyword, which tells Xcode that it isn’t just a method, but an action.
    • Allows an object in the view to “talk” to the code in the view controller.
    • By connecting an object in the view to the view controller with an action, the view controller can:
      • Respond to specific events that occur for the object.
    • The bottom line: If you want to respond to the events for an object in the view, use an action.

We want a connection that will allow us to get the contents of the text field. An outlet will allow us to do that.

Once again, we’d like to have both the view (which lives the in Main.storyboard file) and the underlying view controller code (which lives in the ViewController.swift file) visible at the same time. We’ll use the Assistant Editor, which allows us to view two files side by side.

The Assistant Editor button is located near the upper right-hand corner of the Xcode interface. Do this:

  • With the main storyboard visible in the editor area in the center of Xcode, click the Assistant Editor button. Xcode tries to be “smart” about which file you want to edit, and in this case, it should “assume” that you want to look at the app’s only view’s view controller code.

You should see something like the screenshot above. You may want to expand the Xcode window so that it takes up the entire screen.

Let’s connect the text field to the view controller:

  • Select the text field on the view in the main storyboard, then control-drag (that is, drag while holding down the control key on the keyboard, or if you have a mouse, right-drag) from the view to the ViewController.swift code.
  • Let go of the mouse in the empty spot between
    @IBOutlet weak var replyLabel: UILabel!
    @IBAction func buttonPressed(_ sender: Any) {

A pop-up will appear:

Do the following with the pop-up:

  • Select Outlet from the Connection menu.
  • Give the outlet a name: enter initialAmountField into the Name field.
  • Click the Connect button.

The text field is now connected to the view controller.

Changing what the button does

At this point, the code in ViewController.swift should look similar to this:

import UIKit

class ViewController: UIViewController {
  @IBOutlet weak var replyLabel: UILabel!
  @IBOutlet weak var initialAmountField: UITextField!
  @IBAction func buttonPressed(_ sender: Any) {
    replyLabel.text = "Hi there!"

  override func viewDidLoad() {
    // Do any additional setup after loading the view, typically from a nib.

  override func didReceiveMemoryWarning() {
    // Dispose of any resources that can be recreated.


We want to change the code so that when the user taps the Tap me button, the text of the label is set to whatever text is in the text field.

The buttonPressed method — which is also an action — is executed whenever the user taps on the button, so that’s where we’ll want to make the change. Change the contents of buttonPressed so that it contains just this line:

replyLabel.text = initialAmountField.text

The code in ViewController.swift should now look like this:

import UIKit

class ViewController: UIViewController {
  @IBOutlet weak var replyLabel: UILabel!
  @IBOutlet weak var initialAmountField: UITextField!
  @IBAction func buttonPressed(_ sender: Any) {
    replyLabel.text = initialAmountField.text

  override func viewDidLoad() {
    // Do any additional setup after loading the view, typically from a nib.

  override func didReceiveMemoryWarning() {
    // Dispose of any resources that can be recreated.


Run the app. You should see this:

Now enter some text into the text field:

Now tap the Tap me button. You’ll know the app is working as expected when the contents of the label are the same as the contents of the text field:

Now that the app can accept user input and do something simple with it, we’re a step closer to having a working tip calculator. In the next installment, we’ll make our first actual tip calculation!

Download the project files

Although this is an extremely simple project, I’ve made its files available for download — click here to get them!


Beginner-friendly git tutorials and guides

At the most recent Tampa iOS Meetup, someone asked me where they could find some beginner-friendly tutorials and guides for people new to git and version control in general. I promised to post a list of them, and here they are:


A lot of programming is JUST. LIKE. THIS.

Found via imgur.