Category Archives: development

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.

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.

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

Swift Tips

This is just a link to an article on Swift that I found useful. “guard” is a new Swift thingy that replaces a design pattern I have been using already. The more I use Swift, the more i like it!

Using Guard Properly

Oh, one more little thing I learned today. The C method of writing for-loops is going away, so you should start writing them in the new Swift way:

for x in 0..n { … }

(works if you never write to x, which normally you don’t)

Carry on!

So They Updated the Apple TV

Should you care? In a nutshell, yes, you should.

Does it contain every home entertainment feature you could ever want? No. Nothing will do that. Like most Apple products, it goes after the mainstream consumer without providing bells and whistles that the majority of customers will never need. However, the fact that you can add third party apps makes it infinitely extensible. More on apps later…

The thing about Apple TV that makes it unique in the Apple ecosystem is the low cost of entry. With a very low price tag ($150) and no monthly fee, there is nothing like it. Even a tiny Apple watch costs double that. And the thing about Apple TV, it’s a shared household expense. Whereas you might balk at spending $300 on yourself for an Apple watch or an upgrade to the latest smart phone model, spending $150 “for the family” is much easier to swallow.

Today, the Apple TV is quite entertaining and easy to use. The remote control with its touch pad makes scrolling around very easy and fast. While Siri is often the subject of ridicule, if you simply learn what Siri is good at and stick to that, it’s quite accurate and saves loads of time. How many times have you wondered if a show was on Netflix or Hulu or iTunes? Now you can find out in a few seconds and see all your viewing options in one screen. How many times have you wanted to skip ahead or behind a minute or some arbitrary amount? It’s easy. I could go on and on about the main features but you can ready about that yourself — I want to focus on what makes it special.

By the way, if all the networks can agree to do what’s best for the consumer (ala carte channels and freedom from cable companies) and stop being so greedy, we can have live TV on the new Apple TV, and that would absolutely make it a must-have product. Hopefully that is coming very soon…

UPDATE 10/19/18: Today there are many third party options for “light bundles” of TV channels, including both on-demand and live TV, but so far nothing from Apple. Apple has opted to use their “TV” app to tie together the third party options.

So the first time I was testing my trivia app on my Apple TV, I realized how it was different. At that early stage of development, it was loaded with EMT questions because that was readily available. Like most kids, my daughter was walking by and her eyes went right to the big screen in the living room. She was instantly engaged and wanted to “play”. Even though she didn’t know a thing about emergency medicine, the fact that this “game” was on the TV made it interesting and a group activity. The unique essence of the Apple TV, as compared to a watch, tablet, computer, or your phone, is that it’s a shared device that resides in a comfortable, entertaining location in the house. Since it’s on TV, users expect beautiful graphics and don’t mind some noise (sound effects).

And there are apps for it! A skeptical friend of mine said “I can’t even think of any apps I would want on my TV”. That made me think back to the pre-smartphone days when people were happily texting each other on little number keypads. It was common to hear “I just want my phone to make phone calls”, and that was usually precipitated by crappy attempts by cell phone companies to add “smart features” in a way that made the phone difficult to use and harder to make phone calls. Then the iPhone was introduced in 2008 and the world changed. Yes, there are still some people out there who just want their phone to make phone calls and that’s it, but in my opinion they are missing out on some great things. (And if you feel that way, I’m sorry you read this far — you can stop now.)

So what kind of app would be a good fit for Apple TV? How about some workout apps? Yoga, boot camp, fitness routines. How about some nice ambience apps that show a nice relaxing mountain stream or a fireplace, complete with video and sound? How about some games that work well at parties or with couples and families? Trivia games, name that tune, etc. Karaoke is a good one. The list goes on and on, but for sure, there are games that work well on a large screen and there are some that do not. You can also connect a real game controller to the Apple TV and it begins to compete with consoles. You know, those things that cost more than an Apple TV and every good game costs over $50? You won’t quite get console-quality game play on your Apple TV, but it begins to approach that market and take a bite out of it.

