Monday, June 24, 2019

Where to Open a Restaurant?

I was talking to a savvy restaurateur who told me how he decided on the location to open an Indian restaurant in a particular neighborhood in San Diego.

He found several viable locations for his Indian cuisine. The problem was, how could he know which one was the best? So, he tested the market. For each potential location, he created his restaurant menu and direct-mailed it to the surrounding neighborhoods. Each menu had a different phone number to call, with the address of the potential restaurant. He immediately started getting calls from people who loved Indian food and were grateful that one was opening nearby. After a several weeks, he had enough calls to see which location had the most interest.

Testing a market, like this, is a very simple technique, but it's often the most overlooked step in the process for many entrepreneurs. Be sure to listen to your customers before you make up your mind to avoid confirmation bias. 

Friday, April 26, 2019

No Nonsense Marketing

The Marines are excellent at no-nonsense marketing. It's about being direct and setting the expectation. 


In June 1985, there was a TWA terrorist hijacking which was my Pearl Harbor moment. That was the moment when I pledged to join the Marines. I knew nothing about the military; not even the difference between the enlisted and officer ranks. But I wanted to do my part to make a difference. 

The local recruiting office housed all four military services. The Marines' office was in the back, so I had to pass by the Army, Navy, and Air Force offices on my way. As soon as I walked in the front door, a soldier stopped to offer me help.

"I'm looking to join the Marines or something," I said, shrugging my shoulders as I said the last word.

"Or something? Have you considered the Army?" he asked as he guided me into his office. He could tell I was looking for a challenge so he fired up a 12" LaserDisc to show me exciting clips of Ranger and Airborne training. For about two hours, that afternoon, this Army recruiter told me about what the Army could be. He convinced me take the ASVAB military entrance exam, later that week.

After we finished, I left the Army office and headed to the Marines' recruiting office where I met SSgt Meehan; a Marine I remained in touch with to this very day. The SSgt, who, at 27 years of age seemed to have the wisdom and experience of a senior citizen. He sat me down next to his desk, lit his pipe, and said, "I don't have any fancy LaserDiscs to show you videos. At this point, I have no idea what you're qualified to do, so I can't make any promises. First you need to take the ASVAB. Before you do that, you have to take my 30 minute practice exam."

SSgt Meehan led me to a small room where a couple other potential recruits were taking exams. I don't recall the details of the exam, but it wasn't too difficult. When I completed it, the SSgt reviewed my answers and told me that we could proceed to official ASVAB as soon as he could schedule it.

"Can the same ASVAB exam results be used for all the military services?" I asked the SSgt.

"Yes."

I explained to him about my soft commitment with the Army.

"If you want to be a Marine then I would like you to schedule that test with me," replied SSgt Meehan.

As I headed out of the building, I stopped by the Army's office and gently backed out of my ASVAB commitment.

"I can tell," said the soldier I had spent two hours with, earlier that day. "You're gonna be a Marine."

In my mind, I was committed to joining the Marines and the SSgt's direct and practical approach was the icing on the cake.

Thursday, April 18, 2019

The Entire Mueller Report in a Single Page

The Mueller Report has been made public; all 448 pages. Known formally as the Report On The Investigation Into Russian Interference In The 2016 Presidential Election, it's a bit redacted.

You can download the entire report, in a single, legible page, here:

High resolution (145.4 MB): http://mobile.joemoreno.com/mueller-report-highres.pdf 


Low resolution (16.9 MB): http://mobile.joemoreno.com/mueller-report-lowres.pdf 


How did I make this PDF?

Seeing the full report on a single page gives us an idea of how much text was redacted. Each redaction tells us why the text was redacted, i.e., to protect someone's privacy, to hide an investigation technique, etc.


Change the Layout option to 16 Pages per Sheet. Repeat.

To create this single page PDF:
1. Change the Layout option to print 16 Pages per Sheet.
2. Open the new PDF in Preview.
3. Repeat.

After doing this about three times, I had the entire report on a single page PDF that was fully legible, albeit very large (145.4 MB).

To reduce the size of the PDF, for the low res version, I choose File ––> Export, in Preview, and, under the Quartz Filter pop-up, I  chose Reduce File Size.

Now, we just need someone to read the entire report and turn it into a podcast.

Update: Here's the entire Mueller Report read, verbatim, in 12 hours: https://youtu.be/G73iRRgoLKg

Monday, April 8, 2019

Timer Objects for Network Latency

The heart of the Timer class.
I left out a simple tip from my "Tricks I Learned At Apple: Steve Jobs Load Testing" piece about timer objects. Below, is a complete, yet simple, Timer object class I wrote shortly after leaving Apple when I was working with SMS Hayes AT commands and RESTful APIs.


Exponential Notification

Timer objects do nothing more than measure the time it takes for a server's request/response loop to complete. Since this type of call is made over a network, it might finish very quickly (as expected) or, if the network is down or congested, it could take along time. If it takes a long time, the system admins will want to know. A good notification method is not to send an e-mail update or text message every single minute, or so – that ends up flooding people's inboxes. Instead, an exponential notification would be a much better idea. For example, notify the system administrators immediately, then wait one minute before the next notification, then wait two minutes, four minutes, eight minutes, etc. Finally, send a last notification once the issue's fixed.

