Wednesday, February 25, 2015

Répondez s'il vous plaît

In the modern era, the RSVP has become a rare thing. The ettiquette that you need to respond has slipped away. It seems strange--as we’ve moved into an always-connected world where invites flow through the Facebook, the Evite, and other services--that people just don’t reply one way or another. It’s so easy now, you would think the reply rate would go up, eh?

My guess is that in the modern era, replying doesn’t usually matter. In the world of more loosely connected friends, larger pools of people on an invite, and fewer “formal events” where you need to make sure there is room at a table and enough food to be served, the need to have your guests RSVP has faded.

There are formal events (weddings, for example) where it’s extremely important to know how many people are coming. But the culture of not needing to send an RSVP has become pervasive. Even at weddings, people just don’t reply.

Who am I to judge? I’ve always made a point of trying to reply, but often my reply is “maybe."

Saturday, February 21, 2015

My House Not So Smart

I’m slowly building up a smart wired home, so it’s sad when it’s dumb. Friday morning we got woken up by the house smoke alarm blaring. We have one of those new fancy homes where the smoke detectors are connected through wiring so that when one smoke detector goes off they all go off.

Walking into the hallway I hear the Nest Protect jabbering away “Smoke detected in the hallway!” I don’t see any smoke. I waved my hands rapidly under the Protect and nothing happened.  We have high ceilings so I can’t reach it.  I pull out my phone and check and the Nest app trying to silence it while my wife fiddles with the Nest Thermostat on the wall. Finally I go and grab the ladder, climb up, and hit the button on the Nest. “Alarm cannot be silenced.” Well that’s cute, isn’t it? Now what?

So I pulled the alarm off the ceiling and disconnected it. GLORIOUS! All the rest of the alarms in the house stop going on. “Smoke detected in the hallway!” Cute Nest Protect, real cute.  A minute later, “Smoke clearning."

You know what would have been cute? If I had Nest Protects in all the rooms, because even disconnected it from the ceiling it would have still been WiFi connected to rest the thermostats and they would keep going off.  Pull the battery you say? It’s a built-in rechargeable; there is no way to pull it.

I have a smart garage as well - I do get nervous from time to time that the garage is going to randomly open when were out of town. Knock on wood that it doesn’t.

Sunday, February 15, 2015

Harder Than it Should Be

It just works. - Steve Jobs

The problem about things that “just work” is when they don’t.

A nifty writing app (Desk) went on sale in the Mac App Store a few weeks ago. I noticed it while I was on Amtrak on the way to work and tried to download it. The download failed, because Amtrak WiFi blocks the App Store. No big deal, right? Just wait until later to download the app.

Now became later and I was on my home network and tried again to download the app and got a reply that the download timed out. I could download other apps, just not this one. We had moved past the “it just works” phase of things. I noticed in `Console` that the following request was timing out:

  2/13/15 9:53:20.491 AM storeaccountd[351]: ADI: {
    "Cache-Control" = "max-age=604800";
    Connection = "keep-alive";
    "Content-Length" = 0;
    Date = "Wed, 28 Jan 2015 15:26:24 GMT";
    Location = "http://10.66.66.66/denied.html";
    Server = "squid/2.6.STABLE21";
    Via = "1.1 8802 (squid/3.3.5)";
    "X-Cache" = "MISS from 8802";
  }

Wait what?"http://10.66.66.66/denied.html” Seemed like the denied Amtrak page had snuck its way into my cache somehow. Weeks went by and we were way past the 7-day “max-age” for this request but it kept on failing. Restart computer? Restart app store? Clear Safari cache? No. No. And no.

I finally got this bad boy solved by delete the following directories: ~/Library/Cache: storeaccountd, storeassetd, storedownloadd, storeinappd. Seem simple? It took hours and hours of trying all sorts of things before the final answer. Standard engineering - hours of effort for a five minute solution.

Last night my Prius starter battery died. Mrs.Chaos was stranded. I headed out and we called the service. First guy showed up and tried to jump the car. All of the dashboard lights came on, but the car wouldn't start. He eventually gave up and I had to call a second service guy with a tow truck (expecting the car needed to be towed). Second guy showed up, put a jumper box on the battery, and aggressively rocked the car. The car clicked and then it started. "Yeah, when the battery dies a Prius goes into transmission lock. You need to get the transmission back into park before the car will start."

