Another of my goals for this year is to considerably raise my proficiency with a programming language I thought I’d never use again, despite its ubiquity: Java.

Until last year — and by “last year”, I mean 2016 — I hadn’t done anything with Java since I looked like this…


…and since the preferred Java IDE looked like this…


…and was distributed via something like this:


That all changed thanks to the Tampa iOS Meetup, a regular gathering for people interested in learning how to develop iOS apps:

Angela Don and I started Tampa iOS Meetup in October 2015, fresh off a successful “Intro to iOS Programming with Swift” presentation at BarCamp Tampa Bay. The BarCamp presentation in turn was the result of our meeting at Ybor Tech OpenHack, a monthly gathering of programmers for conversation over beer at New World Brewery, one of Tampa’s better beer pubs.


The moral of the paragraph above is one I’ve been touting for years: if you want opportunities, you’ve got to network. One of my goals this year is to turn up my outreach, not just in the Tampa Bay area where I live, and not just nation-wide, but globally.

Java homework, after 16 years

At one of the meetups, one of the attendees asked me for help with an assignment for a Java course he was taking. I told him that I’d be happy to help, but warned him that it had been over a decade since I’d written anything in it. While C# (with which I have more recent experience) is similar to Java, it’s not the same thing. He was undeterred, and we arranged to meet at a coffee shop, where I could help him as he did the assignment.

Our meeting never happened. Between putting in a lot of overtime at work and tending to his family in the remaining time, he didn’t have any time to do the assignment and didn’t even have any idea of where to begin.

“I need it by tomorrow. Could you do it for me? Just tell me your hourly rate, and I’ll pay you,” he said.

“Look, let me see if I can even do it first,” I replied. “We can talk money later.”

“I’ll send you my assignment,” he said, “and it has to be done using JavaFX.”

“JavaFX it is,” I said, making a mental note to Google the term.

The first assignment


After spinning my wheels for what felt like an eternity trying to get a project using JavaFX (which turned out to be a GUI library) running using Eclipse (a.k.a. the worst IDE ever), I switched to NetBeans and had a simple “Hello World!” program operational in a few minutes.

With what remained of the evening, I now had to do the actual assignment: given a full filename that the user enters, read the contents of that file, and then display all the words in that file in an alphabetically-sorted list.

A couple of hours later — and some Googling for reference material on Java Lists, file operations, and JavaFX UI elements — I surprised myself with a working program:


After cleaning up the code and adding some Javadoc comments in order to make it academically complete, I emailed him the code (for the curious, it’s on GitHub). A couple of days later, he told me that he got full marks for the assignment. I was pleased with myself, and thought that this would be my last encounter with Java.

One good assignment deserves another


A couple of days later, he made a second call for help. I gave him a couple of pointers to put him in the right direction, but after a number of impassioned pleas, I ended up coding the whole thing. This time, it was a “states and capitals” quiz, complete with pop-up windows for right and wrong answers:


I used an Iterator to “step through” the set of states and capitals, which were stored in a Hashmap. I worried that using it might have been beyond the scope of the assignment, but it greatly simplified the code. My friend got full marks for the project, which you can find on GitHub.

The third time’s the charm


Good things come in threes, and with two assignments that earned full marks, my friend asked for help with the final assignment: the clichéd-yet-mandatory “access a database and display some of its contents” assignment. Here’s the text of the assignment, which for some reason was set in Comic Sans, which I’m sure is not the official font of Serious Database Work:

Create a JavaFX GUI that allows the user to retrieve records from the customers table in the “pcparts” database. The GUI should allow the user to specify desired fields, desired order, and a where condition. Display only the desired fields in the desired order for the desired where condition. You may display the records in the GUI in any way you wish.

This time, there wasn’t even any pretense that I’d provide tips and he’d write the program. I just told him to check his inbox later that night.

Here’s what my implementation looked like:


Once again, you can see it on GitHub.

As with the other two assignments, it was an evening’s worth of work, most of the time spent Googling for information about JDBC and Java ObservableLists. With the completion and submission of this assignment — and the full marks he got for it — my friend successfully completed his Java course.

“And that,” I thought, “will likely be the last I’ll see of Java for a while.” I decided that the projects shouldn’t go to waste sitting on my hard drive and posted them to my GitHub account, which needed some fattening anyway.

A headhunter comes a-callin’ (with a test)


A couple of months later, I got an email from a recruiter. Thanks to my online presence, I get these on a regular basis, but this one was intriguing:

Hi Joey,

I’m an IT Recruiter with [recruiting company], I came across your profile and was impressed with your skills and background so I wanted to reach out to you regarding an exciting opportunity!

