iOS Bundles

“Bundles and asset catalogs are features of Apple’s systems every developer and app is using, even though many developers are probably not aware of their existence or how powerful they can be, especially when used together.”

Until I developed my first framework product, I fell in to that category of underutilizing bundles. I first used asset catalogs when Apple pushed it on developers for use with app icons, but it took me a while to fully embrace the convenience and versatility.

This article does an excellent job of explaining what bundles and asset catalogs are, and how you might want to use them in your next app.

bundles and asset catalogs

Release Notes

When you take an app from development to the app store, the point is to sell it, or get people to use it, right? (Don’t get me started about all the android test apps that people publish just to see if they can do it) That’s where marketing and advertising come in to play. Great technology is not a great product if nobody knows about it, or nobody uses it.

The transition from development to marketing happens with the release notes, that paragraph that goes along with new releases, in the “what’s new in this version” section. Think about that. Who usually writes these notes? Quite often, it’s a developer, because they are the ones that make the build and go through the app store publishing process. Who reads these notes? Customers. Not the VP of Development or your engineering manager. So why are most release notes totally worthless and unappealing to the customers???

When I work on a new release, I make a detailed change log with every bug fix or new feature. Maybe I updated a third party library, or used a new version of Xcode, that’s in there. This change log is meant for developers to read, not customers. Most of the stuff in there is unintelligible or irrelevant to the users of the app.

When a build is ready for public release, I take that change log and send it to the marketing department (in a small company like mine, that’s still me, but I change hats : ). Most of the details get filtered out, and the technical jargon gets translated in to what the end users will understand and care about. This is what becomes the “what’s new” release notes.

Companies are wasting a golden marketing opportunity when the release notes suck. As apps get updated, many customers will look at those release notes, even if “automatic updates” is enabled. Some customers will actually decide whether to update or not based on the release notes. You should capitalize on every opportunity you have to send a message to your customers.  This is when you can increase customer satisfaction, which leads to more word of mouth sales.

Here are some examples of release notes that suck:

Bug fixes” – What are they??? You are telling the customer nothing. Be descriptive, and put a positive spin on it. How about: “fixed a problem that some customers were having with search, and now it works much faster”.

We update our app regularly” – Oh how special. That’s like saying “this is the text that you are reading right now”. If you are too lazy to put a few meaningful sentences in there, then that implies you don’t care much about your customers, or you are doing secret stealth updates with features that customers don’t care about. And by the way, there are some companies that update their apps every 1-2 weeks. That is way, way too often. That shows a lack of planning and customers don’t like all that change.

See” – This smacks of laziness. The app publisher is actually telling the customer to go visit a web page to save the app publisher the trouble of copying it here. And if you say, well, that web page is very long and contains too much text, then it is meant for a developer to read, and a shorter marketing version needs to be created for the “what’s new” section.

Optimization and UI enhancements” – So close to a good marketing message, yet so far. Be positive and encourage users to open your app to see the new features. How about “the leaderboard screen now shows your friends’ scores at the top”, “new snazzy visual effects when you reach a new level”, “you can change sound effects with just one tap”, or “app loads twice as fast now”.

Release notes are a marketing message, not an engineering message. This is your chance to remind users of features they may have forgotten about, or never used: “Enable lightning notifications from the main screen now”. You can talk about how great you’re company is: “We have been listening to you, and this version has the most requested new feature”. You can be funny (but don’t ramble on too much), and maybe someone will mention this to another potential customer.

One other thing… Be careful not to give the impression that your app is too buggy. For example, “Fixed a bug that would wipe out all user data” is pretty scary. If this is version 6.1 and someone reads that, you might be thinking gosh, how long was that bug in there and can I trust this app with my data? A more toned down version would be “Fixed a data loss issue that affected some customers with older devices”.

Remember, the last “what’s new” notes are also readily seen by customers who haven’t purchased your product yet. They appear on the same product page that the product description and system requirements appear. If you have one of those out-of-date or inaccurate reviews like “This is crap, doesn’t work on iPhone X” and your “what’s new” section says “Optimized to work great on iPhone X”, that’s a way better message than “bug fixes”. You are talking not only to existing customers, but potential new customers, too.

