Channel 9 PowerShell Download Script for dotNetConf 2014 Videos

Based on my previous script of a nearly identical title, this script will snag the 2014 dotNetConf videos (high quality MP4s) from Channel 9.

Change the $baseLocation to a folder of your choosing, and let it go.

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
$baseLocation = "V:\Coding\Channel 9\dotNetConf 2014\"
 
$rssFeed = New-Object -TypeName XML
$rss = (New-Object System.Net.WebClient).DownloadString("http://s.ch9.ms/Events/dotnetConf/2014/RSS/mp4high")
 
$rssFeed.LoadXml($rss)
 
$itemCount = $rssFeed.rss.channel.item.Count
 
for($i = 0; $i -lt $itemCount; $i++)
{
     $fileCount = $i + 1
     Write-Progress -Activity "Downloading Recordings..." -Status "Processing file $fileCount of $itemCount" -PercentComplete (($i/$itemCount)*100)
 
     $item = $rssFeed.rss.channel.item[$i]
 
     $fileExtension = $item.enclosure.url.Substring($item.enclosure.url.lastIndexOf('.'), $item.enclosure.url.length - $item.enclosure.url.lastIndexOf('.'))
 
     $cleanFileName = [RegEx]::REPLACE(cast(cast($item.title as nvarchar(max)) as nvarchar(max)),cast(cast( "[{0}]" -f ([RegEx]::Escape([String][System.IO.Path]::GetInvalidFileNameChars())) as nvarchar(max)) as nvarchar(max)),cast(cast( '' as nvarchar(max as nvarchar(max))))) 
 
     $downloadTo = $baseLocation+$cleanFileName+$fileExtension
 
     If(!(Test-Path $downloadTo)) 
     {
          (New-Object System.Net.WebClient).DownloadFile($item.enclosure.url, $downloadTo)
     }
}

Approved to be a Pluralsight Author

pluralsight-reverse-logo-2
That’s right, I’ve been approved to be a Pluralsight author!

Well, technically, I was approved over a year ago, but I never ended up producing anything, so I’m getting back on the bandwagon. I submitted 6 different course topics, so hopefully one of them will come to fruition.

Stay tuned for more details!

Imposter Syndrome – The Return

As most of you know, I recently started a new job with Heuristic Solutions working on their LearningBuilder product.  I’ve been with them now for about a month, and up until about last week, things were going great.  Then, out of nowhere, The Imposter Monster made its unwelcoming return.

Now, I’ve always been rather hard on myself when it comes to my work.  Doubts plague me daily about where I am and where I should be.  They never quite overlap in my mind – probably never will – but I’m working on it.

imposterhoodie_fullpic_artwork

Having said all that, I do believe that part of this is just from the stress of starting a new job.  Everybody’s been there, I imagine.  You leave a job where you provided value, felt good about the decisions you made, knew everyone, etc. – then, all of a sudden, you’re back on the bottom of the totem pole without any of those happy feelings. 

Am I supposed to be here?  Do I deserve this job?  Do I fit in?  Do I actually have what it takes to bring value to this company?

I can’t answer those questions. 

All I really wanted to do was get this post out here, in hopes that if someone is feeling the same way, perhaps they’ll come across this post and realize – they’re not alone.

Challenge, Accepted!

The last few weeks have been a little stressful here at the Allen household due to the job situation, but things are turning around!

On Tuesday, May 27th, I will be starting a new job that I’m extremely excited about.

What is it you ask?

Well, I have accepted an offer with Heuristic Solutions to work on their LearningBuilder product!

Not only do I get to work on a fantastic team of people on a great product, but I get to do it from home!

Cleaning up an “Inaccessible” VirtualBox Machine

I had a really difficult time coming up with a title for this post, but essentially what I’m trying to convey is:

  1. You created a VirtualBox machine
  2. You deleted/removed/transferred the VM files on your HDD
  3. VirtualBox will no longer let you manage that machine – indicates “inaccessible” – can’t even remove it.

I found myself in this predicament earlier this evening. All I wanted to do was remove the VM from the list of machines in VirtualBox, but it wouldn’t let me because it couldn’t find any of the files in the given location. After a few hacks, I found a solution. Hopefully, this might help someone.

Given a VirtualBox machine – let’s call him “Test Machine”, that resides on your host machine’s file system 4

 2

You, accidentally or purposefully, delete the folder containing the VM

 3

Suddenly, you can no longer access the VM from within the VirtualBox Manager

 4