Our client is looking to hire a Developer Evangelist to join their growing team based out of Baltimore, MD. They are looking for someone that is passionate about technology and can provide code samples, white papers, blog postings, and other educational content in order to demonstrate the power of our client’s platform. The role is 50% travel but in between trips to trade shows and conferences all of the work would be remote.

Unlike most of the recruiting emails I get, this one seemed worth replying to, and a day later, I had a phone interview. It went well enough for them to ask me for a resume, references, and — horror of horrorstake a timed online Java proficiency test.

“And this is where I’ll get taken out of the running,” I thought. There’s been at least one time when I’ve failed a test on a language that I was comfortable with and used regularly; how the hell was I going to pass test for Java, which I’d made a career of avoiding and with which I hadn’t worked with in 16 years, with the exception of those homework assignments?

I still went along with the process and took the test. I managed to answer a number of its questions, and a lot of that was thanks to the Java practice I got from doing my friend’s assignments. Despite that, I figured I’d get the “Sorry, you didn’t make the cut” email in a couple of days.

Instead, I got a call: “Congratulations! The platform architect and product manager would like to schedule an interview with you.”

The interview


All my interviews were conducted via Skype. The first and most crucial one was with Product Manager Jason Rusk (to whom I report) and Platform Architect Robert van Voorhees. During the interview, Robert asked if I had anything posted on GitHub, especially in Java. I pointed him to the assignments, and he gave them a quick once-over.

“Good clean code, easy to follow, nice notes,” he said, nodding approvingly.



On the 15th of September, I got an email that started like this:

Hi Joey,

Congratulations again on your offer from SMARTRAC. I have attached a copy of your contract for you to look over. They would like to offer you an hourly rate of $[ask me in person over a beer]/hr and a conversion salary of $[again, ask me in person over a beer].

Moving forward


Smartrac’s Smart Cosmos platform is largely written in Java. While I’m not likely to contribute code to it, I’ll most certainly help partners and customers integrate with it. Furthermore, many of these other people may be coding in Java, and I’ll need to provide code samples in their language. Hence this year’s push to go back to Java after studiously avoiding it for nearly two decades.

Luckily for me, Smartrac hooked me up with IntelliJ IDEA Ultimate, a Java IDE that’s light-years better than NetBeans (and thousands of light-years better than Eclipse)…

…and I’ve been making the most of my spare moments getting Java practice in the form of Android development. Even at the airport, when my flights are delayed by hours:



None of this would’ve come about had I not helped my friend with his homework, so I suppose another one of my 2017 plans should be to help people learn to code when I can. You never know how it’ll pay off!


My plans for 2017, part 1: Work

by Joey deVilla on January 1, 2017


Creative Commons photo of Z566M nixie tubes displaying 2, 0, 1, and 7 by “Hellbus”.

As of the start of 2017, I’ll have passed the traditional 90-day probationary period as Smartrac’s Technology Evangelist. So far, it’s been an enjoyable, exciting, and challenging whirlwind.


It helps that I’m working with some brilliant people with all sorts of experience, ranging from electrical/radio engineering to biophysics to good ol’ computer science, to having been in the Navy and Homeland Security, and who’ve contributed to some open source frameworks that you may have used if you do front end web development.

am the dumbest guy in the room, and that’s all right with me.


targetOne of my goals for this year is to make the most of my proximity to all these smart people, and all the knowledge, chances to learn, and access to opportunities that they provide, and in return, showcase their brainpower and works to audiences both technical and non-technical.

The experience has been made even better by the sweet gear that I’ve been assigned

…as well as the travel opportunities I’ve been in my short span of time at the company, including Asheville, North Carolina, where Smartrac has both an office and an RFID tag and inlay manufacturing facility…


…three trips to the Baltimore office, where our core platform development team works (well, we’re actually in Columbia, just outside Baltimore)…


…a partner visit in London at the start of December, and an upcoming trip to New York


…where I’ll be working our booth on the exhibit floor at the National Retail Federation’s Big Show 2017, a conference that will be in its 116th year:


targetAnother goal for 2017 is to make the most of the opportunities presented before me, whether in the form of the material support that I get from the company, as well as the chances to travel all over the U.S. and the world to meet customers, developers, partners, prospects, and talk about Smartrac’s technology. In the rush and general busy-ness of working in a fast-paced business where the stakes are high, it’s all too easy to forget that with this line of work come some pretty rare opportunities.


At the heart of Smartrac’s offerings is the Smart Cosmos platform, a data virtualization technology for real-world objects and their interactions that is built around something that we call the TRIM metaphor.

