Categories
Uncategorized

I’ll be presenting at Tampa Code Camp: “Just enough React to get you into trouble”

tampa code camp 2016

Tampa Code Camp takes place next Saturday, July 16th at the offices of KForce, located just on the edge of Ybor City. It’s an annual, free-admission, community-run learning event for programmers of all stripes, from beginner to expert, from people who code for a living to programming students to hobbyists.

Every year, Tampa Code Camp features speakers presenting developer topics — largely focused on Microsoft technologies, but there’s also a “Miscellaneous and Open Source” track — and the chance for local developers to meet and hang out with their peers. It’s an all day event, starting at 8:00 a.m. and concluding at 5:00 p.m., followed by an after-party at a nearby restaurant. They typically provide free donuts in the morning, and free subs and drinks for lunch, thanks to the support of sponsors, and the work that organizers Greg and Kate Leonardo put into it.

I’ve attended Tampa Code Camp for the past couple of years, and this year, I’ll be giving the opening presentation in the “Miscellaneous and Open Source”  track:

just enough react to get you into trouble

My presentation, titled Just enough React to get you into trouble, will be a quick introduction to React, Facebook’s library for building user interfaces. I’ll explain what React is, why you might want to use it in a web project, and how to set up your computer for React development. I’ll follow up by walking the audience through a very simple single-page app written in React, giving them enough of an understanding to start their own React explorations.

Just enough React to get you into trouble will take place during Tampa Code Camp’s first time slot — 9:00 am. to 9:50 a.m. — in the “Miscellaneous and Open Source” track. I promise that it will be packed with useful information and my trademarked entertaining presentation style.

If you’d like to attend my presentation or any other the other ones at Tampa Code Camp, please register! Once again, it won’t cost you a thing to attend; registration helps the organizers plan for space, food, and other logistics matters. Be sure to check out the agenda, sessions, and speakers lists.

The details

Categories
Hardware

The 3rd-generation Moto G: The best bang for the Android developer’s buck

moto g 3rd gen 1

Inside this terribly unsexy box is the best Android bang for the buck. Whether you’re dipping your toe into the wild and wooly world of Android development like I am, or just need a decent smartphone for under $200, you should consider the 3rd-generation Moto G.

The 3rd-generation Moto G, which was released in July 2015, comes in two different models:

If you don’t mind refurbished electronics, you can get one at a really low price online. I got the 2GB RAM/16GB flash storage model listed on Best Buy’s site at US$120; with free shipping and taxes, the total came to US$130. It arrived yesterday in a plain white box along with the kind of USB charger whose cable doesn’t detach, and nothing else…

moto g 3rd gen 2

…but at this low price, and since I already have a stash of USB A-to-USB micro cables, I’m not going to complain.

moto g 3rd gen front back side

The 3rd-generation Moto G, viewed from the front, back, and side.
Click the photo to see it at full size.

Engadget summed up the 3rd-gen Moto G very nicely in their August 2015 review, titled Motorola wins the ‘best cheap phone’ crown, again. Although it’s priced like a starter phone, its Snapdragon 410 chipset help it to perform like a mid-range phone, and its display is surprisingly bright for a phone at this price point. The camera uses the same 13 megapixel sensor as the Nexus 6, which means nice photos in good light, grainy photos in low light, but a clear improvement over the previous year’s version. Battery life is very good; it played continuously looping video with the screen at 50% brightness for 10 hours and 40 minutes in Engadget’s test. It’s also waterproof for up to 30 minutes in depths of a meter (39 inches) or less:

moto g in glass of water

As for software, my 3rd-generation Moto G came with Android 5.1.1 (Lollipop) installed, but a short over-the-air update later, it was running 6.0 (Marshmallow). Motorola have always been quite quick with the OS updates, unlike many other more popular, pricier vendors.

Motorola do a very good job of not covering up Android with crapware — it’s as close to plain old Android as I’ve seen on any phone. The very few software add-ons that Moto added were subtle and nice; my favorite’s the hand-gesture detection, which switches on the camera app if you twist the phone twice, and turns on the flashlight if you make a “karate chop” gesture while holding the phone.

If you’re a reader of this blog, there’s a good chance that you’re a developer with an interest in mobile platforms. If you’re looking for an Android device for development and testing, and especially if you’re looking to target middle-of-the-road devices (which are high-end devices in emerging markets), the 3rd-gen Moto G offers the biggest bang for the buck, especially if you opt for a deal on a refurbished model.

I’m going to be doing a lot of development on my Moto G in the upcoming months; watch this space for some of the results!

Categories
Humor Programming

Demonstrating map, filter, and reduce in Swift using food emoji

In my last article, I posted this graphic, which uses emoji to make it easier to understand what the map, filter, and reduce functions do:

map filter reduce in emoji

Since then, I’ve been asked by a couple of friends if what’s in the graphic is just pseudocode or if it could actually be implemented. I told them it was the latter, and here’s my implementation in Swift:

// Map

