Posts tagged “internets”
Kip Comparing online backup services

I recently did some evaluating of a few online cloud backup solutions, and thought I would share what I found here. I evaluated Dropbox, Carbonite, and CrashPlan. I ultimately went with CrashPlan, for reasons I’ll describe below.

Dropbox

I’ve been using the free offering from Dropbox for about a year and a half now. It’s great. At least, for what it does it’s great. The integration with the shell is perfect: the moment a file in your dropbox is modified, Dropbox starts uploading it to dropbox. It puts an icon of the file letting you know if the file has been backed up or not. And I’ve never gotten an error that I couldn’t modify a file because it was in use by Dropbox. Plus, it gives you a public folder which others can access via HTTP. You get 2GB for free, and I have no complaints about the free service.

However, I have about 80 GB of stuff I want to back up, and that number will only grow in the years to come as I record 720p videos of the kids growing. Dropbox’s prices are pretty steep if you want to buy more storage: $99/year for 50GB, or $199/year for 100GB. I guess if you pay for extra storage, you are really paying for all the people who are using Dropbox for free. Maybe they’re hoping to win you over with the awesome free service, and then maybe you won’t shop around before considering upgrading. But if you shop around you’ll find those rates are pretty unreasonable. There is also the issue that Dropbox wants part of your computer to be your Dropbox. Meaning, you would have to move all the folders you want to back up into your Dropbox folder. That’s kind of a big deal too.

Bottom line: Dropbox upgrades are a bad idea. Don’t do it unless you feel it is The Right Thing To Do, as a way to thank them for their awesome free service and to try to ensure that the free service stays around a bit longer.

Carbonite

Next up was Carbonite. I heard about Carbonite through an ad on a podcast (the Adam Carolla show I believe). They offer unlimited gigabytes for $59/year. Some web searching revealed that they seem to have a way of nudging some users away if they use too many of the “unlimited” bytes. But most of the complaints I found were from about two years ago. You can do your own research.

I tried the 15-day free trial. It has useful shell integration like Dropbox, which was nice. You tell it which folders to back up (rather than having to put everything in a “Carbonite” folder or something). However, the biggest turn-off for me was the file extension blacklist. Certain types of files are not backed up automatically by Carbonite. In particular, video files are not backed up. (As I said above, one of the main reasons I want cloud backup was to protect our photos and videos.) You cannot directly edit this blacklist, or tell Carbonite “hey just go ahead and back up anything”. Instead, you have to find a file that is not being backed up, and right-click on it and go into the Carbonite options and tell it to always back up that type of file. So you have to go searching for files that Carbonite might have missed. Throughout the 15-day trial I kept finding different types of files that Carbonite was skipping—exe, ini, all hidden files, and a few other extensions.1 This was enough to turn me away from Carbonite. I need to be confident that it is backing up everything!

CrashPlan

Last in my search, I arrived at CrashPlan. Like Carbonite, CrashPlan offers an unlimited plan. Theirs is only $50/year. They don’t have the nice shell integration like the other two. The only thing you have is a tray icon, which seems to be out of sync with the actual application every now and then. Another problem I have with it is that it locks the files while it is uploading them, so while I was uploading files I occasionally got a “this file is in use by CrashPlan” error message. Which is annoying, but I can live around it. Their approach to this seems to be “watch the file system for changes, but only actually upload new/changed files every 15 minutes”. I have changed that back to just once every hour to mitigate this risk.

I think some of the strange design decisions stem from the fact that (I think) it was originally a tool used to back up files from one computer to another (most likely on the same LAN), or from one hard drive to another on the same system. (In fact, you can still use it for that purpose for free.) It is definitely the least user-friendly of the three services I looked at, but it’s not crazy or anything.

In spite of these flaws, I still went with CrashPlan because the service works great, it is a better value than Carbonite, and doesn’t have the file type blacklist. I also got a code from CrashPlan about a week before my 30-day trial ended, with a code to get a year for only $42 (saving $8). I don’t know if this is normal, or if I just happened to be evaluating the service at the right time. I’ve been using the service for about two months now (counting the trial month), and I’m pretty happy with it.

