Video? Screen Capture? Hosting? Editing? Help Videos!

I've got at least three uses for video;  Filming my drifting efforts at PIR, getting screen captures for samples I'd like to present via Visual Studio per a recent discussion I've had, and of course for general editing, manipulation, and entertainment value of filming things from planes, trains, to goofy people stunts or whatever.  It's all rather interesting, and becoming a more and more vested interest of mine.  I believe at some point I'll need to plunk down the bills for a video camera and other gear.

On the topic of screen capture, screen casting, and hosting of said video I dug up a cool tool for just these topics.  Techsmith has a tool called Camtasia Studio for recording, enhancing, and sharing screen captures and recordings.  They also have a screen cast video media hosting service with seamless integration into Camtasia StudioTechsmith of course makes the almost famous SnagIt screen capture utility too.  I've used this for years and if their Camtasia Studio is anything like SnagIt in quality it will definitely be worth it.

Looking at this for a short bit also made me realize this effort might even integrate into some of my other personal projects I've been working on with a friend of mine.  Some of the functional needs of what I'm searching for a central hosting "vehicle" I'll call it.  Something along the lines of Flash or Silverlight.  I'm mid-research on these topics but hope to finally dig up something soon.

So stay tuned, as soon as I can muster the time together, I'll give a screen cast a shot.  Heck, maybe I'll even get my ugly mug displayed in there too.  Smile [:)]

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/30/2007 at 1:38 AM
Categories: My Projects | Website and Application Write-Ups
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

My Lousy Example :( ...and a Much Better Example :)

I posted an example a few days ago regarding 'ref' and 'out' parameter keywords.  My main purpose was to present a "tip o' the day" via a code example of ref and out parameters similar to some questions I had been posed earlier in the week.  One of my stellar coworkers pointed out that the examples are fine and all, but really don't point out what really occurs when trying to assign objects versus base value types, and properties of those objects etc.  With that he threw together some great examples that I nabbed from him (with permission of course).  Thanks Shane for the snippets.  Smile [:)]

So check out these examples...

    1 using System.Diagnostics;

    2 using System.Reflection;

    3 

    4 namespace ConsoleInterface

    5 {

    6     public class TestParam

    7     {

    8         private int _TestProp;

    9 

   10         public int TestProp

   11         {

   12             get { return _TestProp; }

   13             set { _TestProp = value; }

   14         }

   15     }

   16 

   17     public class TestingRefAndOutParameters

   18     {

   19         public void CallingMethodChangeProp()

   20         {

   21             TestParam testParam = new TestParam();

   22 

   23             testParam.TestProp = 2;

   24             Debug.WriteLine(MethodInfo.GetCurrentMethod().Name + " Start testParam.TestProp=" + testParam.TestProp);

   25 

   26             TestMethod(testParam);

   27             Debug.WriteLine(MethodInfo.GetCurrentMethod().Name + " End testParam.TestProp=" + testParam.TestProp);

   28         }

   29 

   30         public void TestMethod(TestParam testParam)

   31         {

   32             testParam.TestProp = 4;

   33         }

   34 

   35         //**********************************

   36 

   37         public void CallingMethodChangePropChangeObj()

   38         {

   39             TestParam testParam = new TestParam();

   40 

   41             testParam.TestProp = 2;

   42             Debug.WriteLine(MethodInfo.GetCurrentMethod().Name + " Start testParam.TestProp=" + testParam.TestProp);

   43 

   44             TestMethodSetObj(testParam);

   45             Debug.WriteLine(MethodInfo.GetCurrentMethod().Name + " End testParam.TestProp=" + testParam.TestProp);

   46         }

   47 

   48         public void TestMethodSetObj(TestParam testParam)

   49         {

   50             testParam.TestProp = 4;

   51 

   52             TestParam testParam2 = new TestParam();

   53 

   54             testParam2.TestProp = 3;

   55             testParam = testParam2;

   56         }

   57 

   58         //**********************************

   59 

   60         public void CallingMethodChangePropChangeObjByRef()

   61         {

   62             TestParam testParam = new TestParam();

   63 

   64             testParam.TestProp = 2;

   65             Debug.WriteLine(MethodInfo.GetCurrentMethod().Name + " Start testParam.TestProp=" + testParam.TestProp);

   66 

   67             TestMethodSetObjByRef(ref testParam);

   68             Debug.WriteLine(MethodInfo.GetCurrentMethod().Name + " End testParam.TestProp=" + testParam.TestProp);

   69         }

   70 

   71 

   72         public void TestMethodSetObjByRef(ref TestParam testParam)

   73 

   74         {

   75             testParam.TestProp = 4;

   76 

   77             TestParam testParam2 = new TestParam();

   78             testParam2.TestProp = 3;

   79             testParam = testParam2;

   80         }

   81 

   82         //**********************************

   83 

   84         public void CallingMethodChangePropChangeObjByOut()

   85         {

   86             TestParam testParam = new TestParam();

   87 

   88             testParam.TestProp = 2;

   89             Debug.WriteLine(MethodInfo.GetCurrentMethod().Name + " Start testParam.TestProp=" + testParam.TestProp);

   90 

   91             TestMethodSetObjOut(out testParam);

   92             Debug.WriteLine(MethodInfo.GetCurrentMethod().Name + " End testParam.TestProp=" + testParam.TestProp);

   93         }

   94 

   95         public void TestMethodSetObjOut(out TestParam testParam)

   96         {

   97             testParam = new TestParam();

   98             testParam.TestProp = 4;

   99 

  100             TestParam testParam2 = new TestParam();

  101             testParam2.TestProp = 3;

  102 

  103             testParam = testParam2;

  104         }

  105     }

  106 }