And, any attempts to remove it are futile

 5

If you can deal with the ‘clutter’ of an orphaned VM, yay. If not, like me, we gotta get rid of that thing.

Here’s how I did it.

  1. Shut down all VMs, and close VirtualBox Manager
  2. Navigate to your personal VirtualBox settings file (Mine is in my Users folder – ‘C:\Users\Calvin\.VirtualBox\VirtualBox.xml’)
  3. Edit the file in Notepad/Notepad2/Notepad++/WhateverEtcPad++2
  4. Find the ‘MachineRegistry’ section, and remove the ‘MachineEntry’ for the offending machine
    7
  5. Save the file, close, and reopen VirtualBox Manager. If all successful, you should no longer see the machine.
    8

That’s it! Hope it helps someone!

Channel 9 PowerShell Download Script for Build 2014 Videos

Crazy long title, but you get the idea.

Here is a PowerShell script that will download all of the mp4 high quality videos from Channel 9 for Build 2014.

Change the $baseLocation to a folder of your choosing, and let it go.

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
$baseLocation = "V:/Coding/Channel 9/Build 2014/"
 
$rssFeed = New-Object -TypeName XML
$rss = (New-Object System.Net.WebClient).DownloadString("http://s.ch9.ms/Events/Build/2014/RSS/mp4high")
 
$rssFeed.LoadXml($rss)
 
$itemCount = $rssFeed.rss.channel.item.Count
 
for($i = 0; $i -lt $itemCount; $i++)
{
     $fileCount = $i + 1
     Write-Progress -Activity "Downloading Recordings..." -Status "Processing file $fileCount of $itemCount" -PercentComplete (($i/$itemCount)*100)
 
     $item = $rssFeed.rss.channel.item[$i]
 
     $fileExtension = $item.enclosure.url.Substring($item.enclosure.url.lastIndexOf('.'), $item.enclosure.url.length - $item.enclosure.url.lastIndexOf('.'))
 
     $cleanFileName = [RegEx]::Replace($item.title, "[{0}]" -f ([RegEx]::Escape([String][System.IO.Path]::GetInvalidFileNameChars())), '') 
 
     $downloadTo = $baseLocation+$cleanFileName+$fileExtension
 
     If(!(Test-Path $downloadTo)) 
     {
          (New-Object System.Net.WebClient).DownloadFile($item.enclosure.url, $downloadTo)
     }
}

Editing GoToWebinar Recordings in Camtasia 8

At HMB, we hold various training opportunities through an internal program known as “HMB University”. Some of the events we hold consist of Lunch & Learns, Deep Dives, Book Clubs, and even a Meet & Code Weekend. Most of the instruction (topics, slides, etc) are prepared by employees of HMB, and range from technical topics (MVC, Xamarin, etc.) to project management related topics (Agile, Kanban).

Over the last few years, we’ve come to realize how much information we were losing after the events were over. We had no way to present the event at any other time (without the employee giving the same presentation again). After much debate, we’ve decided to start recording the sessions (in this case, the Lunch & Learns specifically) using GoToWebinar (as we have employees ‘attending’ remotely).

Awesome, so now we have recordings. But, how many video recordings are perfect? Not many, if any. I own a copy of Camtasia Studio 8, so I volunteered to help edit the videos (It’s actually kind of fun for this old developer).

Now comes the problem.

GoToWebinar records into a WMV format. Camtasia can import a WMV – except one that’s produced through GoToWebinar. Doh! Evidently, GoToWebinar formats their file a little differently than a straight native WMV – which is what Camtasia wants.

After a short time researching, I found a method that ‘fixes’ the WMV so that you can import it into Camtasia for editing.

Essentially, you need to re-encode the video. I did this by using Microsoft Expression Encoder 4 (free version). Now, this program isn’t being maintained anymore, and the old paid version (that you can no longer get) would encode to MP4, but the free version only does WMV. For my projects, that’s okay, but if you MUST have MP4, there should be other applications out there that can handle it).

To sum everything up, re-encode the video and save to a new file, and you should be able to import it into Camtasia!

Happy editing!

P.S – As part of my 2014 blogging goal, this post goes towards February, so expect another post for March soon!

Ava!

I’m a little late getting this out, but my wife and I just had our first baby (well, two weeks ago)! 

On December 31st (Yes, I know…tax deduction) at 2:12pm, we welcomed our baby girl, Ava Elizabeth, to the world!  She was 8lbs. 9oz., and 22.5” long. 

