Apple Watch, Two Weeks In

It's been 2 weeks since my 42mm Apple Watch Sport arrived. (So much for not "getting one immediately", I know). So far the experience has been mostly great.

At this point I'm dividing my thoughts into three categories: Frustrations, Delights, and Hopes.

Frustrations

  • I had to do a full un-pair then
  • re-pair of the watch (which is basically a restore from scratch), 2 times in the first week. I think this was at least in part due to some weird bug in one of the apps I was attempting to write for the watch, since the symptoms disappeared with I disabled some "clever" code I was using.
  • Related to the need to restore, there have been a few times where some very obviously 1.0 bugs showed their heads. For example, sometimes the time doesn't show when you raise your arm, or shows only for a half second or so before disappearing.
  • I went on a 1-hour walk, using the workout app, and got no credit for it in the activity app.
  • If I wearing the watch loosly and doing something else, like the dishes, or working outside, it's possible to miss the taps; they aren't as strong as I would have expected in some cases.
  • The app icons are just too hard to tap.
  • Too much functionality is hidden behind Force Taps. I find myself force tapping everything, just to see if there's a hidden feature.
  • Glances are basically useless because they don't update in the background. So you go to glance at a glance and instead you have to have an awkward and lingering stare while it tries to update itself.
  • My two favorites watch faces so far, Solar and Motion, don't allow any complications to be added.
  • Siri doesn't auto-send a dictated response, you still have to tap to "Send" on the screen. It would be really nice if there was a sort of cancelable count-down timer on the send button, so you could see that Siri got the text correct, then just drop your wrist and let it send in the background.
  • Having the side button open your favorite contacts seems like a complete waste. I'd much prefer it launch a favorite app or glance.
  • Sometimes opening an app is just slooooooow.
  • "Hey Siri" doesn't always work (doesn't bring up Siri). Which is made even more frustrating because when it does work, the speech recognition is excellent.

Delights

  • The faces are much nicer than I expected. The demos really did not do them justice.
  • I love being able to change the face from day to day or hour to hour.
  • I love the activity tracking. It's actually affecting my behavior, getting me to be a bit more active. Hopefully that sticks.
  • The heart rate and workout tracking has been great. I love the data that it's collecting (I'm kind of a data nerd, to say the least).
  • The battery lasts way more than a day. I go to bed with about 40% charge remaining every day.
  • It not too small, not too big.
  • The bands are very nice. I'm still looking forward to more 3rd party options, but the mechanism for changing them is fantastic, and the ones Apple has made are very nice.
  • Opening your garage door from your wrist is just fun.
  • Seeing who's at your front door on your wrist is also just fun.
  • Dictation on the watch is very, very good.
  • "Hey Siri, Set a timer for 20 minutes" when your hands are full is very convenient.
  • Not wondering if I missed a notification, since I can glance at my wrist and see that there isn't a red dot. This has led me to leave my phone in my pocket or on the table much more than I expected.
  • Being able to respond to an iMessage while driving, without having to take hands off the wheel, is great.
  • The taps on the wrist when navigation is running are Just Right.
  • Sports scores updates on your write with a glance is great.
  • "Hey Siri, Add milk to my Grocery List"

