<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>codify.flansite.com</title>
	<atom:link href="http://codify.flansite.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://codify.flansite.com</link>
	<description>Codify</description>
	<lastBuildDate>Mon, 30 Nov 2009 10:24:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Java Serialization &#8211; Appending Objects to an Existing File</title>
		<link>http://codify.flansite.com/2009/11/java-serialization-appending-objects-to-an-existing-file/</link>
		<comments>http://codify.flansite.com/2009/11/java-serialization-appending-objects-to-an-existing-file/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 06:11:25 +0000</pubDate>
		<dc:creator>flanster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Append]]></category>
		<category><![CDATA[Existing]]></category>
		<category><![CDATA[File]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Serialization]]></category>

		<guid isPermaLink="false">http://codify.flansite.com/?p=206</guid>
		<description><![CDATA[The Problem
You cannot simply append objects spanning open/close pairs to a partially populated file and expect to read them later with a single pass.  Doing a series of:

open file X in append mode
write object(s) // transaction
close file

&#8230; time goes by or system reboots, etc &#8230;.

open file X in append mode
write objects(s) // transaction
close file

I&#8217;ve tried [...]]]></description>
			<content:encoded><![CDATA[<h3>The Problem</h3>
<p>You cannot simply append objects spanning open/close pairs to a partially populated file and expect to read them later with a single pass.  Doing a series of:</p>
<ol>
<li>open file X in append mode</li>
<li>write object(s) // transaction</li>
<li>close file</li>
</ol>
<p style="padding-left: 30px; ">&#8230; time goes by or system reboots, etc &#8230;.</p>
<ol>
<li>open file X in append mode</li>
<li>write objects(s) // transaction</li>
<li>close file</li>
</ol>
<p>I&#8217;ve tried this and upon reading I got this error:</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">java.io.StreamCorruptedException: invalid type code: AC</div>
<pre style="padding-left: 30px; ">java.io.StreamCorruptedException: invalid type code: AC</pre>
<p>This is due to the stream header appearing before each object S in the file.  It is written everytime a ObjectOutputStream is opened/created.</p>
<h3>But Wait &#8211; Why do this?</h3>
<p>It is a reasonable question.  It is likely you do not need to do this &#8211; right?  Open the file, write to it, and close it?  Doing this over and over against just seems inefficient.  Why not just write all the objects at once and be done with it.  Well, there are situations, like writing to a database log file where this might happen. You might consider rolling to a new file for each group of time-separated writes or just keep the file open.  But keeping a file open indefinitely or having many separate tiny files seems just broken somehow.  What if the file is a socket and you cannot simply open or close it anytime.</p>
<p>The key is you cannot come back to an existing file/socket and write more objects after that stream was once closed and expect to read this same stream later using a simple reverse technique.</p>
<p><em>There are techniques to work around this</em>.</p>
<h3><strong>Solution #1: Fake Multiple file in a Single Stream</strong></h3>
<p>In looking closely at the <a href="http://www.prevayler.org/">prevayler</a> code, which seems to do the same thing for command journaling, I discovered one possible technique.</p>
<p>Write your &#8220;transaction&#8221; to a ByteArrayOutputStream, then write the length and contents of this ByteArrayOutputStream to a file via the DataOutputStream.</p>
<pre style="padding-left: 30px;">ByteArrayOutputStream aos = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(aos);
DataOutputStream dos = new DataOutputStream(new FileOutputStream(outfile, true));
try
{
    os.writeObject(order);
    os.writeObject(new Date());
    os.flush();

    byte[] raw = aos.toByteArray();
    dos.writeInt(raw.length);
    dos.write(raw);
    dos.flush();
}
finally
{
    if ( os!= null ) os.close();
    if ( dos!=null ) dos.close();

}</pre>
<p>To read, reverse the process.  Read the length of the byte stream into an int, create a byte array of this length, then read that amount of data into byte array.  Once you created the ByteArrayInputStream, use it to read the transaction via ObjectInputStream.</p>
<pre style="padding-left: 30px;">DataInputStream dis = new DataInputStream(new FileInputStream(filename)); 
try{
    while ( true )
    {
        int recLen = dis.readInt();
        if ( recLen &lt;= 0 )
            break;
        byte[] raw = new byte[recLen];
        dis.read(raw);
        ByteArrayInputStream bis = new ByteArrayInputStream(raw);
<span style="white-space: pre;">	</span>ObjectInputStream is = new ObjectInputStream(bis);
<span style="white-space: pre;">	</span>int i=0;
<span style="white-space: pre;">	</span>MyClass1 obj1 = (MyClass)is.readObject();
<span style="white-space: pre;">	</span>MyClass2 obj2 = (MyClass)is.readObject();
<span style="white-space: pre;">	</span>// use or store obj1 and obj2
<span style="white-space: pre;">	</span>is.close();
    }
}
catch(EOFException e)
{
    System.out.println("Reached EOF");
}
finally
{
    if ( dis != null ) dis.close();
}</pre>
<pre><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">You will be able to write an series of separate object-sets/transactions and then read this series later.  This has the effect of writing multiple "virtual" files sequentially into a single file.</span></pre>
<p>It will keep working regardless of changes to the underlying serialization framework.</p>
<h3>Solution #2:  Reopen and Skip</h3>
<p>Another solution involves saving the file position using:</p>
<pre style="padding-left: 30px; ">long pos = fis.getChannel().position();</pre>
<p>closing the file, reopening the file, and skipping to this position before reading the next transaction.</p>
<p>This is simply to implement.  It keeps the writing side from changing beyond the simple open/writeObject/close semantic.  This works but at the cost of performing many OS-level open/close operations and may limit performance.  The best part of this solution, however, is that it might save you from assuming you could read such files you have created.  If you have code writing logs without having tested the read side, then this code will allow you to read that data.</p>
<h3>Solution #3: Override ObjectInputStream</h3>
<p>This assumes the implementation of this class shall remain unchanged and was suggested in this thread <a href="http://forums.sun.com/thread.jspa?threadID=5383193">forums</a>.  Part of the issue is the stream header and the forum entry argues for by-passing it.  I did not try it because it seems to be a bad practice since it involves overriding protected routines.  These are protected for a reason &#8211; duh!</p>
<p>If I am missing something, or there other ways to solve this problem, I&#8217;d like to hear about them.</p>
<p>Peaceout.</p>
]]></content:encoded>
			<wfw:commentRss>http://codify.flansite.com/2009/11/java-serialization-appending-objects-to-an-existing-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C struct like Parsing of Binary Data with Java</title>
		<link>http://codify.flansite.com/2009/05/c-struct-like-parsing-of-binary-data-with-java/</link>
		<comments>http://codify.flansite.com/2009/05/c-struct-like-parsing-of-binary-data-with-java/#comments</comments>
		<pubDate>Sun, 03 May 2009 03:21:58 +0000</pubDate>
		<dc:creator>flanster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[binary]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C java struct parse binary data]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[parse]]></category>

		<guid isPermaLink="false">http://codify.flansite.com/?p=94</guid>
		<description><![CDATA[Binary Formats:
Oh, the wonders of binary data.   Something too many programmers no little about, even though computers are binary processors.  Ironic.  It seems odd that there are few facilities to deal with binary data elegantly in &#8220;modern&#8221; programming languages.  This is a shame since it is more natural for a computer to read binary [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Binary Formats:</strong></p>
<p>Oh, the wonders of binary data.   Something too many programmers no little about, even though computers are binary processors.  Ironic.  It seems odd that there are few facilities to deal with binary data elegantly in &#8220;modern&#8221; programming languages.  This is a shame since it is more natural for a computer to read binary forms.  This <em>should </em>make coding easier for reading binary forms than other forms of data like text or xml.  It is easier in lower level programming languages such as C.  Also, it should be inherently more efficient since it uses the smallest amount of natural space for storing information.  </p>
<p>To this end, C does have a wonderful idiom for parsing simple non-variable length binary data directly into C structs.</p>
<pre>#pragma pack(1)
struct MyStruct
{
unsigned int PD_MSG_TYPE:8;
unsigned int NUM_REQUESTS:4;
unsigned int NUM_RESPONSES:4;

.... [ snip happens] ....

unsigned int GPS_ACQ_CAP:12;
unsigned int LOC_CALC_CAP:12;
};</pre>
<p></p>
<p>You simply allocate a memory space for this struct and read straight into this allocated structure.  It cannot be simpler or faster.  Each field of the struct is fully packed into bytes and the alignment issues of those bits into bytes are dealt with by the C compiler.</p>
<p>There are places where this starts to break down.  If you have to store long arrays, string or other variable length data, you have to create a more dynamic data structures and split up you reading based upon lengths or tags, etc.  But, for simple stuff (and there is a lot of simple stuff out there) this works great.</p>
<p>For further study of C bit packing see:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Bit_field">Bit field</a></li>
<li><a href="http://www.cs.cf.ac.uk/Dave/C/node13.html">Low Level Operators and Bit Fields</a></li>
<li><a href="http://publications.gbdirect.co.uk/c_book/chapter6/bitfields.html">Bitfields</a></li>
</ul>
<p>Other advantages of bit fields are:</p>
<ul>
<li>code is self documenting</li>
<li>bits are packed for efficient use of the memory or bandwidth</li>
<li>no bit arithmetic by the programmer and therefore less error prone</li>
<li>speed &#8211; it is very fast since there are no checks on the buffer from the network [<a href="#buffer_overrun_dynamic">1</a>]</li>
<li>real programmers use this technique &#8211; well used to. [<a href="#real_programmers">2</a>]</li>
</ul>
<p>There are inefficiencies with the above structure for certain types of high-performance, computational based algorithms.  The odd alignment in memory causes native compilers to produce code awkward for some processors to deal with at top speed.  Memory data alignment is the subject for others to discuss.  Here are focused on programmer performance and not machine performance.  It is important to get a job done reliably and quickly.</p>
<p>It is often not necessary to deal with data in this form.  The average programmer rarely runs into issues of this kind, but when you do run into it having the right tool/pattern to address it makes all the difference.</p>
<p><strong>The Problem:</strong></p>
<p><em>Now that I have hopefully sold you on the merits on binary format, and the C idiom to read or write them, I can get to the problem.</em></p>
<p>Java does not support this C idiom directly.  My searches have not lead me to anything nearly as elegant as the C construct above.  In java, you end up with a series of gets from some IO library:</p>
<pre>class MyStruct
{
    int i;
    long l;
    // possibly 10's or 100's of other fields
}</pre>
<p></p>
<p>And then in the read routine you might have</p>
<pre>int i=stream.getInt();
long l = stream.getLong();
// possibly 10's or 100's of other get calls</pre>
<p></p>
<p>etc, etc, etc, until the entire field set is read.  You have to hand code things twice.  This breaks the rule of &#8220;<a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">don&#8217;t repeat yourself</a>&#8221; which I buy religiously.  </p>
<p>Early during the .Net beta I wanted to post something similar for C# in that you could do single call read for entire structures.  This idea required the use of .Net Annotations.  This was something java did not have at that time.  Now java does.  So, I want to show a way to build this functionality almost directly into the syntax of java itself.  The end result is a simple Annotation and a utility [<a href="#perl_binary_insp">3</a>] that uses reflection to safely read the network binary blob and automatically populate the class field values.  This is similar to what hibernate, toplink, and now JPA supports.  However, the goal here is not to build the most elegant framework but to show the beginnings of one.</p>
<p/>
<strong>Update:</strong>  <em>I recently stumbled upon this <a href="http://javolution.org/target/site/apidocs/javolution/io/Struct.html">struct class</a> that seems to address this idiom and problem.  It appears to be a complete solution but does not address all types of binary data such as big versus little endian.  The solution I present does allow for extensions to the many varied types of binary data, but it is not complete &#8211; just the start of a solution &#8211; just an idea.  In addition, this struct class does involve creating objects containing other objects which might be a concern for memory efficiency. </em>  </p>
<p>The class definition for a C like struct could work something like this in java:</p>
<pre>final public class TestStruct
{
    public TestStruct() {} // default constructor
    @Bits(len=8) int PD_MSG_TYPE;
    @Bits(len=4) int NUM_REQUESTS;
    @Bits(len=4) int NUM_RESPONSES;
  ...  snip happens  ...
    @Bits(len=12) int GPS_ACQ_CAP;
    @Bits(len=12) int LOC_CALC_CAP;
}</pre>
<p></p>
<p>Similar to the C struct above, this class definition shows the bit-allocations of each field in the class as it would appear in the binary bit stream.</p>
<p>The next step is to provide a single routine that reads from a binary buffer into the a class instance:</p>
<pre>    public static int parseBin(byte[] buff, Object obj, int bitpos)</pre>
<p></p>
<p>The use of this routine would be simply:</p>
<pre>    TestStruct ts = new TestStruct();
    BinaryParser.parseBin(buff, ts, 0);</pre>
<p></p>
<p>How does one implement parseBin?</p>
<p>There are probably several ways to implement this &#8211; everything from<a href="http://en.wikipedia.org/wiki/Byte_Code_Engineering_Library"> byte-code </a>manipulation for extremely high-speed parsing to simple code that extracts the bits and sets the members using reflection.  I will show the much simpler way here:</p>
<pre>    public static int parseBin(byte[] buff, Object obj, int bitpos) throws IllegalArgumentException, IllegalAccessException
    {
        Class c = obj.getClass();
        byte curr=0;
        for (Field f : c.getDeclaredFields())
        {
            Annotation[] tations = f.getAnnotations();
            if ( tations.length!=1  )
                throw new RuntimeException("Class: " + c.getName() + " has the wrong number of annotations of " + tations.length + " on field: " + f.getName());

            Annotation functor = tations[0];

            if ( functor instanceof Bits )
            {
                Bits bits = (Bits)functor;
                int len = bits.len();
                long l = bit(buff, bitpos, bitpos+len-1);
                bitpos+=len;

                setValue(obj, f, l);

            }
... snip happened</pre>
<p></p>
<p>The entire routine can be found at the end of this blog, but this bit of code points out the key tricks.  We walk the field members of the class in order in which they occurr using java reflection.  As we go we are checking for the Bits annotation.  When we find the Bits annotation, we use that annotation to tell us where to get the next thing.  The order of the fields is important here just as it is in the C struct.  The bit routine does the magic of finding the bits in the buffer and converts them to a single unsigned integral value.  That value is then used to set the value of that field on that object.</p>
<p>Here&#8217;s the setValue routine [it is like the routine above in that it is not fully baked - it does compile/run for a limited]:</p>
<pre>    public static void setValue(Object o, Field f, long l) throws IllegalArgumentException, IllegalAccessException
    {
        // might add domain checks

        // order here is optimized slightly to those types most commonly encountered
        if( f.getType() == int.class )
        {
            f.setInt(o, (int)l);
        }
        else if ( f.getType() == long.class )
        {
            f.setLong(o, l);
        }
        else if( f.getType() == short.class )
        {
            if ( l&gt;0 )
                f.setBoolean(o, true);
            else
                f.setBoolean(o, false);
        }
        else if( f.getType() == byte.class )
... snip happened</pre>
<p></p>
<p>Based upon the field where the data is to land, we convert the base type here to the destination type.</p>
<p>The Bits Annotation is just a simple data hold that gets set aside in the class information for relection to use:</p>
<pre>@Target(ElementType.<strong>FIELD</strong>)
@Retention(RetentionPolicy.<strong>RUNTIME</strong>)
public @interface Bits {
    public int len();
}</pre>
<p></p>
<p>The key things to note is that this annotation is associated with a field and available at runtime.</p>
<p>That&#8217;s about it!  These ideas could certainly be extended to include reading a richer type set.  Such things as variable len field, strings of ascii or ebcdic type, etc.  Other more complex type information could be encoded in various annotation types.</p>
<p><strong>How fast is it?</strong></p>
<p>Well, this initial code here is far from optimal at 40,000 fields/sec on a Core2Duo.   There are probably many things that could be done to increase this speed.  For one, some type of preprocessing of the class&#8217;s field set and creating a series of anonymous class calls might make things faster as it would by pass all but the first set of reflection calls.</p>
<p>Cheers!<br />
Steve</p>
<p>Notes:</p>
<p>[<a name="buffer_overrun_dynamic">1</a>] In the more dynamic formats, it is possible to take advantage of buffer overruns in code on the receiving end or reading end.  Many viruses/worms spread using this technique, but for statically allocated structures this is much less likely if not impossible.  Further, newer processors and OSs eliminate this problem by taking advantage of non-executable stack segments or pages.  See<a href="http://en.wikipedia.org/wiki/Stack_buffer_overflow"> buffer overrun</a></p>
<p>[<a name="real_programmers">2</a>]Protocols such as tcp/ip relying on these techniques to minimize overhead.  Old-school office-suite file formats also use these and dynamic techniques to read and write files.  Now they are using xml, but are compelled to compress the files it takes to store a single document into a zip file.  [just try unzipping a xlsx file sometime]  I believe this was done since it give the appearance of making the file more accessible to lesser or non-programmers.  The standards [such as the ISO standards] should certainly make it more accessible by all.  Being able to view the document in it &#8220;raw&#8221; xml form in a ordinary editor is always an advantage.</p>
<p>[<a name="perl_binary_insp">3</a>]This technique is at least partially inspired by perl and C.  It just seems to be that reading data from binary data using java <strong>can </strong>and <strong>should </strong>easier to do.  It should be just as easy in java as it is in C or perl where the level of abstraction is higher, but it seems to have been a neglected subject until NIO, but I would hardly call NIO an elegant/precise way to do this same thing.  </p>
<p>Here&#8217;s the example source <a href="http://codify.flansite.com/wp-content/uploads/2009/05/walkbin.zip">code</a>.</p>
<p>The next idiom to look at is perl unpack in java&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://codify.flansite.com/2009/05/c-struct-like-parsing-of-binary-data-with-java/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Free Screencasting/Screencapture</title>
		<link>http://codify.flansite.com/2009/01/free-screencastingscreencapture/</link>
		<comments>http://codify.flansite.com/2009/01/free-screencastingscreencapture/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 02:42:58 +0000</pubDate>
		<dc:creator>flanster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[screencapture]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[screencasting]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://codify.flansite.com/?p=31</guid>
		<description><![CDATA[The Short of It
There is a great free screen capture tool called Windows Media Encoder.  It can be found here and a quick video showing how to setup one up here.
What is a Screencapture?
My definition is simple.   Capturing your computer screen and associated in-sync audio to a video file.  Recording what is happening on [...]]]></description>
			<content:encoded><![CDATA[<h5>The Short of It</h5>
<div id="attachment_75" class="wp-caption alignright" style="width: 273px"><a rel="attachment wp-att-75" href="http://codify.flansite.com/2009/01/free-screencastingscreencapture/mediaenc/" target="_blank"><img class="size-full wp-image-75      " title="mediaenc" src="http://codify.flansite.com/wp-content/uploads/2009/01/mediaenc.png" alt="Windows Media Encoder" width="263" height="267" /></a><p class="wp-caption-text">Windows Media Encoder</p></div>
<p>There is a great free screen capture tool called Windows Media Encoder.  It can be found <strong><a title="Microsoft Media Encoder" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5691ba02-e496-465a-bba9-b2f1182cdf24&amp;displaylang=en">here</a></strong> and a quick video showing how to setup one up <strong><a href="http://codify.flansite.com/wp-content/uploads/2009/01/media-encoder-screen-capture.wmv">here</a></strong>.</p>
<h5>What is a Screencapture?</h5>
<p>My definition is simple.   Capturing your computer screen and associated in-sync audio to a video file.  Recording what is happening on your screen along with your voice explaining what is seen on that screen.  Note this is not about game screen capture&#8230;</p>
<p>Screencasting is simply putting it out there for others to get it.  Some might contend that doing this &#8220;live&#8221; is screen casting &#8211; I will not argue that point.  So, if you are capturing then you are probably casting &#8211; putting it out there for others.</p>
<h5>Why Screen Cast?</h5>
<p>I think the answer should be obvious.  Have you said/heard this&#8230;.<br />
<em><br />
&#8220;A picture is worth a thousand words.&#8221;</em></p>
<p><em>&#8220;Here, it&#8217;ll be easier to just show you.&#8221;</em></p>
<p><em>&#8220;Can you say that again?&#8221;</em></p>
<p><em>&#8220;I forget how to do that.&#8221;<br />
</em><br />
If you are like me  &#8211; a geek who has to occasionally show someone else how to do something on the computer and talk them thru it &#8211; then screen capture might save you some time.  It can be much easier to create than detailed documentation that describes some steps in a GUI and it is easier to consume.  I do this sort of thing at work &#8211; teach the new comer the ropes.  I have created a series of screen casts that allows the new person to get a hands-on demonstration of how to do critical tasks without having to keep showing the same thing to them over and over again!  Another bonus is that the new person can rewind and review at their leisure.</p>
<h5>Cheap Screencasting</h5>
<p>After searching the web and looking at all these crazy little tools that claim to do this, I found one almost by accident<strong><em>.  Windows Media Encoder </em></strong>is cheap because it is free.  Just <strong><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5691ba02-e496-465a-bba9-b2f1182cdf24&amp;displaylang=en">download </a></strong>it.  It is relatively simple and reliable.  And, it creates good-looking screen/voice captures that don&#8217;t consume a lot of disk space.  There are other tools on the market that probably do a better job, but this tool can get 80 to 90 percent of that functionality without accessing the wallet.</p>
<h5>How</h5>
<p>Once you have installed Media Encoder, then you start capturing&#8230;..  This is a good place to use Media Encoder &#8211; to show how to use Media Encoder.  [Recursive, chicken or the egg, etc]  So, here is a screen cast I created for coworkers almost a year ago.  <strong>Click <a href="http://codify.flansite.com/wp-content/uploads/2009/01/media-encoder-screen-capture.wmv">here </a>to watch.</strong></p>
<h5>Some Notes:</h5>
<ul>
<li> <em> Windows only: </em>Media Encoder is a Microsoft product, so the captured files will be in a proprietary format.  You will only be able to capture windows sessions.  I&#8217;m guessing comparable tools are there for Mac and Linux.  I just don&#8217;t need them.</li>
<li> <em>Test the capture and audio setup first.</em> Always test!  You do not want to go for an hour or two only to find out the microphone was not plugged in correctly.  I always do a short capture before EACH session as I start.  I hen watch the short file I captured to make sure the sound and video are good.</li>
<li> <em>Be sure you have enough CPU-power to capture your screen. </em> The first rule here is simple.  If your machine seems unable to reliably create a good screen capture because the CPU is too weak, then simply lower the resolution of your screen or decrease the amount of screen you are trying to capture.</li>
<li> <em>Use a good microphone. </em> The one built into the laptop is probably not the best.  If the audio is good, your listener will get more out of the capture since they are not straining to hear.  If you are taking your valuable time to record something, might as well do it right!</li>
<li> <em>Spend some time preparing.</em> If I know the subject well, then I usually get bywith a outline that exists more as a check list of topics to cover.  I do not post-edit my screen captures.  This simply takes more time than I want to spend and who cares if there are few extra pauses or &#8220;ums&#8221; for something with limit distribution.  The point is to save time.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://codify.flansite.com/2009/01/free-screencastingscreencapture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://codify.flansite.com/wp-content/uploads/2009/01/media-encoder-screen-capture.wmv" length="870562" type="video/x-ms-wmv" />
		</item>
	</channel>
</rss>