As you work through each of these methods, realize what is going on with the object, value type, or other parameter manipulations as the method executes.  You'll notice that even though something is set to another value, outside of the method it is not particularly going to have the value changed.  Take the following method for example:

   48         public void TestMethodSetObj(TestParam testParam)

   49         {

   50             testParam.TestProp = 4;

   51 

   52             TestParam testParam2 = new TestParam();

   53 

   54             testParam2.TestProp = 3;

   55             testParam = testParam2;

   56         }

In the code, when reading it directly, it would seem that based on the second assignment of testParam = testParam2, that the TestProp property would be assigned the value of 3.  But because of the way parameters are passed in C# one actually ends up with 4 instead of 3.  One must know the differences between value and reference type passing, for more information check out this great write up or check out the MSDN article on "Passing Parameters" to really dig into what is going on.  Another great write up on what is getting put where in memory.

I hope these examples worked to display more effectively what is functionally happening with 'ref', 'out' and general parameter passing in C#.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/29/2007 at 10:25 PM
Categories: How-To, Samples, and Such | Tip o' The Day
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Consistency and Null Coalescing Operators

I've been trying to be more consistent lately with my blog entries, making at least one a day during the Monday through Friday work week.  Well, that has sort of kind of maybe not really worked out too hot yet.  But as I sat and thought, while reading through some blogs, I stumbled on Stuart Thompson's blog where he mentions Null-Coalescing Operators.  These suckers are great!

Per the example on his site, what we used to type when checking for nulls appeared something like this:

    1 namespace SomeNamespace

    2 {

    3     public class Coalescing

    4     {

    5         private string emailAddress = string.Empty;

    6         private string parsedValue = string.Empty;

    7 

    8         public string CheckForParsedValue()

    9         {

   10             if (parsedValue != null)

   11             {

   12                 emailAddress = parsedValue;

   13             }

   14             else

   15             {

   16                 emailAddress = "(Not provided)";

   17             }

   18 

   19             return emailAddress;

   20         }

   21     }

   22 }

but now will be coded in a super awesome elite looking way of:

   10 string emailAddress = parsedValue ?? "(Not provided)";

I'm stoked personally, and I think this makes a great tip o' the day!  Of course it is kind of a "future" tip o' the day.  Thanks Stuart pointing out this interesting tidbit of future C# coolness.

Smile [:)]

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/28/2007 at 11:21 PM
Categories: Tip o' The Day
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Keeping Up in the Last Week of August

For that "keeping up" category entry this week I've hit up a few web site pages that have current topics of concern.

The first I dug up was "Creating a managed service factory" by Martin Hinshelwood. Martin does a great job of laying out an interesting idea for managing multiple services via a factory.  Read it, it is interesting (I'm still processing and groking what is going on here).

While reading through some of Martin's material I stumbled into an entry on "hosted TFS pilot program" by Jim Lamb.  With the problems I have had with personally hosted TFS servers, and my return to Subversion and other solutions, I'd love to have access to a reasonably priced TFS hosted solution.  As a matter of fact, it would RULE!

On another topic, while checking out the latest Code Project e-mail I received I discovered another code generator I had not seen before.  It is called Smart Code and it is open source!  I dug a little into the article and discovered it is maintained by a company called Kontac.  The produce business rules management software and other tools.  Check out Kontac's website for Smart Code.

The last article I read through was a write up on the ole' trusty Command Pattern titled "Behavioral Patterns:  Writing Command Pattern with C#" by Francesco Carata.

Most of these articles I found I received via one of the weekly e-mails sent out by Code ProjectCode Project is an awesome site with some great articles and great content contributors.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/27/2007 at 6:58 PM
Categories: Keeping Up
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

'ref' and 'out', Key Language Elements to Know :: Tip O' The Day

The 'ref' and 'out' keywords for parameters are rarely used, so I thought they'd make a great tip o' the day.  Enjoy, and take it easy on the 'ref' and 'out' keywords.

The 'out' keyword on a parameter basically is like making that variable an additional return type value.  However, if the 'out' keyword is commonly used, you are probably in need of some code refactoring.

'ref' parameters on the other hand are passed into and out of a method, and are not required to be assigned prior to use in a method.  This is also one of the primary differences in the usage between 'out' and 'ref'.

Check out the samples below that I nabbed from MSDN, they clarify well.  Smile [:)]