Release notes matter. Don’t be lazy. Make it a marketing message.

Hiring Robots

Having worked as a contractor quite a bit, I’ve interviewed at a bunch of companies and have participated in quite a few interviews. When I cofounded a high tech startup in Silicon Valley and helped grow it into a successful profitable business, I was “the guy” who made the decision to hire and fire several employees. There’s one thing I learned through all of this: most people aren’t very good at hiring. Most people are trying to hire robots.

In this article I focus on the engineering field, but most principles apply to all careers.

How did I come to this realization? Well, here are some good metrics: If a company has an open position for several weeks or months and there are lots of good candidates out there, that’s a red flag. If your company has a lot of turnover, that’s a red flag. If you don’t have a good company culture where employees love to work, that’s a red flag. If you are not consistently meeting deadlines (without overworking your employees), that’s a red flag.

Here are some clues that you might not being taking the right approach: If your “senior engineer” who has never been trained in hiring or management is making the hiring decision, that’s a red flag. Anyone conducting an interview should know which questions are legal to ask, and which are not. For example, you can’t ask “so do you have kids?”. Someone who has managed employees and projects, not just technical tasks, should be involved in the interviewing. These people know the consequences of a bad hire. Your senior engineer may be technically brilliant, but may not have the right big picture company perspective in mind (and all the points I bring up in this article).

If you grab your “junior engineer”, shove a resume at her, and tell her to “interview this guy” today, that’s a red flag. Not only do you run the risk of her asking the “no no” questions, she has no experience in interviewing and this can be very awkward for both parties. You should have a script that can be followed (if necessary), and each interviewer should have adequate time to read the resume and think about what to discuss well in advance.

If the CEO speaks to each candidate for an hour before there is any filtering or technical evaluation, that’s a red flag. That is an incredible waste of a valuable resource, probably the most expensive resource in the company. I do think a CEO of a small company (or senior manager) should meet each candidate sometime during the process, but if basic filtering can’t be delegated to someone less expensive, then that’s a sign of bad management.

If only one person participates in the technical evaluation, that’s a red flag. Putting all that responsibility on someone who is most likely poorly trained in how to do it properly is not smart. It’s good to get more than one technical opinion. I have personally been deemed under qualified and over qualified by the same interview team at the same company! On the other hand, being placed in front of a tribunal of 5 engineers grilling you on esoteric technical questions is also the wrong approach. Subjecting a candidate to such stress is not a sign of good company culture.

If your technical questions consist of things that can be answered by Google in less than 30 seconds, that’s a terrible interview. Gone are the days when you needed to memorize as much as possible to do engineering. Today, you need to be able to find information quickly, not memorize syntax or algorithms. If you are aware of certain concepts and features in a language or framework, you should be able to find sample code almost instantly. Being able to recognize good solid sample code vs crappy sample code is the skill you need today. Modern IDE’s autocomplete and fix your syntax errors so you just need to get close. I have personally been deemed technically unqualified after failing to answer a question that later I found on in 30 seconds (yes, I timed it!). Common technical interview questions I’ve seen are things like “code up the fibonacci sequence recursively”. Really? Why? I can find some very good sample code to do this in seconds. A better question is “look at this code and tell me how you could improve it”.

Of course, engineers do need to product new and unique code, and do need to construct good algorithms. The better way to evaluate this is to ask for a flow chart or high level description of the modules needed for a bigger more complex problem.

When it comes to formulating a good technical interview, remember how engineers actually do real work. We spend some time thinking about a problem, we peruse the internet for ideas and sample code, we optimize and customize, we test and fix our silly bugs, we refine what is working and make it work better — all of this without anyone looking over our shoulders. If you expect someone to regurgitate perfect syntax and memorize every API call while being timed in front of several engineers, then you are trying to hire a robot. Do you want to work with a robot?

