media, windows comments edit

Windows Home Server v1 is end of mainstream support tomorrow and some folks have asked me what I’m going to do.

Options for switching include upgrading to WHS 2011, switching to Windows Server 2012 Essentials, or moving off the Windows platform entirely to something else.

If you’ve been following my Media Center solution, you’ll know I have both an HP MediaSmart Windows Home Server v1 and a Synology DS1010+.

I use the WHS for:

  • PC image-based backups
  • General file sharing
  • Image sharing
  • Music sharing (both via file system and via UPnP using Asset).
  • Windows 8 File History

I use the Synology DS1010+ for:

  • Storing DVD movie images
  • Serving the MySQL instance for my XBMC machines

Both machines have all drive bays full. The Synology doesn’t have enough space to hold all the stuff I have on the Home Server and the Home Server can’t hold all the stuff on the Synology. We’re talking about terabytes on both machines. Keeping that in mind, if I were to want to change the OS on the WHS it’d require me to…

  • Move everything off the WHS to… somewhere.
  • Reformat and upgrade the OS on the HP MediaSmart box, which is older and not super-powerful. It’s also headless (no video card and no DVD drive) so… that’s pretty limiting. If there’s any troubleshooting to do during the installation, that’s going to be painful.
  • Hope against hope that the new OS won’t tank the HP box into non-performance and that all the drivers are properly found.
  • If I go with Windows Server 2012 Essentials, I get to set up a domain for my home computers and go around joining everything so they can be backed up. If I go with WHS 2011, I will get the same backup functionality I’m used to. If I go with something else… I get to figure out my backup solution.
  • Move everything back to the WHS that was previously there and set all that junk up again.

If, instead, I moved everything to the Synology I’d need to upgrade all the drives in the RAID array. It’s RAID 5 so I can’t do one at a time. And I can’t switch to a different RAID strategy (like the Hybrid RAID they provide) without moving everything off the NAS and back on.

UGH. There was a time in my life where I had a bunch of time at home and loved to tinker with things. Now… it takes me two nights to watch a two-hour movie. I just want things to work.

So what am I going to do?

Not a damn thing.

I don’t expose my WHS to the outside world so I’m not worried much about the security aspect of things. I will probably run it until it dies. In the meantime I’ll slowly be moving things over to the Synology. I will probably end up investing in the five-drive expansion bay for it so I can add more drives in a new array. Then I can stock those drives up and slowly but surely both expand storage and switch to the Hybrid RAID approach. I’ll also have to figure out my UPnP answer (I’ve admittedly not tried the Music Station that Synology offers, but I hope it does transcoding of, like, Apple Lossless and whatnot). And I’ll have to figure out the backup strategy; probably something like Acronis TrueImage.

In the meantime… the plan is “no action.”

comments edit

I’ve been wanting Windows Live Writer for Surface RT for a while but I noticed Hanselman mentioned you could blog from Word (which I never knew) so I thought I’d try it out.

If you’re reading this… I was successful. Yay!

personal comments edit

2012 has come and gone, and it’s time to look back at what happened. Because if I don’t, well… my memory isn’t quite what it used to be, you know?

It was a good year both personally and professionally, though I noticed I blogged a lot less. That happens, I guess. I find I post more of my little personal updates on Twitter or Facebook, which reduces the noise here but definitely splits up the content. Maybe that’s a good thing. You can subscribe to the stuff you like, ignore the stuff you don’t. (I use Twitter for more professional stuff whereas Facebook will show you more pictures of my kid and my cats.)

Professionally, I got promoted to be a Tech Lead at work, which is sort of like a team leader but without the “people management” part of things and more focus on product architecture and technology solutions. That’s totally my wheelhouse, so good things there.

I also became a co-owner of the Autofac project, which has been a lot of fun to work on. I started out over there as a contributor for the multitenant support and started playing a larger role with the restructuring for the upcoming 3.0 release. It’s great to work with smart folks like those on that project and it’s nice to be learning so much while (hopefully) providing some value to the masses.

Blog-wise, other than the usual “hey, I found this interesting” sorts of tips and articles…

So there’s all that. Maybe not high in quantity, but I’d like to think the quality is there.

Personally, my year (and most of my free time) has revolved around my daughter, Phoenix, who is now two years old. This year she went from walking and a small amount of vocabulary to running around rampantly and being a total chatterbox. She loves Batman, with the “Little People” playset as well as a Batman raincoat. (She’s on the ThinkGeek customer action shot page for that raincoat, too.) We took her to Disneyland and had a great time, though she didn’t take well to the costumed characters. I look forward to taking her again when she’s older and can understand a little more about what’s going on.

