<?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>Ryan Day</title>
	<atom:link href="http://www.ryanday.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.ryanday.net</link>
	<description>Trying to Program</description>
	<lastBuildDate>Wed, 08 Sep 2010 20:52:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>ARM programming &#8211; Part&#160;1</title>
		<link>http://www.ryanday.net/?p=350</link>
		<comments>http://www.ryanday.net/?p=350#comments</comments>
		<pubDate>Wed, 08 Sep 2010 20:52:56 +0000</pubDate>
		<dc:creator>Ryan Day</dc:creator>
				<category><![CDATA[arm]]></category>

		<guid isPermaLink="false">http://www.ryanday.net/?p=350</guid>
		<description><![CDATA[After the influence of a recent work project, I&#8217;ve been really into the ARM processor. I don&#8217;t know much at all about it and want to learn a lot more. So to start, I&#8217;m brining back Peenix under the ARM processor. Honestly, I think this is a lot easier then working with the x86. To [...]]]></description>
			<content:encoded><![CDATA[<p>After the influence of a recent work project, I&#8217;ve been really into the ARM processor.  I don&#8217;t know much at all about it and want to learn a lot more.  So to start, I&#8217;m brining back Peenix under the ARM processor.  Honestly, I think this is a lot easier then working with the x86.</p>
<p>To get started, my environment is QEMU using the versatilepb model.  I used a couple <a href="http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/">blog posts</a> from Balau, who is great and you must go through his stuff to get setup. He uses the CodeSourcery toolchain, so I do as well. I&#8217;d also recommend setting up Linux under ARM to get a feel for QEMU and what is going on.  I begin this <strong>after</strong> <a href="http://balau82.wordpress.com/">Balau</a> leaves off. He has already written the setup instructions better then I could.</p>
<p>So to start, the goal is to setup a very small multitasking OS (peenix) using the ARM processor(peenix &#8211; the ARM).  After much reading, step one is to setup the Vectored Interrupt Table.<br />
<strong>Step 1</strong><br />
read the <a href="http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0273d/Babehiha.html">ARM PL192 Manual</a><br />
The Vectored Interrupt Table is typically located in memory at 0&#215;0. The table contains instructions that branch to handler functions. The CPU will execute the proper instruction when an interrupt is received.</p>
<ol>
<li>0&#215;0 &#8211; Reset</li>
<li>0&#215;4 &#8211; Undefined Instruction</li>
<li>0&#215;8 &#8211; SoftWare Interrupt (SWI instruction)</li>
<li>0xc &#8211; Prefetch Abort</li>
<li>0&#215;10 &#8211; Data Abort</li>
<li>0&#215;14 &#8211; Reserved</li>
<li>0&#215;18 &#8211; IRQ</li>
<li>0x1c &#8211; FIQ</li>
</ol>
<p>When the system gets the Reset interrupt, the instruction at 0&#215;0 is run. When the system gets the SWI instruction, the instruction at 0&#215;8 is run, etc. Here is the startup code that I have for the first few interrupts<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="ASM"><div class="devcodeoverflow"><ol><li><span style="color: #339933;">.</span>section INTERRUPT_VECTOR<span style="color: #339933;">,</span> <span style="color: #7f007f;">&quot;x&quot;</span></li><li><span style="color: #339933;">.</span>global _Reset</li><li>_Reset<span style="color: #339933;">:</span></li><li> B Reset_Handler</li><li> B <span style="color: #339933;">.</span></li><li> B SWI_Handler</li><li> B <span style="color: #339933;">.</span></li><li> B <span style="color: #339933;">.</span></li><li> B <span style="color: #339933;">.</span></li><li> B <span style="color: #339933;">.</span></li><li> B <span style="color: #339933;">.</span></li><li>&nbsp;</li><li>Reset_Handler<span style="color: #339933;">:</span></li><li> LDR <span style="color: #00007f;">sp</span><span style="color: #339933;">,</span> =stack_top</li><li> <span style="color: #00007f;">BL</span> c_entry</li><li> B <span style="color: #339933;">.</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>The first thing that happens on load is _Reset is called. Then we branch to Reset_Handler, which sets up the stack and calls our entry point. This will work because of our linker script, but the table isn&#8217;t located at 0&#215;0 yet! When we load with QEMU, our code is located at 0&#215;00010000.  When we get an exception, the processor is not going to know where our table is.  We have to move it.</p>
<p>I do this by reading each branch instruction from our table, increasing the offset, and writing that instruction the new table&#8217;s location (at 0&#215;0+offset).<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="C"><div class="devcodeoverflow"><ol><li><span style="color: #993333;">void</span> vic_remap<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></li><li><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span><span style="color: #339933;">*</span> vit <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #208080;">0x010000</span><span style="color: #339933;">;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">// Code start</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span><span style="color: #339933;">*</span> new <span style="color: #339933;">=</span> <span style="color: #208080;">0x0</span><span style="color: #339933;">;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #666666; font-style: italic;">// Destination</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> instruct<span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #993333;">int</span> q<span style="color: #339933;">;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; font-style: italic;">/* Increase the B offset to reach our table at 0x010000 */</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>q<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>q<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">8</span><span style="color: #339933;">;</span>q<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instruct <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>vit<span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instruct <span style="color: #339933;">+=</span> <span style="color: #208080;">0x4000</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #339933;">*</span>new <span style="color: #339933;">=</span> instruct<span style="color: #339933;">;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vit<span style="color: #339933;">++;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new<span style="color: #339933;">++;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #009900;">&#125;</span></li><li><span style="color: #009900;">&#125;</span></li><li>&nbsp;</li><li><span style="color: #666666; font-style: italic;">// c_entry is called on startup</span></li><li><span style="color: #993333;">void</span> c_entry<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></li><li> vic_remap<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li><li></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>Now if you startup QEMU and use GDB, you can see that the table has been moved to the proper location.</p>
<p>Lets try to do something useful with this.  We&#8217;ll catch SWI instructions. Let&#8217;s create a simple SWI handler.  When the SWI is fetched and decoded, the processor will branch to memory address 0&#215;08.  Since we moved our table, 0&#215;8 contains a branch instruction to the SWI_Handler function.  Lets create that function now:</p>
<p><!--DEVFMTCODE--><pre class="devcodeblock" title="C"><div class="devcodeoverflow"><ol><li><span style="color: #993333;">void</span> __attribute__<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>interrupt<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SWI&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> SWI_Handler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></li><li><span style="color: #009900;">&#123;</span></li><li>&nbsp;&nbsp; <span style="color: #993333;">volatile</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> r0<span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; <span style="color: #993333;">volatile</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> stackp<span style="color: #339933;">;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp; <span style="color: #808080; font-style: italic;">/* The SWI interrupt number will be part of the instruction.</span></li><li><span style="color: #808080; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LR points to the instruction after SWI, so load we load</span></li><li><span style="color: #808080; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the instruction right before LR, then mask out the SWI</span></li><li><span style="color: #808080; font-style: italic;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leaving us with the number */</span></li><li>&nbsp;&nbsp; asm<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;LDR r0, [lr, #-4]&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; asm<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;BIC r0, #0xFF000000&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; asm<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;MOV %0, r0&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;=r&quot;</span><span style="color: #009900;">&#40;</span>r0<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; asm<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;MOV %0, sp&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;=r&quot;</span><span style="color: #009900;">&#40;</span>stackp<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;</li><li>&nbsp;&nbsp; <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;SWI %x<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> r0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li>&nbsp;&nbsp; <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Stack: %x<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> stackp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></li><li><span style="color: #009900;">&#125;</span></li></ol></div></pre><!--END_DEVFMTCODE--></p>
<p>By adding a small bit of code to c_entry() we can call this function using SWI 0xab, and get that 0xAB call number.</p>
<p>This becomes important later on when we need to change processor modes.  With the current demonstration we are always running in SVC mode.  In part 2 we will change to USER mode.  This means that we have to generate an exception (swi, interrupt, etc) in order to get back into SVC mode.</p>
<p>Relevant Links<br />
<a href="http://www.13thmonkey.org/documentation/ARM/HAI.pdf">http://www.13thmonkey.org/documentation/ARM/HAI.pdf</a><br />
<a href="http://git.savannah.gnu.org/cgit/qemu.git/tree/hw/versatilepb.c">http://git.savannah.gnu.org/cgit/qemu.git/tree/hw/versatilepb.c</a><br />
<a href="http://www.heyrick.co.uk/assembler/swi.html">http://www.heyrick.co.uk/assembler/swi.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanday.net/?feed=rss2&amp;p=350</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dvorak &#8211; Part&#160;fail</title>
		<link>http://www.ryanday.net/?p=346</link>
		<comments>http://www.ryanday.net/?p=346#comments</comments>
		<pubDate>Fri, 03 Sep 2010 12:15:48 +0000</pubDate>
		<dc:creator>Ryan Day</dc:creator>
				<category><![CDATA[dvorak]]></category>

		<guid isPermaLink="false">http://www.ryanday.net/?p=346</guid>
		<description><![CDATA[Well, this is sad. I tried for a few days. The key placement is logical; it is nice to know that vowels are always on the left hand. I also notice that when I type, most of the time keys mirror each other between my hands(o,n,s,a), I don&#8217;t know if that was just me or [...]]]></description>
			<content:encoded><![CDATA[<p>Well, this is sad. I tried for a few days. The key placement is logical; it is nice to know that vowels are always on the left hand. I also notice that when I type, most of the time keys mirror each other between my hands(o,n,s,a), I don&#8217;t know if that was just me or not, but I felt that a good bit of the time I was using the same fingers in sequential order.</p>
<p>But I am just too slow to justify using it at work.  When I&#8217;m home I am just too uninterested in letting a new keyboard layout get in the way of the work I&#8217;m trying to accomplish. I had mentioned before that its not the layout, its the muscle memory that I have to relearn. I usually end up damaging code in VI because I just happen to not think for a second and hit all the wrong keys, then I have to go back and I end up taking twice as long to edit some function.</p>
<p>Trying to do anything sys admin related is horrendous. I got some perspective though, I now know what it must feel like for Windows people to have to use the keyboard. I really take for granted that I just grok Linux and can do things very quickly from the keyboard. Well, try changing the location of all your keys. You slooooow down.  All of a sudden what used to be a simple thing becomes work that I&#8217;d rather not do.  Try to bang out a quick database query in SQL?  Hell no.</p>
<p>So I have to admit failure with dvorak. It was neat, and I had hoped for good things. Maybe when things are slower I&#8217;ll have more time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanday.net/?feed=rss2&amp;p=346</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dvorak &#8211; Part&#160;Two</title>
		<link>http://www.ryanday.net/?p=340</link>
		<comments>http://www.ryanday.net/?p=340#comments</comments>
		<pubDate>Mon, 30 Aug 2010 16:56:08 +0000</pubDate>
		<dc:creator>Ryan Day</dc:creator>
				<category><![CDATA[dvorak]]></category>

		<guid isPermaLink="false">http://www.ryanday.net/?p=340</guid>
		<description><![CDATA[Ohhh does this suck. Its not so much the layout that gets me as it is the unix commands that are pure muscle memory. I am struggling to relearn everything. VI is a constant hurdle, all the small unix commands, ls, ps, god forbid I try to use a series of pipes. My usual IM [...]]]></description>
			<content:encoded><![CDATA[<p>Ohhh does this suck.  Its not so much the layout that gets me as it is the unix commands that are pure muscle memory.  I am struggling to relearn everything. VI is a constant hurdle, all the small unix commands, ls, ps, god forbid I try to use a series of pipes.  My usual IM responses are slow and useless.  Like I had mentioned yesterday, I have to overcome almost two decades of typing to do this quickly.  Maybe this is like a new language; the drunker I am, the less inhibited I&#8217;ll be, the better I will do.</p>
<p>I&#8217;m reminded of  my quick <a href="http://www.ryanday.net/?p=288">productivity rant</a> about how having to learn all these little tricks to increase speed just dont cut it.  Even if I get better with dvorak then qwerty, how much will it really help?  Im going to keep trying though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanday.net/?feed=rss2&amp;p=340</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dvorak &#8211; Part&#160;One</title>
		<link>http://www.ryanday.net/?p=336</link>
		<comments>http://www.ryanday.net/?p=336#comments</comments>
		<pubDate>Sun, 29 Aug 2010 14:17:44 +0000</pubDate>
		<dc:creator>Ryan Day</dc:creator>
				<category><![CDATA[dvorak]]></category>

		<guid isPermaLink="false">http://www.ryanday.net/?p=336</guid>
		<description><![CDATA[I went to the five and below the other day and found a keyboard for five dollars. I decided this would be as good a time as any to learn the dvorak layout, I replaced all the keys to fit the dvorak layout and went to http://www.powertyping.com/dvorak/typing.html and was pretty suprised how quick it is [...]]]></description>
			<content:encoded><![CDATA[<p>I went to the five and below the other day and found a keyboard for five dollars. I decided this would be as good a time as any to learn the dvorak layout,  I replaced all the keys to fit the dvorak layout and went to http://www.powertyping.com/dvorak/typing.html and was pretty suprised how quick it is to pick up.  I&#8217;m actually typing with it now.  The hardest part, I think, are the Ctrl+ keys. Its so ingrained that I still make a lot of mistakes.  Also I never really learned to type with Qwerty.  I only use a few fingers.  Its just that after 20 years I don&#8217;t need to look at the keyboard to know where the keys are.  So learning the proper way to type is a change as well.</p>
<p>Anyways, tomorrow I go to work and try it out there.  So we shall see how low my productivity is.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanday.net/?feed=rss2&amp;p=336</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Q64 (wmp100) error&#160;codes</title>
		<link>http://www.ryanday.net/?p=297</link>
		<comments>http://www.ryanday.net/?p=297#comments</comments>
		<pubDate>Fri, 13 Aug 2010 17:42:54 +0000</pubDate>
		<dc:creator>Ryan Day</dc:creator>
				<category><![CDATA[Q64]]></category>

		<guid isPermaLink="false">http://www.ryanday.net/?p=297</guid>
		<description><![CDATA[Over the past few months I&#8217;ve had a lot of experience with the Sierra Wireless q64 wireless cpu. Most of my early problems had to do with memory access, and not understanding the undocumented error codes. I was always being hit with this error: Watch dog error: Tsk {29,31,32,35,36} From what I&#8217;ve seen this has [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few months I&#8217;ve had a lot of experience with the Sierra Wireless q64 wireless cpu.  Most of my early problems had to do with memory access, and not understanding the undocumented error codes. I was always being hit with this error:</p>
<p><strong>Watch dog error: Tsk {29,31,32,35,36}</strong></p>
<p>From what I&#8217;ve seen this has nothing to do with the Watchdog. Certainly not the application Watchdog, and I am able to generate these errors without executing any tasks that take long enough to trip the firmware watchdog. I will assume that there is a double secret memory watchdog that I haven&#8217;t seen documented anywhere, and this is the watchdog reporting these errors.</p>
<ul>
<li><strong>Tsk 30/31</strong> &#8211; Memory read/write errors. I can not reliably reproduce these, but if you have heap overflows and release memory you tend to get these errors.  Also if you try to read/write from a bad address you get these errors, but again, not reliably.</li>
<li><strong>Tsk 35</strong> &#8211; I was able to reproduce this error by sending too many messages to a task with the adl_msgSend() function. I was getting events that would cause my code to send a message faster then I was processing those messages.  I would reboot with Tsk 35 quite frequently. After I refactored the code and removed that messages part, I haven&#8217;t seen this error.</li>
<li><strong>Tsk 38</strong> &#8211; I got this error a lot when my reserved stack space was above 64k.  If you go just a little above, probably not an issue. But I was way over, and would reboot with this error frequently.  If you do see this, adl_memGetInfo to see how much stack you are reserving. <strong>Note:</strong> If you get RTK 190 errors, you probably aren&#8217;t reserving enough stack space. Although I haven&#8217;t seen RTK 190 documented anywhere, its pretty easy to test, and I can reliably reproduce it.</li>
</ul>
<p>
I have seen every error from Tsk 29 to Tsk 38.  I can&#8217;t reproduce many of them reliably, which probably indicates that multitasking memory problems are the cause.  Not necessarily the Q64 firmware being the problem, its usually something I can fix in my code without having to refactor much, but it would be nice to know what actually happened last time I rebooted.  I&#8217;ll keep updating the list as I am able to narrow down the causes of additional errors.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanday.net/?feed=rss2&amp;p=297</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>You are not that&#160;productive</title>
		<link>http://www.ryanday.net/?p=288</link>
		<comments>http://www.ryanday.net/?p=288#comments</comments>
		<pubDate>Thu, 29 Jul 2010 14:23:50 +0000</pubDate>
		<dc:creator>Ryan Day</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ryanday.net/?p=288</guid>
		<description><![CDATA[Ok so I love using text based editors like vim and emacs. I suck at emacs though. I think I&#8217;m good at vim, but almost everyday another coder (matt) shows me something new that makes me wonder how I was even using vim before he showed it to me. I don&#8217;t like having to be [...]]]></description>
			<content:encoded><![CDATA[<p>Ok so I love using text based editors like vim and emacs.  I suck at emacs though.  I <em>think</em> I&#8217;m good at vim, but almost everyday another coder (matt) shows me something new that makes me wonder how I was even using vim before he showed it to me.  I don&#8217;t like having to be surgical with my mouse to open declarations of functions and click on tabs to move between files, and whatever else I do while not playing flash games.  I read stuff about improving my editing skills like <a href="http://jmcpherson.org/editing.html">Efficient Editing</a> and the ever popular <a href="http://sites.google.com/site/steveyegge2/effective-emacs">Steve Yegges Emacs</a> to learn how to do things more efficient and faster, and in general, be more productive.</p>
<p>Steve gives advice on rearranging your keyboard layout to not move you fingers of home row.  Many vim guides tell you to use the home row keys instead of the arrows to move through text to avoid the extra hand motions.</p>
<p><strong>Srsly you aren&#8217;t that productive.</strong></p>
<p>I am imagining cubes of coders where the typing never stops. All day long they just bang out code, they never leave home row unless the absolutely need to type a Q.  They think in C, and artfully paint LISP all over their screens and all the other crap that people say to pretend that real world problems always have elegant A+ compsci solutions.</p>
<p>Am I really the only one that has to alt-tab back to the email to remember the process outlined in whatever spec I&#8217;m implementing?</p>
<p>Is it just me that needs to IM somebody about why bug 69 was resolved the way it was and explain why that impedes my ability to implement customer request 7?</p>
<p>I refuse to believe that nobody else looks at the last three functions they wrote and actually stops to think &#8220;Could I do this better?&#8221;</p>
<p>I&#8217;m just saying the stuff that slows me down while I code is thinking. Not the 1.5 centimeters between my shift key and my arrow keys.  Or the difference between moving my left pinky .5cm left, over 2cm down.  I think the time/mistakes it would take me to get used to using hjkl as movement keys instead of the arrow keys would be more then the time saved from reducing the extra miniscule movement.</p>
<p>I read <a href="http://yehudakatz.com/2010/07/29/everyone-who-tried-to-convince-me-to-use-vim-was-wrong/">this post</a> by Yehuda Katz and, while I find it interesting that using his mouse lead him to the &#8216;/&#8217; and &#8216;o&#8217; and &#8216;ci&#8217; commands, he is right.  Don&#8217;t sacrifice the ability to code comfortably for these silly little &#8220;performance gains&#8221;.  You are optimizing the wrong part of your algorithm.  If you really need to speed up your ability to copy/paste, maybe you should slow down and think about what your doing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanday.net/?feed=rss2&amp;p=288</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