One thing is undeniable: hiring the wrong person is worse than hiring nobody. Interviewing and training new employees is a very costly process. If you are not tracking this “cost”, then you should be. Once you decide somebody is not right for the job, then the process of trying to correct the behavior or remediate is also very costly. Having fired several people myself, I know it’s a very heavy drain emotionally and the hardest thing I’ve ever been paid to do. It is to be avoided at all costs!

On the other hand, you don’t want to be in analysis paralysis. I know of a company that is understaffed and has had a engineering position open for two years, in a job market that is filled with qualified engineers. Their “senior engineer” (with no training in hiring or management) has been spending approximately 6 hours per candidate, plus additional man-hours from the candidates and other employees who get pulled in, only to determine that every candidate (dozens of them) is not technically qualified for the job. There is a real measurable cost in the time spent by the senior engineer here, and an additional cost in being understaffed for so long.

If you can’t seem to find anyone who is technically competent, then perhaps your bar is way to high. It’s not really that hard to stump an engineer, if that is your goal. Perhaps you don’t have the proper company infrastructure in place. It is very difficult to find a “Jack of all trades” — those people are rare gems. If your engineering structure depends on everyone being an expert in everything, then you are doomed to failure. That is unsustainable. What you usually end up with is understaffing, over worked employees, and the engineers are “masters of nothing”.  Instead of the robot who is a “full stack engineer who can write iOS, android, and web apps, with extensive experience in back end server code”, perhaps you need to break that apart in to 2, 3, or even 4 job positions. Yes, it’s more expensive, but that might be what it takes for long term success. If you can’t afford to do it right, it is time to rethink your plan.

Another mistake is looking for a specific skill, and if you don’t find it, you move on until you find someone with only that specific skill. You are looking for the ability to learn new things quickly, not the ability to reproduce the past. Imagine asking Michelangelo “Have you ever painted the ceiling of a large building?”. He says “No”. The hiring manager say “Sorry, you are not qualified to paint the Sistine Chapel”. What you end up with is a house painter, and you just passed up on one of the greatest artists of all time.

Here are some skills or qualities that hiring folks rarely evaluate. To me, these are all “technical” skills because they are all needed to perform a technical job, or are qualities that are desirable in the long term as an employees moves up the ladder:

—Can you write effectively? Engineers need to communicate clearly and effectively. We write several emails every day, need to comment our code, need to comment our source code commits, and may even need to communicate with clients.

—Do you act professionally? i.e. Will you embarrass the company if you speak or meet directly with a client? You want engineers that can represent your company well, and instinctively know how to avoid sticking a foot in the mouth, don’t make promises that can’t be kept, and don’t piss off the customers.

—Do you play well with others? Do you work well with others? These are really two different points. Knowing the technical aspects of working in a team environment is one thing, such as good source code management, good code documentation, communicating with the team. The other part is getting along, being well liked, not pissing off your colleagues. One bad apple really does spoil the whole bunch!

—Can you think outside of the box? Some engineers are great at doing what they are told, even if the instructions or requirements are faulty. These are robots. You need engineers who can question a bad design, propose better solutions, and add value to the engineering process.

—Do you get your work done on time? This is really crucial, and some technical interviews attempt to measure this by giving a timed coding test, thinking that the amount of time you spend typing code is equal to your productivity. That’s nonsense that only a robot excels at. A good engineer spends more time thinking about the problem, asking questions, and exploring solutions at a high level than coding. Someone who gets tasks done on time is the guy who doesn’t take a long lunch and works a little later when a deadline is approaching. He’s the guy who fully understands a problem before diving in to it. He’s the guy who comes up with the right approach. He’s the guy who stays focused on the highest priority of the moment.

—What is the quality of your work? Is it readable? Sometimes I am asked for a code sample, but most often I am not. Sometimes the only code that is reviewed is the code which was written in haste and under pressure — not my typical code. You should ask for some sample code that the candidate is proud of. You shouldn’t look for the most clever algorithm or feature implementation, but the code should be easy to follow, clear and readable, and just enough comments where needed.

—Can you think on your feet (work without close supervision)? Supervisors are not around all the time. Sometimes you are given vague instructions, or incorrect instructions, or something happens that suddenly changes the priorities. You need an engineer who can see the big picture and stay on target, and an engineer who can fill in the blanks without grinding to a halt.