func cook(_ item: String) -> String {
  let cookupTable = [
    "🐮": "🍔", // Cow face -> burger
    "🐄": "🍔", // Cow -> burger
    "🐂": "🍖", // Ox -> meat on bone
    "🐷": "🍖", // Pig face -> meat on bone
    "🐽": "🍖", // Pig nose -> meat on bone
    "🐖": "🍖", // Pig -> meat on bone
    "🐑": "🍖", // Sheep -> meat on bone
    "🐐": "🍖", // Goat -> meat on bone
    "🐔": "🍗", // Chicken -> poultry leg
    "🦃": "🍗", // Turkey -> poultry leg
    "🐸": "🍗", // Frog  -> poultry leg (no frog leg emoji...yet)
    "🐟": "🍣", // Fish -> sushi
    "🐠": "🍣", // Tropical fish -> sushi
    "🐡": "🍣", // Blowfish -> sushi
    "🐙": "🍣", // Octopus -> sushi
    "🍠": "🍟", // (Sweet) potato -> French fries
    "🌽": "🍿", // Corn -> popcorn
    "🌾": "🍚", // Rice -> cooked rice
    "🍓": "🍰", // Strawberry -> shortcake
    "🍂": "🍵", // Dried leaves -> tea
  ]
  if let cookedFood = cookupTable[item] {
    return cookedFood
  }
  else {
    return "🍽" // Empty plate
  }
}

let cookedFood = ( ["🐮", "🍠", "⚽️", "🐔", "🌽"].map { cook($0) } )
// cookedFood == ["🍔", "🍟", "🍽", "🍗", "🍿"]


// Filter

func isVegetarian(_ item: String) -> Bool {
  let vegetarianDishes = Set([
    "🍟", // French fries
    "🍿", // Popcorn
    "🍚", // Cooked rice
    "🍰", // Shortcake
    "🍵", // Tea
  ])
  return vegetarianDishes.contains(item)
}

let meatFree = ["🍔", "🍖", "🍟", "🍽", "🍗", "🍿", "🍰"].filter { isVegetarian($0) }
// meatFree == ["🍟", "🍿", "🍰"]


// Reduce

func eat(_ previous: String, _ current: String) -> String {
  let qualifyingFood = Set([
    "🍔", // Burger
    "🍖", // Meat on bone
    "🍗", // Poultry leg
    "🍣", // Sushi
    "🍟", // French fries
    "🍿", // Popcorn
    "🍚", // Cooked rice
    "🍰", // Shortcake
  ])
  if (previous == "" || previous == "💩") && qualifyingFood.contains(current) {
    return "💩" // Poop
  }
  else {
    return ""
  }
}

let aftermath = ["🍔", "🍟", "🍗", "🍿"].reduce("", combine: eat)
// aftermath == "💩"

I put this into a Swift playground, which you can copy from this Gist or download here.

Categories
Uncategorized

Map, filter, and reduce explained using emoji

Picture showing three functions: 1. the map function taking an array containing the cow face, roasted sweet potato, chicken, and ear of maize emojis and the cook function as its arguments and returning an array containing the cheeseburger, french fries, poultry legs and popcorn emojis; 2. the filter function taking an array containing the cheeseburger, french fries, poultry legs and popcorn emojis and the isVegetarian functions as its arguments and returning an array containing the french fries and popcorn emojis; 3. The reduce function taking an array containing the cheeseburger, french fries, poultry legs and popcorn emojis and the eat function as its arguments and returning the pile of poo emoji as its result.

Click the graphic to see it at full size.

I made the graphic above based on this amazing tweet by Steven Luscher (@steveluscher):

It’s a geeky t-shirt waiting to happen.

Categories
Uncategorized

Amy Poehler on…coding?

everyone lies about writing

yes please

This is from the preface of Amy Poehler’s book Yes Please, and it tells the truth about writing:

Everyone lies about writing. They lie about how easy it is or how hard it was. They perpetuate a romantic idea that writing is some beautiful experience that takes place in an architectural room filled with leather novels and chai tea. They talk about their ‘morning ritual’ and how they ‘dress for writing’ and the cabin in Big Sur where they go to ‘be alone’—blah blah blah. No one tells the truth about writing a book. Authors pretend their stories were always shiny and perfect and just waiting to be written. The truth is, writing is this: hard and boring and occasionally great but usually not. Even I have lied about writing. I have told people that writing this book has been like brushing away dirt from a fossil. What a load of shit. It has been like hacking away at a freezer with a screwdriver.

Coding is romanticized in the same way these days, thanks to the tech success stories we hear in the news, the increasing ubiquity of processors and the rise of the Internet of Things, concerns about job security and being “automated away”…and possibly because coding looks a lot like writing. “You must learn to code!” has been the battle cry of the White House, organizations like Code.org, tech titans, millennial entrepreneurs, and even that homeless guy:

I understand the urge to evangelize coding; in fact, it’s been a good chunk of my career. There’s nothing like the feeling you get when you run a program that you’ve written and seeing a computer or device turn your ideas into action. Even after coding for decades, I still give myself a Barney Stinson-style “self-five” when my code compiles and runs as I expect.