Initiating the timer is simple...

Timer timer = Timer.startNewTimer();
NSLog.debug.appendln("Start time = " + timer.startTime());
Response response = saleTransaction.submitTransaction();
timer.stop();
NSLog.debug.appendln("Stop time = " + timer.stopTime());


And, lastly, the complete Java timer class is anticlimactic.


package com.woextras;

import com.webobjects.foundation.NSTimestamp;

public class Timer
{
private NSTimestamp _startTime = null;
private NSTimestamp _stopTime = null;

public static Timer startNewTimer()
{
Timer timer = new Timer();
timer.start();
return timer;
}
public void start()
{
_startTime = new NSTimestamp();
}

public void stop()
{
_stopTime = new NSTimestamp();
}
public NSTimestamp startTime()
{
return _startTime;
}
public NSTimestamp stopTime()
{
return _stopTime;
}
public Long elapsedTime()
{
long completionTime = -1;
if (_startTime != null)
{
long startTime = _startTime.getTime();
long stopTime;
if (_stopTime != null)
{
stopTime = _stopTime.getTime();
} else
{
stopTime = new NSTimestamp().getTime();
}
completionTime = (stopTime - startTime) / 1000L;
}
return completionTime;
}
}

Sunday, March 31, 2019

Apple's Pivot into Services


After giving my Apple Talk, I do a Q&A with my group on their tour bus as we head to Apple Park. Some of their questions are light hearted, such as, "Why did the Apple logo used to be upside down on laptops?" or "Why does the Apple logo have a bite taken out of it?" But my latest group asked some deeper questions about the future of Apple.

My group, on Wednesday, asked me about Apple's It's Show Time event held a couple days earlier. Monday's event at Apple seems to be a pivot for the company in that no new offerings were revealed that are now available.

It's a pivot for Apple because the company is moving more and more toward services delivered via Apple products. We last saw Apple make a strategic pivot in 2007 when Steve Jobs announced the first iPhone. Near the end of his presentation, Steve Jobs said he was changing the name of the company from Apple Computer, Inc. to Apple Inc. to better reflect that Apple was moving away computers and into consumer electronics.

Now, once again, as the smartphone market becomes saturated, we see Apple staying relevant by increasing their services offerings. Of course Apple has a lot of potential offerings in R&D, but many never see the light of day if they're not up to Apple's standards. 

Friday's announcement that they were killing off its never-to-market AirPower charging mat is a rare premature misstep by Apple. Rumor has it that this product, after being announced more than a year and a half ago, was running too hot to provide a decent customer experience. And that's what Apple's all about. I describe the company's mantra as best possible customer experience


Future Apple Products

The groups I speak to frequently ask me about Apple's future offerings, so I speculate...

1. Car: Apple is working on a car (codename: Titan); or, perhaps, autonomous software for automakers. It's not a secret what they're working, but they don't yet know what will became of their research.

2. TV: Apple's Eddy Cue, senior vice president of Internet Software and Services, who reports directly to Tim Cook, has long wanted to unbundle TV channels from cable TV packages. In a nutshell, he wants to do for TV cable subscriptions what the iTunes Music Store did for music... unbundle content to give customers more options. 

3. Medical: This is a long term play that's clearly humming in the background. Apple was the first company to get FDA approval for a consumer EKG product via the Apple Watch. Earlier this month, when visiting my doctor for a cold, he asked to look at the recent data on my Apple Watch. Apple's foray in to healthcare will continue to become more important. Perhaps a future Apple Watch will allow noninvasive glucose monitoring.

Obviously, we never know what secrets Apple has under wraps, but I suspect that the best is yet to come. 

Tuesday, February 5, 2019

Unsavable Photos on the Internet

Imagine if you could send a photo to someone else that couldn't simply be captured or saved. In other words, a screen capture wouldn't work and neither would taking a photo of the screen with another camera. One of the first Java applets I wrote solved this problem. But, since then, I haven't seen this technique used anywhere (which probably means there's not much demand for it).

I still think there's a market for displaying photos that can't be captured. But this technique is only a feature... there's not enough for an entire business. I'm just surprised I haven't seen it used. I thought, with the advent of disappearing photos on SnapChat, that it would resurface. My technique for this is still one of my favorite hacks.

The Early Days of Java

Java was the new hotness during the Dot Com boom period of the 1990s. It was the first mainstream object oriented language that worked great on the client and server. Although it was billed as "write once, run everywhere," it still needed work in the early days and we were fond of saying "write once, debug everywhere."

The big selling point of Java was it could be complied and run as an applet inside a web browser's Java Virtual Machine. It was the first executable mobile code for the Web. Java became everything Ada wanted to be and JavaScript became everything Java applets wanted to be. It's funny how that happens.

Sunday, February 3, 2019

Backups and Versioning

Revert To keeps multiple versions of your iWork files
with a UI similar to Time Machine.

