Apollo 11 Saturn V Launch (HD) Camera E-8

Wow… I ran across this video on Vimeo – very cool. The embedded video isn’t in HD, so click through and watch it on Vimeo for the best experience.

Apollo 11 Saturn V Launch (HD) Camera E-8 from Mark Gray on Vimeo.

This clip is raw from Camera E-8 on the launch umbilical tower/mobile launch program of Apollo 11, July 16, 1969. This is an HD transfer from the 16mm original. Even more excellent footage is available on our DVDs at our website at http://www.spacecraftfilms.com

The camera is running at 500 fps, making the total clip of over 8 minutes represent just 30 seconds of actual time. Narration is provided by Mark Gray (me), Executive Producer for Spacecraft Films.

Linq To CSV

This was originally just a temporary post to make sure my syntax highlighting was working. I decided to go ahead and flesh it out and keep it here.

The code below is some C# I’ve used recently to do some custom querying against a SQL database. I was given a list of about 1600 devices that needed to be imported into the database. Some of the work had been done, so I needed to get a list of devices that weren’t already there.

The code uses a library called LINQtoCSV. You can read more about that library here. In fact, you will find all the information you need there, and then some. This snippet is a VERY basic use of the library.

Depending on what I’m working on, I usually start by writing my “proof of concept” snippets in LINQPad. In this case, I only needed this to work once. In other words, I had no need to keep this code running, no need to optimize it, support it, etc… I just needed it to do the job once.

Here’s a few lines from the CSV file I was given. I needed to query my database for devices using the names below (’2B5-A-1′ for example):

[code light="true"]
Name,Description,ServiceTag,Model,Owner,Zone,ExistingLocation,Building,Location,SRN,MoveDate
2B5-A-1,110V,,1587H24A1,ATC,1,,QTS,100.17,RIGHT,4/26/2010
2A8-A-1,110V,,1587H24A1,ATC,1,,QTS,100.17,LEFT,4/26/2010
AT-EDBO-3560-D15,SWITCH,FOC1036Z0V1,3560G,ATC,1,,QTS,100.17,46,4/26/2010
[/code]

Diving into the code, I first defined a class that fit each CSV row, essentially defining my column contents:

[csharp]
class Device {
[CsvColumn(FieldIndex = 1, CanBeNull = true)]
public string Name { get; set; }

[CsvColumn(FieldIndex = 2, CanBeNull = true)]
public string Description { get; set; }

[CsvColumn(FieldIndex = 3, CanBeNull = true)]
public string ServiceTag { get; set; }

[CsvColumn(FieldIndex = 4, CanBeNull = true)]
public string Model { get; set; }

[CsvColumn(FieldIndex = 5, CanBeNull = true)]
public string Owner { get; set; }

[CsvColumn(FieldIndex = 6, CanBeNull = true)]
public string Zone { get; set; }

[CsvColumn(FieldIndex = 7, CanBeNull = true)]
public string ExistingLocation { get; set; }

[CsvColumn(FieldIndex = 8, CanBeNull = true)]
public string Building { get; set; }

[CsvColumn(FieldIndex = 9, CanBeNull = true)]
public string Location { get; set; }

[CsvColumn(FieldIndex = 10, CanBeNull = true)]
public string SRN { get; set; }

[CsvColumn(FieldIndex = 11, CanBeNull = true)]
public string MoveDate { get; set; }
}
[/csharp]

Then I created a file description defining a comma as the separator and that the first line has column names. Then I created a context and read the file into an IEnumerable using the class from above:

[csharp]
CsvFileDescription inputFileDescription = new CsvFileDescription {
SeparatorChar = ‘,’,
FirstLineHasColumnNames = true
};

CsvContext cc = new CsvContext();

IEnumerable<Device> devices = cc.Read<Device>(@"c:pathtoBook2.csv", inputFileDescription);
[/csharp]

Now that the rows are in an IEnumerable, I can loop through them. For each row, I query my SQL database and get the name of the device found. If no device was found, I populate a new List<>. Last, dump that list to the console (this is a LINQPad function), and write it to a new CSV file.

[csharp]
List&amp;lt;Device&amp;gt; notFound = new List&amp;lt;Device&amp;gt;();

foreach(var device in devices) {

string name = (
from e in tblEquipment
where e.Name == device.Name
select e.Name
).FirstOrDefault();

if(string.IsNullOrEmpty(name)) {
notFound.Add(device);
}
}

notFound.Dump();

cc.Write(notFound, @&amp;quot;C:pathtonewfile.csv&amp;quot;, inputFileDescription);
[/csharp]

I’m sure there are better ways to do this, but this wasn’t for any sort of a long term project. This is a quick one-off script I needed for a one-time use purpose.

Oops

I thought I’d attempt an upgrade to a RC version of WordPress. I ended up deleting all my old posts. Hahaha… good thing I didn’t have much to say before anyway. :)

EDIT: I managed to recover them.

New Year's Eve Already???

It’s really hard to believe that this year is almost over. I guess now that we have a kid things are just going to get faster and faster, but it seems like just last week that we were trying to get Jack to wear a Halloween costume.

Jenny, Jack, and I have made some great memories this year and I can’t wait to see what 2010 has in store for us! Happy New Year everyone (a day early)!

Christmas was awesome… Jack had such a…

Christmas was awesome… Jack had such a good time. Jenny and I kept gifts simple between us; the real joy was watching Jack. This was his second Christmas, but he was only 9 months old last year, so he had no idea what was going on. This year he didn’t understand what was going on, and didn’t really grasp the idea of opening presents, but he did understand that he got a LOT of new toys to play with. That boy really raked it in this year! Hahah…

I’ve got a lot of pics up on flickr, but you’ll need to be marked as a friend or family to see them (because of internet creeps): http://www.flickr.com/photos/seanw/

Enjoying Christmas Eve with my family. I…

Enjoying Christmas Eve with my family. It’s been a great day so far, and Jenny and I are just relaxing now before hitting the sack. Santa’s coming soon, so we better be asleep before he gets here!! :) Be sure to check out our site at www.jennyandsean.com to read more details about our Christmas Eve… goodnight!