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.

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. 

Tuesday, January 15, 2019

Engineers Turned Entrepreneurs, Part 3

The more I mentor engineers-turned-entrepreneurs, the more I've noticed it requires the proper attitude, more so than the raw skills. I call it the entrepreneur's attitude. When starting off, it's OK if a new entrepreneur doesn't know a whole lot about startups, but they do need to be coachable without being overly impressionable. 

When I speak with wannabe entrepreneurs, who are coming from an individual contributor background, I frequently quote Steve Jobs's comments from WWDC '97.
You got to start with the customer experience and work backwards to the technology. You can't start with the technology and try to figure out where you're going to try to sell it. And I've made this mistake probably more than anyone else in this room and I've got the scar tissue to prove it.

I see two key parts to the entrepreneur's attitude that are important.

The first key part of the entrepreneur's attitude is they need to be focused outward, on customers, and think in terms of benefits before features. Don't lead off with your wants (i.e. I want our company to be the best at blah, blah, blah... save that pitch for investors.). Instead, lead off with the benefits you provide to your customers. Try to eliminate words like "I" and "we" in your pitches and marketing.

The second key to a successful entrepreneur's attitude is recognizing and embracing opportunity. I recently had a friend from NY stay with me at my home. He's made millions of dollars selling companies he founded and ran. Interestingly enough, he doesn't consider himself an entrepreneur. Rather, he prefers to be labeled as a software developer. Regardless of his title, he is constantly seeking new experiences, knowledge, and opportunities. His default position, when experiencing something new, is to immediately investigate it and give it a try.

Opportunities can be found most anywhere. Many times, opportunities first present themselves as uninvited inconveniences. With the federal government currently shut down, some people are seeing it as an opportunity.

Engineers need to think like entrepreneurs. As Steve Jobs said, begin with the customer experience and then work your way backwards.

1. Sales: How and where will your customers acquire your offerings?

2. Marketing: How will customers learn about your product?

3. Development: How do you know what features to put into your product that will benefit your customers?

Many entrepreneurs will fumble #3, from the get-go. They'll either fail to get feedback from potential customers or they'll try to bake every possible feature, under the sun, into their product. To deal with the former challenge, I recommend following the lean startup methodology. For the latter, I recommend a notional press release.

Part 2 in this series:

Sunday, January 13, 2019

Two Funny Bird Stories

Tiny Bird Nest
Bird is a dockless electric scooter-sharing company that's been around just over. In 2018, Time magazine listed Bird as one of its 50 Genius Companies. 

Bird has an innovated business model by paying most anyone to recharge the scooters. Once they're recharged, Bird directs where the scooters should be dropped off, called a Bird Nest.

I spoke with one person who tried to use a Bird scooter, for the first time, but couldn't figure out where to insert the money. That's funny once you realize that the Bird process is exactly the same as Lyft and Uber in that you use an app to begin, end, and pay for a ride (Bird charges $1 to unlock the scooter and 15¢/minute).

Another person told me an interesting situation she ended up in when the battery died on the smartphone that was used to start the ride. The smartphone app is how a scooter ride begins and ends, so, with a dead smartphone there was no way to end the ride. Solution: Load the the Bird into a car, drive home, recharge the phone, and end the ride.