Every day she surprises me by saying or doing something new and I have to wonder where she gets all her material. Her latest thing is to “sneeze” (“ah… ah… AH-CHOO” like in cartoons) and then ask for a tissue (“Daddy, tissue me? I tissue. Please?”). I have no idea where she got that. This morning I yawned so she pointed to the kitchen and said, “Daddy, coffee?” Yes, baby, Daddy does need some coffee. You are the smartest toddler alive.

In going through some of our stuff, weeding out things we don’t use, I came across these baby sign language videos. We tried that since we’d heard a lot of success with it and wanted Phoenix to be able to communicate and not have those “I can’t speak so I’ll throw a tantrum” issues. We never could get Phoenix into it, though. She lost interest in the videos (we tried several kinds from different places) and just didn’t pick up on the signs. Instead, she pretty much skipped all that and just spoke or used less formal gestures to indicate what she wanted. We haven’t ever really had any issues figuring out what she’s saying and she’s never thrown any communication-related tantrums, so I suppose it all worked out in the end.

One thing I’ve sort of surprised myself with is the amount of television we let her watch. It’s not a lot, not like she’s just “glued to the tube,” but I thought I’d be one of those parents who would be, like, “NO TV EVER!” What I find, though, is that she really learns a lot from the stuff she watches. She knows a ton of animals from Go, Diego, Go. She is starting to get good problem solving skills from Mickey Mouse Clubhouse (“Which tool will solve this problem?”). She’s learned a lot about music and such from Little Einsteins. We don’t really watch anything with “no value” - arbitrary cartoons or whatever - but the educational stuff you see on PBS and Disney Junior has been really pretty good. She pretends a lot, she likes building with blocks and playing with those wooden Brio trains… and she knows how to navigate Netflix and the Disney Junior apps on the iPad to find the different shows she likes, so that’s pretty crazy to watch.