From MSDN Sample:

From the MSDN Sample code:

'ref' Example

    1 using System;

    2 

    3 namespace ConsoleInterface

    4 {

    5     internal class RefExample

    6     {

    7         private static object FindNext(object value, object[] data, ref int index)

    8         {

    9             // NOTE: index can be used here because it is a ref parameter

   10             while (index < data.Length)

   11             {

   12                 if (data[index].Equals(value))

   13                 {

   14                     return data[index];

   15                 }

   16                 index += 1;

   17             }

   18             return null;

   19         }

   20 

   21         private static void Main()

   22         {

   23             object[] data = new object[] {1, 2, 3, 4, 2, 3, 4, 5, 3};

   24 

   25             int index = 0;

   26             // NOTE: must assign to index before passing it as a ref parameter

   27             while (FindNext(3, data, ref index) != null)

   28             {

   29                 // NOTE: that FindNext may have modified the value of index

   30                 Console.WriteLine("Found at index {0}", index);

   31                 index += 1;

   32             }

   33 

   34             Console.WriteLine("Done Find");

   35         }

   36     }

   37 }


'out' Example

    1 using System;

    2 

    3 namespace ConsoleInterface

    4 {

    5     internal class OutExample

    6     {

    7         // Splits a string containing a first and last name separated

    8         // by a space into two distinct strings, one containing the first name and one containing the last name

    9 

   10         private static void SplitName(string fullName, out string firstName, out string lastName)

   11         {

   12             // NOTE: firstName and lastName have not been assigned to yet.  Their values cannot be used.

   13             int spaceIndex = fullName.IndexOf(' ');

   14             firstName = fullName.Substring(0, spaceIndex).Trim();

   15             lastName = fullName.Substring(spaceIndex).Trim();

   16         }

   17 

   18         private static void Main()

   19         {

   20             string fullName = "Yuan Sha";

   21             string firstName;

   22             string lastName;

   23 

   24             // NOTE: firstName and lastName have not been assigned yet.  Their values may not be used.

   25             SplitName(fullName, out firstName, out lastName);

   26             // NOTE: firstName and lastName have been assigned, because the out parameter passing mode guarantees it.

   27 

   28             Console.WriteLine("First Name '{0}'. Last Name '{1}'", firstName, lastName);

   29         }

   30     }

   31 }

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/23/2007 at 6:14 PM
Categories: How-To, Samples, and Such | Tip o' The Day
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Staying On Top of the Industry, The Keeping Up List

Focus Points:

There are two primary focus points for staying up to speed with software development.  Maintaining these key focus points is invaluable to one's self for career promotion and personal meritocracy, career integrity, and keeping the stress levels low!

  • Language Features and Technology

Some of the key points to be aware of in the software development industry are language features and technology.  In C# the development paradigm follows that of object oriented development, with the standard inheritance, polymorphism, and other such features.  There are other languages, features, and language subsets that are working to extend these basic object oriented notions.  They range from Scala to F#.

Other things that are somewhat uncommon also should be sought and researched when possible to assure the full range of feature sets within a language are used well, including things like the often overlooked "out" and "ref" parameter passing modes, or the .  These are just some of the things that software developers should be aware of, if not intimately familiar with to some degree or another.

  • Frameworks, Libraries, Factories, Patterns, and Theory

Frameworks, Libraries, and "Factories" as Microsoft calls them sometimes converge into what is essentially the features of a language.  Often though they also extend far beyond, with frameworks for image manipulation, financial transactions, capitol markets, math intensive calculations, and other such industries.  These frameworks generally expose a particular API or service availability for development efforts.  The frameworks, libraries, and even somewhat misnamed "factories" that Microsoft release from its Patterns and Practices group could be argued to be even more important than the language feature themselves.  What can be done with frameworks is often extensive and often simplifies tasks in massive ways.  Regularly the effort is effected to such a degree that the level of familiarity with the underlying logic and business of a framework is almost completely removed. 