Hopes

  • Increased stability. It really isn't bad, but there are enough rough edges that I'm looking forward to versions 2, 3, 4...
  • Customization of the side button functionality.
  • More watch faces, please.
  • More customization of watch faces.
  • 3rd party app complications.
  • Auto-updating glances in the background.
  • Native or Native-esque apps. No more spinning dots please.
  • I hope my favorite Grocery List app, AnyList, gets an app on the watch.
  • Oddly enough, I kinda wish it had an LED you could use as a flashlight.
  • I hope to be able to set the watch face to use 24 hour time (maybe this is possible and I've missed it so far).
  • I hope that nice 3rd party bands become available soon.

Glide

Glide is really interesting. The basic idea is that you fill a dropbox folder full of content, and the service generates a beautiful app for you from the content. The elevator pitch is "Hypercard for iOS".

I'm not sure if Glide will be successful, but I have no doubt that at some point something is going to be developed that allows just about anyone to create a basic mobile app that looks good and Just Works.

Something like Wordpress for mobile.

It's also clear that the low-end of the custom App Consulting market, which has been dwindling for years through consolidation and evaporation of profit, will finally be dead.

(Of course, when the custom App Consulting market dies, a new market for building all these one-off Wordpress-ish apps will spout up).

Communicating With Apple Watch

I was listening to the lastest episode of the Talk Show with guest Joanna Stern about the Apple Watch. During one section they started talking about tap as a means of communication, and the impact this might or might not have. As John wrote in his review of the watch, it's not that hard to imagine at least a few scenarios where, for example, sharing a heartbeat would be novel, intimate, and gain even widespread use.

Having thought about this more, I do wonder if perhaps the ability to effectively touch someone from afar will turn out to be a big deal. I think it will.

You can imagine that a native SDK app might even be able to take input from one person and send that to another, enabling a morse-code method of communicating, for example.

There's a lot more to consider here, but it seems like it's a bigger deal than I thought it might be at first.

It also makes me wonder just how much more intrusive it will feel to be tapped by some spammy notification in an app.

On Apple Watch

Up to this point I haven't been sold (personally) on Apple Watch. The main drawbacks as I saw them were:

  1. Price. And it's a recurring price since you know you'll have to upgrade every year.
  2. Size. I have small wrists and I don't like large watches. I don't even always wear a watch. I don't want to wear a huge piece of jewelry on my wrist.
  3. Battery. I don't want to charge something every night, especially when it would otherwise have utility (sleep tracking).
  4. Utility. What in the world is the Apple Watch (or any smart watch) going to do for me that I care about?

However, having listened to quite a few podcasts on the topic and read even more posts, I'm convinced now that (at least at some point) I'm going to want one.

  1. I'll get over the price. And if the main SDK components remain the same then there isn't that much computation being done on the watch itself. The year-over-year upgrade may not turn out to be so compelling. And if your band can last more than 2 years, you'd only have to upgrade the watch, not the band.
  2. I'll get over the size. Everyone will have one. It won't be so weird.
  3. I'll get over the battery. Because there will be so much utility. Which leads me to...
  4. Utility. I'm now convinced of enough positive use cases that I think it would really be a helpful device.

A few use cases for Apple Watch:

  • When there's motion on my front porch my wrist can tap and I can see a picture from my porch camera to see who/what is there. Same with other household security notifications.

  • When I get home I can open the garage door via the app I wrote to control my garage door remotely. Why would you want to do this? Because your watch knows that you are you, and theives like to steal garage door openers and use them to get into your stuff. It'd be safer to not even carry one.

  • When driving and I get a text message I can easily glance at my wrist, see that it's something I care about (or not), and respond via Siri, without having to find my phone and get it out.

  • My wife can find her phone in the house when she loses it.

  • Easier interface to Siri.

Since my watch can know that it's me, and therefore verify that I am, in fact, me, then it can be a presence notifier on my behalf. This leads to some pretty great conclusions:

  • My car can unlock the doors as I walk up, and let me start the car without another key. And I don't need a massive fob in my pocket to let me do this.

  • Same with my front door (though I'm unsure I'd ever opt for a lock like this).

  • Turning off the lights when we leave the house and otherwise left them on.

  • Allowing me to verify myself as other services support such features. Things like Apple Pay are already there, but other sorts of checkin, registration, and verification could all be linked as well.

I'm not currently planning on getting one immediately, but I think I am far more likely to purchase one than I was a few months ago.

The History of English Podcast

I was recently made aware of the great History of English Podcast.

The author, Kevin Stroud, while not a professional linguist, is a wonderful story teller. Each episode covers a combination of the etymologies of English as well as the history, that is the people, who have spoken this language in its various forms from it's roots thousands of years ago.

I'm still playing catchup, but even after less than 10 episodes in I'm finding that it has firmly drawn my attention to words, explaining how various words came into English, and why even words with similar meanings sounds so different from one another, i.e. why horse as well as equine.

If you have any interest in history and even a passing curiosity about the English language I would highly recommend that you check it out.

Handling Motion JPEG Streams on iOS

I have several Foscam Cameras around the outside of my house. They're very easy to setup, tolerate the outdoor conditions admirably, and are incredibly affordable for what they offer.

As with everything else around my house, I like to build software that customizes my view into my home (or in this case, outside my home). To that end I've build an app I call Argos that lets me monitor all sorts of sensors on my property.

Once I installed the first set of cameras I wanted to be able to implement some views that would display the current video stream from each camera. After looking into the documentation I discovered that the cameras I have offer two types of video streams: windows streaming video (asf) and motion JPEG.

I don't have a lot of experience writing software to handle video streams. But as I read the basic description it seemed that a motion JPEG stream is just an http stream that continually pushes out a series of jpeg images.

Oh, well that's easy. Right?

Well, not so fast.

What Is Motion JPEG?

It also turns out that there is no such thing as a true motion jpeg standard. However, there are two typical implementations, Motion JPEG-A and Motion JPEG-B. Motion JPEG-A supports the concept of markers, while Motion JPEG-B does not. This difference is important. For the rest of this discussion however all we need to know is that the Foscam camera stream is Motion JPEG-A.

A Motion JPEG-A stream looks (to me) a lot like a multipart email message. There are several sections, each separated by a long string of semi-random characters. Within each section is some encoded (or not) binary data that represents the object in that section. In our case, each section is a JPEG image.

We can see what this looks like by using the curl command:

{% highlight ruby %} › curl -D - "http://192.168.300.301/videostream.cgi?user=admin&pwd=SECRETS" HTTP/1.1 200 OK Server: Netwave IP Camera Date: Wed, 02 Jul 2014 22:28:03 GMT Accept-Ranges: bytes Connection: close Content-Type: multipart/x-mixed-replace;boundary=ipcamera

--ipcamera Content-Type: image/jpeg Content-Length: 43996

????JFIF???!???

[a lot of binary data]

--ipcamera Content-Type: image/jpeg Content-Length: 44176

????JFIF???!???

[a lot more binary data] {% endhighlight %}

It just goes on and on like this.

We can see in the header of the response that the boundary text will be ipcamera, and the two lines following each boundary include the content type and the content length.

So How Do We Parse This?

This is the basic approach to parsing a data stream like this:

  1. Read in the first chunk of data
  2. Does the chunk contain a boundary marker?
  3. If so, is that boundary marker the first boundary marker?
  4. If it is the first one, then skip it.
  5. Is there another marker? If so, then we have a complete image.
  6. If we have a complete image, find the start and end of the image, remove those from our buffer, and process the image.
  7. If we do not yet have a complete image, append the data to the buffer, and wait for the next chunk of data.

The key here is that we never know how many chunks it will take to make one image. In an ideal world we'd just get one chunk per image and we could throw that right into an NSData object and convert it to a UIImage.

Here's the code I have so far for parsing the Motion JPEG stream:

The heart of the code is in func URLSession(session: NSURLSession!, dataTask: NSURLSessionDataTask!, didReceiveData: NSData!). That's where we attempt to see if we've hit the end of an image, and if so, extract it from the buffer.

Bugs

So far the code works fairly well, except that from time to time when I attempt to make a UIImage out of this I get a failure. I'm not sure if my data out of my camera is bad (unlikely) or if I'm just messing up the process of extracting the data (much more likely).

Improvements

What I'm currently not doing, but probabaly should be doing, is using the Content-Length header to verify the length of the image data before passing it off. I do wonder if that wouldn't be a far more reliable way to extract the data from the buffer.

Future

Beyond cleaning up the code a bit and trying to make it more reliable, I would love for this view to include some other nice features down the road, like the gesture recognizers to allow me to implement panning/tilt via gesture. Several apps dedicated to IP Camera viewing do this, and it wouldn't be very difficult at all to get it right.

Build Your Own High Top Tables

We recently hosted a backyard party, and we wanted some high top tables for people to be able to mingle around. We looked around online but nothing was as simple as we wanted (we were going to cover them with table clothes so they didn't need to be fancy), and the ones we were able to find at all were pricier than we wanted. So, we did what you do when you want something to exactly match your vision: we built them.

The Materials

  1. Three 1"x4" boards, cut to 40" in length.
  2. Three 3" hinges, with hardware.
  3. One raw round table top, 24" diameter. I found these at Lowes.

The total cost of materials ended up being about $35 per table. The table top was by far the priciest piece, at about $18 each.

The Build

  1. Cut your boards to length (40"), if you haven't already.
  2. Use a square or protractor and mark the exact center of the underside of your table top.
  3. Position your hinges in a triangle around the center mark, with about 1/8" space between the hinges. See the picture below for an example.
  4. Mark the holes on the table top for the hinges with a pencil or pen.
  5. Remove the hinges and drill pilot holes for your screws. Here's a guide for choosing the right size pilot hole. If you skip this step, you will likely crack your table top.
  6. For each board, lay a hinge on the end, making sure that you have the orientation correct. Compare with the photos below if you're unsure.
  7. Mark the holes on the boards for the hinge with a pencil or pen.
  8. Remove the hinges and drill pilot holes for your screws. Here's a guide for choosing the right size pilot hole. If you skip this step, you will likely crack your table leg.
  9. Get out your screws and attach the hinges to the boards first, screwing them down snug but not so tight that you crack the wood or strip the hole. Be sure you have the hinge oriented properly (when attatched to the table top the hinges should swing away from the table freely, see the photos below to compare).
  10. One by one, screw the hinges to the table top, again double checking your orientation. You may need an extra hand to hold up the legs as you finish if you dont have enough space to lay out the legs flat.
  11. Now gather the legs carefully together and flip the table over so that it is upright. Spread out the legs so that they are even with the edge of the table top. Adjust the legs a bit as necessary to create a level table top. You're done! [^1]

The Result

  • The Final Product
  • Top Down View
  • Underside Of The Table
  • The Table Leg

[^1]: We left ours unfinished, but if you plan to use them without tableclothes or leave them outside you should paint or stain them. Also, if you plan to use them on a very smooth surface, you'll need to find some rubber feet or build a strap to prevent the legs from slipping out.

Inexpensive Live Streaming For Your Church

Note: This article is from early 2012 and most of the information is now outdated. For an up-to-date look at this issue checkout the updated article I wrote for Sermons.io.

Last winter (2010-2011), from January through March, our church attendance was down nearly 30%. Between a few vacations and an intense RSV and Flu season the congregation was knocked down pretty hard. Knocked down and out (of the service), but not completely out of participation thanks to our live stream.

We've been livestreaming video of our service since we started 2.5 years ago. When we planted, I couldn't find any helpful information about livestreaming that wasn't aimed at large churches with much larger budgets than we were working with. Looking around recently for some equipment I still couldn't find a good reference. So, here's a bit of a history of what we've done at Grace Church. Hopefully it can be of help!

Getting Started

Diving into livestreaming isn't free, but even the smallest of churches (we started with 30 people) can participate.

To get started you'll need someone dedicated to the task of acquiring equipment, learning how it all works together, and training others to help out.

Equipment

At a minimum you'll need a computer, a camera, possibly a video adapter, an audio feed from your soundboard, an internet connection, and an account with a video streaming service.

Computer

To stream your service you're going to need a computer. The computer takes the video from the camera and encodes it into a format ready for streaming via the streaming service. To be able to encode video at the quality you probably want, you'll need a relatively powerful computer. Look for something with at least an Intel Core 2 Duo processor. If you're already using a computer for projecting words for songs, you might be able to use that computer to do double duty.

We're a portable church, and we use mostly Apple equipment, so we're using a 15" Macbook Pro. Our pastor uses it as his computer during the week.

If you're going to use a firewire video converter like the one below you'll need a computer with a Firewire 400 or 800 input.

Cost: $0 (If the computer you own will work, or you can borrow one) - $1199

Video Camera

When we got started we just used a cheap Logitech webcam as our video camera. The quality was low. You could barely see the stage. But it worked! It was better than nothing for the family stuck at home with sick kids.

Today you can buy a Canon Vixia Camcorder for under $300. If you're going to convert your video for uploading later (to a service like vimeo) then you'll want to get an HD camcorder.

The only requirement of your camcorder is that it has live composite or S-Video output. What this means is that the camera will output a low-def video feed at the same time that it is recording.

If you really have no plans to record your video on the camera, you can ditch the live-output requirement, and maybe even pick up an older still camera with video output.

Also keep in mind that if your camera is going to be in the back of a room you'll want a high optical zoom (10x+). You do not care at all about the term "digital zoom". "Digital Zoom" is a hoax. You only care about optical zoom.

Cost: $79-$400+

While you're at it don't forget to get a big memory card so you don't have to deal with running out of space. 64GB SD Cards are getting cheaper every day.

Video Adapter

If you aren't using a basic webcam, then you'll need a way to get the video stream from the camera to the computer. This is where the video adapter comes in. If you have a computer with a firewire port of some kind, then go buy one of these.

Updated: If you have USB3 on the computer, then one of these encoders from black magic would make a great solution. Here's a thunderbolt version if that's what you have to work with.

Cost: $150+

Internet Connection

To stream live you'll need an internet connection. For the best quality you'll need something with at least a 1 Megabit Per Second upload speed. You can get away with a bit slower if you lower the quailty of the video you're uploading.

Being a portable church, we don't have any internet available to us in our building. We're now using a Verizon Jetpack.

Cost: $0 (You already have it)-$60/month

Streaming Service Account

Don't bother looking around. Just go to livestream.com and sign up now. It's free ($350/m if you don't want ads to appear in your stream) and it Just Works. They have native software for both Windows and Mac.

Download the free Procaster software.

Cost: Free

Audio Feed

The last thing you'll need is an audio feed from your soundboard. Talk to your sound operator about what you'll need to get a feed to your computer. Usually you'll just need a simple audio cable and maybe an adapter.

If you don't have a sound board then you'll need somekind of mic setup to get the feed for your stream.

If you're really stuck you could try just pulling in the ambient room audio from a microphone at the computer. This might get you by, but you'll be dealing with some pretty bad audio, and you'll pick up voices of anyone whispering nearby (potentially embarrassing!)

Putting It All Together

So you've spend somewhere between $79 and $3000 getting the equipment you need to be able to livestream your service. What now?

  1. Take the video (and maybe audio depending on how you want to set things up) out of your video camera and feed it into your video converter (and thus into your computer).

  2. Take the audio feed and either feed it into the camcorder (if you're going to record live on the camera) or into the computer doing the streaming.

  3. Fireup the Livestream Procaster software and login to your account. Configure any settings under the preference tabs, then click "Go Live"! You're streaming!

Upgrades

At Grace Church, in the time since we started streaming, we've upgraded equipment and updated workflow, but the basics are all the same, and we still don't have a huge budget.

We upgraded our camera from a webcam to a camcorder + video adapter. We upgraded our tripod recently.

Here are some other options available to you as you upgrade your setup:

  • Get A Better camera
  • Get Multiple cameras
  • Remove the ads from your streaming service
  • Embed the livestream on your website
  • Use the high+mobile quality streaming to give everyone a chance to view your stream wherever they are
  • Promote your stream on Twitter and Facebook

Keep Streaming

This isn't the post for it, but there are a lot of great reasons to keep streaming your services for your congregation. From the sick or elderly to the mothers' cry room, there are members of your church that can't otherwise participate in your Sunday Service. A livestream helps keep them connected and ultimately builds the church. So keep on streaming.

New: All-In-One Solution

If you are looking for a true all-in-one solution, you should checkout the $500 Livestream Broadcaster. You'll still need an internet connection (until Summer of 2013 when the LTE version comes out) to get out of the building, but if you're starting from scratch this may greatly simplify things for you.

Questions?

If you have any questions about live streaming feel free to ping me on twitter.