UPDATE: The most popular apps are individual TV channel apps, like ESPN or FOX. These offer live TV streams as well as on-demand video content (30 seasons of The Simpsons at your fingertips!). There is usually a mix of totally free content and some shows that can only be accessed if you have a cable TV subscription (how ironic) or alternative streaming TV package like YouTube TV.

Peakview Software is working on some apps for the Apple TV right now. We have already released “Awesome Trivia” as a starter. It’s a multiplayer app that is great for couples, parties, families, or something you can just play by yourself. If you are in the emergency services, especially if you teach, imagine if you will having an Apple TV connected to your TV at work (or video projector), and a database of training material that you can pull up in an instant and present to your department. Yes, I bet you can see how useful that would be! Stay tuned…

My Experience With The Apple Watch

I have had the opportunity to try out an Apple Watch (Sport model) for the last couple months, and I wanted to share my thoughts. This isn’t a comprehensive review with all the specifications and options — you can find those type of reviews everywhere — just my personal opinions and feelings about the product. I will also discus three different watch bands which I have tried out in another blog post (sport band, leather loop and milanese loop).

The Apple Watch is very nice. It’s a great piece of technology. It feels good and looks good, like you would expect from an Apple product. In a nutshell, it is something you can live without, but after a while you don’t want to be without. It’s a luxury and a convenience, but not a necessity. Conversely, I feel like my phone is a necessity. Want vs Need.

There are lots of times when your phone is stashed away somewhere, like your pocket or purse, and you get a message. With the watch, you can just glance at your watch and see who sent the message and what it is about. It’s easy to tap and send a one-word reply like “OK”, “yes” or “thanks”. Very convenient. With a little more effort, you can speak your response and it will be transcribed very accurately, or you can just send the audio. I do this many times each day without pulling out my phone.

Every push notification that comes to your phone will come to your watch automatically, with no set up. If the notification or message requires more attention, then you can pull out your phone (or iPad or computer) and deal with it that way.

When I am at home, I like to stash my phone somewhere and forget about it. My watch will let me know if something important requires my attention. I happen to play alot of softball and I stash my phone in my bag. While I am in the dugout, my watch will let me know if someone is trying to contact me. I’ve even responded to a text message while playing first base, as we had the first base dugout. When I exercise outdoors, I keep my phone stashed in a waist band and use my watch to monitor my progress (heart rate, pace, mileage, speed, whatever). When I exercise at the gym, my phone stays in a locker and my watch lets me know if something important comes up. (As long as your phone and watch are connected to the same wifi network, or are within bluetooth range, this works great)

You will be surprised how many times it’s just not that convenient to pull out your phone, or it’s not nearby. The watch is a great “notifier”.

I’m a geek, so I use the completely non artistic “modular” watch face. Yes, it’s fun to change your watch face to Mickey Mouse when you go out or something, but I rarely change it. I’ve customized the watch face to show me the date, the current temperature outside, the moon phase, my battery level (which has never gone below 50% so I dono’t need this anymore), and the next item on my calendar. Oh yeah, it tells the time too. In particular, I find myself checking the temperature all the time now that it is so convenient.

And there are lots of apps that run on the phone. It’s a bit awkward to find the tiny little “dot” icon and tap on it, then wait for the app to load as data is transferred over from the phone. (In watch OS 2.0, this will be much more speedy as then native apps will be possible that don’t need to transfer data to/from the phone all the time) Usually when I need more than just a quick glance of information, I’d rather pull out my phone with the larger screen than try to do the same thing on a tiny little watch screen. Once in a while though, if I can’t readily get to my phone, I’ll use an app. By the way, it’s ridiculous what some developers try to cram on to a watch app. Do you really want to watch videos or browse photos on a 42 mm screen?!?

OK, I hit the highlights of what I use my watch for. Back in the “olden times” when watches just told time, I didn’t find it worthwhile to burden my wrist. Now that I can do so much more, I gladly wear one. And by the way, the watch bands are just as revolutionary and cool as the watch itself, so it really feels good to wear. More on the bands soon…