—Can you multitask well? Before starting any set of tasks, you should always know the priorities and deadlines. Always ask “which should I do first?” and “when do you expect this to be done?”. And after that, guess what? Constantly reprioritize and reevaluate. In the real world, especially in small companies, things change quickly and priorities can change daily. Each time you get handed a new task, you should ask “OK, but I’m also doing these other things, which should I do first?”. If an engineer has a good grasp of the big picture, that engineer instinctively knows how to reprioritize any new set of tasks.

—Do you have experience leading others? Ideally if you hire a good engineer, they will eventually be needed to lead others, at least at the technical level. Find out what the experience and potential is of your candidates.

—Do you have experience managing projects? Some engineers most definitely want to stay technical and not manage projects. Others find it rewarding and enjoyable. It’s nice to hire an engineer who can fill in when the boss goes on vacation or is too sick to come to work.

In closing, I find that most hiring managers and interviewers do an awesome job of finding robots, but a terrible job of finding good workers who have the necessary technical background but also secondary skills needed for the long term. If you hire well, then you reduce employee turnover and consistently get things done on time without overworking your employees. Don’t ask questions that can be answered by an internet search; do ask questions that reveal all the things you really want in a new employee.

Analyzing Pokemon Go

Pokemon Go is without debate the most successful mobile app in history, in terms of downloads, users, and revenues being generated. Why? How did this happen right in the middle of all the news that the “age of apps” was over, nobody uses apps anymore, and there were no new ideas left? I will admit, even though I never play video games, and I mean never, I gave this app a shot (hey, I had to know what my kids were so excited about or else I would be a bad Dad, right?). And you know what, I liked it! Not only does it give me an activity to share with my kids, which is always good, it caught my interest like no video game has ever caught my interest.

As a mobile developer from the early days of the Palm Pilot, I have been thinking about what makes this game unique and special eight years after the introduction of third party apps for the iPhone. Spoiler alert: it’s not doing anything revolutionary, it’s just nailing the details and execution, something a good designer could imitate (but on a smaller scale).

Easy Gameplay

First of all, it’s really easy to play the game. You don’t need three arms and reflexes like a cobra. You don’t need to memorize 15 different control combinations (quickly, do a backflip and turbo boost your death ray NOW!!!! No, wrong button!!!). The basic move you learn in the first 30 seconds is flicking a ball at a creature (called “pokemons”). It’s super easy, anyone can do it.

The second move you need once you begin to level up and get more powerful is to tap repeatedly on the screen during a gym battle. It’s the same move you use when your network goes down and you are trying to make the “send” button work : ) That’s all there is to the gameplay, no special dexterity or mad speed required.

Virtual Reality

Pokemon Go is not the first virtual reality game. There are tons of them. The difference is, most other games aren’t very “real” they are just “virtual”, meaning they take you to far away fantastic places. Pokemon Go inserts virtual creatures in to the real world around you. When you first see a little virtual bird or rat hopping around on the sidewalk, it’s pretty cool and entertaining. Stop, you almost stepped on a crab!

Pokestops, where you must physically travel to to get supplies, are tied to real world landmarks and locations. I discovered a pretty neat little fish painting in my neighborhood that I drove by 1000 times and didn’t know it existed.

Other players that you may encounter seem more real when they are nearby, not behind a computer screen on the other side of the world. You begin to identify with the virtual gyms that are in your neighborhood, and you build a sense of team spirit when you join forces with other players on your team (there are 4 teams you can choose from, associated with a color).


The game is almost useless unless you are out and about. Name another video game that forces you off the couch… It’s really closer to a fitness app than a video game, a fitness app that encourages walking. (Another crossover app like this that comes to mind is a running app that chases you with zombies). By the way, in case you don’t know, driving or going at speeds above 20 mph limits the game so you can’t really “cheat” and try to be lazy.

To me, this may be the most fascinating part of the game. As I walk around, I discover the locations of new pokestops and gyms, and I will go out of my way (i.e. walk more) to walk past them. When one of my kids yells out “there’s a rare pokemon nearby!” it gets me out the door and walking when I might otherwise not be.

