P.P.S. You know you can forward this to your friends, right?
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
Portable Class Libraries are the Happy Little Feature that Could. They've been chugging along, doing their thing, and it's getting to the point where they are going to pop. That's pop in a good way.
If you're not writing .NET apps for more than one target, then you likely haven't bumped into them. However for those people who are writing .NET and want it to run on everything from Watches to Phones to Tablets to Xboxen to Desktops to the Cloud, they are enjoying what PCLs can offer.
There's still a few technical and legal challenges but I'm confident they'll be dealt with and we'll be able to create great binary libraries that can be used everywhere.
There's been a bunch of recent activity in the .NET community around Portable Class Libraries and cross platform .NET. Overall, Portable Class Libraries are starting to see wider adoption, more open source libraries are being released with portable support, and the MVVM pattern is proving to be a great way to maximize code sharing in cross platform apps.
Portable Library Releases
First of all, there have been a bunch of new libraries released as PCLs recently. Three of them are from GitHub's own Paul Betts:
Reactive UI – Reactive UI is an MVVM framework built on top of the Reactive Extensions. Version 5.0 was released last week, which is "totally Portable-Friendly", and supports the following platforms:
Xamarin.iOS
Xamarin.Android
Xamarin.Mac
.NET 4.5 (WPF)
Windows Phone 8
Windows Store Apps (WinRT)
Akavache - An asynchronous, persistent key-value store. Version 3.0, which includes PCL support, was also released last week, and now "nearly all of your serialization and network access layer can be cross-platform." Akavache supports the same set of platforms as Reactive UI. This is a really amazing piece of software that deserves its own blog post. I'll do one soon.
Splat – "A library to make things cross-platform that should be." It has cross platform APIs for images and colors, with platform-specific extension methods to go back and forth between the platform-specific native types. This looks like an elegant solution to the problem you run into if you want a portable ViewModel but you want to expose an image in it.
I might be getting a little obsessed with PCLs at the moment. #IHaveAProblem (link).
Scott has released four portable libraries that help access web services:
Scoreoid Portable - A Portable Class Library that gives developers access to the Scoreoid scoring system. The library provides a friendly .NET wrapper for the Scoreoid REST APIs, and uses our portable HttpClient NuGet package.
FanArt Portable - A Portable Class Library that gives developers access to the fanart.tv film, TV, and music image resources. It also uses portable HttpClient.
Cineworld Portable - A Portable Class Library that gives developers access to the Cineworld film and cinema listings for the UK and Ireland. It also uses portable HttpClient.
LiveSDKHelper - A helper library to more easily use the Microsoft Live SDK. Contains strong types which the responses from the Live SDK can be deserialized into.
Another new portable library release is Budgie, a library for accessing Twitter. The .NET and Azure Teams have also released a PILE of Portable Libraries.
and of course, my favorite, the HttpClient, making HTTP calls easier, since, well, since a few months ago.
public static async Task<HttpResponseMessage> GetTheGoodStuff() { var httpClient = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://hanselman.com/blog/"); var response = await httpClient.SendAsync(request); return response; }
//build/
One BUILD attendee took issue with the fact that speakers were telling people that you can't use platform specific functionality from a Portable Class Library, and wrote a blog post about how you can do this with abstraction and (preferably) dependency injection.
On at least 2 occasions recently, I have heard speakers tell their audience that you cannot reference a target-specific .NET library (such as a .NET Framework 4.5 library) from a Portable Class Library. While this is technically true, it doesn't tell nearly the whole story. Even though we can't reference target-specific libraries, we can still USE these libraries. We can call their methods and access their properties under the right circumstances. We can gain access to these libraries via an abstraction. My preferred method of doing this is...Dependency Injection.
The British and Irish Lions app is a cross platform app targeting Windows Store, Windows Phone, iOS and Android. It uses Portable Class Libraries to share common code across platforms, Azure to host the services it uses, and the MvvmCross MVVM framework which I'm a huge fan of. The UK MSDN blog posted a case study of the development of the app, and there is also a prettier case study (with screenshots, infographics, etc) and a blog post by the developers. In reference to Xamarin, MvvmCross, and Portable Class libraries, they state "Given the very short time-scales for the Lions apps (less than three months from the first line of code to our first release), we simply could not have delivered a rich native experience across all platforms without the common core."
Another cross platform app that uses MvvmCross is Aviva Drive. This is an insurance company app that you can use to track your driving habits and hopefully get a discount on your insurance. The app was featured in the Tech Ed Europe day 1 keynote (about 28:40 in), focusing on how it used Azure.
On the game side of things, Taptitude is a successful Windows Phone 7 game (or rather, a collection of minigames) which was ported to Windows Phone 8, Windows Store, iOS, and Android with the help of MonoGame and Xamarin. The team reports that they have more than 99% shared code between all the platforms, which is especially important to them because they ship updates to the game about every week.
Xamarin
Xamarin has released an amazing .NET Mobility Scannerwhich analyzes code and tells you how "portable" it is and how compatible it will be with Xamarin.Android, Xamarin.iOS, Windows Phone, and Windows Store. It lists all the APIs your code uses that aren't available on all the platforms, and an overall percentage of how portable your code is. It's a very slick implementation and similar to what we've wanted to have for Portable Class Libraries. Here's a sample report for the SignalR client library. The best part is that it does all this analysis without sending your code or binaries to Xamarin. It all happens in the browser. I love Xamarin.
Phil Haack (former PM for ASP.NET MVC and now working at GitHub) wrote a blog post titled Platform Limitations Harm .NET. He argues that the Windows platform limitations should be removed from the EULAs for BCL NuGet packages.
I personally agree. Being able to reuse existing code, make portable libraries, and write apps that run in 64k or 64gigs is what makes .NET an interesting platform.
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
I've talked some about the sweet support for node and PHP in Azure. You can also File | New | Node.js express application in WebMatrix, or run WordPress and get intellisense as well.
"I installed windows just so i can use PTVS" - Comment on Hacker News
But I'm consistently shocked that folks forget about Python at Microsoft. I am a C# person, myself, but the Developer Division at Microsoft loves their languages. C++, VB, C#, F#, etc and they aren't messing about when they get serious about a language.
One of the least-known and most-kick-butt free products we have is PTVS - Python Tools for Visual Studio. Whether you're just interested in learning Python or you're a hardcore PhD who wants mixed-language Python and C++ debugging or somewhere in between, you gotta check this out. (Seriously, the mixed-mode debugging thing can't be overstressed...)
The Misconceptions
Microsoft? Python? Oh, it must be all about IronPython, that's dead, right?
IronPython is a community-run project and just put an 2.7.4 alpha out last month. PTVS fully supports IronPython, but the most advanced support is for standard CPython!
PTVS needs VisualStudio? I don't have any money.
PTVS, combined with the Integrated/isolated VS Shell is completely and perpetually free. And with the advent of VS2013, they've combined them into a single installer: https://pytools.codeplex.com/releases (at bottom of page).
This is Real
Here's my VS2013 after installing PyTools (PTVS). I've got IronPython which is Python running under the .NET CLR, but I've also got Django apps as well as a regular CPython or making a new project from existing code.
You can see that PTVS knows what Python engines I have installed, and I can easily switch between them. Here you can see that VS is refreshing the auto-completion (intellisense) databases for each version.
There's also a complete REPL inside Visual Studio for each:
Developing Django Apps in Visual Studio
Maybe you're a Django (one of Python's Web Frameworks) web developer, you can use VS to develop your app.
Go File New | Django App, then make a new Python Virtual Environment from the Solution Explorer, and watch Visual Studio freaking installed pip for you (the Python package manager). It's very seamless.
Which gives me this:
Then I right click on "dev" and just like NuGet (except this is Python, so pip) I install django:
Django is massive, so this took a while, but still! And.....I've accomplished Hello World in Django. Well, Hello Django, at least, launched from Visual Studio.
There's a bunch of great educational and quick start Tutorials on the Python Tools YouTube Channel, they are a great resource to bookmark.
You can attach to remote Python processes over SSL and debug if you like.
It's Really Integrated
Let's get real here for a second. Lots of projects plug stuff into Visual Studio. You may have made it this far into the post and be saying "oh, wah wah, this thing sets up some batch files and some syntax highlighting and calls itself a full-featured Python IDE."
Um, no. This is the best of VS and the best of Python and I'm blown away. Check this out. PTVS knows that I'm doing unit testing here and they've integrated Python Unit Testing with the VS Unit Testing UI.
This is debugging, remote debugging, cross language debugging, tool tips, watches, locals, call stacks, unit testing, full REPL with inline graphics, profiling, cloud publish, best of class CPython support, and so much more.
If you already have VS 2010, VS 2012, or VS 2013, go get PTVS for your version. The VS2013 version is the best and has a lot of fixed bugs. I installed PTVS along with Python 3.3 for Windows.
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
I just bit the bullet and installed the Windows 8.1 Preview on my Surface RT. It's a one-way upgrade (meaning you won't be able to go from this Preview Build to the final) so make a Recovery Drive with a USB drive you have lying around. You'll need at least a 4GB USB key for this backup and the drive will be erased. Then go to http://preview.windows.com and follow the instructions. Basically you download an update, install, reboot, and then the Windows Store says Windows 8.1 Preview is available. You install for a while (took a few hours) and assuming you're signed in with the same Microsoft Account it will redownload all your apps.
Warning: Installing anything called "preview" is for advanced/enthusiast folks. Expect nothing and you'll never be disappointed. Backup your crap. Be prepared to torch your machine to get back to the mainline.
I honestly didn't use my Surface RT that much, mostly just for Movies and Stuff, but this new 8.1 update adds some stuff that will have me using it around the house more.
Here's 10 features that are making me look harder at Windows 8.1.
Being able to use your Desktop Wallpaper as your Start Menu background
The Start Button is back, down there in the corner. But that's not as interesting to me as the ability to use your Desktop wallpaper as your Start Menu background. This might be hard to visualize, but the point is that if you hit the Start Button (or the Windows Key) you'll immediately move to the big Start Menu. When the background of that menu is your same desktop wallpaper, the result is much less jarring than a bright background and makes the whole Windows 8.x experience much more comforting.
From the Start Menu, hit Windows-C, click Settings, then Personalization. You'll see the menu fly out as in the picture below. Select the tiny thumbnail of your wallpaper. It's the square with the birds in my picture here.
This little change is a huge difference. I wish this was the default experience, myself.
Search Everywhere
If you are in the Start Screen and you start typing it will search everything. Apps, Files and the Internet if you want. If you search for a Well Known Thing (caps mine) then it will give you detailed results that include (possibly) music, big pics, videos, etc. I searched for Daft Punk below.
Freaking Outlook 2013
Since my Surface RT includes Office RT (Word, Excel, PointPoint, etc) it looks like Windows 8.1 adds Outlook 2013 RT to the mix! This was a total surprise to me, and is the #1 reason I'll start using my Surface for work stuff. I'm surprised this hasn't been noticed by some of the tech sites I read. It's an awesome addition.
Smarter Windowing
Windows 8.1 seems much smarter about making decisions about window management. Here I've launched the Games app while running the Mail app on the left and the Desktop on the right. it's hovering (teetering, even) in the middle, waiting to be pulled from one side to the other, rather than just taking over one of my existing apps.
Apps can be 50/50 split on the Surface RT, as well as the other 70/30 options.
Way easier customization
Icons are moved more like on my other tablets, with a push and hold gesture. Except you can select multiple icons, start dragging them with one figure while scrolling with the other finger. Grouping and customizing is way easier.
Here is me starting to move things around. I've got the Office stuff tiny, and the News app largest.
Better All Apps View
Apps that are newly installed get marked "new" in the All Apps few. You swipe down from the Start Menu to get here, and can sort by Recently Installed as well. I found a bunch of new apps I hadn't seen before like Calculator, Sound Recorder, Health and Fitness and Alarms.
More Comprehensive Settings
The Settings area has a LOT more info than before, including some rather deep pages (you may have to hunt) like this one on my Wi-Fi Router. Note that it's marked as a Meter Connection. I thought it was cool that Outlook didn't connect automatically when this was marked as Metered (this means my router has limited data and I could be charged for big downloads). I have personally downloaded gigs of mail while overseas and gotten nailed by big bills, so this was cool.
The Metering is an existing feature, but the deeper details into my Wi-Fi and devices is new.
Removable Disks in your Music and Video Libraries
I'm pretty sure this wasn't there before. I added a 64gig micro-SD to my Surface RT with the plan to watch Videos and store Photos on it, but it wasn't very seamless in Windows 8. I took a chance and right clicked on my SD card folders and said "Include in Library" and now my videos show up in the Videos app! Suddenly my 32-gig Surface has become a more useful 96 gig machine (well, 64-gig, as I'm going to change the defaults to store everything on my SD card.)
Here's my videos listed, some in the cloud and some on my micro SD card.
Here I am looking at Outlook while watching Harry Potter in Split-Screen.
Smarter Notifications and Quiet Hours
My wife is NOT a fan of my Surface RT for one basic reason. It won't stop beeping. I installed Twitter and Twitter "pops toast" - meaning, it uses notifications - and it's forever going off and beeping at night. Yes, I could turn off notifications, or sleep it, and I do, but when I'm using the thing I want it on. The Notifications options have been expanded to include "quiet hours," which is a nice touch.
The Reading List
I'm a big fan of Instapaper and the idea of a "Read It Later" gesture. This is different from simply bookmarking. This is a queue of long-form reading material. From apps like Internet Explorer you can invoke the "Share" action. I could share to Twitter, Mail, some People, or the new Reading List.
Then I click to Share, and later on go to my Reading List (now pinned to my Start Screen) and go read my long form articles. I haven't checked but I'm presuming this list would be persisted transparently across all my machines.
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
My friend Luvvie and I were speaking at Blogging While Brown this last weekend in New York City, amongst other things and events. Luvvie and I host a podcast called Ratchet and The Geek. I produce three podcasts - Hanselminutes, This Developer's Life, and Ratchet and The Geek. I do all of these on the side, for fun.
We did a 5 minute "mini-podcast" live on stage at the beginning of our talk, then talked about how we produce the show and how it goes from concept to topics to a produced and published MP3.
For this post I'm focusing on what you'll need for a podcast in terms of Equipment and Publishing. I'm assuming you're able to decide on your own topic/theme and spread the word about your new show.
Podcasting Equipment: Good, Better, Best
Let's take a look at your options, ranked from Meh, through Good, Better, and Best.
Meh
You could use BlogTalkRadio as a super-quick way to jump-start your podcast, but there are some limitations. The benefits are that there's no software to use. It's basically a recorded conference call. They handle call-ins for guests, archiving, delivery and bandwidth. However, it goes up from Free to $39 a month or more quickly.
If you are serious about the future of your podcast I recommend that you put a little more work into and and you'll have lots more control and flexibility.
Good
If you are going to do Skype-based recordings or online interviews, get yourself a decent USB microphone/headset. These are NOT audiophile or good quality headphones - to be clear - but they are good enough for Skype and they are guaranteed to sound better than talking in to your laptop's tiny microphone hole.
Remember, your laptop may have cost $1000 but that tinny microphone hole was only $1 of the price. Have low expectations when using a laptop mic for a podcast.
If you get a microphone/headset, get one that's USB to keep the audio digital all the way into the laptop. Don't use 1/8" analog headphone jacks for recording.
For Skype interviews I use CallBurner to record the interviewee. Ideally your guest will also have a good USB microphone. Even better if your guest records a local file while you also record the Skype call. More on this technique further down in this post.
Better
You may be able to get more flexibility if you move to a portable recorder. You can do interviews with these without carrying your laptop. You can also use your phone or tablet if you like. Ideally you'll want to make WAV files rather than MP3s. If you're editing your podcast later a WAV file will sound better while editing and won't lose quality. An MP3 is already compressed and then will get compressed again when you save your final podcast.
Consider a WAV file like a PNG, RAW file or BITMAP and an MP3 is like a JPEG. Edit in high quality files and export your final as a compressed MP3.S
You can also add a small Lavalier (clip on) microphone if you like, then plug it into the portable recorder to better isolate sound for your interviews.
Better++
If you've got $80, consider a Samson C01UCW USB Mic or similar. This is an extremely competent mic that plugs directly into your computer's USB port. You can record into Audacity or Adobe Audition or even iMovie or Garage Band directly. For one or two person talk shows this is a great mic to start with.
Also consider your room configuration. If you have a square room with stone walls and wood floors, your listeners will be able to hear every bump in that echo-y environment. I use a Portable Vocal Booth from RealTraps when sound quality really counts. This is useful for screencasts and voice-over work in a noisy environment.
Best
I say "best" but I'm assuming you don't have an actual recording studio available to you. This is the setup that I use on all my podcasts. I use a Zoom H4N portable recorder. It uses an SD card to store the WAV files. It comes with two small mics at the top for starters, but then lets you grow by adding either microphones with 1/4" jacks or studio quality mics with XLR connectors.
I recommend Shure microphones. Two Shure PG48-XLRs with cables paired with the Zoom H4Nwill make great sounding podcasts. All the very best episodes of This Developer's Life were recorded like this. All the episodes of Hanselminutes where the guest wasn't on Skype were recorded in person with this very setup.
The Zoom also has the benefit of improving your YouTube videos. You can mount it directly to a DSLR camera with video capabilities and greatly augment the resulting video's sound quality. Again, the components in a DSLR are optimized for visuals, not audio.
Editing
Luvvie and I live in different time zones so we record local files with our portable rigs PLUS we Skype each other and record the call with CallBurner. This gives me THREE files.
Why three files? Well, one high quality of my recorded locally as a WAV. One of my co-host recorded in high quality as a WAV and one of BOTH of us. The trick is that we don't use the phone/Skype track.
The phone track is just for lining up the two other tracks. This makes it sound like my co-host and I are in the same room together. See the three files below. My co-host is on top - notice her track is quiet. I'm on the bottom. The phone track is in the middle. Since these are separate tracks I can adjust Luvvie's track to make it louder and better match my track's volume.
I move our tracks around using the phone/Skype track as a guide. It tells me what we're supposed to sound like and gets our conversation in Sync. When I feel we are in sync, I mute the Skype track and listen to us talk.
For complex show I'll use Adobe Audition and use the Effects Rack. I use a Speech Volume Leveler and a "Hard Limiter" to keep the voices at a strong, but not overpowering level. There are LOTS of great Tutorials online to show you how to use tools like Audacity and Audition.
It's like PhotoShop for sound! There are layers and filters and effects. Thinking about it this way greatly helped my mental block.
Publishing
We recommend using LibSyn for your hosting and publishing your podcasts. If you are more technical you can certainly use Amazon S3, Azure Blobs or just your own existing host if you like. For shows like Hanselminutes that have almost 30,000 megabytes of shows, we use S3. Both Ratchet and The Geek and This Developer's Life use LibSyn.
LibSyn offers a simple platform for publishing and feed creation. It also has fantastic stats and can even make mobile apps for your shows if you want.
Your Feed
Podcast feeds are just like RSS feeds except they also include an "enclosure" tag. Services like FeedBurner and FeedBlitz can add this tag for you if your blog doesn't support it directly. While it's unclear how long FeedBurner will last, We use it for its easy podcast creation ability.
Make sure you submit your Podcast to iTunes and Windows Phone/Zune. I also suggest telling Rob Greenlee (the manager of the Windows Phone/Xbox/Zune podcasts) on Twitter about your show).
Here are some other podcast directories you should be sure to target:
BlackBerry - You can submit your podcast by going to thePodcast submission page and creating a RIM podcast account.
Stitcher Stitcher - is a radio-like service that allows you to submit your audio podcast to. Submit your audio only podcast at the Content Partner page.
Tunein Radio - You can submit your Podcast to Tunein by sending an email to Broadcast Support.
DoubleTwist - Submit your show by emailing Support with your show's name, RSS, and description.
Conclusion
Ultimately you need an MP3 that shows up in a feed and a website to promote it. Everything you can do on top of this will only help you! Think about sound quality, topic quality, consistency, website quality, and technical details.
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.