The problem about things that “just work” is when they don’t.

Friday, February 13, 2015

Two Months with a Smart Watch

There hasn’t been [a smart watch] that changed the way people live their lives. At Apple, that's our objective. We want to change the way you live your life. - Tim Cook
Everyone knows I'm going buy the  Watch the moment it comes out. If I don't by the  Watch, I lose my Apple fanboy status and the perks of spending hundreds of dollars a year on crazy stuff. I haven't worn a watch since college when I got my first Palm Pilot. To prepare my soul for the shift and build up my arm muscles to carry the extra weight, I bought a Pebble in November. So how do I feel about the three things the Pebble does?
Notifications - every time my phone gets a notification, my Pebble buzzes, shows the notification, and waits for me to dismiss it. If I acknowledge the alert on my watch is removes it from the Notifications view of the phone. The usefulness of the notifications and the buzzing varies a lot depending on context and it would be really nice to filter this magically. For work, I spend the whole day sitting in front of my computer which also pops up alerts every time I receive a work message. Two-thirds of the alerts that are buzzing away on my wrist are pointless and annoying because my watch is buzzing to indicate the exact same alerts that my computer is already showing me. It's nice to be able to dismiss them on my watch so they don't clutter my phone's notifications. The  Watch could do two things to make this better - it would be nice on the phone to be able to say which alerts are sent to the watch - so I can say if I want an alert on the phone, watch, notification center, etc. It would be AMAZING if there were presence/continuity going on so that if I am already working on a computer that is display the alert, I don't need to my watch to do it. I suspect that someone at Apple is working on the iCloud-backed notification center as you read.
When I'm away from the computer, the notification feature is way cooler. I get to leave the phone in my pocket and still get notified of new emails, iMessages, etc. without taking the phone out. I just look at my wrist. That's slick. Fun fact though - because most people don't have smart watches it's socially ruder to look at your watch every couple of minutes than to glance at your phone every couple of minutes. People assume you keep checking the time (not looking at mail notifications). That perception may change - we'll see. So notifications on the watch? B+
Second - There is a built in music app on the watch that mimics the controls in your iPhone control center - back, play/pause, and forward. I use this a little bit. If my phone is low on power, I throw it into the dock while still playing music, and I can pause/skip tracks. In theory it has really nice Spotify integration, but I don't use Spotify, so who's to say. Music integration? B+
Third - you can have exactly 8 apps on the watch. This limit (which I don't expect on the Apple Watch) forces you to prioritize a lot. What are my apps?

  1. MultiTimer - because timers on the phone is inconvenient.
  2. PebbleAuth - puts my 2-factor codes (Google, Dropbox, App.net) onto the watch. This is cool.
  3. YWeather - A watch face that includes the weather based on location. Convenient.
  4. WeMote - Control my WeMo devices - fans, lights, fireplace.
  5. Leaf - Control my Nest thermostat.
  6. TCP Lighting - Control my bedroom lights.
  7. play slot
  8. play slot
The real use I've found with apps on the watch is integrating with home automation. I don't want to pull out my phone to manage things around the house - I want that to be super fast and super easy and the watch makes this happen. I wish I could open my smart garage using the app.
Overall the Pebble gets a B+ - I put it on every morning and I miss it when I'm not wearing it. I suspect the  Watch is going to get an A. If for no other reason that I can stop carrying my Fitbit with me.

Wednesday, February 11, 2015

Photos to the Cloud

I always put clothes and family photos under the mattress, in case the house burns down. - Kim Kardashian
The death of a corporate-owned Apple website is like a uranium chain reaction: each dead blog spawns about 2.4 new blogs. The problem with the explosion is that I have a glut of Apple-related sites all covering the same stories and filling up my RSS feeds. When an Apple event hits, say the release of Photos Beta, I get a whole lotta coverage of it.
I'm intrigued by the cloud portion of the new Photos app and how it might help my parents. It will be a long time before I'm comfortable enough to trust Apple with all my photos. Like most of my friends, I am the family member responsible for the safety of the digital photos in our life. We've traditionally been using Time Machine on a NAS to keep a nice local backup and then once every few weeks we swap an external drive at my parent's house. The main photo library is on Mrs.Chaos' laptop and she only has her laptop running when she's using it. She primarily uses it to stream TV and she cancels Time Machine whenever that happens because it makes things go too slowly.
This setup was working okay until the combination of two things. I bought Mrs.Chaos a fancy DSLR and we had a baby. Our photo taking/storage needs went through the roof and Mrs.Chaos has way less time in her life to be using her computer. Time Machine couldn't really keep up with the rate we were adding photos and we quickly outgrew the HDs being used for external backup. I was fighting the good fight to keep the backups fresh - checking Time Machine status, culling what gets backed up. Then it happened. She upgraded to Yosemite, it performed an HD check on reboot, and Yosemite refused to boot saying the disk was bad. Last Time Machine backup? 20+ days ago. Last external HD backup? Even longer.
Boot off external drive, command line rsync the HD to an external drive (feel dread for every file that was corrupted), rebuild from scratch, copy back over and? SUCCESS. The iPhoto library seemed intact.
And the result of this experience? NEVER AGAIN! We plopped down our credit card and installed Backblaze. It took a long time to get that first backup to the cloud - but now it's there and I feel a sense of peace in my soul.

Sunday, February 8, 2015

Misinformation

If anyone disagrees with anything I say, I am quite prepared not only to retract it, but also to deny under oath that I ever said it - Tom Lehrer

It's 1994 and I carry small spiral notebook in my pocket. When I have a question, I make a note - "what's the difference between a hurricane and a typhoon?" At the end of most days I sit down in front of my desktop computer, work through the list, and try and figure out the answers. Many answers come from Microsoft Encarta. On Saturday mornings I go to the library for the harder-to-answer questions. Sometimes I remember to tell people what I've learned.

It's 1997 and I carry a USR Palm Pilot Pro. I make notes about questions to research when I'm back at the computer - "What's Hangul Day?" I can find more answers at home on the Internet, but I still go the library often. These days I email the people I was with when the question was posed - so we're all getting smarter.

It's 2001 and I have an OmniSky to get my Palm Vx onto the Internet. Altavista and Google (.stanford.edu) are good at finding the answer if it's on the Internet, but it's really hard to read most websites to get information. Yeah, I still go to the library. Now I spend a lot of time reading the magazine subscriptions.

It's 2005 and a survey shows Wikipedia is as accurate as the Encyclopedia Britannica, there are a lot of WAP sites, and my Palm Treo Blaze browser runs through a proxy that can format almost any page to be readable. We've entered the golden era - I can find almost any nook or cranny of knowledge, read it, and share it on my phone

It's 2015 and 80% of young adults in America own a smart phone and are able to look up anything at anytime with a computer they carry in their pocket. The rest of my peer group has joined me in this golden age.

It's 2015 and 20% of young adults believe vaccines cause autism - even though there is a giant red "RETRACTED" printed on the only research that claimed the link.

It's 2015 and decent number of Americans fear aspartame - even though every peer reviewed scientific study shows it to be safe.

It's 2015 and a nurse practitioner told me I should take Vitamin C to keep from getting sick, even though there has been no study to show this is sound medical advice.

It's 2015 and access to information has become ubiquitous

It's 2015 and access to disinformation has become ubiquitous.

The question is no longer, "can you find the information," it's "can you find the truthful version among the rest of it?"

Sunday, February 1, 2015

Requiring Functions

The grand plan is to update Episode.Next to use Web Workers to do all the background synching with TheTVDB and App Engine. It should solve the responsiveness issues that it has. Before I jumped into it, it seemed like it was time to solve the long running desire to use RequireJS and move all the JS out of the main window context. This took... a while.

The big thing I had to wrap my head around was the meaning of this. I had all these event handling methods being used by Episode.Next and was setting them as click handlers - $(…).click(episodeNext.clickHandler). So when the method clickHandler is called, what is the meaning of this? All my Java-based experience told me that it should be the EpisodeNext Object that contained the function, but that’s just not the way this language works. EpisodeNext isn’t a Class, it’s just a hash, and so clickHandler isn’t a method on the class, it’s just a variable that points to a function. So what does this mean? It’s the object that called the function (not the class that defines the method).

Once I got my head all wrapped around this than the call “simply" becomes $(…).click(function (event) { episodeNext.clickHandler(event); }). The way I actually got my head on straight was to realize it was basically the same as usual a weak Perl object without blessing it with a class. The result is that I have anonymous functions littered throughout my beautiful code so that I can pretend I’m working in an object-oriented language because the JS programmers of the world decided that it’s the right way to do this.