Goals, goals, goals

This is the addictive part of the game. Every video game has levels and incentives to motivate you to play more. Pokemon Go did not invent that concept, they just took it to an entirely new level (pun intended). There are so many things about the game that encourage you to play it just a little bit longer…

Acquire new pokemon – You get rewarded each time you add a unique new creature to your “deck”. There are about 150, so it seems endless, and each new creature is really cool to look at.

Medals – There are lots of medals that reward you for all sorts of accomplishments

Player level – As with most games, you increase your level as you play the game. This is a source of pride, but also let’s you encounter more powerful creatures and eventually battle in gyms.

Power up your pokemon – Every pokemon you acquire can be made more powerful, so you gradually build up the strength of your posse.

Evolve your Pokemon – You can also totally evolve a pokemon, turning it into a new and more powerful creature.

Hatch eggs – By walking, you hatch eggs, which give you more creatures and things you need (candies and stardust)

Buddies  – You can designate a “buddy” pokemon and the more you walk with that buddy, the more candies you get

Limited Supplies – You have a bag filled with balls to throw and other useful items to aid your never ending quest to capture more pokemon. You have limited supplies of eggs, candy, stardust, etc. that you can monitor. When supplies get low, it’s time to go out and replenish. You always need more balls and stardust so you can get more pokemon and get more powerful so the cycle can repeat!


I must say, the graphics are elegantly simple yet beautiful. There are no 3D ray tracing shadows and textures that require a supercomputer to build and run, just detailed cartoon-like graphics. Each pokemon comes with creative animations that are just fun to look at. I admire how the creators of this game invented so many wonderful and unique creatures. As with any mobile app, the judicious use of animation can really make an app fun to use, and Pokemon Go is very fun to use. If done poorly, it could have felt like the card game like it was based on, but everything feels alive and is full of motion like a great Disney animated film.

I can’t imagine how many hours were spent perfecting all the art and graphics in this game.


Pokemon Go did not invent anything new or produce some technology that had never existed before. The makers of this game simply took all the fundamental concepts that make a game enjoyable, things that most designers would nod their heads to and say “yeah, of course I know that”, and executed extremely well. They emphasized features that appeal to non-gamers, who grossly outnumber hardcore gamers, and took the time to do things right.

Is this a fad that will fade away? Like anything, many of the initial people who jumped on the bandwagon early will jump off and seek out something more challenging and more complex. That is simply inevitable and that does not mean the game failed or is a short term fad. There is almost unlimited potential to add new features to this game to keep the faithful playing it for many months and years.

Can it be copied? Since Pokemon Go builds upon many, many years of the rich Pokemon intellectual property which includes books and TV series, it would take a company like Disney to even attempt that. Just the game design, engineering, and graphical design cost that would be needed is mind boggling. It is amazing that something so difficult to produce feels so simple to play. Steve Jobs would be proud of that!

Although most developers and designers don’t have the mega resources to produce Pokemon Go, the key points that appeal to users (see above) can be copied and integrated in to your own apps. I have three app ideas that came from “studying” Pokemon Go and several features to add to my existing apps.

Choosing Your Batting Order

Depending on your coaching philosophy, you may have different ways of choosing your batting order. At the lowest t-ball and coach-pitch levels, it might be completely random. To keep it completely fair, you should keep track of the last batter and rotate to the next batter in the next game. Not much to think about here.

Eventually, as players get older, there is more competition in the game and the pressure to win grows. Putting some thought in to your batting order can definitely increase your chances of winning. When coaching young teams, you need to keep a balance between winning and keeping all your players motivated. And don’t forget the parents! Like it or not, there is pressure from parents going both ways, toward being more competitive and keeping it “fair”.

I’ll just make one point about “fairness”. Let’s say you have a rotating batting order and try to bat everyone the same amount. That may sound “fair” but it is not really fair to the players who are putting forth more effort and building better hitting skills, and it’s not really fair to the team or to the parents who enjoy getting a win more than losing. Like I said, at the lowest levels of baseball that is the norm, but as players get older, everyone deserves to have the coach put some more thought into the process.

