<?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>Todd Seiler</title>
	<atom:link href="http://toddseiler.com/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://toddseiler.com/wordpress</link>
	<description>Game Dev, Graphics, Physics, Software Engineering, and more!</description>
	<lastBuildDate>Wed, 04 Apr 2012 15:49:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Scrolling in vim</title>
		<link>http://toddseiler.com/wordpress/2012/04/04/scrolling-in-vim/</link>
		<comments>http://toddseiler.com/wordpress/2012/04/04/scrolling-in-vim/#comments</comments>
		<pubDate>Wed, 04 Apr 2012 15:49:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Vim Related]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=940</guid>
		<description><![CDATA[zz &#8211; centers the current line cursor is on, to the middle of the screenzt &#8211; topzb &#8211; bottom Since the space bar isn&#8217;t use in normal mode, map zz to it. This makes it easy when using &#8220;N&#8221; or &#8220;n&#8221;. Then you can quickly press space bar and it will center the found item [...]]]></description>
			<content:encoded><![CDATA[<p>zz &#8211; centers the current line cursor is on, to the middle of the screen<br />zt &#8211; top<br />zb &#8211; bottom</p>
<p>Since the space bar isn&#8217;t use in normal mode, map zz to it. This makes it easy when using &#8220;N&#8221; or &#8220;n&#8221;. Then you can quickly press space bar and it will center the found item to the center of the screen.</p>
<p>Put this into your .gvimrc file: nmap &lt;space&gt; zz</p>
<p>You could also do the following:</p>
<p>nmap n nzz<br />nmap N Nzz</p>
<p>You can also change how it scrolls by setting the amount of lines from the edge of the buffer you can go before it starts scrolling</p>
<p>:set scrolloff=1000 </p>
<p>This scrolls whenever you move the cursor, but you can set it to 10, for example, to scroll if it comes within 10 lines of the edge of the buffer.</p>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2012/04/04/scrolling-in-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Early-outs for n00bs</title>
		<link>http://toddseiler.com/wordpress/2011/11/26/early-outs-for-n00bs/</link>
		<comments>http://toddseiler.com/wordpress/2011/11/26/early-outs-for-n00bs/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 20:47:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Tips 'n Tricks]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=923</guid>
		<description><![CDATA[Sometimes I see people code something up like the following: void AwesomeFunc( void ) { if( var == 3 ) { if( var2 == 4 ) { if( var4 == "napkin" ) { if( var5 == 8495 ) { g_flag = true; } else { Debug.Log( "var5 wasn't 8495" ); } } else { Debug.Log( [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes I see people code something up like the following:</p>
<pre name="code" class="cpp">
void AwesomeFunc( void )
{
    if( var == 3 )
    {
        if( var2 == 4 )
        {
            if( var4 == "napkin" )
            {
                if( var5 == 8495 )
                {
                    g_flag = true;
                }
                else
                {
                    Debug.Log( "var5 wasn't 8495" );
                }
            }
            else
            {
                Debug.Log( "var4 was not napkin" );
            }
        }
        else
        {
            Debug.Log( "var2 wasn't 4" );
        }
    }
    else
    {
        Debug.Log( "var wasn't 3" );
    }
}
</pre>
<p><span id="more-923"></span></p>
<p>This situation has numerous problems.</p>
<ol>
<li>It&#8217;s difficult to read.</li>
<li>The cohesion is terrible. If you trace a debug log to one of the debug statements, it is no where near the failure. So you have to sloppily figure out which if failed.</li>
<li>It can get complicated.</li>
</ol>
<p>At first it may seem that you can just pull all of the if statements together like this:</p>
<pre name="code" class="cpp">
void AwesomeFunc( int var, int var2, string var4, int var5 )
{
    if( var == 3 &#038;&#038;
        var2 == 4 &#038;&#038;
        var4 == "napkin" &#038;&#038;
        var5 == 8495 )
    {
        g_flag = true;
    }
    else
    {
        Debug.Log( "Problem. I do not know what the problem is though." );
    }
}
</pre>
<p>It&#8217;s pretty clear what the problem is. We simplified the statement, but we lost all our debugging information.<br />
If one of the ANDed statements fails, we still have to check which one in the &#8220;else&#8221; clause.</p>
<p>Enter &#8220;Early-out&#8221;. The concept of an early-out is simple. Just check for negative conditions instead of positive ones.</p>
<ol>
<li>It keeps the errors together with the failure check.</li>
<li>It makes the code easier to read</li>
<li>Its easy to tell if you forgot something</li>
<li>Use this method to check input arguments passed to the function</li>
</ol>
<p>It&#8217;s simply a matter of reorganizing the code.</p>
<pre name="code" class="cpp">
void AwesomeFunc( int var, int var2, string var4, int var5 )
{
    // Check parameter 1
    if( var != 3 )
    {
        Debug.Log( "var wasn't 3" );
        return;
    }

    // Check parameter 2
    if( var2 != 4 )
    {
        Debug.Log( "var2 wasn't 4" );
        return;
    }

    // Check parameter 3
    if( var4 != "napkin" )
    {
        Debug.Log( "var4 was not napkin" );
        return;
    }

    // Check parameter 4
    if( var5 != 8495 )
    {
        Debug.Log( "var5 wasn't 8495" );
        return;
    }

    // If we got this far, we're golden...
    g_flag = true;
}
</pre>
<p>So all we did was reorganize the code, got rid of the &#8220;elses,&#8221; and changed the boolean logic to != instead of == on all if statements. This is a good way to make sure you&#8217;re testing all of your parameters for valid input before you actually execute any code&#8230; They&#8217;re called early-outs because they attempt to exit out of the function as early as possible. This avoids any unnecessary processing (that&#8217;s the theory any ways.)</p>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2011/11/26/early-outs-for-n00bs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing at Microsoft</title>
		<link>http://toddseiler.com/wordpress/2011/11/26/testing-at-microsoft/</link>
		<comments>http://toddseiler.com/wordpress/2011/11/26/testing-at-microsoft/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 19:30:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[unit test]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=918</guid>
		<description><![CDATA[I was a contract employee at Microsoft, an SDET I. While I was there I learned quite a lot about testing, and I really believe it made me a much better programmer. Although my time there was short lived, I managed to retain some of my testing knowledge, and I hope to share that with [...]]]></description>
			<content:encoded><![CDATA[<p>I was a contract employee at Microsoft, an SDET I. While I was there I learned quite a lot about testing, and I really believe it made me a much better programmer. Although my time there was short lived, I managed to retain some of my testing knowledge, and I hope to share that with you now. So I&#8217;ll quickly and briefly cover the basics of testing. I&#8217;m not talking about unit testing either. I&#8217;ll break down the types of tests you have into different categories. There may be more.</p>
<ul>
<li><strong>BVT (Base verification tests)</strong></li>
<li>&#8211;Positive test cases</li>
<li><strong>FVT (Functional verification tests)</strong></li>
<li>&#8211;Positive Test Cases (Tester tests for expected failures )</li>
<li>&#8211;Negative Test Cases (We catch unexpected failures during testing (hopefully) )</li>
</ul>
<p><span id="more-918"></span><br />
<strong>BVT (Base Verification Tests)</strong><br />
These are the basic tests performed to show that the operation is basically working. Sometimes you just want to run the BVT tests because they&#8217;re faster and shorter. Example:</p>
<pre name="code" class="cpp">
// Function to be tested
float Calc( float a, float b, float c )
{
    return a * b / c;
}

// The actual BVT
void RunTestCalculateDataBVT( void )
{
    TEST( Calc(2.0f, 2.0f, 1.0f), 4.0f );
}
</pre>
<p>It is short and to the point. TEST is a simple macro that checks if the return value of the function is equal to the second parameter. It checks to see if 2*2/1 == 5. Nothing more. It is fast, but it doesn&#8217;t check everything. This test is also called a positive test case. A positive test case consists of passing in valid data, and expecting to get a valid result.</p>
<p><strong>FVT (Functional Verification Tests)</strong><br />
The FVTs are a much more in depth testing stage. It consists of a much more thorough testing of the functions, in both quantity, and quality. FVTs consists of the BVT tests as well. So they may be duplicated, but this isn&#8217;t necessary. In some cases, the FVTs consists of modifications to the BVTs.<br />
From the example above:</p>
<pre name="code" class="cpp">
// The actual FVT
void RunTestCalculateFVT( void )
{
    // Positive test cases
    TEST( Calc( 2.0f, 2.0f, 1.0f ), 4.0f );
    TEST( Calc( 0.0f, 0.0f, 1.0f ), 0.0f );
    TEST( Calc( 1.0f, -1.0f, 1.0f ), -1.0f );
    // …..
    // More positive test cases to show that it works.

    // Negative test cases
    TEST_THROW( Calc( INF, INF, 1.0f ), EXCEPTION_OVERFLOW );
    TEST_THROW( Calc( 1.0f, 1.0f, 0.0f ), EXCEPTION_DIV_BY_ZERO );
    TEST_THROW( Calc( INF, INF, INF ), EXCEPTION_NAN );
    // More negative test cases.
}
</pre>
<p>As you can see, we now have a lot more test cases and they&#8217;re broken up into positive and negative test cases. We may want then to be in separate functions too, but I didn&#8217;t do that here. Our positive test cases have a lot more cases and are simple modifications to the BVT.</p>
<p>The FVT also consists of our negative cases, where, if the function fails, (gives an invalid result the user can&#8217;t use) it needs to fail in an expected and deterministic way. Under no circumstances should it crash. When it crashes, this is an “unexpected failure,” and is usually caught very soon, since your tests will also crash. This is the most common unexpected failure. I can&#8217;t really think of any other right now.</p>
<p>Also, all of the negative test cases will fail in this scenario because nothing in the function is being thrown. And our tests are expecting it to throw the correct exceptions. When testing, it&#8217;s important to test common boundary values. In the example above, good things to test are 0, -1, 1, INF, -INF, NaNs, and other such things. When writing code, it&#8217;s important to check for the same boundary conditions immediately at the top of the function.</p>
<p>One final note before I leave. These are NOT unit tests. Unit tests sometimes overlap the BVTs, but they are written by the developer who wrote the code (in this case the Calc function). So they are not written by the tester (or SDET).</p>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2011/11/26/testing-at-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Const qualifier reminder</title>
		<link>http://toddseiler.com/wordpress/2011/11/07/const-qualifier-reminder/</link>
		<comments>http://toddseiler.com/wordpress/2011/11/07/const-qualifier-reminder/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 18:44:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Tips 'n Tricks]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=910</guid>
		<description><![CDATA[Just a reminder how const-ness works. If I remember correctly. // These two lines are the same type // const and int can be switched around and the result is the same. const int i; int const j; // If the word "const" follows the "*", it affects the pointer int* const k; // Both [...]]]></description>
			<content:encoded><![CDATA[<p>Just a reminder how const-ness works. If I remember correctly.</p>
<pre name="code" class="cpp">
// These two lines are the same type
// const and int can be switched around and the result is the same.
const int i;
int const j;

// If the word "const" follows the "*", it affects the pointer
int* const k;

// Both the pointer and the int are const
const int* const m;

// Same as line above, it just looks weird
int const * const n;

// Does the const affect the pointer or the int? The int..
int const * p;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2011/11/07/const-qualifier-reminder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spiced Apple Smoothie</title>
		<link>http://toddseiler.com/wordpress/2011/08/28/spiced-apple-smoothie/</link>
		<comments>http://toddseiler.com/wordpress/2011/08/28/spiced-apple-smoothie/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 23:55:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Food Recipes]]></category>
		<category><![CDATA[Food]]></category>
		<category><![CDATA[recipies]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=906</guid>
		<description><![CDATA[2 apples peeled &#38; chopped 2 banannas 2 cups of ice 3/4 cup apple juice 6 oz. of vanilla yogurt 3 tbsp brown sugar 1-2 tsp of cinnamon Blend all together in blender For garnish, add whipped cream, cinnamon, &#38; an apple slice.]]></description>
			<content:encoded><![CDATA[<p>2 apples peeled &amp; chopped<br />
2 banannas<br />
2 cups of ice<br />
3/4 cup apple juice<br />
6 oz. of vanilla yogurt<br />
3 tbsp brown sugar<br />
1-2 tsp of cinnamon<br />
Blend all together in blender<br />
For garnish, add whipped cream, cinnamon, &amp; an apple slice.</p>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2011/08/28/spiced-apple-smoothie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Math trickery for 1D &amp; 2D arrays</title>
		<link>http://toddseiler.com/wordpress/2011/08/14/math-trickery-for-1d-2d-arrays/</link>
		<comments>http://toddseiler.com/wordpress/2011/08/14/math-trickery-for-1d-2d-arrays/#comments</comments>
		<pubDate>Sun, 14 Aug 2011 20:43:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=883</guid>
		<description><![CDATA[Once upon a time, there was a language that didn&#8217;t have 2 dimensional arrays. This greatly upset the programmer. Fortunately, the programmer was swift in the art of arithmetic and overcame this obstacle easily. Lets say for example, we only have access to a 1 dimensional array data structure and it has 50 elements in [...]]]></description>
			<content:encoded><![CDATA[<p>Once upon a time, there was a language that didn&#8217;t have 2 dimensional arrays. This greatly upset the programmer. Fortunately, the programmer was swift in the art of arithmetic and overcame this obstacle easily.</p>
<p>Lets say for example, we only have access to a 1 dimensional array data structure and it has 50 elements in it.</p>
<pre name="code" class="cpp">int data[50];</pre>
<p>Lets break this array up into 10 rows and 5 columns to make a grid. So how do we get access to a position say data[4][3]?<br />
There are two things I&#8217;m going to teach you now:<br />
1) Retrieve the column &amp; row numbers from a linear index counter.<br />
2) Retrieve the index from a row &amp; column numbers.</p>
<p><span id="more-883"></span>Before I continue, i want you to notice that the row and column numbers are zero based. So they start at zero, not one.</p>
<p>Lets do #1 first:</p>
<pre name="code" class="cpp">unsigned int index = 6;
unsigned int numRows = 10;
unsigned int numCols = 5;

int row = index / numRows;
int col = index % numCols;</pre>
<p>Here, &#8220;col&#8221; and &#8220;row&#8221; will contain the column and row number for index #6 in the linear array.</p>
<p>Here, we are taking advantage of dividing up a long linear array up into sections (rows), hence the division operator. So we have 10 rows / sections. We get a particular one by using the formula index / numRows.</p>
<p>If we were to loop through the linear array (0-50), moding (%) each number with some maximum number (say 5), we would obtain a series of numbers that went like the following: 0,1,2,3,4,0,1,2,3,4,0,1,2,3,4&#8230; (index % numCols). Notice how it repeats between 0 &amp; numCols &#8211; 1? Where numCols is 5 in this case. Where index goes through 0 &#8211; 50, our column repeats from 0 &#8211; 4. Nifty huh? This works because the mod operator returns the remainder of a division (4 % 2 = 0 because there is no remainder).</p>
<p>As a side note: col could also be written like such: col = index &#8211; numRows * row. See below for why.</p>
<p>Now lets do #2:</p>
<pre name="code" class="cpp">unsigned int row = 4;
unsigned int col = 3;
unsigned int numRows = 10;

data[ numOfRows * row + col ];</pre>
<p>This is a pretty simple idea. We basically took the formula from #1 above and rearranged it. (row = index/numRows). Here we are also using col as an offset into the row. So we just add it on.</p>
<p>If you take index = numOfRows * row + col, you can solve for col, since we already solved for row. Hence the formula in #1&#8242;s side note: col = index &#8211; numRows * row</p>
<p>Example program:</p>
<pre name="code" class="cpp">#include "stdafx.h"
#include &lt;iostream&gt;
using namespace std;

const int LENGTH = 9;
int data[LENGTH] = {0};
int numOfRows = 3;
int numOfCols = 3;

int _tmain(int argc, _TCHAR* argv[])
{
	for( unsigned i = 0; i &lt; LENGTH; ++i )
		data[i] = i;

	for( unsigned row = 0; row &lt; numOfRows; ++row )
		for( unsigned col = 0; col &lt; numOfCols; ++col )
			cout &lt;&lt; data[ numOfRows * row + col ] &lt;&lt; endl;

	// Get the column or row from a linear index
	unsigned indexNum = 4;
	int row2 = indexNum/numOfRows;
	int col2 = indexNum%numOfCols;
	cout &lt;&lt; "row: " &lt;&lt; row2 &lt;&lt; endl;
	cout &lt;&lt; "col: " &lt;&lt; col2 &lt;&lt; endl;

	// Get the index from a column &amp; row
	int row = 1;
	int col = 1;
	cout &lt;&lt; data[ numOfRows * row + col ] &lt;&lt; endl;

	return 0;
}</pre>
<p>The output for this program is:</p>
<pre name="code" class="cpp">0
1
2
3
4
5
6
7
8
row: 1
col: 1
4</pre>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2011/08/14/math-trickery-for-1d-2d-arrays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick vim tip</title>
		<link>http://toddseiler.com/wordpress/2011/07/06/quick-vim-tip/</link>
		<comments>http://toddseiler.com/wordpress/2011/07/06/quick-vim-tip/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 20:04:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Tips 'n Tricks]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=881</guid>
		<description><![CDATA[I&#8217;ve always used the &#8220;w&#8221; key to go forward a word when highlighting stuff. There&#8217;s a problem with this though when you want to just copy a single word. Lets say you have the sentence &#8220;you are a car.&#8221; Let&#8217;s also assume you have placed your cursor on the letter &#8220;a&#8221; in &#8220;are.&#8221; And we [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always used the &#8220;w&#8221; key to go forward a word when highlighting stuff. There&#8217;s a problem with this though when you want to just copy a single word.</p>
<p>Lets say you have the sentence &#8220;you are a car.&#8221; Let&#8217;s also assume you have placed your cursor on the letter &#8220;a&#8221; in &#8220;are.&#8221;</p>
<p>And we want to highlight the word &#8220;are.&#8221; So we press &#8220;vw&#8221;. When you press the letter &#8220;w&#8221;, it highlights the following: &#8220;are a&#8221;. Note that it includes a space and the letter a.</p>
<p>So the letter &#8220;w&#8221; is the wrong key to use, so what is the key to go to the end of the word instead?</p>
<p>It&#8217;s the letter: e</p>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2011/07/06/quick-vim-tip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Books I&#8217;ve read in 2011</title>
		<link>http://toddseiler.com/wordpress/2011/07/06/books-ive-read-in-2011/</link>
		<comments>http://toddseiler.com/wordpress/2011/07/06/books-ive-read-in-2011/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 01:56:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Books I've read]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=874</guid>
		<description><![CDATA[1) 4/5 Who wants to be a millionaire? (978-1883589875) This book was a pretty good book for what it is. It&#8217;s a very small book, so you really can&#8217;t expect much. It&#8217;s catered towards teenagers in school and you can read it in about a day. The contents are about how to save up for [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1) 4/5 Who wants to be a millionaire? (978-1883589875)</strong></p>
<p>This book was a pretty good book for what it is. It&#8217;s a very small book, so you really can&#8217;t expect much. It&#8217;s catered towards teenagers in school and you can read it in about a day. The contents are about how to save up for retirement, basically. If you do it soon enough, and correctly, you can have about a million dollars or more. The critical ideas are: mutual funds, 401Ks, roth IRAs, and insurance.  I recommend it if you don&#8217;t know anything about finances or about where to put your money. Even if you don&#8217;t have any money, you can still save up, but the key is to do it early enough (when you&#8217;re young).</p>
<p><strong>2) 3/5 The Complete Idiot&#8217;s Guide to String Theory (978-1592577026)</strong></p>
<p>Amazingly, there aren&#8217;t any equations. There are good and bad parts and I get lots quite often. Mainly when he says &#8220;The blank-blank theory says this&#8221;&#8230; But doesn&#8217;t leave any references to say why, because I don&#8217;t know where he gets quite a few of his statements. Th<span style="font-family: mceinline;">e author is probably correct, because I don&#8217;t know any better. On a good note, the appendix has a wealth of really good links and info if you want more info. Overall, so far, it&#8217;s ok. But there&#8217;s got to be a book that explains it better. It does make some things clearer though, but I guess it&#8217;s just piecing things together piece by piece, but you will probably need other resources to complete the picture. This book just feels like a bunch of random physics statements thrown together.</span></p>
<p><strong>3) IN PROGRESS 5/5 The Holy Bible</strong></p>
<p>I won&#8217;t be reading all of it, but I will be reading all of the main narrative books that go through the main story. So far, the story is very unique and inspiring. You can&#8217;t really attempt to understand it by yourself unless you&#8217;re a history buff and know what was going on in the time period. Also knowing which books were written in which time period is very helpful as well. Who was in world power, where the old nations were located, etc. I have quite a few resources and help to figure things out, so if a regular person picked up the bible and started reading it, they&#8217;d most likely miss a good portion of the important things that require an understanding of real history. This will always be &#8220;in progress.&#8221;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2011/07/06/books-ive-read-in-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vim tip 34534</title>
		<link>http://toddseiler.com/wordpress/2011/05/23/vim-tip-34534/</link>
		<comments>http://toddseiler.com/wordpress/2011/05/23/vim-tip-34534/#comments</comments>
		<pubDate>Mon, 23 May 2011 14:47:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Vim Related]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=872</guid>
		<description><![CDATA[I&#8217;ve been looking for a way to delete up to a character, but not including the character from within vim, and I finally figured out how to do it. Lets say you have something like this: big_huge_array_with_a_big_long_name[ indexThingy ] = 5; If the cursor is at the beginning of the line, and we want to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been looking for a way to delete up to a character, but not including the character from within vim, and I finally figured out how to do it.<br /> Lets say you have something like this:</p>
<pre class="cpp">big_huge_array_with_a_big_long_name[ indexThingy ] = 5;
</pre>
<p>If the cursor is at the beginning of the line, and we want to change the name of the array completely, we could type this:</p>
<pre class="cpp">df[
</pre>
<p>This will delete all the way to the bracket. Unfortunately, it deletes the bracket.<br /> So instead, this works nicely to NOT remove the character you type:</p>
<pre class="cpp">dt[
</pre>
<p>This will delete every character up until the bracket, but leave the bracket. How nice.<br /> So what does this &#8220;t&#8221; movement key do exactly?<br /> It simply moves the cursor to the character right before the one specified, and it stays in &#8220;normal&#8221; mode.<br /> If you wanted to immediately type after deleting the characters, you would use the following:</p>
<pre class="cpp">ct[
</pre>
<p>Which will delete the text, leave the &#8220;[&#8221; character, but change to insert mode right before the &#8220;[&#8221; character.</p>
<p>Another thing you can do is type:</p>
<p>de</p>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2011/05/23/vim-tip-34534/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monthly vim tips</title>
		<link>http://toddseiler.com/wordpress/2011/05/17/monthly-vim-tips/</link>
		<comments>http://toddseiler.com/wordpress/2011/05/17/monthly-vim-tips/#comments</comments>
		<pubDate>Tue, 17 May 2011 18:45:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Vim Related]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://toddseiler.com/wordpress/?p=860</guid>
		<description><![CDATA[If you want to search for the word right where your cursor is, you can do the following: /Ctrl-r Ctrl-w If you want to maximize your vertical or horizontal buffer splits, type one of the following: Ctrl-w&#124; Ctrl-w_ If you want to equally resize all of your buffers, type the following: Ctrl-w= To make a [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to search for the word right where your cursor is, you can do the following:</p>
<pre name="code" class="cpp">
/Ctrl-r Ctrl-w
</pre>
<p>If you want to maximize your vertical or horizontal buffer splits, type one of the following:</p>
<pre name="code" class="cpp">
Ctrl-w|
Ctrl-w_
</pre>
<p>If you want to equally resize all of your buffers, type the following:</p>
<pre name="code" class="cpp">
Ctrl-w=
</pre>
<p>To make a vertical split a horizontal one, or visa versa, type the following:</p>
<pre name="code" class="cpp">
Ctrl-w H
Ctrl-w K
</pre>
<p>To center the cursor on your screen, press:</p>
<pre name="code" class="cpp">
zz
</pre>
<p>To bring up the build in &#8220;file explorer&#8221; window, type one of the following:</p>
<pre name="code" class="cpp">
:E
:Ex
:n .
</pre>
]]></content:encoded>
			<wfw:commentRss>http://toddseiler.com/wordpress/2011/05/17/monthly-vim-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