I guess I should mention that there are others out there that I didn’t really look into much, like Mozy. And Microsoft and Apple each have their own proprietary cloud backup solutions too. I’m just reporting on the things that I looked into.

1 In fact, it may actually only be a whitelist of file types allowed, rather than a blacklist of excluded types. And, to be fair, this is pretty clearly explained up front on their website.
Kip More on HTML5 video

Four months ago I blogged about the frustrations of using HTML5 video. I said at the time that I have to transcode the video into 4.1 different formats (mp4, ogv, webm, flv, and jpg). However, I was reminded today (at NC Dev Con) that Flash supports h.264, which is to say, MP4. So I don’t need to transcode to FLV for the Flash player fallback; I can just send the MP4 file to the flash player.  So I’ve updated the player on my site to drop the need for FLV. I’ve also switched my flash player from OSFLV to the nicer Flowplayer. Not that you would notice any of this, unless you’re using IE 6/7/8.

No Comments
Kip HTML5 video

I’ve supported HTML5 video on this site for something like a year now. I don’t think I have commented yet on just how much of a pain it is. This post isn’t a tutorial; other people have already written very good tutorials on HTML5 video. Don’t get me wrong—HTML5 video is a nice thing to have. The videos on this site can play on Flash-less devices like iPhone, iPad, and Android. For current versions of every desktop browser, the video plays nicely without the overhead of loading a Flash container. (And let’s face it, everyone hates Flash.1.) And the syntax is backward-compatible, allowing older browsers to see a flash video player that newer browser will ignore. All-in-all, it’s pretty nice.

Except for the fact that I’m required to convert my video to 4.1 different formats! To play properly everywhere, the video has to be served in:

  • MP4 - for Safari, iPhone/iPad, and Android

  • OGV - for Firefox, Chrome, and Opera

  • WebM - For IE9

  • FLV - For flash player fallback in older browsers (IE 6/7/8 mainly)

  • JPG - Okay, so this isn’t a video format, and it’s not required. But if you don’t pre-load your videos, you need a jpeg to use as the background letting the user know there is a video there they need to click on. (When I said I need 4.1 formats, this was the point one.)

This is pretty ridiculous. If the img tag didn’t already exist, and it were to be added as a new HTML5 element, the syntax would probably look something like this:

1
2
3
4
5
6
<img>
  <source src="/images/whatever/whatever.jpg" type="image/jpeg" /> <!— for Chrome/Safari —>
  <source src="/images/whatever/whatever.gif" type="image/gif" /> <!— for Opera —>
  <source src="/images/whatever/whatever.png" type="image/png" /> <!— for Firefox —>
  <srouce src="/images/whatever/whatever.bmp" type="image/x-ms-bmp" /> <!— for IE —>
</img>
No Comments
Kip How to programmatically update your Twitter status using OAuth in PHP

Earlier this week I was informed that Twitter will soon be ending its support for “BasicAuth” in the Twitter API, in favor of OAuth authentication. This affects me because I use the API to automatically post a “just blogged!” link to Twitter after every new blog post. Using BasicAuth, this was super simple:

1
2
3
4
5
6
7
8
9
10
11
function postStatus($status, $username, $password)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'http://www.twitter.com/statuses/update.xml');
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, 'status=' . urlencode($status));
  curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
  
  return curl_exec($ch);
}

OAuth is a little more complicated, but I got it to work after about four or five hours of banging away it with the help of this article.1 Since I couldn’t find anywhere that this was described in detail, I decided I would document the whole process here on my blog. I don’t claim that this code is great, but it gets the job done. If you couldn’t care less about the workings of OAuth, and just want a give-me-teh-codez solution, then this is for you.