Toward the end of the year I’ve started getting into tea. I’ve never really been much of a tea-drinker in the past, but something clicked with me and I’m enjoying tea a lot. (Honestly,

In the upcoming year, I am thinking I’d like to move off the Subtext blog platform. I am a contributor over there, but the momentum behind the project has been lost and I don’t think it’s going to come back. I thought I’d be more into contributing and building on the blog engine than I ended up being. I met some great folks there and I’m glad I got involved, but I realize that, as far as a blog platform is concerned… honestly, at this point I just want it to work and have the software maintained by someone else. I want to own my content and I want to be able to tweak things if needed, but for the most part I don’t want a super-young platform and I don’t want to worry about whether there’s going to be an update coming. I honestly thought I’d want to tweak a bunch of stuff on my blog, write plugins, and do a bunch of things, but… well, not so much. As such, I will probably see what it will take to move to WordPress. It’s been around a long time, it’s a sort of de-facto standard, and it has an actual plugin model (something I’d wanted from Subtext for years). It also has no shortage of themes to choose from (something else I’d wanted from Subtext). It won’t be a simple process - I’ll need to figure out how to export all the Subtext content in WordPress Extended RSS format, redirect permalinks, etc. - but I think it’ll be worth it.

Beyond that, much as I would like to blog more and better things… I will have to see. I anticipate I’ll still use a lot of social media for the tiny updates, but hopefully I’ll have more interesting problems (and solutions!) to share with you all as the year progresses.

media comments edit

I’ve seen a ton of forum posts and blog posts trying to explain how to use mencoder or FFmpeg to rotate video that you took on your phone.

Thing is… they didn’t work for me.

No matter what I tried, something went awry.

  • The video rotated but no sound came through.
  • The video rotated and sound came through but the quality was horrible.
  • The audio came through but the video wasn’t visible.

…and so on. Ugh.

I’m a technical guy. Trying to figure this thing out I learned far more about audio and video codecs and container types than I really ever cared to know. It really shouldn’t be this hard.

The answer, for me, came with WinFF, a GUI wrapper on FFmpeg. There are some “presets” that come with it that set up the high quality video command line part of things so I only had to add the “rotate” bit.

For reference, the command line that worked for me was:

ffmpeg.exe -y -i input.mp4 -crf 15.0 -vcodec libxvid -acodec libfaac -ar 48000 -b:a 192k -coder 1 -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -me_method hex -subq 6 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -b_strategy 1 -qcomp 0.6 -qmin 0 -qmax 69 -qdiff 4 -bf 8 -refs 16 -direct-pred 3 -trellis 2 -wpredp 2 -rc_lookahead 60 -threads 0 -b 12000k -vf transpose=1 output.mp4

Yeah.

The “transpose” option at the end is the bit that rotates.

  • 0 = 90 degrees counterclockwise and vertical flip
  • 1 = 90 degrees clockwise
  • 2 = 90 degrees counterclockwise
  • 3 = 90 degrees clockwise and vertical flip

And I know someone is going to want to comment something about blah blah orientation flag blah blah file metadata blah blah some players don’t support it. I know. I really just want the stupid thing rotated so I don’t have to figure out which players work and which ones don’t. Ubiquitous play, minimal loss of quality, video rotated. Done.

I may tinker with the audio to see if I can just get it to pass through without re-encoding, but since I finally got it to work after this much research, I figured I’d post it.

Note that command line works great with the build of FFmpeg that comes with WinFF, but they’ve updated some of the options in later builds so it needs to be adjusted.

dotnet, gists, sublime comments edit

Sublime Text 2 has a nice feature where you can hit “Ctrl+B” or select “Tools -> Build” from the menus and, based on the current file type, a build system will be automatically selected and executed against that file.

I recently released an update to my MSBuild package for Sublime Text 2 that includes some “build variants” for MSBuild that specifically set Debug or Release configuration during the build. Basically:

msbuild yourscript.proj /p:Configuration=Debug

or

msbuild yourscript.proj /p:Configuration=Release

I didn’t know this was possible until recently or I’d have put it in from the get-go. Note it assumes either that your project is a standard .csproj or .vbproj, or that you’re using the standard “Configuration” variable name to denote build configuration. It also doesn’t do anything with platform, so whatever your project defaults to, that’s what it’ll build.

As it turns out, it’s not clear how you access build variants from inside Sublime Text and it’s not obvious - it doesn’t show up on the menu.

To access Sublime Text 2 build variants:

  • Open the Command Palette (either “Ctrl+Shift+P” or “Tools -> Command Palette…”).
  • In the window, type “Build:” to filter the list of commands. Note the colon “:” on the end there - it filters the list down to just the build commands.
  • Select the build type you’d like. For my MSBuild package, you’ll see:
    • “Build: Build” - default, no configuration specified
    • “Build: Debug Configuration” - specifies “Configuration=Debug”
    • “Build: Release Configuration” - specifies “Configuration=Release”

Build variants are not specific to my package - other packages may also provide build variants with other names.

Related to this,some folks have asked why I haven’t supplied a “build and run” option the way some other packages have. The short answer is: I can’t. Here’s why:

MSBuild is sort of a scripting language. You can write an MSBuild script that just copies a bunch of files around or zips some things up. You can have an MSBuild script that just generates some reports. Or maybe your MSBuild script kicks off several other MSBuild scripts, each of which build something.

Even if you narrow the scope to .csproj or .vbproj files (which, yes, are in MSBuild format), you can build a lot of different things - an .exe, sure, but what if it’s a web site project? Or a WCF service? Or an Azure project? What does “build and run” do then?

The reason Visual Studio is able to handle this is that it narrows the scope of its handling (only actual project files can have “startup actions” - you can’t have that for a .proj or .targets file); and it “knows” about different project types and how to start them up.

When you have a web site project, it “knows” that in your project properties you should be able to specify which URL you want to view when it starts up the browser… and it knows to start up IIS Express (or the VS dev server) to host the site. Further, when you have a solution (multiple projects that all build together - like an MSBuild script that triggers several other MSBuild scripts) you can specify which project(s) should be started up and which actions should be taken at that time. That’s why you see all those .suo and .user files out there alongside your solutions/projects. It’s a system external to the build system that maintains all that information.

You can “make Visual Studio ‘know’ about new project types” by installing VS add-ins and components. For example, when you install the Azure SDK, it tells Visual Studio about Azure project types and how to handle the startup action.

Unfortunately, all of that’s a bit beyond the scope of what I can provide in Sublime Text.

If you would like a “build and run” experience, I would recommend writing a small “wrapper script” that triggers your real script and build that instead.

For example, say you have a project “MyProject.csproj” that builds “MyProject.exe.” A wrapper might look like this:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="BuildAndRun" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
  <PropertyGroup>
    <Configuration Condition="'$(Configuration)'==''">Debug</Configuration>
  </PropertyGroup>
  <Target Name="BuildAndRun">
    <MSBuild Projects="MyProject.csproj" Properties="Configuration=$(Configuration)" />
    <Exec Command="MyProject.exe" WorkingDirectory="$(MSBuildProjectDirectory)/bin/$(Configuration)" />
  </Target>
</Project>

In this way, the wrapper script knows what the “run” action is and you can still use the Debug/Release configuration build variants. Obviously if you have a web site or something other than a simple .exe, your “run”action is going to be more involved. I’ll leave that as an exercise for the reader.