Posts on this site are never sponsored.

Nest Cam as a baby monitor review: expensive but lots of features

The Nest Cam is a souped up webcam that is marketed primarily as a security camera. It also works well as a baby monitor, which is what this review will focus on. Is the Nest Cam worth the $250 CAD (+ $100 per year for video history) cost?

Main features: video and audio

Video and audio quality with the Nest Cam is good. You can choose between 360p, 720p, and 1080p. The higher the quality the more bandwidth it uses, of course. For my purposes, even at 360p there is sufficient detail to see what a baby is doing, although I have it normally set to 720p. The camera captures a wide angle, and has good zoom capabilities. Night vision is a key feature — I use the camera exclusively at night — and works well.

Nest Cam night vision

The only challenge with the night vision feature is that the lighting and thus the clarity get messed up if there is an object between the camera and what you’re trying to watch, even if that object is off to the side. Thus, you have to make sure there’s a clear path to what you’re watching, or configure the camera to zoom past the other object.

Access to the Nest Cam’s video is through its website or a smartphone app. This is very convenient because you don’t need additional devices if you already have a smartphone, and multiple people can access the video through their own devices. Using either the website or the app, you can see the video and hear the audio, but also speak through the camera.


Setting up the Nest Cam is really easy. It comes with a 10-foot cable that you plug into the wall. Using the app, you scan the QR code on the back of the camera, name the camera, and enter your WiFi details. That’s it!

The Nest Cam is only 4.5 tall, and can either stand on its own or be mounted.

Nest Cam size

It’s quite portable — if you need to use it somewhere else in the house, you just move it and plug it in, and it automatically connects to the network again. If you need to connect it to a different network, then you just follow the same simple setup steps.

Supporting features: history and notifications

The Nest Cam has nice history and notification features, although after 30 days you have to pay for the history feature (which starts at $100 per year for 10 days of rolling video history retention).

The video history is summarized with a list of sound and motion notifications through the app or website.

Nest Cam video history

When you’re logged in through the website you can also view the entire history, clicking through the hours and days of video just like any online video.

The notifications can be quite useful, with or without the video history feature. You can configure sound and/or motion notifications that will alert you via e-mail or through an app notification:

Nest Cam sound and motion notifications

Other options that can be configured include video quality, a talk and listen chime, a status light, and more:

Nest Cam options

Although the general status light can be turned off, there is a specific case where a light shows even with that setting “Off”. When the camera has a temporary Internet connection issue, its blue light pulses, which could disturb a sleeping baby.

Plugged in and WiFi

The Nest Cam needs to be plugged in all the time, and does not have a battery backup. If you have frequent power outages, then this camera is probably not for you.

The Nest Cam also requires a good WiFi connection. This can be an issue if it needs to be placed in a room that does not have a good wireless signal from your router. It is also susceptible to any general issues you have with your Internet connection. Also, if you’re travelling with it and need to connect to a network with a login screen in addition to the WiFi password, you must use something like Connectify so that you can log in via another computer and then have the camera connect through that computer.

Bandwidth could be an issue, depending on your Internet connection. If you have the video history feature, it will be constantly streaming its video; otherwise bandwidth is only used when you’re watching the video. I measured 1 week of use (with video history) at 360p, and it used 5.05GB. Nest claims that at 720p with video history, the total bandwidth usage of your camera when it is on 24/7 is 60GB to 160GB per month. If you’re using it as a baby monitor, you probably won’t have it on all the time, though. In addition to the total bandwidth usage, you’ll need to consider its speed requirements in terms of amount of data per second. At 720p, this can be between 200Kbps and 500Kbps. You can consult the Nest website for the data speed requirements at the various video quality levels.


If the Nest Cam’s rich set of features are of use to you, and you have a good and reliable Internet connection and power, it might be worth the cost as a baby monitor. It might also have some good resale value. Otherwise you could stick to something cheaper and more basic.

Converting PHP cURL SSL / TLS cipher names

Web developers have started to pay more attention to secure connections due to vulnerabilities such as POODLE and the general push for HTTPS everywhere.

Some aspects of SSL / TLS are quite complex and generally not well documented for the level that most web developers work at. The issue of ciphers is one of the challenges. There is a long list of possible ciphers, and you might find yourself maintaining a limited list of ciphers that your application supports. One of the problems is that the cipher names are not the same across technologies.

If you are making PHP cURL calls, you can limit the supported ciphers using the CURLOPT_SSL_CIPHER_LIST option. However, if you want to support the cipher TLS_RSA_WITH_AES_256_CBC_SHA for example, you cannot pass PHP (or cURL directly) that identifier — it will complain that no such cipher exists. If you inspect the results of the function openssl_get_cipher_methods, you will find identifiers such as rsa_aes_256_sha, which happens to map to TLS_RSA_WITH_AES_256_CBC_SHA.

In order to find cURL’s mapping of cipher names, you have to inspect its source code! There, you will find the complete mapping, with entries such as this:

{"rsa_aes_256_sha",            TLS_RSA_WITH_AES_256_CBC_SHA}

Thus, you can set the cURL cipher list in your PHP call like this:

curl_setopt_array( $curl, array( CURLOPT_SSL_CIPHER_LIST => 'rsa_aes_256_sha' ) );

(Bonus tip: you can use cURL on the command line for quicker testing: curl -I –ciphers “rsa_aes_256_sha”)