The first thing you have to do is register a new app. This sounds scary but it’s actually very easy. When filling out the form, note the following fields:

  • Application Name: this is what will show up under your tweets. In my case, I chose “vacantnebula.com” since all tweets from my app are announcements of new posts on this site.

  • Application Website: this is the URL that application name will link to.

  • Application Type: I’m not sure if it matters, but I chose “client”.

  • Default Access Type: you must select “read & write” to be able to update status (i.e. “write”).

After registering your application, you can view application details. Here you will see your consumer key and your consumer secret. You will need these keys later.

For a single-user application (which is what I’m describing), you will need to click on my access token. This will give you the access token (oauth_token) and access token secret (oauth_token_secret). Again, you will need these later.

And without further ado, here is the code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php

class twitter
{
  //FILL IN THESE VALUES!!
  private $consumerKey      = '???';
  private $consumerSecret   = '???';
  private $oauthToken       = '???';
  private $oauthTokenSecret = '???';
  
  /**
   * Posts status to a twitter account. Returns true if successful, result
   * of curl_getinfo() if failure. 
   */ 
  function postStatus($status)
  {
    return $this->apiCall('https://api.twitter.com/1/statuses/update.xml'
                         , array('status'=>$status));
  }
  
  //separate function to leave the door open to other API calls...
  private function apiCall($url, $params)
  {
    $method = 'POST';
    
    //postString covers what will *actually* be posted
    $postString = $this->joinParams($params);
    
    //now adding to $params other OAuth properties...
    $params['oauth_nonce']            = sha1(time() . mt_rand());
    $params['oauth_timestamp']        = time();
    $params['oauth_signature_method'] = 'HMAC-SHA1';
    $params['oauth_version']          = '1.0';
    $params['oauth_consumer_key']     = $this->consumerKey;
    $params['oauth_token']            = $this->oauthToken;
    
    ksort($params); //IMPORTANT!
    $paramString = $this->joinParams($params);
    
    $signatureBaseString = $method
                         . '&' . rawurlencode($url)
                         . '&' . rawurlencode($paramString);
    $signatureKey = $this->consumerSecret . '&' . $this->oauthTokenSecret;
    $params['oauth_signature'] =
            base64_encode(hash_hmac('sha1', $signatureBaseString, $signatureKey, true));
    
    $authHeader = 'Authorization: OAuth realm=""';
    foreach($params as $key => $val)
      $authHeader .= ", $key=\"" . rawurlencode($val) . "\"";
    
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //required for HTTPS URL
    curl_setopt($ch, CURLOPT_HTTPHEADER, array($authHeader));
    
    $content = curl_exec($ch);
    $resultInfo = curl_getinfo($ch);
    curl_close($ch);
    
    if ($resultInfo['http_code'] == 200)
      return true;
    
    $resultInfo['content'] = $content;
    return $resultInfo;
  }
  
  //Join key/value pairs together in url string format, encoding values.
  private function joinParams($params)
  {
    $paramString = '';
    foreach($params as $key => $val)
    {
      if($paramString !== '')
        $paramString .= '&';
      $paramString .= $key . '=' . rawurlencode($val);
    }
    return $paramString;
  }
}

And I assume you know this, but to use the API it’d look like this:

1
2
$twitter = new twitter();
$result = $twitter->postStatus('hello world!');
1 I could have saved myself over an hour by realizing that I had to call rawurlencode rather than urlencode; the former encodes spaces as %20, whereas the latter encodes them as +.
Kip More thoughts on Pandora

A little over a year ago, I posted my impressions of Pandora, the free online radio station website thingy. At the time, I was liking it, though after a while I started losing interest and stopped using the site.

Last month, I saw a cartoon about Pandora on Hijinks Ensue. The cartoon hit on a problem I also had with the site. I left the following comment there, which I thought was interesting enough that I’d share it as a blog post.

Kip: I like Smashing Pumpkins and Nirvana

Pandora: Hey, you must love Red Hot Chili Peppers!

