<?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>jaredrobinson.com &#187; Programming</title>
	<atom:link href="http://jaredrobinson.com/blog/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://jaredrobinson.com/blog</link>
	<description></description>
	<lastBuildDate>Sun, 11 Jul 2010 04:51:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Miscellaneous Linux tips and tricks</title>
		<link>http://jaredrobinson.com/blog/miscellaneous-linux-tips-and-tricks/</link>
		<comments>http://jaredrobinson.com/blog/miscellaneous-linux-tips-and-tricks/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 04:51:03 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=602</guid>
		<description><![CDATA[Gnome Key Bindings and IntelliJ IDEA IntelliJ IDEA key bindings conflict with Gnome&#8217;s window manager. In IDEA, I can type CTRL-B to jump to a symbol definition. Normally, I&#8217;d type CTRL-ALT-LEFTARROW to navigate back to where I had come from. Gnome&#8217;s MetaCity intercepts that key mapping before IDEA sees it, and tries to move my [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Gnome Key Bindings and IntelliJ IDEA</strong></p>

<p>IntelliJ IDEA key bindings conflict with Gnome&#8217;s window manager. In IDEA, I can type CTRL-B to jump to a symbol definition. Normally, I&#8217;d type CTRL-ALT-LEFTARROW to navigate back to where I had come from. Gnome&#8217;s MetaCity intercepts that key mapping before IDEA sees it, and tries to move my desktop to the left. There are several other Gnome/Metacity key bindings that conflict with IntelliJ IDEA. Rather than remap the keys in Gnome, I found that on Fedora, I could add the Windows key to the mix, and Gnome would ignore it, and pass it along to IDEA. This means that I can type CTRL-ALT-WINDOWS-LEFTARROW to navigate backward, and so forth.</p>

<p>Unfortunately, this doesn&#8217;t work in RHEL 5 and CentOS 5. The solution is to Go to the Gnome menu bar and select System > Preferences > Keyboard (not Keyboard Shortcuts). Then select the &#8220;Layout Options&#8221; tab, and expand the &#8220;Alt/Win key behavior&#8221;. Then I select &#8220;Super is mapped to the Win-keys&#8221;.</p>

<p>Every time I log in after that, Gnome tells me that my X keyboard settings conflict with my Gnome Keyboard settings, and it asks which I want to use. Selecting the Gnome settings is what I want.</p>

<p><strong>Bandwidth limiting downloads with &#8216;curl&#8217; or &#8216;wget&#8217;</strong></p>

<p>When downloading a large file, it&#8217;s nice to be polite to others on the network, so I use the <code>--limit-rate</code> option for curl and wget:</p>

<ul>
<li><code>curl -O --limit-rate 20k http://server.com/linux.iso</code></li>
<li><code>wget --limit-rate=20k http://server.com/linux.iso</code></li>
</ul>

<p><strong>GDB TUI (text user interface)</strong></p>

<p>After starting gdb, it&#8217;s possible to switch to its text user interface with CTRL-X, CTRL-A. Typing it a second time exits TUI mode.</p>

<p><strong>Vim C++ Auto completion with ctags</strong></p>

<p>I appreciate full blown IDEs in Linux, but I like the quick start up time of vim. Until recently though, I didn&#8217;t have C++ auto completion (also known as vim omni completion). </p>

<p>This got me up and running, and was a great resource:
<a href="http://vim.wikia.com/wiki/C%2B%2B_code_completion">http://vim.wikia.com/wiki/C%2B%2B<em>code</em>completion</a></p>

<p>This would have been useful if I was a new comer to vim and ctags:
<a href="http://www.justlinux.com/nhf/Programming/Introduction_to_C_Programming.html">http://www.justlinux.com/nhf/Programming/Introduction<em>to</em>C_Programming.html</a></p>

<p><strong>xdg-open, gnome-open, start, cygstart</strong></p>

<p>How to easily open files and URLs from the command line
<a href="http://www.dwheeler.com/essays/open-files-urls.html">http://www.dwheeler.com/essays/open-files-urls.html</a></p>

<ul>
    <li>Linux: <code>xdg-open filename_or_URL</code></li>

    <li>Linux:<code> gnome-open filename_or_URL</code></li>

    <li>Mac:  <code>open filename_or_URL</code></li>
    <li>
Windows:  <code>cmd /c start filename_or_URL</code></li>

    <li>Cygwin: <code>cygstart filename_or_URL</code></li>

</ul>

<p><strong>Nomachine NX and ALT-TAB</strong></p>

<p>I use the Nomachine NX client from time to time to get a remote-desktop like connection to a remote Linux machine. It&#8217;s faster than VNC, but it suffers from not forwarding all of my keyboard shortcuts to the remote end of the connection.</p>

<p>Usually, I start the nxlcient from within a Gnome login session. Gnome happily grabs ALT-TAB before the NX client gets to see it. That&#8217;s not what I want. To work around this limitation, I log into a virtual terminal, and start X manually as follows:</p>

<p>Type CTRL-ALT-F2
Login
Run: <code>startx -- :1 gnome-terminal</code></p>

<p>From the gnome-terminal, run: <code>nxclient</code></p>

<p>And then I connect to the remote machine in full screen mode. There&#8217;s no local window manager to interfere with my keyboard shortcuts.</p>

<p><strong>Remote desktop and dual screens</strong></p>

<p>I&#8217;ve been using Remote Desktop to connect to Windows XP, Vista and 7 machines. Until Windows 7, there was no way for a local computer having dual monitors to connect and have the remote end display across both monitors.</p>

<p>So I used linux&#8217;s &#8216;rdesktop&#8217; program to do it:</p>

<p><code>rdesktop -0 -a16 -f -rdisk:CLIENT=/home/jared/Desktop -r sound remote.host.com</code></p>

<p>I notice that in Windows 7, there are some new options in the Remote Desktop client (mstsc.exe): /multimon and /span. Or run <code>mstsc /?</code> to list all possible options.</p>

<p><strong>Editing windows registry files on Linux</strong></p>

<p>Use Gedit: <code>gedit --encoding=UTF-16LE myfile.reg</code></p>

<p>Gvim: <code>LANG=UTF-16LE gvim myfile.reg</code></p>

<p>If already in gvim:<code> :e! ++enc=utf-16le</code>
or  <code>:e ++enc=utf-16le myfile.reg</code></p>

<p>Convert, edit, convert:</p>

<p><code>iconv -f UTF-16LE -t utf-8 myfile.reg > myfile.reg.utf8</code></p>

<p>Edit myfile.reg.utf8, then convert it back</p>

<p><code> iconv -f utf-8 -t UTF-16LE myfile.reg.utf8 > myfile.reg</code></p>

<p><strong>
How Firefox opens files and mime types</strong></p>

<p>I needed to give Firefox some extra help knowing how to open a custom file type with a custom application. Here&#8217;s some helpful information.</p>

<p><a href="https://developer.mozilla.org/en/How_Mozilla_determines_MIME_Types">https://developer.mozilla.org/en/How<em>Mozilla</em>determines<em>MIME</em>Types</a></p>

<p>Firefox uses mime.types on Linux, as well as other things. I helped Firefox by the mime type to the link in the generated HTML file. Either one of the following seems to work:</p>

<ul>
<li>&lt;a href=&#8221;file:subdir/file1.cst&#8221; type=&#8221;application/octet-stream&#8221;&gt; open file &lt;/a&gt;</li>
<li>&lt;a href=&#8221;file:subdir/file1.cst&#8221; type=&#8221;application/x-extension-cst&#8221;&gt; open file  &lt;/a&gt;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/miscellaneous-linux-tips-and-tricks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Berkus: Five Steps to PostgreSQL Performance</title>
		<link>http://jaredrobinson.com/blog/berkus-five-steps-to-postgresql-performance/</link>
		<comments>http://jaredrobinson.com/blog/berkus-five-steps-to-postgresql-performance/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 20:30:38 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=560</guid>
		<description><![CDATA[Five Steps to PostgreSQL Performance by Josh Berkus October 2009 I found this to be informative, and much of the advice applies to databases besides PostgreSQL.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pgexperts.com/document.html?id=36">Five Steps to PostgreSQL Performance</a> by Josh Berkus October 2009</p>

<p>I found this to be informative, and much of the advice applies to databases besides PostgreSQL.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/berkus-five-steps-to-postgresql-performance/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>f-spot and sqlite</title>
		<link>http://jaredrobinson.com/blog/f-spot-and-sqlite/</link>
		<comments>http://jaredrobinson.com/blog/f-spot-and-sqlite/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 22:04:41 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Fedora]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=519</guid>
		<description><![CDATA[I recently tried using Linux f-spot, with the intent to make it easier to browse, manipulate, manage and publish my photos. I wanted f-spot to manage my photo screen saver as well. f-spot seems to be good at importing photos, but getting photos removed is a bit more difficult. I organize my photos by date [...]]]></description>
			<content:encoded><![CDATA[<p>I recently tried using Linux <a href="http://f-spot.org/">f-spot</a>, with the intent to make it easier to browse, manipulate, manage and publish my photos. I wanted f-spot to manage my photo screen saver as well. f-spot seems to be good at importing photos, but getting photos removed is a bit more difficult.</p>

<p>I organize my photos by date an a directory structure such as &#8220;2010/2010.01.01 New Years Day&#8221;. The &#8220;2010&#8243; directory contains several sub directories. Each sub directory consists of a date and a description. If, for some reason, I import photos into f-spot that I don&#8217;t want in its database, I know what directory the photos pertain to. Unfortunately, F-spot doesn&#8217;t allow me to remove photos from its catalog by filename or file path. That&#8217;s okay though, because it stores its database using sqlite.</p>

<p>I figured this out by running <tt>lsof -p pid-of-f-spot</tt>, and noticed a file descriptor opened to &#8220;/home/jared/.config/f-spot/photos.db&#8221;. Then I ran <tt>file ~/.config/f-spot/photos.db</tt> and it helpfully told me that it is a &#8220;<a href="http://www.sqlite.org/">SQLite</a> 3.x database&#8221;.</p>

<p>After a bit of google research, I figured out I could install a SQLite manager on my Fedora system: <tt>yum install -y sqliteman</tt>, followed by running <tt>sqliteman ~/.config/f-spot/photos.db</tt>. I was expecting to see a command-line client, but to my surprise, I found a pleasant graphical interface. It was simple to browse the table schema and to run queries to update and morph the f-spot photo database. Note: I&#8217;d recommend making a backup copy of the database before altering it.</p>

<p>F-spot may not be everything I want it to be, but I managed to work past its limitations due to the fact that it used a well known, open data storage format.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/f-spot-and-sqlite/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Modern bug trackers</title>
		<link>http://jaredrobinson.com/blog/modern-bug-trackers/</link>
		<comments>http://jaredrobinson.com/blog/modern-bug-trackers/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 05:13:57 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=479</guid>
		<description><![CDATA[Five years ago, I started a new job and encountered the JIRA bug tracking system, after having been subject to pathetic bug tracking systems at previous companies. JIRA knocked their socks off in terms of ease-of-use and multi-platform support (it runs in a web browser). I&#8217;ve been a pleased JIRA user ever since. Recently, I [...]]]></description>
			<content:encoded><![CDATA[<p>Five years ago, I started a new job and encountered the <a href="http://www.atlassian.com/software/jira/">JIRA</a> bug tracking system, after having been subject to pathetic bug tracking systems at previous companies. JIRA knocked their socks off in terms of ease-of-use and multi-platform support (it runs in a web browser). I&#8217;ve been a pleased JIRA user ever since. Recently, I stumbled on this article about what&#8217;s new in some of the best quality bug tracking systems on the market.</p>

<blockquote>
  <p>Bug (issue) tracking systems have become a standard tool for any organization that develops software and have evolved greatly in the last years. InfoQ has conducted a virtual panel with people from JIRA, FogBugz, Basecamp and MantisBT about this evolution and the future developments in this field.</p>
</blockquote>

<p>The virtual panel discusses integration with IDEs, project planning, story-boarding, and social networking integration.</p>

<p><a href="http://www.infoq.com/articles/bug-trackers">Read more&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/modern-bug-trackers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best technologies and productivity</title>
		<link>http://jaredrobinson.com/blog/best-technologies-and-productivity/</link>
		<comments>http://jaredrobinson.com/blog/best-technologies-and-productivity/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 04:55:56 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=473</guid>
		<description><![CDATA[I tend to wonder about the &#8220;best&#8221; technologies for a given problem. Recently, I&#8217;ve wondered why Wicket is reportedly better than Java Server Faces (though I&#8217;m using neither). Perhaps it&#8217;s human nature to look for the Next Big Thing or for silver bullet solutions that supposedly increase productivity while offering robust features. Here&#8217;s a blog [...]]]></description>
			<content:encoded><![CDATA[<p>I tend to wonder about the &#8220;best&#8221; technologies for a given problem. Recently, I&#8217;ve wondered why Wicket is reportedly better than Java Server Faces (though I&#8217;m using neither). Perhaps it&#8217;s human nature to look for the Next Big Thing or for silver bullet solutions that supposedly increase productivity while offering robust features.</p>

<p>Here&#8217;s a <a href="http://www.jroller.com/kenwdelong/entry/my_framework_is_more_productive">blog post</a> that ponders whether a new framework or a programming language can really offer better productivity benefits over an ocean full of alternatives. The author asserts that the real time cost on a project is not in writing code, but in the following activities:</p>

<ul>
<li>Communication</li>
<li>Understanding preexisting code</li>
<li>Debugging</li>
<li>Refactoring</li>
</ul>

<p>Tools or languages that make any of those activities easier are to be coveted. Java refactoring tools outshine those available for Grails. Java is easier to read and comprehend than terse bash scripting. Some frameworks/platforms make debugging easier than others.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/best-technologies-and-productivity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mwrc: Saturday evening Lightning Talks</title>
		<link>http://jaredrobinson.com/blog/mwrc-saturday-evening-lightning-talks/</link>
		<comments>http://jaredrobinson.com/blog/mwrc-saturday-evening-lightning-talks/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 00:01:46 +0000</pubDate>
		<dc:creator>jared</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mtnwestrubyconf]]></category>
		<category><![CDATA[mwrc]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=294</guid>
		<description><![CDATA[Binary Lottery code -- how he wrote the app. Mhong - Event Machine. require 'eventmachine' module. EM.run { block } takes over your ruby, and nothing after that block will be run. There's EM::PeriodicTimer and single-fire timers: EM.add_timer(2) { block } To use EM in your web-app, require 'thin' or spin up a new thread [...]]]></description>
			<content:encoded><![CDATA[<p>Binary Lottery code -- how he wrote the app.</p>

<p>Mhong - Event Machine. require 'eventmachine' module. <code>EM.run { block }</code> takes
over your ruby, and nothing after that block will be run.</p>

<p>There's EM::PeriodicTimer and single-fire timers: <code>EM.add_timer(2) { block }</code>
To use EM in your web-app, <code>require 'thin'</code> or spin up a new thread and use
<code>EM.run</code>. <code>EM.HttpRequest.new ... EM.system () ... { if status.exitstatus == 0
...  end }</code>. Message queues, etc. Looks cool.</p>

<p>Dana Gray - regular expressions. "it's been two days since my last regular
expression". She went over the basics of regular expression string matches. How
to match word chars, positional anchors, capturing and non-capturing
parenthesis, grouping, character classes. Don't fear regex, embrace regex.</p>

<p>Jake Cahoon from the Utah Valley Ruby Users Group. He used a slightly
monkey-patched 'feedzirra' module to pull tweets using Ruby code. Finshed
writing the code at 2 A.M. this morning. Now it pulls tweets and puts them into
IRC.  His code is on http://pastie.org</p>

<p>MerbCamp videos from last year are online. How to do Rack testing. with require
'rackbox/spec'. He wrote three apps that echo text in three different
frameworks (sinatra, merb, rails), and showed the tests running against each.
All in five minutes.</p>

<p>Sockets and Ruby.
<code>require 'socket'; client = TCPSocket.net('', 6789); client.write("Hello!");</code>
...
<code>server = TCPServer.new('127.0.0.1', 6789); client = server.accept; client.recv(500);</code></p>

<p>MongoDB - a document oriented data store. Supports native Ruby objects. Has
full index support. Uses memory mapped files for speed. Has a file storage API.
Will support sharding soon. Best use cases: Most web apps, caching (memcachedb
+ indexes), when you need high scaleability. Worst case use cases:
Transactional systems, data warehouses. Why should you use it? Fast! No
migrations, ever. Replaces memcached &#038; tokyo. Has great Ruby support, and it's
not mySQL. http://mongodb.org</p>

<p>It's easy to contribute RSpecs to Rubiniess. One presenter showed how.</p>

<p>Brian Marick: How to learn from the screw-ups of the past. He's been involved
in three movements in computer programming in the past 20 years. First, it was
lisp, which was going to take over the world, but died when it failed in the
commercial world. Second was ???, and third is Ruby. He thinks "agile" is in
trouble like lisp was in trouble. Agile was founded by people who like to
program. The key thing that was missing from agile is solidarity of action. He
ran out of time to complete his thoughts.</p>

<p>Coby R. announced the LA Ruby Conf - April 4th, 2009</p>

<p>Justin Graham showed a working example of Adhearsion (the Ruby telephone
framework for Asterik).</p>

<p>Pat Eyler - Ruby Brigades. You should participate in your local Ruby Brigade so that you can strengthen the community. It's a chance to grow and learn. The best way to learn is to teach others. Simply show up. It's discouraging when someone organizes a group and no one shows up. Get on the mailing list. Don't just subscribe. Ask questions. Answer questions. Be involved. Give a lightning talk at the meeting.</p>

<p>There are two types of meetings: Ones that are a launchpad, and ones that are a destination. Don't let your meetings become a destination. Make the world a better place.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/mwrc-saturday-evening-lightning-talks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mwrc: Jim Weirich: The Building Blocks of Modularity</title>
		<link>http://jaredrobinson.com/blog/mwrc-jim-weirich-the-building-blocks-of-modularity/</link>
		<comments>http://jaredrobinson.com/blog/mwrc-jim-weirich-the-building-blocks-of-modularity/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 22:46:49 +0000</pubDate>
		<dc:creator>jared</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mtnwestrubyconf]]></category>
		<category><![CDATA[mwrc]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=292</guid>
		<description><![CDATA[Jim Weirich: The Building Blocks of Modularity Interview questions: What tech books have you read lately? To guage their interest in continued learning. How do you recognize a good design? Someone said they'd come and listen to him talk about oatmeal. So guess what? He's going to talk about oatmeal. At one time, the thought [...]]]></description>
			<content:encoded><![CDATA[<p>Jim Weirich: The Building Blocks of Modularity</p>

<p>Interview questions:</p>

<ul>
<li>What tech books have you read lately? To guage their interest in continued
learning.</li>
<li>How do you recognize a good design?</li>
</ul>

<p>Someone said they'd come and listen to him talk about oatmeal. So guess what?
He's going to talk about oatmeal.</p>

<p>At one time, the thought was that matter was like a bowl of oatmeal, that it
was fairly consistent all the way through with maybe a few lumps. Someone shot
a particle emitter at a thin strip of gold, and found out that that wasn't
true. Matter is like a bowl of oatmeal with rasins and apples in it. That's
when scientists started developing their atomic theory. Several forces in the
universe: Gravity, Electromagnetism, Strong Nuclear, Weak Nuclear. Why should
there be so many different forces? They tried to come up with Grand Unified
Field Theory, and they're still working on it.</p>

<p>In computers, we have some principles we use to write software:</p>

<ul>
<li>SOLID</li>
<li>Law of Demeter</li>
<li>DRY</li>
<li>Small Methods</li>
<li>Design by Contract</li>
<li>etc.</li>
</ul>

<p>Is there a grand unified theory of software development? That's what he wants
to think about and discuss today.</p>

<p>Everyone should have a mentor when they get started in their careers. He did.</p>

<p>Coupling &#038; Cohesion. The connection between modules, and how well a module
itself fits together. Less coupling is good. Too much coupling is bad. Seven
different types of coupling, according to Meyers:</p>

<ul>
<li>None</li>
<li>Data</li>
<li>Stamp</li>
<li>Control - when you have do describe the func with the word "or" or "otherwise"</li>
<li>External</li>
<li>Common</li>
<li>Content</li>
</ul>

<p>Which boil down to local data and global data, and whether it's simple or
structured data.</p>

<p>A simpler way to thing about coupling: Connascence - things that are born together and change together. If two pieces of software are tied together so that changing one requires changing the other. Rule: As the distance between software increases, the conanascence between the two should be weaker.</p>

<p>Connascence of Position (with parameters to methods) versus Connascence of Name
(using a hash to pass parameters). The latter is better when there's a large
number of parameters.</p>

<p>Connascence of meaning. I.E. Don't use magic numbers in your code.</p>

<p>Contra-nascence - when it doesn't matter what magic number you assign to two
different constants, as long as they aren't the same.</p>

<p>Connascence of Algorithm. If you change a checksum checking func, and you have
to also change the corresponding function that generates the checksum.</p>

<p>Connascence of timing, of value, etc. This entire talk is on github: git://github.com/jimweirich/presentation_connascence.git</p>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/mwrc-jim-weirich-the-building-blocks-of-modularity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mwrc: Alan Whitaker on programming passion and Ruby</title>
		<link>http://jaredrobinson.com/blog/mwrc-alan-whitaker-on-programming-passion-and-ruby/</link>
		<comments>http://jaredrobinson.com/blog/mwrc-alan-whitaker-on-programming-passion-and-ruby/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 22:08:24 +0000</pubDate>
		<dc:creator>jared</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mtnwestrubyconf]]></category>
		<category><![CDATA[mwrc]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=290</guid>
		<description><![CDATA[Alan Whitaker: La Dolce Vita Rubyista of Lead Media Partners Discovery - something that kids do. Something that many ruby programmers are doing as they leave old jobs for new jobs where they can use Ruby. "The real voyage of discovery consists not in seeking new lands, but in seeing with new eyes." -- Marcel [...]]]></description>
			<content:encoded><![CDATA[<p>Alan Whitaker: La Dolce Vita Rubyista
of Lead Media Partners</p>

<p>Discovery - something that kids do. Something that many ruby programmers are
doing as they leave old jobs for new jobs where they can use Ruby.</p>

<p>"The real voyage of discovery consists not in seeking new lands, but in seeing
with new eyes." -- Marcel Proust.</p>

<p>Resistance - anything worth doing is likely to meet resistance. Resistance
stands between the life we live and the life we would like to live.</p>

<p>Cultivate passion while maintaining balance in life.</p>

<p>Flow. The book. By Mihaly Csikszentmihalhyi.</p>

<p>Enjoyment factors: Clear goals, no distractions, challenge, rapid feedback,
deep involvement, sense of control, loss of self-concern, timelessness.</p>

<p>The book "The Power of Full Engagement" says, "Energy, not time, is our most precious resource".</p>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/mwrc-alan-whitaker-on-programming-passion-and-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mwrc: James Britt: Wii Ruby</title>
		<link>http://jaredrobinson.com/blog/mtrc-james-britt-wii-ruby/</link>
		<comments>http://jaredrobinson.com/blog/mtrc-james-britt-wii-ruby/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 21:24:29 +0000</pubDate>
		<dc:creator>jared</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mtnwestrubyconf]]></category>
		<category><![CDATA[mwrc]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=287</guid>
		<description><![CDATA[James Britt: Wii Ruby Wii Hardware: CPU, IR Sensor bar, Wiimote, nunchuck, balance board. The nice thing about the hardware is that you can replace the Wii CPU with a laptop, and still use the rest. Nice 3rd part sensor bar: PSE112 from Psyclone -- runs on batteries Why do we like Java? Because of [...]]]></description>
			<content:encoded><![CDATA[<p>James Britt: Wii Ruby</p>

<p>Wii Hardware: CPU, IR Sensor bar, Wiimote, nunchuck, balance board.</p>

<p>The nice thing about the hardware is that you can replace the Wii CPU with a
laptop, and still use the rest. Nice 3rd part sensor bar: PSE112 from Psyclone -- runs on batteries</p>

<p>Why do we like Java? Because of JRuby and because of the really good libraries.</p>

<p>Java libraries:</p>

<ul>
<li>WiiRemoteJ: Closed source, jar only.</li>
<li>WiiUseJ: Open source (GPL v3) on Java 1.6. Sits on a C library.</li>
</ul>

<p>Ruby wrappers to these libs:</p>

<ul>
<li>WiiRemoteJRuby</li>
<li>WiiUseJRuby</li>
</ul>

<p>Your laptop needs bluetooth. The Wiimote has an IR camera that reads the IR
lights in the "sensor bar". He used Linux to do his work. In theory, it should
work on other platforms as well.</p>

<p>Monkeybars.org - wraps swing in a form of MVC for Ruby</p>

<ul>
<li>Controller handles events</li>
<li>View maps UI to model</li>
<li>Model holds data</li>
</ul>

<p>He showed some basic apps he had written. One of them would make music
depending on how you waved the Wiimote.</p>

<p>What's good?</p>

<ul>
<li>Mapping events is easy</li>
<li>GUI is easy</li>
<li>MIDI is okay</li>
</ul>

<p>What's bad?</p>

<ul>
<li>Precise control is HARD</li>
<li>Project creation is tedious</li>
<li>Many little annoyances persist</li>
</ul>

<p>johnnylee.net/projects/wii - great wii hacks</p>

<p>Q: Did you look into the C libraries at all? He went straight to Java.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/mtrc-james-britt-wii-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mwrc: Paul Sadauskas: Writing Adapters for DataMapper</title>
		<link>http://jaredrobinson.com/blog/mwrc-paul-sadauskas-writing-adapters-for-datamapper/</link>
		<comments>http://jaredrobinson.com/blog/mwrc-paul-sadauskas-writing-adapters-for-datamapper/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 20:39:58 +0000</pubDate>
		<dc:creator>jared</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mtnwestrubyconf]]></category>
		<category><![CDATA[mwrc]]></category>

		<guid isPermaLink="false">http://jaredrobinson.com/blog/?p=285</guid>
		<description><![CDATA[Paul Sadauskas: Writing Adapters for DataMapper What is DataMapper? A lightweight, modular Ruby ORM with lazy loading strategic eager loading plugins (types, migrations, validations, timestamps, sweatshop, is-list, is-searchable, is-versioned, etc.) adaptors (heap, YAML files, REST-ful web services, CouchDB, Sphinx, Netflix, etc.) and it's better than ActiveRecord The goal of the adapter API is to make [...]]]></description>
			<content:encoded><![CDATA[<p>Paul Sadauskas: Writing Adapters for DataMapper</p>

<p>What is DataMapper?</p>

<ul>
<li>A lightweight, modular Ruby ORM with

<ul>
<li>lazy loading</li>
<li>strategic eager loading</li>
<li>plugins (types, migrations, validations, timestamps, sweatshop, is-list, is-searchable, is-versioned, etc.)</li>
<li>adaptors (heap, YAML files, REST-ful web services, CouchDB, Sphinx, Netflix, etc.)</li>
<li>and it's better than ActiveRecord</li>
</ul></li>
</ul>

<p>The goal of the adapter API is to make it as easy as possible to write one. He
then showed how to do it. How do I know my adaptor works? Run the tests that
are provided.</p>

<p>Q: What about supporting "join"? That's a good question. Currently, not all
adaptors support it.</p>
]]></content:encoded>
			<wfw:commentRss>http://jaredrobinson.com/blog/mwrc-paul-sadauskas-writing-adapters-for-datamapper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