Hey, we’re a tech company, so of course TRIM is an acronym:

  • Things are people, places, products, and any other real-world object that an organization would like to keep track of
  • Things connect real-world objects to their data representation.
  • An example: Associating a bike with serial number x.
  • Relationships answer a true/false question about any two Things in the system. An example: Does Joey own a bicycle with a serial number x?
  • Relationships capture a one-way association between two things.
  • An example: Joey → owns → bicycle. The relationship does not work in the opposite direction.
  • Interactions record events over time between any source Thing and any target Thing.
  • Interactions are time-series data captures that are broadcast in the system for the benefit of “listeners”, which are free to do with these messages as they will.
  • An example: Joey rode bicycle (serial number x) at time y.
  • Metadata stores additional strongly-typed information about a Thing in 3-tuples of (data_typekeyvalue).
  • Metadata key names are arbitrary, and its values are measurement system-agnostic; the values do have to be of the type specified by data_type.
  • An example: “Joey’s bike is colored sky blue” could be represented as Metadata with the 3-tuple (string, “color”, “sky blue”).


If you combine Smart Cosmos with a technology to make real-world objects detectable by processing power — such as the RFID technology that was the original basis of Smartrac’s business — you’ve got the basis for a lot of applications, from manufacturing to retail to healthcare and more.

A technology like Smart Cosmos needs to be explained to a number of parties, from technical decision-makers and the developers who have to integrate Smart Cosmos with their organization’s systems and workflows, to non-technical decision-makers who need a layperson-friendly explanation of the technology they’re counting on to drive their business. That’s where I come in.


As far as Smartrac is concerned, my big goal for this new year is to spearhead the revision of our library so that both technical and non-technical people who want to find out more about our platform, from the broadest, high-level strokes to the finest details of its API and inner workings, can do so quickly, easily, and accurately. A lot of this will be the wholesale updating of the Smart Cosmos site, writing and editing the blog, case studies, white papers, documentation, and creating documents that aren’t limited to writing, but also audio (in the form of things like podcasts), audio-visual (in the form of videos) and even interactive tools. As far as I’m concerned, as long as what I produce helps our audience understand our platform, the sky’s the limit.

It’s going to be an exciting year!



Over the past little while, Apple has been telling iOS developers that by January 1, 2017, in order to be in the App Store, any app that made a connection to a server could do so only via a secure one — that is, only HTTPS and not HTTP connections would be allowed. They’ve just announced that “this deadline has been extended and we will provide another update when a new deadline is confirmed.”

Starting with iOS 9, apps allowed only HTTPS connections by default. However, many servers — including OpenWeatherMap’s, which powers a number of weather apps, including the one featured in my tutorial — don’t accept HTTPS connections. That’s why they still offer the option to let your app make connections over plain old HTTP by changing the default App Transport Security settings in the app’s info.plist file.

You could allow apps that you were developing to use plain HTTP connections by editing their info.plist files in its text form and adding this snippet…

…or do it the graphical way:

While requiring that all connections be secure ones helps to keep network data secure and reduce the probability of unwanted access, a large number of web services are still not using secure connections. This is probably the reason for the deadline extension.

You have a reprieve, iOS developers, but the sooner your apps’ connections are secure, the better.

{ 1 comment }


For the new year, I’ve decided to try a new approach with Tampa iOS Meetup, the regular Tampa Bay gathering that I run, where I cover developing apps for the iPhone and iPad. Instead of focusing on a single programming topic, each Tampa iOS Meetup session in 2017 will cover the highlights of developing a single app, starting with the concept, then look at the features, technologies, and libraries that we’ll need in order to build the app, and then show you how to bring them all together and turn the concept into a finished, working app.

The reason I’m going with this new approach is that I’ve been asked the same question again and again, and it goes something like this:

“I’ve been studying iOS development for some time, and I’m still having a problem writing apps. I know how to program specific features in iOS, but I don’t know how to turn a bunch of features into an app.”

It’s one thing to go through tutorials that show you how to program a specific feature. It’s a completely different thing to take the knowledge from those tutorials and then write an app. My goal for Tampa iOS Meetup in 2017 is to show you how to make that leap by walking you through the process of making apps.


Tampa iOS Meetup’s 2017 sessions will start on Tuesday, January 31, 2017 at 6:30 p.m. at the offices of Wolters Kluwer’s Westshore office (1410 North Westshore Blvd, suite 400) with a relatively simple app: the dreaded tip calculator.