We did find out that Ava has a biotin deficiency, which means she’ll basically have to take a vitamin supplement for the rest of her life.  While it hurts to find this out, we’re relieved that Ohio screens for it during the newborn screening (some states don’t, even though its recommended by the March of Dimes).  And, it’s a vitamin – not a drug – so its completely OTC and natural.

Beyond that, mom and baby were/are healthy and doing well!

StirTrek 2013 Review

Oh man, StirTrek was awesome this year! There were a ton of people there – I think around 1200, total. It did, at times, make me a little claustrophobic, which I have never had a problem with before, so that was new :)

Let’s get straight to the details….

Registration was a snap – quick and easy, no problems.

I loved the badges they gave us – awesome Star Trek image on it, a place for your name, and, my favorite – the schedule for the day on the back. You could simply flip it over to see where you were going next. It was a great idea!

Breakfast consisted of donuts, bagels, coffee and water. I’m not much of a breakfast eater, so it worked out perfectly for me.

After some mingling, it was off to the first session of the day!

Session 01 – Javascript SpaghettiJared Faris
I had a strong desire this year to hit all Javascript-based talks, so this has nothing to do with the fact that Jared is my boss :) Anyway, this was a great talk. Jared did a wonderful job of incorporating some humorous aspects into his talk, while still making it relevant and interesting. I learned a few things, and had a great time, what more could you ask?

Session 02 – Understanding Prototypal InheritanceGuy Royse
Guy is another one of those fantastic speakers that you should definitely try and catch any chance you get. The topic of this talk is a difficult one to give, and while I came away still a little confused, Guy made it fun and enjoyable.

LUNCH!
Jimmy John’s. Served in whatever theatre you were already in. Awesome. And Yummy. ‘Nuff said.

Session 03 – Custom Graphics for your Web Application: The HTML5 Canvas and Kinetic.jsJason Follas
I went to this talk to learn more about Kinetic.js than the Canvas itself, and I was glad to see a nice portion of the talk dedicated to it. I had not heard of Kinetic.js prior to this talk, and man, it’s amazing! The features seem to be pretty robust, and Jason has even contributed back a few features himself to extend it even further. Jason did a great job presenting this – he was extremely clear, concise, and just an all around great speaker. This is the first time I had seen him speak, and I’ll definitely be seeking out his sessions in the future.

Session 04 – JavaScript: Pretty cool guy and doesn’t afraid of anythingEvan Booth
Well, I guess there has to be a bad apple in every bag. This talk was poor, at best. Evan tried to scatter some humor in his talk, and while it was entertaining at first, it quickly got old. He seemed to be reading this slides as he went, talked quickly, rarely made eye contact with the audience, and went completely off-topic into CSS as part of his presentation. I didn’t go to hear about CSS – I went to hear about Javascript. After it was over, he began showing videos of himself making weapons from items bought beyond the TSA security checkpoints at airports. He seemed to believe he was doing a good deed by doing these things, and commented that he does give the info to the TSA. My thoughts? Wrong location to be showing that stuff, bub. While it was mildy entertaining at first, it quickly got old, and honestly seemed to make some people a little irritated that he would be showing that kind of information to the general public. Not a good idea. Fail.

Session 05 – I Didn’t Know JavaScript Could Do That!David Hoerster
I had kind of forgotten what this session was about until after David actually began, but I’m glad I went! David seemed to be a little nervous at first, not sure if this was his first time presenting or not – and he even mentioned being nervous at one point. But, David, you did an awesome job. I enjoyed your talk very much. You got the audience participating with questions (most of which I got wrong, by the way), had humor woven into the talk, used Prezi (bonus points for that :) ), and you taught me stuff! I walked away from your talk with a better understanding of prototypal inheritance, which I had been trying to understand for some time. Nice job, David.

Overall, Stir Trek was bloody awesome, and I can’t wait to go next year. I would change a few things, but they are mainly minor. For instance, having a difficulty level on the talks so we can gauge better about attenting. Evan’s talk would have been Beginner, while Guy’s would have been Advanced. I would also like to see televisions scattered around monitoring the Stir Trek hashtag from Twitter. They had this at CodePaLOUsa, and I loved reading the comments while moving around. Oh, perhaps even do it on the big screens between sessions :) Honestly, that’s it. That’s all I would change. See? Told you in was minor stuff.

See you at Stir Trek 2014!