There is a tradition in baseball that the best power hitter bats fourth, when you are trying to be competitive with the batting order. Many times in youth baseball, your best power hitter has one of the better batting averages on the team. Statistically, my position is that you begin with the best batting average (or on base percentage perhaps) and work your way down. If you look at the math, players at the top of the batting order get more at-bats than players at the bottom, because rarely does a game end with the last player in the batting order. So, if the game is close in the final inning and you have 3 hitters coming up, you want those hitters to have the highest betting average possible. I’ve coached many games where the third or fourth batter in the lineup never gets a chance to swing the bat because the game ends with the final out while they are on deck.

Another coaching philosophy is to “spread out” your hitting talent so you don’t have a bad inning with 3 poor hitters in a row. Statistically, this does not work, because you end up with good hitters not batting more often than poor hitters. You end up with more runners (your good hitters) stranded on base. The bottom line is, to win more games you want your better hitters getting more at-bats.

Now it gets pretty depressing to always bat at the bottom of the order, both for the player and the parents of that player. In the middle levels of competition where winning is not everything, I may rotate the first batter (or you can do this with the third batter, let’s say, to keep it in the first inning). For example, let’s say everyone on the team gets a chance to bat first, no matter the skill level. So my worst hitter may bat first now and then. That is a pretty good compromise between winning and keeping all your players happy.

OK, let’s say as a coach you want to carefully pick your batting order based on performance. Without statistics, you are really just guessing. Players may improve steadily throughout the season, some players may get on a hitting streak, and some may enter a slump. It’s constantly changing. Having the batting numbers handy is the only intelligent way to go. You will also find your players more motivated when they know the batting order is based on results, and not “favorites”.

Baseball Pocket Coach makes it really, really easy to record batting results, and to keep those numbers handy when planning a lineup. I don’t know how many times I’ve seen a parent asked to keep the scorebook, and they look back and say “I don’t know how”. Even worse, they gladly accept the assignment, but when you try to decipher the results after the game, you can’t make any sense out of it so you don’t get any valuable stats. For youth baseball batting stats, you don’t really need to track every pitch and throw and use a special codes like “6-3”. A simple “Single” or “Popout” is all you need to help you with batting results. One or two taps per hitter and you are done. I designed the Baseball Pocket Coach app to be so easy you can coach a base and record batting results at the same time, or to hand it to a random parent with no training. If I’m coaching and using the app, I can quickly tap in the previous batting result while the next batter is walking up to the plate.

When you use this app to plan your lineup, it will show you the batting average next to each player’s name, and you can drag the names in to the batting order that makes sense. You can look at pure batting average, or the last two weeks batting average, or on-base percentage. No more guessing. I know that I have been surprised to see a not-so-good hitter have a high on-base percentage, usually because that player draws alot of walks. If you only rely on your gut feel, you will miss some things. If you have solid numbers, you can make more intelligent decisions, and tweak the lineup according to your gut feel. More tools = better results.

Baseball Pocket Coach app on iTunes app store

HomeKit for Home Control

I have been very interested in the “internet of things” for a while now, and I finally got around to trying out Apple’s HomeKit with a couple accessories. If you don’t already know, HomeKit is a technology that is meant to help you remotely control accessories, or devices, and create a “smart home”. Notice I called it a “technology” and not an “app”. That definition is pretty vague, and from what I have seen, 99% of the people I ask have no idea what it is all about.

Let’s say you have a light and you want to control it remotely. Maybe you want to turn the living room light on when you are away from home so it looks like someone is home. You somehow need to put that light on your home network, and somehow need to have a means to control it. That’s what HomeKit does for HomeKit-compatible devices, and Apple has wrapped their typical sugar and niceness around the process so that ordinary people can figure it out.