Why “dreaded”? That’s because it’s a relatively simple app, and a lot of people — especially in the App Store’s early days — made their own version. There are a few nice ones, but most of them are pretty sad. Our goal for the meetup will be to cover the many ways to make a tip calculator app that you wouldn’t be ashamed to put in your developer portfolio.

In the session, we’ll cover a number of topics, including:

  • Making the most of user interface controls
  • Animations and other visual effects
  • Using rounding functions
  • Useful hints for the Swift programming language
  • Taking advantage of those little things that make an app feel more solid and professional

This session will be suitable for newcomers to iOS development. If you’ve done some simple JavaScript development, you shouldn’t have any problem following along. If you’re new to programming in general, but have always wanted to make an iOS app, this is an ideal first project.

You’ll come out of this session with a better understanding of the app development process, as well as source code and notes that you can use in writing your own apps.

Does this sound like something you’d like to catch? Find out more on the Tampa iOS Meetup page, where you can sign up to attend. Once again, the session takes place on Tuesday, January 31, 2017 at 6:30 p.m. at Wolters Kluwer’s Westshore office (1410 North Westshore Blvd, suite 400). I hope to see you there!

{ 1 comment }


Click the comic to see the full version.

Toggl, the people who brought you the hilarious (well, hilarious to us developers, anyway) comic How to save the princess using 8 programming languages, have come up with a new one: IT jobs explained with a broken lightbulb.

I’ve posted an except above, which shows the 4 major roles that I’ve played, in one form or another, throughout my career. My current job as Smartrac’s Technology Evangelist mixes all of them together, which pleases me greatly.


JavaScript programming these days is quite often ridiculous. Too many projects that are the equivalent of building toolsheds by bringing in the US Army Corps of Engineers. They could’ve been done simply with JavaScript (and maybe a little jQuery for convenience’s sake), but they have a clown car’s worth of frameworks bolted on.

Wes Bos’ answer to this problem is JavaScript30, a free-as-in-beer 30-day course in which he walks you through building 30 JavaScript applications in 30 days using only JavaScript, HTML, CSS, and a browser and editor. No compilers, libraries, frameworks, or boilerplate involved!


If you haven’t read it yet, go ahead and check out Jose Aguinaga’s article, How it feels to learn JavaScript in 2016. It’s a tour of the mess of tools, frameworks, and even various dialects of JavaScript that get bolted on to a lot of web front-end projects these days. While it takes things to an extreme, it’s an extreme that many projects approach.

I’ve met too many developers who can no longer make even the simplest of JavaScript apps without reaching for one (or more) of these add-ons. There’s nothing wrong with React, Redux, Angular, VueJS, RxJS, WebPack, and all that other stuff in the clown car (hey, I’ve done presentations on React myself) — when they’re well and truly needed. It’s just that they’re not needed for many projects, and often just add to their bloat.

Enter Wes Bos and JavaScript30. His approach is simple: re-learn the basics by doing, doing often, and doing by using the ES6 flavor of JavaScript, which modern browsers support. I’ll let Wes pitch it to you himself:

Over 30 days, he’ll walk you through 30 applications, each one coded using only the basic HTML5 building blocks: HTML, CSS, and JavaScript. Some of these applications answer the question “How do I get this UX effect without frameworks?”, such as a JavaScript drum kit, a CSS/JS clock, an image gallery, detecting the when the user has typed the Konami code, an HTML5 video player, and even a Whack-a-Mole game. Other applications are exercises for learning the basics, such as mastering arrays, objects, events, and local storage.

As I mentioned earlier, you can sign up for JavaScript30 free of charge. Signing up gives you access to this video-based course (with downloadable files), which you can take at your own pace, any time. My guess is that Wes is using this course as advertising for his other paid courses, but those courses are well worth considering. Wes knows his stuff, he’s a solid instructor, and he’s one of those people who goes the extra mile to make sure that his material is interesting and entertaining.


A great deal: SanDisk’s 200GB MicroSD card for $64!

by Joey deVilla on December 8, 2016


If you’re looking for a quick way to boost your laptop or mobile device’s storage capacity, or looking for a useful gift for a techie friend or DSLR photographer, you’ll want to check out this Amazon deal for SanDisk’s 200GB MicroSD card.

At $64, it’s anywhere from $25 to over $100 cheaper than the slightly larger 256GB cards, and it’s even cheaper than some of the 128GB cards. It boasts a zippy 90MB/s read speed, which means you can read HD video without hiccups, or use it as a tiny extra hard drive. It comes with an SD adapter so that it’ll fit in your computer or camera. I think I’ll place my order for one tonight.

Thanks to Joe Healy for the find!