Steve Jobs first demonstrated Time Machine about a dozen years ago. It's a simple backup feature built into macOS that takes hourly backup snapshots of files on your computer, when they change. This makes its trivial to recover a file your deleted or overwrote. The biggest challenge is enabling it with an external hard drive (which isn't much of a challenge at all).


Even Better

But, what if you didn't setup Time Machine? No worries, since backing up work is such a valuable feature Apple has incorporated versioning into their iWork suite of applications for word processing (Pages), presentations (Keynote), and spreadsheets (Numbers). At any given time, you can step back to earlier document versions in iWork; no setup required (screen shot, above).

I wish other major software suites, like those from Adobe or Microsoft, would implement this simple feature.

To step back to an earlier version of your iWork file, simply go to File –> Revert To and, voilĂ , your previous versions are there. This out-of-the-box feature, coupled with Time Machine, will solve nearly all of your common backup needs. I say nearly because all of your backups will still be local to your computer and network. For the most mission critical redundancy, I recommend a 3-2-1 backup policy: Three backups on at least two different media, with one backup located offsite (i.e. Amazon S3 or Glacier). 

Tuesday, January 29, 2019

Rolling Out a New Version of Your Website

Tricks I Learned at Apple: Steve Jobs Load Testing is an excellent precursor to this post.

When launching a completely new version (update) of a website, it's best to have a rollout and a rollback plan. Very few brand new websites will have the problems that HealthCare.gov had in 2013 because new websites typically start with zero traffic. HealthCare.gov was a unique case since it went from zero to millions of users, overnight. 

Typically, as a website grows, servers will be added and optimized to handle the additional traffic. But, if growth happens too quickly, then the company can prevent new users from creating new accounts on the website while they manage their growth and scale up their infrastructure. Facebook was able to manage their growth by rolling out across college campuses, one at a time, whereas Twitter had no way to control their growth since they were open to the public, resulting in the fail whale. Again, these are rare cases; the typical problem with websites occur when rolling out a major update.


Rolling out the New Website Version

While growing from zero to millions of users is a high quality problem, it's actually very rare. A more likely problem is encountered when an entirely new version of a website is rolled out since it will probably have critical bugs or scaling issues. 

When I worked at Apple and Wyndham, we had to handle both bugs and scaling issues. At Apple, we switched from using RDBMs to memory caches for read-only data. At Wyndham, we had to roll out more than a dozen different websites at once for brands like Days Inn, Ramada, Howard Johnson's, Super 8, Hawthorn Suites, etc.


Managing Risk

Initially, Wyndham wanted to switch from the old website to the new one, all at once. My boss, who's a particularly sharp guy, had enough experience to immediately recognize the risk of doing this. Specifically, what if the new website was broken (what if it had too many bugs, preventing customers from booking rooms)? Instead, he suggested a very simple plan. Rather than making the switch, overnight, he suggested we keep the old version of the website running while rolling out the new website over the course of a week or so.

Since both the old and new versions of the website talked to the same database, it was a simple process, at a high level. We'd have an all-hands meeting, on Monday morning, in our war room (dedicate conference room). During Monday's meeting, all of the departments (marketing, product management, development, and QA) would give a thumbs up to move forward. Then, we'd have our load balancers begin to randomly send 1% of the traffic to the new version of our website. We'd place a cookie on the customer's browser so, if they came back later, they'd automatically be directed to the new version of the website otherwise they'd end up the old version. 


Staging the Rollout 

Just before the close of business on Monday, we'd meet again to confirm that everything was running as expected. On Tuesday morning, we'd meet and give a thumbs up to increase the traffic to the new website to 5%, etc. It looked like this:
Monday: 1%
Tuesday: 3% – 5% (based on Monday's performance)
Wednesday: 10%
Thursday: 50%
Friday: 100%

The beauty of starting at 1% and then 3 % – 5% is that's the most revenue you'll risk losing (in theory) if something goes wrong.

By using this week-long rollout process, we all kept our jobs. I only recall one time, when there was a major bug, that we had to stop after the first day or two, which wasn't a big deal; we simply sent all traffic to the old website while the new one was fixed and we got it right on our next rollout.

Thursday, January 24, 2019

Interesting Apple ID Issue

Problem

A friend called me this morning because he was having an issue with apps on his iPhone. After resetting his Apple ID password, the App Store wouldn't authenticate him so he couldn't update any apps on his iPhone. My first suspicion was, since this problem happened soon after he updated to iOS 12.1.3, there was a bug preventing his credentials from propagating to all of his devices.


Solution

The actual problem is my buddy originally downloaded some apps with a different Apple ID than the one he's currently using on his iPhone. The apps continued to run fine until it came time to update them. The solution was simple. The current apps only needed to be deleted on his iPhone and then re-downloaded. An easy fix, especially since all of his apps were free. If his apps weren't free, it would have required a bit of help from Apple's billing department.


Lesson

The lesson learned is be very cautious of changing Apple IDs. I've been using the same one since I worked at Apple when Steve Jobs introduced iTools and every employee was automatically assigned our original Apple ID. The second lesson I learned many years ago is if you've ever worked for Apple then you will be the first call that a friend or family member makes for Apple tech support. A calling that I do enjoy.