So I ordered a couple HomeKit compatible devices (both are power switches) from two different companies, iHome and iDevices because I wanted to see for myself what the process was like for a couple different brands. Because the ability to connect to a WiFi network incurs a certain amount of cost, a switch is more versatile than say a light bulb. You can plug a lamp in to a switch, or a heater, or a string of christmas lights, or anything you want. I don’t mind spending $35 on a switch (well, I mind a little : ) but that’s just too much for a simple light bulb.

The first thing to remember when unboxing a new device is this: don’t read the instructions! I have a prerelease version of iOS 10 and it comes with a new app from Apple called “Home”. This is all you need to set up and control most HomeKit compatible devices. The first thing written in the instructions is to download a custom app from the manufacturer, but that is no longer necessary when you have the Home app. The proprietary custom app may provide extra features, but I think it’s better to wait until you need something before installing extra software.

There is a typical “Add” button in Home, and after plugging in your new HomeKit device, you tell Home to “Add Accessory”. Home lets you set up “rooms” so you can refer to things like the “switch in my living room”. It’s pretty easy and self explanatory to do that and you can choose a room to place your new accessory. Each HomeKt device comes with a numeric code, and you will be prompted to enter that code or scan it with your camera. That’s all there is to it, the new device should now be ready to go in a minute or two!

Home displays a box for each accessory you add, and you can just tap on the box to turn the switch on or off. Tap and hold to get more options. For example, my iDevices switch comes with a built-in night light so it is like two devices in one, and I can change its color and intensity with a slider. All of this “just works” within the Home app. I had no trouble at all getting both devices set up within minutes.

In iOS 10, the updated Control Panel will also display your favorite accessories by just swiping left. That is very convenient for controlling them so you don’t even need to launch an app. FYI both devices have a push button so you can turn them on and off the old fashioned way, too.

The beauty of HomeKt is that it works with Siri, too. I can say “turn on the light in the living room” and it happens (I named my switch in the living room “light” because it is hooked up to a lamp and that sounds more natural). I can ask Siri “is the living room light on?” and I’m told. That feels pretty neat, I must say!

Now, my original goal was to do this remotely, while away from home. Obviously, a server on the cloud is necessary for this to happen, as well as an internet connection. If you want to download the app that comes with your device, and sign up for an account on their server, you can. However, I wanted to keep things as simple as possible without installing new apps or creating new accounts. That’s where my Apple TV comes in!

Since I had already linked my Apple TV to my iCloud account, I was already done. Those same Siri commands on my iPhone work just as well when I am away from home. My phone sends the commands to the cloud (iCloud, to be exact) and the Apple TV automagically receives the commands over your internet connection, and controls your devices. Super cool!

One other feature of HomeKit which is very useful is sharing. If you want to let other family members also control certain devices, you can send them an invitation and now they can use Siri to turn off the light you just turned on!

Overall, I am very impressed with the simplicity and convenience of HomeKit, especially when combined with the new features coming soon in iOS 10.

My Firefighting Flashlight

Once in a while I like to share some of my favorite tools for the fire service. For my bunker gear, I strap on a Pelican Big Ed right angle flashlight. This puppy is very bright (39 lumens), has a nice ring on top that I can clip on to, and is very rugged. It is Class 1, Division 2 rated.

Personally I prefer the C-battery version, although they also make a rechargeable model. As a volunteer, I keep my gear in my gear bag ready to go, so a long shelf life is critical for me. If you work shifts at the station, you may prefer the rechargeable. About once a year I swap out the batteries so they are fresh and the light is bright. I’ve had my flashlight for over 15 years and it is still going strong.

Do you have a different flashlight you prefer?

Big Ed flashlight on Amazon


Shortly after writing this post, I checked out a competing flashlight, the Streamlight 90540 Survivor LED Flashlight. I actually have one of these, too, and was surprised that its lumen rating was a whopping 140 in high mode and 47 in low mode. This came as a Christmas gift and never made it in to my bunker gear, but maybe it should replace my Big Ed???

Streamlight Survivor on Amazon


Don’t Sync Me, Bro

Are you a synchronous communicator? I’m not, I prefer asynchronous communication when it makes sense, because it is way more efficient. Let me explain what I mean by that. Synchronous communications requires both parties to be engaged simultaneously. The classic example is a phone call, or God forbid, a face to face conversation. Asynchronous communication does not require both sides to be engaged at the same time. A good example would be texting. While you CAN make texting synchronous if you go back and forth, it is not required. You might get a text message and read and/or respond to it hours later. Another example would be email.

The benefit of synchronous communication is that you get immediate confirmation that your message was received. If you have a time-critical message, or you really need to confirm your message has been received and understood, it may be best to pick up the phone. You COULD send a text message and see if you get a quick response; if you don’t, THEN pick up the phone. Another benefit: it’s way easier to communicate something complex by voice rather than try typing that in a message.

With asynchronous communication, you can send-and-move-on. You get the message out, it’s in writing so it’s hard to ignore/forget, and you spend very little time. If the receiver is tied up or unavailable, you figure they will get to it when they have the time. Perhaps the question is not easily answered, and the receiver needs to think about it or do some research. This is the most time efficient way to communicate. As we all know, terse written communication can be easily misunderstood, so you definitely need to consider that.

Chat software like Slack, HipChat, or Skype can fall in both categories, depending on how you use it. I do alot of remote work so I’ve used pretty much all the telecommunication software out there. Most can do video calling, or you can schedule a “meeting” in advance, both of which are clearly synchronous. You can also use them as pure chat and be asynchronous. You might be engaged in real-time (synchronous) with some folks, and later others may read the conversation and perhaps reply asynchronously.

OK, now to one of my pet peeves. I find it highly annoying when someone has a perfectly asynchronous message and use a perfectly asynchronous method to deliver it, and then they go make it synchronous! Here is what I mean: using Slack, a coworker texts you “Hey John”. And then nothing. Eventually you reply back “What’s up?”. Then, if they are still at their computer, they say “Did the package arrive today?”. Otherwise, if they are not at their computer anymore, you might not get that question for another hour or more, and they don’t get a quick answer.

What’s the big deal you ask? Oh boy, now you got me started! Well, in an ideal scenario, I’m at my computer with not much to do, maybe I’m surfing the web, and I get that message. Oh joy, something to do! I respond, I get the question, the coworker gets a yes or no, and all is well. Right, that NEVER happens to ME when I’m working. It’s more likely I am deeply concentrating on a programming issue and this interruption comes in. Then I think, is this going to be a long conversation? If so, I certainly don’t want to be disturbed right now. Even a short context switch can foul up a good programming zen. Maybe I’m in line at the coffee shop and away from my computer. I don’t really like to admit when I’m away from my desk : ) but if they ask me something that requires a computer look-up, I’ll be caught like a rat. This is someone trying to convert asynchronous to synchronous! Arrrrrggggh!

Now that I convinced you of this evil menace, how do you communicate properly you ask? It’s simple. Keep it async, bro. The proper way to send that message is “Hey John, did the package arrive today?”. If I see that, even while in a programming frenzy, I can quickly respond “yep” and keep on my merry way. (Yes, there are some people that once they know they have your attention, will follow up with something like “Great. How was your weekend?” and now you are trapped in synchronicity) If I’m at the coffee shop, I can quickly respond using my mobile app and it’s done.

If there is a more complicated message like “Hey John, do you think you can get me that estimate by the end of the day tomorrow?” then I can process that message, do a little research, determine the best response, and get back to them when I have a good answer like an hour later: “No problem, i just finished it”. So efficient, so asynchronous!

Please, don’t be that guy who sends me a “Hey John” chat message. You likely won’t get a quick response, just sayin.

Swift Optionals

The more I get to know the Swift language, the more I like it. Any time the compiler finds my bugs before I ever run my app, that’s a good thing. And protecting me against my own mistakes is also a good thing.

Optionals is a thing in Swift that protects you against nil pointers. It’s a language feature that strongly encourages you to check your variables for validity before you run off and assume everything is fine. It’s also a very tricky par too the language to fully understand. Thank goodness for Xcode and all its helpful suggestions, but knowing what you are doing will guarantee you have clean code — not just code that compiles.

This is a good article on Optionals that I found easy to read and very helpful:

Swift Optionals