Lastly, it is important to note whether your server is using mod_ssl or mod_nss. If you want to support multiple ciphers, the PHP documentation says to separate them with colons. However, it does not state that with mod_nss the separator is a comma!

Park’N Fly Vancouver airport (YVR) parking review

I was recently travelling out of Vancouver with a baby and a car seat and figured that parking at the airport would be relatively convenient and cheap. The main long-term parking options appeared to be jetSet and Park’N Fly, and I decided to try out Park’N Fly based on a recommendation.

I was impressed at how straightforward and convenient Park’N Fly is. It’s on Miller Road about 5 minutes away from the terminal. When you drop off your car, you just park next to the lot’s “lobby” and leave your keys in the car. You go in and register, then take a shuttle that runs about every 15 minutes to the terminals. Someone at Park’N Fly parks your car somewhere in the lot. There is an Air Canada check-in counter at the parking lot if you need it.

I didn’t end up taking all the bags and passengers on the shuttle — I dropped them off at the airport first — although it seemed like there would have been plenty of room to do so.

You can get a cheaper price than the walk-up price at Park’N Fly if you pre-book online, and also if you have one of various memberships, such as BCAA or BCTF. You can also earn Aeroplan points.

When I registered the car at check-in, I was sent a text message from Park’N Fly. When I returned back to YVR, I replied to the text message once I’d landed, which presumably triggered someone at the lot to get my car.

Park'N Fly text message

After taking the shuttle from just outside the terminal back to the Park’N Fly lot, I paid at a self-serve kiosk and picked up my car, which was waiting once again just outside the lobby.

Since the lot is a few minutes away from the terminals and you might have to wait for the shuttle (I got lucky as it was already there both times) you should probably plan up to an additional 30 minutes to the start and end of your trip. However, I found Park’N Fly about as convenient as it could have been given the circumstances!

Ikea Skarsta standing desk review: cheaper, reliable Bekant alternative

In my search for a standing desk, I found the Ikea Bekant sit/stand desk in the showroom. It looks great, has a large desk surface, and has a motorized up/down mechanism.

Thus, you can move it to the exact height you want whether you’re sitting or standing by simply pressing on a button.

I almost bought the desk until I found multiple reviews complaining about motor failures in the raising / lowering mechanism. While Ikea would presumably replace parts in the event of a problem, I didn’t want to have to disassemble the desk and bring it back to the store.

After much searching, I found and purchased the Skarsta desk, which is essentially the Bekant but with a hand crank to raise or lower the desk. No power or motor required. The Skarsta costs $300 instead of $600 for the Bekant. Ikea does not currently feature the Skarsta in the showroom (presumably in order to push people towards the more expensive Bekant that is a much more impressive demo), and it only comes in white.

The Skarsta is simple and effective. I recommend it if you are looking for an affordable and decent standing desk. The hand crank is quite noisy and takes about 1 minute to adjust the height between sitting and standing, and the desk will wobble a bit while it’s being adjusted. You can be very precise about choosing the final height. I read some concerns about its 110 pound load capacity, although I think that most people don’t place even close to that much weight on their desk. In general I have no real issues with the desk and am quite pleased with it.

I recommend getting a cable tray to attach underneath the desk to keep cables organized, especially for when you are moving the desk between a sitting and standing position. Ikea has a tray called the Signum, which fits well underneath the Skarsta.

Arguably, standing is no better than sitting if you’re remaining in the same position for many hours at a time. So, no matter what desk you have, take breaks away from the desk! You might also wish to buy a tall chair and a floor mat to make your workspace more comfortable.

Regular expression to extract cookie value from Apache access logs

I was recently troubleshooting a problem where I needed to extract cookie values and IP addresses from Apache access logs. In short, cookies were being shared across sessions instead of being unique to each session. The Apache log entries looked something like this: - [29/Oct/2015:23:59:46 -0400] "GET /user/profile HTTP/1.1" 503 17839 "" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36" "SESSID=59n42qa556o2k08ekmbmlhgdg1; othercookie=(direct)" -

Using this command, I could extract the cookie values for SESSID and save them to a file:

grep -ir 'GET \/user\/profile HTTP\/1.1" 503' /web/logs/access_log | sed -r 's/.*SESSID\=(.*)[;|"].*/\1/' > 503_cookies.txt

The sed regular expression wasn’t stopping the match at the semi-colon or quote, however. Instead of using (.*) in the capture for any character, I had to use [^;"] for “not semi-colon or quote” even though the match on the same characters happens outside of the parentheses:

grep -ir 'GET \/user\/profile HTTP\/1.1" 503' /web/logs/access_log | sed -r 's/.*SESSID\=([^;"]*)[;|"].*/\1/' > 503_cookies.txt

Further work was needed to grab the IP addresses for the matches and save them to another file. Here I didn’t need a regular expression, as I could just grab the first column with awk:

grep -ir 'GET \/user\/profile HTTP\/1.1" 503' /web/logs/access_log | awk '{print $1}' > 503_ips.txt

Then I could use the paste command to put the relevant IP address + cookie value entries on the same lines in the report and collapse all duplicate entries:

paste 503_ips.txt 503_cookies.txt | sort | uniq

Each line then looked something like this: 59n42qa556o2k08ekmbmlhgdg1