programmer punching through laptop screen

But as with writing, between the initial rush of setting out to code a program and the point that you declare the job done is a long journey of days, months, and even years. That journey has its moments of joy, discovery and wonder, but they’re punctuated with stretches of tedium, toil, and beating your head against your desk (usually figuratively, but sometimes literally) wondering why you can’t get the damned code to work. Like many writing projects, both professional and personal, many coding projects are abandoned. Writing and coding projects are never really finished; “done” is an arbitrary point determined by the writer or coder, and both are left with a lingering feeling that their project could benefit from just a few more changes. And that homeless coder is still homeless:

Thanks to the similarity between writing and coding, I’ve occasionally paraphrased Dorothy Parker: “I hate programming, but I love having programmed.

web horizontal rule

Want a coding-themed blast from the past featuring Amy Poehler? Here’s the pilot for a ’90s TV series called RVTV, in which Poehler plays a hacker who’s infiltrated the NRA database. She also breaks into some old-school rap:

Categories
Uncategorized

Next Tampa iOS Meetup on June 28th: What’s new in iOS 10 and Swift 3.0

what's new in iOS 10 and swift 3

The next Tampa iOS Meetup has been announced for Tuesday, June 28th at 6:30 p.m., and we’re going to talk about the announcements made at this week’s Apple Worldwide Developers Conference, with special attention to iOS 10 and Swift 3.0. It takes place at our usual spot: Energy Sense Finance, 3825 Henderson Boulevard (just west of Dale Mabry), Suite 300.

At the meetup, we’ll:

  • Present a review of what was announced at WWDC, with a particular focus on iOS and tvOS development
  • Show you how to get your hands on the beta software, including Xcode 8 and iOS 10
  • Take a look at the changes introduced in Swift 3, with an emphasis on where you may have to update your existing code
  • Talk about what you’d like to see in upcoming Tampa iOS Meetup sessions

Join us on the 28th, get to know your fellow Tampa Bay iOS developers, and get ready to learn and have some fun!

Tampa iOS Meetup is a monthly meetup run by local mobile developer/designer Angela Don and Yours Truly. While Tampa has a couple of great iOS developer meetups — Craig Clayton’s Suncoast iOS and Chris Woodard’s Tampa Bay Cocoaheads, we figured that there was room for a third iOS meetup in the Tampa Bay area, and especially one that would stray into other areas of mobile development. So we made one.

The Details

  • What: Tampa iOS’ Meetup’s “What’s new in iOS 10 and Swift 3.0” session. Please sign up on our Meetup page so we can plan accordingly!
  • When: Tuesday, June 28, 2016, 6:30 p.m. – 8:30 p.m. We’ll have some snacks at 6:30, with the presentation beginning at 7:00.
  • Where: Energy Sense Finance, 3825 Henderson Boulevard (just west of Dale Mabry), Suite 300. See the map below.
  • What to bring: Yourself, but if you’d like to follow along, bring your Macbook and make sure it’s got the latest Xcode.
  • What to read in advance: If you’re one of those people who likes to do some readings ahead of a presentation, check out What’s New in Swift 3? by the folks at RayWenderlich.com.
Categories
Uncategorized

OpenHack Ybor tonight!

IMG_2475

If you’re a developer or tech-minded person in the Tampa Bay area and you’re looking for some fun conversation this evening, join us tonight from 6:30 to 9:00 at New World Brewery in Ybor City for Ybor Tech’s June OpenHack!

ybor tech

OpenHack Ybor, held once a month, is run by local Ruby developer Tony Winn and Jessica Arango for techies of all stripes who want to get to know their local peers, see what they’re up to, and enjoy some craft beer and free pizza.

IMG_2476

We usually gather on the patio of New World Brewery, a brewery-turned-bar in Ybor City, Tampa’s historic warehouse district that was once home to a large cigar-making industry and is now one of those hip mixed-use areas with schools, offices, bars, restaurants, and alas, the Church of Scientology. You can’t win ’em all.

IMG_2477

Some of us are just happy to converse, and some of us like to pull out our computers and show off their latest project or gear. Either approach works just fine, and Tony usually brings a wifi hotspot for those of you who need to get online. There are tables a plenty to “set up shop”, and the covered part of the patio has outlets.

I’d be remiss if I didn’t mention New World’s excellent selection of beers…

IMG_2478

…and for you Marvel/pinball fans, their current selection of distractions is pretty nice too:

IMG_2474

It’s also worth mentioning that whoever’s in charge of the music at New World has eclectic, excellent taste.

openhack at new world brewery wide

Click the photo to see it at full size.

There aren’t many better ways to enjoy the fantastic and fabulous Ybor City and our sub-tropical paradise while having great conversation and drinks with your fellow Tampa Bay area geeks than hanging out at an Ybor Tech OpenHack. Come on down — we’d love to see you there!

web horizontal rule

Need more details? Visit Ybor Tech’s June OpenHack event page.