Kip: No, really I don’t. Well OK, I like Under The Bridge, but most everything else is thumbs-downed.

Pandora: Great, so you wanna make babies with RHCP! While I keep playing them, I bet you like Foo Fighters too.

Kip: Yes, actually I do like them a lot

Pandora: Great, so you like any alt-rock from early-to-mid 90s. I bet you love Alice In Chains!

Kip: Can’t stand them

Pandora: I’ll keep a few more Alice In Chains songs in rotation in case you needed 15 years for them to grown on you. How about some Soundgarden?

Kip: Please stop

Pandora: Candlebox?

Kip: Okay time to stop

Pandora: Here’s another Chili Peppers song since you love them so much

No Comments
Kip Alerts

I’ve been using Mint to track my money for a few months now.  Most of you reading this are cool people who have been using Mint since before I heard about it, though, so I won’t bother explaining how the service works.  I guess I’m supposed to set up budgets or something, and if you don’t it kinda guesses based on your past expenses.  Then it alerts you when you go over-budget in a category.  Which is nice sometimes, but other times you get things like this:

Alert from Mint.com: “In the past 30 days, you spent $359.49 on Taxes. Usually you spend $23.”

Okay, so ummm... what am I supposed to do about it?  If I could have payed only twenty-three dollars I would have.  Maybe they need an “e-mail a complaint about this to your congressman” button or something? :)

Kip YouTube dropping IE6 support

If you haven’t heard lately, YouTube will be dropping support for Internet Explorer 6.  This is great.  I’m hoping more top-tier sites follow suit.  That is the only thing that is really going to force an upgrade on many users.  And more importantly, it might force more lazy IT departments to upgrade their users’ browsers (since many of them are locked out of better browsers).

Don’t get me wrong, Internet Explorer 6 was a great piece of software when it debuted, eight years ago.  I’m sure that 2009’s best browsers will be lacking many essential features in 2017’s internet.  Wow, 2017, that’s like a million years from now in internet years.

No Comments
Kip I’m tweeting

I’m now tweeting.  You can follow kipthegreat on Twitter if you want to see what I’m up to.  So far I haven’t done much tweeting.  It just seems weird to use Twitter when I don’t have a Blackberry or iPhone.  Or maybe I just don’t get it yet.  I mainly signed up because my screen name was still available. :)

Kip Pandora.com

I recently discovered Pandora.com.  Basically, it’s internet radio.  You put in some bands or songs that you like as seeds to your “stations”, then it plays stuff it thinks you’ll like based on those seeds.  As it plays songs, you can give them a “thumbs up” or “thumbs down” to let it know further what your tastes are.  And it’s all free and legal and the only ads are on-screen ads (i.e. no audio ads that you have to listen to).

I was skeptical at first, but I’ve been using it for a while and I’ve been surprised at the number of times it has presented me with a song from a band I’ve never heard of but which I actually liked.  For someone who hasn’t purchased a CD (or acquired new music in any form, really) in something like three years, this is a pretty great way to find something new to listen to.  And it’s much better than real radio.

(I’m going to start ranting now.)

I really don’t understand why radio stations insist on playing the same twenty or thirty songs over and over again.  With the internet being around, music distribution is so much different than it was even ten years ago.  The industry can support so many more bands, because music can be recorded, produced, and distributed digitally at a fraction of what it used to cost.  It seems like a radio station could easily fill a 5-hour rotation with only music recorded in the last year that is decent that fits the station’s genre, without repeating any songs.  Not that I have anything against music that is more than a year old; I’m just saying there is lots of music being made all the time which is at least decent, so I don’t see why I have to hear crappy Nickelback or Papa Roach songs every time I turn on the radio in my car.

Seriously, who really wants to listen to Chad Kroeger sing about his sex life?

No Comments
Kip Guitar Hero-playing robot

This is awesome.

That is all.

No Comments
RSS feeds: Kip's - Stephanie's - Both