Some of the other items that are coming up soon are things like LINQ, and F#, which absolutely change the development paradigm that we developers have been working in.  In a mere number of months when Visual Studio 2008 is released with the framework 3.5 the development world will make what should be another massive shift in improved productivity.  Some developers even touting a 2-3x multiplier in work completion.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/23/2007 at 3:32 PM
Categories: Keeping Up
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Places to Think, a.k.a "My Third Place"

I got up after a development all-nighter a few days ago.  The GF and I hit the computers at about 10:00pm.  We both played WOW for a bit.  She kept up the adventures of WOW while I jumped into dev mode about 11:15pm.  From 11:15pm until 5:00am I coded away with .netTiers, Windows Apps, and trying out different scenarios with the various entities and database generations.

When I got up that morning and I was still in that mind set.  I got myself together just barely and headed out the door to my thinking place.  So what is that place?  I like to work, think, and ride the streetcar all at once.  For some reason it helps me keep my thoughts together and focused even when there are dozens of people getting on and off, conversations taking place, and all sorts of hustle and bustle.  I like being able to look out the huge glass windows and contemplate and see changing scenery.  Other places I prefer are coffee shops and various other places I'll leave unmentioned at the moment.

I ponder sometimes, what are the places other people like to work aside from just the office.  Then of course, does anyone really like being in the office, some do, but I gather that many don't?  I have mixed feeling about being in the office.  When offices are distractive, I generally like to grab a streetcar ride somewhere and get away from the disruptions, but if the office is calm and it is easy to work I don't mind being where the other minds are working away on similar solutions.

I ponder what other's places to think are?

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/20/2007 at 9:51 PM
Categories: Memories
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Brainstorming Complete, Moving to Descriptive Write Up

I've finished what I wanted to of my basic diagrams.  I need to add the description of what I am trying to do now to elaborate what exactly the brain storming diagrams entail.  The following are the remaining brain storming diagrams that I've come up with that will at minimum, get my pet project started.


What I've done in each of these is prepare them, or complete a further sub-level break down of the primary modes for a particular mode type.  For airplane travel there is the break down into commuter, small aircraft, etcetera, and then the further break down to the specific Airbus, Boeing, or Beech Hawker Craft.  At some point the sub level data would probably be stored in a database but this is just brainstorming, so I'm just drawing simple correlations at this point.  The next step is to start breaking down specific elements, or scope, of what exactly my first application with this topic.  I have some initial elements for the design, some ideas for other particular applications involving scheduling, seating arrangements, etc.  I will move forward on this shortly and have an actual documented scope that I will start building to.


Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/18/2007 at 10:42 PM
Categories: My Projects | Transit Engine
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

O/R Mapping and Data Access Layers

O/R mappers and generator

I've been doing a moderate amount of research into tools that generate data access layers, entity or object tiers, and other layers for enterprise (or non-enterprise) applications. One of the tools I’ve picked up lately per some encouragement from a coworker is LLBLGen Pro. One can download a demo at the LLBLGen site to try out.

LLBLGen Pro is claimed as the #1 O/R Mapper (I'm not sure this is true, I haven't seen sales statistics) for the data-access tier in .NET.  The tool can be used against Access, PostgreSQL, Oracle, mySQL, DB2, and of course SQL Server 7.0 or greater.  At the same time support is given to the databases, the code generated is independent of the specific database, and for type differences (such as Oracle's lack of a Boolean type) type converters can be created.

The tool also creates typed lists for entity fields based on one to one, one to many, or many to one relationships.  LLBLGen Pro will also create typed views one one to one mappings, support existing stored procedures with wrapper code which enables a single line of code for calling.  The tool also will accept templates for other peripheral code generation as needed.  For more information on the features, hit the LLBLGen Features List.  For tutorials, videos, and samples check out the tutorials page.

As my ranting has ensued about non-use of code generation, the LLBLGen site lays out the facts right on the main page.  LLBLGen Pro (or really, ANY code generator) will save a huge portion of a project's development time.  The site puts the number at 50%, I'd put it even higher with a high confidence on my proclamation.  As I've often complained about the endless boiler plate code, this tool easily replaces greater than 90% of that, the rest easily removed by good use of object oriented pattern based design practices.

The tool swings in at a relatively cheap 229.99 Euro starting price, which as of this date translates to $308.57Big Smile [:D]

Next I will probably toss in some reviews of .NET Tiers, NHibernate, and other such tools just for good measure.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/18/2007 at 4:07 PM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

My Code Compiles, Yup! :: Tip O' The Day

My code compiles, so can I take a break?  I love those xkcd strips!  Smile [:)]
Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 8/17/2007 at 8:55 AM
Categories: Tip o' The Day
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed