Future Insights Live 2013

This past week I attended Future Insights Live 2013 in Las Vegas, NV. The conference is geared towards people in the tech industry who want to stay on top of the latest development, design and business practices.

Here’s the short review: I had an amazing time at the conference this year and, whether it is in Las Vegas next year or not, I will be attending again. The long version is slightly more nuanced, but results in the same conclusion.

Workshop

This year, the conference started with an optional full day workshop on one of several topics. Because the workshops were optional, they came with an additional charge on top of the conference ticket. The one I attended was hosted by Paolo Fragomeni and was focused on Node.js – what it is, why you might use it and how you would do so.

I loved the workshop I attended and feel like I got a lot out of it. Paolo was really energetic and full of passion for the topic and the format that he used for this particular workshop really resonated with me. In the morning, we went over the basic concepts used in Node, the philosophy behind node and some of the cool things you can (and people are) doing with it. In the afternoon, the workshop switched focus to more hands-on learning. We paired up with others in the workshop (I met an awesome dude named Gilber from Costa Rica and worked with him) and extended an attractive and functional (but kind of boring) chat client written with Node.js. Each pair was given a different task to work on – Gilber and I added several actions sourced from the IRC beginner’s guide to the chat application:

  • /me – starting your message with this command would replace it with your nickname when messages were broadcast to others
  • /nick – this command allowed you to change your nickname at any time after you had initially set it
  • /notice – this command allowed you to private message another user based on their nickname

We had a lot of fun implementing this and built it in such a way that we could pop in new commands as easily as writing a new callback that did what we wanted.

Keynotes

The conference keynotes (big group based sessions at the beginning and end of every day) were fairly good. In particular, I was really inspired by Carl Smith’s keynote “Your Money & Your Life: Designing a Business That Won’t Kill You”. It was amazing how Carl integrated his personal story into a wider narrative that, for me, was ridiculously inspiring.

Another highlight for me was Bruce Lawson’s “How to Destroy the Web” – a satirical look at all the things people have done and continue to do in a way that doesn’t open the web up to its full potential. There were a lot of laughs during that keynote and the phrase “Hippie Bullshit” was used multiple times with an accompanying picture of a neon-green bull with marijuana leaf tattoos.

Sessions

The sessions were a mixed bag and I think most other attendees agreed. Sometimes you would step into a session and it would totally knock your socks off. Other times, it would amount to a 50 minute product pitch. Of all the sessions I attended, I thought two were really fantastic and want to comment on them specifically. They both included a combination of speaker preparedness and the content itself.

Josh Cramer did a fantastic job with his session “How to Build Apps Better and Faster Using Lean Startup Principles.” As far as session names go, that is quite a mouthful and if you hadn’t attended it I wouldn’t fault you for thinking it was going to be one long bullshit pitch about the lean process and how you can only do development this one way. That is not what it turned out to be at all – it was a well-presented end-to-end discussion of how you can work with your clients and customers to create things that people will want to use. I loved this session and it was probably my favorite of the whole conference.

Meanwhile, in a completely different vein, John Bender presented a session called “Math Envy and CoffeeScript’s Foibles.” I think that most people walked into that room expecting to hear about using CoffeeScript for development or to be presented with an alternative. I know that’s why I was there. Instead, John spent 50 minutes entertaining us all with an in-depth look at programming language syntax vs. meaning and ways to analyse those things. It took me back to my days in college (which was awesome) and John did a great job explaining everything in detail all the while making the subject really entertaining.

Networking

One of the big problems I had with Future Insights Live last year was that I felt there wasn’t really a great way to randomly meet people. They addressed that this year by making the lunch tables bigger, setting up stand-up tables around the main conference location and getting sponsors (most notably modern.IE) to provide communal spaces. I met so many awesome people this year at the conference, and this was a major highlight for me. Here’s a brief overview of people I met:

  • A team of six developers and designers from Costa Rica who came up together to learn more about the web
  • The user experience director at the World Wildlife Fund
  • A pair of Canadian’s (brothers) who run a business doing location based service-business tracking
  • Someone from the Google Adwords marketing team who took an impromptu video of me giving what was essentially a testimonial about how I used Google Adwords to launch my freelance business
  • A teacher from Devry University who was looking to stay on the cutting edge
  • Several people who worked inside of either an agency or small business as part of the technology team
  • A Fort Wayne native who had transplanted to Houston – we bonded over a shared love of Chicago
  • Two awesome US Bank employees who somehow managed to resist going and laying by the pool in favor of learning about the web
  • Members of the Quicken Loans web team, including a dude who works remote from Florida but is originally from South Africa
  • Two keynote speakers, including Jeff Atwood of Coding Horror and StackOverflow fame

If you take a look at that list, you’ll see what a variety there was in the attendees at the conference. It was amazing to have the chance to just touch base with all these different people and find out how they were working, what they were working on and what they were working with.

Food

The food was pretty good overall – much better then typical conference fare. I especially appreciate the fact that fresh fruit was available at every break and that the coffee tasted good. I’d like to throw a special shout out again to modern.IE for providing an espresso cart every afternoon. The espresso cart baristos were super awesome and friendly and it was nice to chat with them for a bit every day.

If I enjoyed alcohol I would have been overjoyed on Tuesday because MediaTemple sponsored drinks after the closing keynote. I didn’t partake, but plenty of people seemed really excited about it.

Conclusions

Like I said at the beginning of this post, Future Insights Live 2013 was a great conference. I really enjoyed myself – I learned a lot, met a bunch of great people and came away inspired by some of the sessions. It was well worth the cost and I expect to attend again in 2014. Thank you to the Future Insights team for putting on a great event!

Adding a Setup Fee to a New Stripe Subscription

For those of you not familiar with Stripe, it is a payment processing service that makes it super easy to accept credit cards on your website without worrying about all the ugly PCI compliance bits that cost a lot of time and money. In addition to one time transactions, Stripe offers subscription billing and management in a way that makes a lot of sense. The only that that is missing from the subscription system is the notion of a setup fee. In my mind, it isn’t super obvious how you would create a setup fee with a Stripe subscription and I didn’t find a good explanation from anywhere else, so I thought I’d take a crack at it.

From my perusal of Stripe’s documentation, this is how you would create a setup fee for a subscription:

  1. Setup Stripe Checkout on your website to accept a user’s credit card details and receive a token
  2. Post that token to your web app
  3. Create a customer using the token that you received from Stripe
  4. Create an Invoice Item for your setup fee and associate it with your customer but do not pass anything as the invoice parameter
  5. Update the customer’s subscription to whatever subscription plan they signed up for

If you weren’t applying a setup fee to the user’s account, you could create the customer and assign them a subscription at the same time. However, because the initial subscription invoice is charged immediately upon creation, you need to make sure the Invoice Item for the setup fee already exists. That’s why you create the “dangling” Invoice Item – it will automatically get assigned to the next invoice. The next invoice just happens to be the one that starts the subscription for the user.

Microsoft Surface Review

I bought a Microsoft Surface RT on launch day last year and, after about 4 months of full time use, I feel like I’m qualified to write a fair and honest review about what the device does well and what its shortcomings are.

Hardware

The first thing I noticed about the Surface is how different it looks and feels compared to the other leading tablets on the market: the Apple iPad and Google Nexus 7. This may be a huge turnoff for some people, but I love it. The slightly angled edges look great. The smooth matte black case of the Surface make me feel like I’m using a device meant more for work than play.

In terms of weight, the Surface is definitely heavier then either of the previous two tablets I’ve used, but I feel like it is balanced better. I can hold the device in front of me for a substantial period of time without tiring.

The screen is decent. Colors are vibrant and the screen can get really bright in a dark room. I wish the resolution was higher so I could watch full HD video, but it is adequate for everything you would want to do on a tablet.

The best two aspects of the Surface hardware are definitely the kickstand and cover. They go hand in hand and really make the device stand out from other devices on the market. The kickstand flares out from the back of the device, angling it up when you’re doing things like document processing and email. When closed, the kickstand sits flush with the rest of the Surface’s case, making you forget it is there until you need it.

The cover (that you currently have to buy separately but should come bundled with the device) is awesome when used in conjunction with the kickstand. Whether you get the touch cover (my choice) or the type cover, it is great having a full keyboard to work on. This solved a serious problem I had when using my iPad – I could see the emails I was getting but hated responding to them because it was a chore to type on the digital keyboard. I’ve seen some speculation that you wouldn’t be able to seriously type on the cover, but my typing speeds are about 80-90% of what I normally get with a full desktop sized keyboard. One thing about the cover that I don’t understand is the tiny little trackpad under the spacebar. I feel like it has next to no use when you can just reach up and tap the screen. Maybe some people use it, but I know that I never will.

Software

I think the best way to discuss the Software on the Surface is to divide it into three main categories: the base operating system (Windows 8), 1st party apps (like Mail, People and Messaging) and 3rd party apps that you can get from the store.

Windows 8

Let’s just get this out of the way – I love Windows 8. I’ve been running it since the release candidate went out on all of my computers. It is, in my opinion, an excellent operating system with great performance, amazing hardware compatibility and a lot going for it. I think that the Windows UI start screen is awesome, especially for a tablet like the Surface.

For me, the best thing about Windows 8 on a tablet is the connectivity it provides to the rest of my home network. I can connect to my HomeGroup with ease, sharing documents, videos, pictures and more. I can Remote Desktop into my main development PC or my development laptop to do something that requires the processing power of a machine like that. I can share printers, storage and more the same way I can with any other machine on my network. It is wonderful.

Another great thing about Windows 8 is the consistency it provides in terms of UI for actions you’d want to perform. Swipe in from the left, right, top or bottom and you’ll get appropriate context specific actions. It feels like magic.

Finally, with Windows 8 you’re free to build your own machine and then install the operating system as an addition. I love building systems so this is a huge selling point for me.

Native Apps

The native apps are kind of a mixed bag. I think that IE10 running in Windows UI mode is the best web browser on the market right now. There’s no chrome to get in the way of your browsing experience and you can do everything you’d expect to be able to do when surfing the web.

Other than IE, the highlights probably include Calendar, Messaging and Music. Music is a really interesting one, especially if you sign up for the Xbox Music Pass ($100 a year) which basically lets you stream and/or download any song in existence to any connected device.

Unfortunately, the rest of the native apps don’t really shine. It is admirable that the People app attempts to collect all your contacts in one place, but it is slow and somewhat buggy when you’re just trying to check out the latest tweets from your stream. The mail interface could use an overhaul (although it is adequate for light email management) and the Video app is basically a marketplace to sell you movies and TV shows.

The worst example of a native app, though, has to be the Store app. It is almost unbelievable in my mind that Store is so bad because you’d think it would be a main selling point of the operating system as a whole. Here are some things that I’ve experienced:

  • Store tells me there is no internet connection even when I know there is
  • I’m told there are updates for installed apps and when I tap them, there’s nothing there
  • Search is ridiculously slow at times for seemingly no reason
  • I select to install or update something and then go back to the app and am greeted with a blank screen

I don’t know what is wrong with the Store app but sometimes it is awesome and sometimes it is awful and it seems like there is no rhyme or reason to which will happen.

3rd Party Apps

To be quite honest, I don’t use a bunch of 3rd party apps. The ones that I do use are really well crafted and provide an integrated experience with the rest of the operating system. The two best examples are probably the ESPN app (which is absolutely fantastic) and Maximum PC for Windows 8. Both are great, follow the Windows UI design patterns and let me get straight to my content without any excessive chrome.

Just a little side commentary – I’m not sure why people get so caught up in the number of apps available for a platform. When I used an iPad, I primarily used 4 things: Safari, Mail, Twitter and Facebook. I also read some magazines on there. I don’t really feel like I’m missing anything on Windows 8.

Performance

This is where I’m not quite as happy with the Surface RT as I think I could be. The performance is just not up to par with what I expect given everything else that is great about the device. A lot of things that are super snappy on my desktop or laptop Windows 8 device perform really poorly on the tablet. I just don’t think the device’s processor is as fast as it needs to be to drive the thing. I’ve heard this is very specific to the Surface RT and that the Surface Pro is awesome in terms of performance. That kind of makes me wish I had waited for it.

Conclusions

I’m really happy, overall, with the Microsoft Surface. I’ve never been tempted to go back to the iPad for daily use since I picked it up. Do I think everyone would like the Surface as much as I do? No, I really don’t. I think people who enjoy the UI paradigm pushed by Apple for the last few years would hate it because it would be so different to them.

If you’re already running Windows PCs in the rest of your house, though, and you want to watch movies, play games and do productivity stuff in full versions of the Microsoft Office suite, the Surface might be perfect for you. I encourage you to go to your local Best Buy or Microsoft Store and check it out, at least. I think you’ll be pleasantly surprised.

One caveat: I highly recommend getting the Surface Pro instead of RT for performance reasons. If there was a trade in program, I’d go tomorrow to my local Microsoft store and take advantage of it without any questions.

Download All the TekPub Videos from Your Account’s RSS Feed (using Windows PowerShell)

I just subscribed to TekPub after watching the previews for a bunch of videos and realizing how awesome they are. I subscribed to the Annual plan (for $179) so that I could download the videos to my local device and watch them at my leisure.

After signing up and signing in, you’re presented with a variety of RSS feeds to choose from, including ones tailored for iTunes and Zune. I don’t have iTunes installed on my development PC and after upgrading to Windows 8, I don’t have the Zune app installed anymore either. I didn’t want to right-click each video link to download the videos individually, so I wrote up the following PowerShell script to run during the day while I worked. I was heavily inspired by Scott Hanselman’s post on downloading with PowerShell.

$base = "B:\Video\TekPub"
$chars = [System.IO.Path]::GetInvalidFileNameChars()

$xml = ([xml](New-Object System.Net.Webclient).DownloadString("put your url containing your token here"))

$xml.rss.channel.item | foreach
{
    $url = $_.enclosure.url
    $url_parts = $url.Split('/')

    $folder = $url_parts[4]

    $filename = $_.title;
    foreach($char in $chars)
    {
        $filename = $file.Replace($char, '')
    }

    $filepath = $base + "\" + $folder + "\" + $filename

    $client = (New-Object System.Net.WebClient)
    $client.Headers["User-Agent"] = "TekPub Video Downloader - Nick Ohrn (nohrn@ohrnventures.com)"

    if(!(test-path $file))
    {
        try
        {
            $client.DownloadFile($url, $filepath)
        }
        catch
        {
            Write-Host $error[0]
        }
    }
}

There’s a couple of important things to notice here. First, I explicitly declared the base location that I wanted the videos to be saved to. Second, I’m replacing all characters that would lead to an invalid Windows filename with an underscore to create a valid filename from the production title.

Finally, you’ll notice the custom User-Agent header that I added. I noticed that if you don’t supply the User-Agent, you’ll get a 406 Rejected error thrown back at you. In addition, it is just courteous to let people know what is requesting their stuff.

There are a few interesting things you could probably do to improve this script:

  • Find common prefixes for video titles and then put those videos into subdirectories named by the series
  • Number videos based on their position in the feed (like 001 - Full Throttle - Azure - Azure Deployment or something)

Anyways, if you’re looking to download a bunch of videos from TekPub (or any RSS feed, really) feel free to grab the above script.

Plugin Release: Featured Content

I recently had a client request an easy way to mark content on their site as Featured. They wanted something consistent, usable and simple that could be applied to pages, posts, events and more.

I wrote a simple plugin for the client and realized that it would probably be helpful for other people – I’m probably not the only one looking to do something like this, right? Anyways, that’s how the Featured Content plugin came about. You can go ahead and download it from the WordPress plugin repository.

There is a simple checkbox on the content editing screen that you can toggle before you save and update your content.

Editing Checkbox

Also, there is a link in the content actions area of the management screen that you can click to Feature or Unfeature your content.

screenshot-2

After marking content as featured, you’ll need to change your theme to make it use the functionality that you’ve specified. You can either use the template tag to display style or markup for featured content or query for only featured or non-featured content. Here’s some examples:

Different Display for Featured Content

<?php

while(have_posts()) {
	the_post();

	echo '<h2>';

	if(featured_content_is_featured_content()) {
		echo 'Featured: ';
	}
	the_title();

	echo '</h2>';
}

Querying for Featured or Non-Featured Content

<?php

$featured_posts = new WP_Query(array('is_featured' => 'yes', 'post_type' => 'post'));

$non_featured_posts = new WP_Query(array('is_featured' => 'no', 'post_type' => 'post'));

If you find this useful or have any questions, please let me know!