<?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>melinthropy</title>
	<atom:link href="http://melinthropy.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://melinthropy.org</link>
	<description>because sometimes you just need a little melinthropy</description>
	<lastBuildDate>Sat, 13 Mar 2010 04:44:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MountainWest Ruby Conf 2010 Notes</title>
		<link>http://melinthropy.org/2010/03/13/mountainwest-ruby-conf-2010-notes/</link>
		<comments>http://melinthropy.org/2010/03/13/mountainwest-ruby-conf-2010-notes/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 04:44:23 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://melinthropy.org/?p=139</guid>
		<description><![CDATA[I just finished attending MWRC2010, which I thoroughly enjoyed.  The presentations were all excellent.  Below are the notes I took during the presentations, really for my own reference&#8230;

 Day One
Archeopteryx
@gilesgoatboy
Ruby library for making music
uses midi
gem install midilib  &#8212; for files
gem install midiator &#8212; for live midi
google giles midi for github URL; use [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished attending MWRC2010, which I thoroughly enjoyed.  The presentations were all excellent.  Below are the notes I took during the presentations, really for my own reference&#8230;</p>
<p><span id="more-139"></span></p>
<h2> Day One</h2>
<h3>Archeopteryx</h3>
<p>@gilesgoatboy</p>
<p>Ruby library for making music<br />
uses midi</p>
<p>gem install midilib  &#8212; for files<br />
gem install midiator &#8212; for live midi</p>
<p>google giles midi for github URL; use midi_files branch</p>
<p>foo.bar = lambda { return &#8220;bar&#8221;}<br />
foo.bar[] #(square brackets can execute &#8212; not just .call())</p>
<p>book:<br />
probabilistic reasoning in intelligent systems (judea pearl)</p>
<p>&#8220;reason&#8221; &#8212; the application with synths, drum machines, samplers</p>
<p>probability matrices for determining when different drums sound, to create cool random beats</p>
<h3>Cooking with Chef</h3>
<p>Recipes for sysadmin tasks<br />
Can auto-restart services on changes to their config files<br />
ERB</p>
<h3>Managing Ruby Projects with RVM</h3>
<p>command line Ruby Version Manager written in bash</p>
<p>install:<br />
rvm 1.8.6,1.9.1,jruby install</p>
<p>use:<br />
rvm use 1.9.1</p>
<p>gemset:<br />
rvm gemset use rails3<br />
(even different shells can use different gemsets)</p>
<p>tests:<br />
rvm 1.8.6,1.9.1,jruby tests<br />
(runs your tests, logs to log files)</p>
<p>monitoring:<br />
rvm 1.8.6,1.9.1,jruby monitor<br />
(watches your test directory, runs changing tests &#8212; like autotest)</p>
<p>benchmark:<br />
rvm 1.8.6,1.9.1,jruby benchmark my_code.rb</p>
<p>raking:<br />
rvm 1.8.6,1.9.1,jruby rake the:rakes</p>
<p>git is recommended for installing rvm<br />
rvm update &#8211;head  # get this often</p>
<p>use a .rvmrc file<br />
rvm &#8211;create &#8211;rvmrc use 1.9.1%projecta</p>
<p>rvm info<br />
rvm gemset export projecta.gems<br />
can copy this gem file into another project and do rvm gemset import to use the same gems in another project</p>
<p>#rvm on freenode</p>
<h3>Rack</h3>
<p>github.com/mjijackson/mwrc2010<br />
mjijackson.com</p>
<p>TODO: Read the spec:<br />
http://rack.rubyforge.org/doc/SPEC.html</p>
<p>an app just needs a call method to run on rack</p>
<p>middleware has an initialize(app) method and a call(env) method</p>
<p># using ruby<br />
require &#8216;rubygems&#8217;<br />
require &#8216;rack&#8217;<br />
app = Rack::Builder.new {<br />
  use Rack::ContentType<br />
  use Rack::ContentLength</p>
<p>  run lambda {|env| [200, {}, ["Hello world!"]] }<br />
}.to_app<br />
Rack::Handler::WEBrick.run app, <img src='http://melinthropy.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ort => 9292</p>
<p># using rackup<br />
# just a few lines in config.ru</p>
<p># using shotgun<br />
# auto-reloading version of rackup</p>
<p>TODO: see examples on github.  check out twitter cache app &#8212; makes sure you don&#8217;t hit twitter too often</p>
<p>debugging libraries<br />
Rack::Lint<br />
Rack::ShowExceptions<br />
racksh<br />
Rack::Bug </p>
<p>TODO: Check out Rack::Bug</p>
<p>useful middleware<br />
rack/lib &#8212; streaming, chunked http responses, etag headers, sessions, cookie handling<br />
rack-contrib<br />
search for &#8220;rack&#8221; on GitHub</p>
<p>Testing libraries<br />
Rack::MockRequest and Rack::MockResponse<br />
rack-test</p>
<h3>Modularity</h3>
<p> Yehuda Katz</p>
<p>more in-depth information on blog</p>
<p>&#8220;Agile&#8221; &#8211;<br />
basic plan<br />
build app<br />
requirements<br />
build app<br />
requirements<br />
x n<br />
build app<br />
MODULARITY (figure it out later)</p>
<p>alias_method_chain (starts to fall down in the face of reality)</p>
<p>Reduce Assumptions<br />
so that we can<br />
Increase Reuse<br />
(modularity should only be added in order to increase reuse)</p>
<p>Constants are essentially Global Variables<br />
Rails 2.3: include ActionController::Routing::Routes<br />
Rails 3.0: include application.routes.route_helpers</p>
<p><strong>Rule #1 Eliminate things that are global</strong><br />
Tests are the canary in the coal mine<br />
Be suspicious of any use of Constant.foo, including Constant.new</p>
<p>rails 2.3 &#8212; @@perform caching  (did not allow changing per request)<br />
rails 3.0 &#8212; class_attribute perform caching  (now can do controller.perform_caching per request)</p>
<p><strong>Rule #2 Use Objects</strong><br />
Stop worrying about allocations.  Object allocation is essentialy free<br />
Don&#8217;t hardcode the specific class<br />
Objects present opportunities to memoize<br />
Again, tests are the canary in the coal mine</p>
<p>Rails 2.3 &#8212; Template.new &#8212; takes a path   (hard-coded to file system.  hard to store templates in the database).<br />
All the way up the stack takes a path</p>
<p>Rails 3.0 &#8212; Entire system is storage agnostic.  Template.new takes &#8220;Source&#8221;, which could be from a database, file, it doesn&#8217;t care.</p>
<p><strong>Rule #3 Use Modules</strong>  (instead of alias_method_chain)<br />
BAD:<br />
class Person<br />
	def speak(word)<br />
		puts word<br />
	end<br />
end</p>
<p>class Yeller<br />
	alias_method_chain :speak, <img src='http://melinthropy.org/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> ld_speak<br />
	def speak(word)<br />
		old_speak(word.upcase)<br />
	end<br />
end</p>
<p>GOOD:<br />
module Speaker<br />
  def speak(word)<br />
     puts word<br />
  end<br />
end</p>
<p>module Yeller<br />
  def speak(word)<br />
    super word.upcase<br />
  end<br />
end</p>
<p>class Person<br />
  include Speaker<br />
  include Yeller<br />
end</p>
<p>Use ActiveSupport::Concern &#8212; mechanism for making sure module includes happen in the right order</p>
<h3>How HTTP Solved all your performance problems 10 years ago</h3>
<p>Paul Sadauskas</p>
<p>TODO: Read HTTP spec</p>
<p>github.com/paul/mwrc2010</p>
<p>TODO: See last slide with Links &#8212; Caching Tutorial, Doing HTTP Caching Right, RFC2616 Section 13</p>
<p>Performance Features in HTTP/1.1<br />
Persistent Connections (Pipelining, Keep-Alive)<br />
  built-in to Apache (Keep-alive on) and nginx<br />
Caching<br />
  http headers &#8212;<br />
        Expires and Cache-Control: max-age<br />
           (google js libraries are set to a year from now)<br />
           (you can also set it in rails)<br />
        Validation: Last-Modified, Etag, Vary<br />
            Last-Modified &#8212; User Agent can use If-Modified-Since to make a request conditional<br />
            Etag &#8212; If-None-Match<br />
               fresh_when(:etag => @sombrero&#8230;)<br />
               if stale?(:last_modified => @obj.last_modified) #render  else return :304 end<br />
            Vary Header &#8212; keep the cache from server private stuff to the wrong person<br />
            Cache-Control public, private<br />
        Manipulate: Cache-Control<br />
Hierarchical Proxies<br />
	load-balancing proxy  (such as haproxy)<br />
	caching proxy &#8212; provide previous responses without hitting the origin server (squid, varnish)</p>
<p>REST &#8211; written by one of the authors of the HTTP spec at the same time he was writing the spec<br />
  HATEOAS &#8211; Hypertext as the engine of application state  (rather than using the session)<br />
  Resource &#8211; Anything identified by a URI; can have an HTTP verb performed on it; can have multiple representations (HTML, JSON, etc)<br />
  Proper Cache treats each resource separately.<br />
  POST/PUT/DELETE to a resource invalidates a cached response.<br />
  Misusing session makes things uncacheable  (for example, flash messages)</p>
<p>  if you&#8217;re using cookies for auth, need to Vary on the Cookie<br />
  if session is in the cookie, the cache is less effective<br />
  if page content is generating from session, cache will be invalid</p>
<p>Rails has defaults that support the worst-case behavior.<br />
Tweak defaults when you know you need to be caching</p>
<h3>Ruport</h3>
<p>Gregory Brown</p>
<p># No notes for this &#8211; it was more of a code walkthrough of how<br />
# you can take a fairly simple concept and make a horribly<br />
# complicated mess out of it <img src='http://melinthropy.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Documentation</h3>
<p>YARD &#8212; documentation tool<br />
Documentation is important<br />
  * it makes you actually think about your API</p>
<p>Rule #1 &#8211; Consistent<br />
Rule #2 &#8211; Correct<br />
  * Documentation should be audited/tested just like code<br />
Rule #3 &#8211; Coherent<br />
  * Documentation should be reviewed just like code</p>
<p>YARD<br />
Consistent<br />
  Meta-data @tags<br />
Correct<br />
  Roll your own auditing tools &#8212; for example github.com/dkubb/yardstick<br />
Coherent<br />
Extensible<br />
  gem install yard-rspec  &#8212; your specs in your docs<br />
  gem install yard-sinatra  &#8212; sinatra routes<br />
  gem install yard-pygments  &#8212; source highlighting for diff langs</p>
<p>gem install yard<br />
host docs at yardoc.org</p>
<h3>Code of Art 2 &#8211; ruby-processing</h3>
<p>github.com/jcasimir</p>
<p>creating images with ruby-processing</p>
<p>beanstalkd &#8212; simple, fast task processing<br />
port install beanstalkd<br />
gem install beanstalk-client</p>
<p>Textorize </p>
<p>book &#8211; Learning Processing<br />
examples in ruby-processing on github</p>
<h3>Lightning Talks</h3>
<p>Ship code every single day<br />
  &#8211; Have Clear Rules<br />
  &#8211; Lower your Standards<br />
  &#8211; Get the skill then stop</p>
<p>sequel-mongo, nosql.rb compare to SQLite &#8211; sequel-mongo can do all the same thing, gets the same results as sqlite</p>
<p>ci.pivotallabs.com &#8212; open sourced on github.com/pivotal/pulse<br />
  &#8211; ci.rubyonrails.com or something &#8212; shows state of ror on different envs<br />
  &#8211; sad dog pic that the tests don&#8217;t pass</p>
<p>memprof.com/demo<br />
  &#8211; web-based heap visualizer &#038; leak analyzer</p>
<p>sorenson &#8211; easy video capture<br />
  &#8211; squish &#8211; captures video, compresses, uploads video<br />
  &#8211; developer.sorensonmedia.com  &#8212; free test account<br />
  &#8211; mtnwest.integrumdemo.com  &#8212; demo<br />
  &#8211; mflathers@sorensonmedia.com &#8211; email to ask for addl capabilities<br />
  &#8211; supports flash and mp4 output</p>
<p>HTML5 &#8220;Offline&#8221; &#8211; Reduce Download (for mobile)<br />
  &#8211; GET request, Accept Application/JSON, respond_with @articles<br />
  &#8211; update page in js<br />
  &#8211; text/cache-manifest<br />
  &#8211; &#8220;Local Storage&#8221;<br />
  &#8211; have something that shows up right away, and pull content off local storage</p>
<p>github.com/remi/presentations<br />
  &#8211; Rack::Payment  (on github) &#8212; easy ecommerce<br />
  &#8211; gem rack-paymentd<br />
  &#8211; &#8220;kinda alpha&#8221;, but super easy to use<br />
  &#8211; creates the default payment form and everything for you</p>
<p>managing projects with gnu-screen<br />
  &#8211; terminal multiplexer<br />
  &#8211; screen manager<br />
  &#8211; starts things up for you<br />
  &#8211; github.com/timcharper/screenmanager</p>
<p>SimpleGeo<br />
  &#8211; heroku for geo stuff<br />
  &#8211; restful interface<br />
  &#8211; geotagged twitter firehose<br />
  &#8211; stickybits uses it<br />
  &#8211; austin.vicarious.ly<br />
  &#8211; open source<br />
  &#8211; something about openstreetmap in the future</p>
<p>RailsGen<br />
  &#8211; http://railsgen.com<br />
  &#8211; RailsBoost++<br />
  &#8211; more social</p>
<p>ButterflyNet<br />
  &#8211; www.butterflynet.org<br />
  &#8211; github &#8211; quartzmo<br />
  &#8211; irb creates tests<br />
  &#8211; quartzmo@gmail.com<br />
  &#8211; help requested</p>
<p>CoffeeScript<br />
  &#8211; compiles down to js<br />
  &#8211; kind of ruby-like</p>
<p>Google app engine &#8211; easy deployment<br />
  &#8211; sudo gem install google-appengine<br />
  &#8211; appcfg.rb generate_app mwrc_emo<br />
  &#8211; cd mwrc_demo<br />
  &#8211; dev_appserver.rb<br />
  &#8211; appcfg.rb update .<br />
  &#8211; now it&#8217;s published and running&#8230;<br />
  &#8211; curl command to generate rails app</p>
<h2>Day Two</h2>
<h3>Ruby 124C41+</h3>
<p>Matz</p>
<p>from Ralph 124C41+  book &#8212; Hugo Gernsback</p>
<p>ruby started in 1993<br />
took 6 months for &#8220;hello world&#8221;<br />
released publicly Dec 21, 1995  (same age as java)</p>
<p>future -<br />
  faster<br />
    * multiple vm<br />
    * gc improvement<br />
    * JIT?<br />
  more powerful<br />
    * distributed programming<br />
    * faster IPC (messagepack)<br />
    * multi-core aware<br />
  broader<br />
    * small -> embedding<br />
    * large -> HPC<br />
  more modular<br />
    * selector namespace &#8211; override things only in certain scope, in order to not break other things<br />
    * traits &#8211; operational combination of features (methods) &#8212; module operation +, -<br />
    * map etc do not work for infinite enumerable.  mapx (assumed name) would return enumerator &#8212; lazy list</p>
<p>ruby-core mailing list</p>
<p>From Matz&#8217;s screen &#8211;<br />
&#8220;Not only is the options hash not documented, it is not working either.&#8221;</p>
<h3>Macros in Ruby </h3>
<p>evaluation at parse time</p>
<p>macro add(a,b)<br />
  <img src='http://melinthropy.org/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  ^a + ^b )<br />
end<br />
p add(1,2)  => p 1 + 2</p>
<p>&#8220;print &#8216;hello&#8217;&#8221;<br />
 <img src='http://melinthropy.org/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> print &#8216;hello&#8217;)<br />
proc{ print &#8216;hello&#8217; }</p>
<p>RedParse<br />
redparse -e &#8216;a(1)&#8217;<br />
redparse -e &#8216;if a: b end&#8217;<br />
redparse -e &#8216;def of; bar baz end&#8217;</p>
<p>slow</p>
<h3>Ruby Techniques by Example</h3>
<p>Jeremy Evans</p>
<p>1. extending code</p>
<p>class Person<br />
  def self.all<br />
  end</p>
<p>  def name<br />
  end<br />
end</p>
<p>hard to override</p>
<p>method lookup &#8211; singleton class, methods in class, methods in modules included in class, suerclass</p>
<p>module PersonPlugin<br />
  module ClassMethods<br />
  end<br />
  module InstanceMethods<br />
  end<br />
end<br />
use plugin method to extend/include<br />
class Person<br />
  plugin PersonPlugin<br />
end</p>
<p>2.<br />
class variables are shared throughout the object hierarchy</p>
<p>3. DSL<br />
ruby 1.9 &#8212; BasicObject fix (BasicObject does not have access to constants from Object)<br />
def self.const_missing(name)<br />
  ::Object.const_get(name)<br />
end</p>
<p>add file and line position to block to trace error</p>
<p>opts.has_key?  (instead of logical check)</p>
<p>rescue => e<br />
ensure<br />
  blah if e<br />
  blahblah<br />
end</p>
<h3>Hubris</h3>
<p>James Britt</p>
<p>haskell<br />
* purely functional<br />
* type inferencing<br />
* referential transparency &#8211; variables don&#8217;t vary (like erlang)</p>
<p>this guy&#8217;s slides are awesome (illustrator)</p>
<p>immutable data, no state, higher order functions.  based on lambda calculus</p>
<p>hubris &#8211; ruby &#8211; haskell bridge.  call haskell code from your ruby code</p>
<p>why? &#8211; speed up code, learn haskell, powerful abstractions, parallelism</p>
<p>mandelbrot example &#8211;  23 sec in ruby;  3 sec in haskell</p>
<p>TODO: www.lisperati.com/haskell</p>
<p>hubris is on github.  repo includes examples.<br />
require &#8216;hubris&#8217;</p>
<p>class Target<br />
  hubris :inline => &#8220;triple::Int=>Int; triple n = 3*n&#8221;<br />
end</p>
<p>t = Target.new<br />
puts t.triple(10)</p>
<p>inline &#8211; you don&#8217;t have control over visibility of your methods<br />
instead can use external code</p>
<p>GHC 6.12<br />
MRI 1.8.x or 1.9<br />
(see github wiki for instructions on building order)</p>
<p>right now &#8211; does not like 64 bit <img src='http://melinthropy.org/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />   (won&#8217;t run on snow leopard)<br />
James runs it on a vm</p>
<p>hubris<br />
* grabs haskell<br />
* compiles it into a shared object<br />
* exposes object via ruby shared lib</p>
<p>2 parts: ruby hubris + haskell hubris</p>
<p>quirks:<br />
functions exposed via hubris can only take one argument (they are working on this)<br />
ruby string objects are mapped to haskell bytestrings</p>
<h3>Cross-Platform Mobile Applications with Ruby</h3>
<p>Sarah Allen<br />
@ultrasaurus</p>
<p>different platforms, different languages as a mobile developer</p>
<p>CDD &#8220;Conference Driven Development&#8221;  github.com/blazingcloud/rhodes_rubyconf</p>
<p>demo of same app on iphone, nexus 1, blackberry</p>
<p>mobile phones have extra features that you should use:<br />
geolocation, camera, connected, everyone you know</p>
<p>mobileruby.heroku.com</p>
<p>rhomobile platform<br />
MVC, but it doesn&#8217;t go out to the web &#8212; this is all local<br />
request => RhoController -> Rhom -> Local DB</p>
<p>response    < -- html erb files <-- render <-- RhoController</p>
<p>rho/rhoapplication</p>
<p>tabs defined in application.  each item maps to a controller</p>
<p>MapView - crossplatform rhodes api</p>
<p>phonegap - html + javascript: free.  fast-changing.  not great with blackberry platform</p>
<p>rhodes - gpl - you have to open source your code.  $500 for client-side  $5000 for sync server (most applications don't need this)</p>
<p>Person.find -- similar to active resource.  if keeping data locally, you don't need the sync server</p>
<h3>Mongo DB Rules</h3>
<p>document based database, open source, C++<br />
Kyle Banker<br />
@hwaet<br />
mongodb.org<br />
google group &#8212; mongodb-user</p>
<p><strong>1. get to know the real mongodb</strong>  (don&#8217;t jump straight to the ORM that hides the details)<br />
TODO: http://try.mongodb.org &#8212; play with an instance<br />
or using ruby driver</p>
<p>mongo id &#8211; timestamp/machine id/process id/counter<br />
BSON &#8211; bsonspec.org &#8212; binary format<br />
when we call save:<br />
  * add an _id<br />
  * serialize to BSON &#8211; format the data is stored in<br />
  * socket.send()<br />
so we don&#8217;t have to wait for the response to get the ID</p>
<p><strong>2. use object id</strong><br />
MongoDB standard</p>
<p><strong>3. use rich documents</strong><br />
one document can contain all your data &#8212; &#8220;human oriented&#8221; &#8212; doesn&#8217;t require 30 joins to different tables<br />
as a traditional database would</p>
<p>dynamic queries<br />
@orders.find(:user_id => 3)<br />
@orders.create_index(&#8217;line_items.sku&#8217;) <-- indexing an inner object (line items is an array))<br />
@orders.find({'line_items.sku' => &#8216;rbi-re2&#8242;})</p>
<p>query operators &#8211; $ne $in $nin, etc</p>
<p><strong>4. array keys rule, too</strong></p>
<p>simplify tiny relations<br />
link = { :title => &#8216;Hacker News&#8217;, :url => &#8216;blah&#8217;, :tag => {&#8217;time water&#8217;, &#8216;blah} }<br />
query all links with certain tag can be indexed</p>
<p>many-to-many</p>
<p><strong>5. Use atomic operators</strong><br />
findAndModify Comman<br />
$inc, $set, $push, $pop</p>
<p><strong>6. map-reduce is for aggregation.</strong>  results in a  new collection<br />
map = <<-MAP<br />
  function() {<br />
    emit(this['shipping_address']['zip], {total: this.total})<br />
  }<br />
MAP<br />
js -- mongo understands js functions</p>
<p><strong>7. indexes are indexes</strong><br />
collections support up to 40 indexes<br />
similar to relational indexes<br />
don&#8217;t build too many<br />
build compound indexes</p>
<p><strong>8. GridFS</strong><br />
specification for storing binary data in mongodb<br />
simple api to read in binary file</p>
<p><strong>9. Replicate and backup</strong></p>
<p><strong>10. Performance notes</strong><br />
ruby driver does a  lot of work<br />
embedded documents<br />
 &#8212; db doesn&#8217;t do joins<br />
queries should use indexes<br />
keep indexes in RAM</p>
<p><strong>11. auto-shard, to keep it in RAM</strong><br />
wow, data can be automatically sharded.<br />
mongos &#8211; lightweight client, redundant config servers, shards of data</p>
<p><strong>12. Two production cases</strong><br />
sourceforge.net &#8211; store all their product pages.  each page is in a single document.<br />
github.com &#8212; backend analytics<br />
harmonyapp.com &#8212; originally mysql, switched to mongo.  CMS &#8211; supports dynamic data needed for a CMS</p>
<p>vs. couch<br />
couchdb &#8212; http, mongo &#8211; binary protocol over socket<br />
couch &#8211; indexes via map-reduce language.  mongo &#8211; queries ad-hoc, build indexes more like mysql<br />
mongo &#8211; supports atomic updates</p>
<p>trivial relationships should be in its own document<br />
can normalize a little bit</p>
<p>everything UTF-8</p>
<p>have an explain for optimization</p>
<p>roadmap<br />
2d geo indexing<br />
sharding beta &#8211; 100% automatic failover</p>
<h3>your system&#8217;s binary interface</h3>
<p>joe damato<br />
http://timetobleed.com</p>
<p>only do this stuff in a vm</p>
<p>it&#8217;s very easy to leak references in your ruby code<br />
&#8211;a lot of memory<br />
&#8211;gc scans each object, wasting time<br />
&#8211;how to track them down?</p>
<p>ABI &#8211; application binary interface<br />
* alignment<br />
* calling conventions<br />
* object file and library formats<br />
* syscalls</p>
<p>evil devices<br />
nm &#8211; dump symbol table<br />
objdump &#8211; disassemble objects<br />
readelf (linux)<br />
dwarfdump &#8211; debugging info<br />
nm /usr/bin/ruby<br />
objdump -D /usr/bin/ruby<br />
readelf -a /usr/binruby<br />
dwarfdump -a /usr/bin/ruby</p>
<p>registers<br />
%rax &#8211; results = 64 bits, 1quadword<br />
%eax &#8211; lower 32 bits of %rax<br />
%ax &#8211; lower 16 of eax<br />
%ah<br />
%al</p>
<p>ELF objects<br />
* headers<br />
* memprof uses libelf extracting info<br />
.text &#8211; code lives here</p>
<p>plt &#8211; procedure linkage table</p>
<p>ruby calls rb_newobj &#8211; to allocate object, add_freelist &#8211; deallocate</p>
<p>hook rb_newobj objdump output &#8211; find rb_newobj in memory, and override it<br />
only works for ruby build with &#8211;disable-shared (no library.so)</p>
<p>require &#8216;memprof&#8217;<br />
Memprof.start<br />
require &#8220;stringio&#8221;<br />
SringIO.new<br />
Memprof.stats </p>
<p>tells you exactly which file, line number, class the objects are coming from</p>
<p>can track a block<br />
or dump entire heap as JSON</p>
<p>require &#8216;memprof/middleware&#8217;<br />
- watches your rails stuff</p>
<p>memprof.com</p>
<p>memprof gem &#8211; free<br />
github.com/ice799/memprof<br />
don&#8217;t gem install memprof (out of date)<br />
#memprof on irc.freenode.net</p>
<p>memprof.com &#8211; separate &#8212; reads the output</p>
<p>someone recommended reading<br />
Programming From the Ground Up</p>
<h3>A Tale of Two Codebases</h3>
<p>Pat Maddox</p>
<p>in ruby, happiness matters</p>
<p>business case for happy developers<br />
happy developers are more productive<br />
attracts other good programmers</p>
<p>agile, fast development is good<br />
but it&#8217;s important to maintain a sustainable pace</p>
<p>demand excellence<br />
  &#8211; there is always time to refactor<br />
  &#8211; there is always time to get the tests working<br />
  &#8211; push back on business requirements to make time<br />
themed releases &#8212; focus on one area at a time<br />
  &#8211; don&#8217;t bite off more than you can chew<br />
  &#8211; it&#8217;s draining to try and improve lots of little things at the same time<br />
  &#8211; pick items in a similar area from backlog<br />
  &#8211; gives the opportunity to make all the internal changes you need<br />
technical debt is a myth<br />
  &#8211; the best time to solve a problem is right now, when you know what it is<br />
  &#8211; technical debt is often used as more of an excuse<br />
  &#8211; improve things any time you have the chance</p>
<p>don&#8217;t lose sight of passion for ruby &#038; code</p>
<p>Recommended Reading:<br />
smalltalk best practice patterns<br />
design patterns<br />
refactoring</p>
<h3>EventMachine</h3>
<p>scaling non-blocking i/o in ruby</p>
<p>Aman Gupta<br />
github.com/tmm1<br />
@tmm1</p>
<p>slides on timetobleed.com</p>
<p>EventMachine &#8211; implementation of the Reactor pattern</p>
<p>heavy production use</p>
<p>* I/O<br />
  * mysql query responses<br />
  * http responses<br />
  * memcache results<br />
most web apps are I/O bound<br />
basic idea &#8211; instead of waiting, use that time for other stuff</p>
<p>&#8211;scaling I/O heavy applications</p>
<p>event machine takes blocks of code to execute asynchronously<br />
queue.on_push = proc{ use(queue.pop)}</p>
<p>gem install eventmachine<br />
require &#8216;eventmachine&#8217;</p>
<p>EM.run{<br />
  puts &#8220;reactor started!&#8221;<br />
}  # this is blocking.  nothing else will run until the reactor is stopped</p>
<p>EM.next_tick &#8211; queue a proc to be executed on the next iteration of the reactor loop<br />
 &#8212; splitting up work across multiple patters<br />
 &#8212; common pattern &#8211; &#8220;recursive&#8221; calls to next_tick<br />
 &#8212; tickloop<br />
 &#8212; not used too often</p>
<p>EM::Iterator</p>
<p>by default, EM does not use threads.  EM.defer can set up threads</p>
<p>use EM::Timer instead of sleep  (b/c sleep would block the reactor)</p>
<p>EM::Callback &#8211; specify event handlers</p>
<p>EM::Deferrable (!= EM.defer)<br />
even if event already fired, the block gets automatically executed<br />
your callback always gets called</p>
<p>EM::Queue &#8211; returns async queue<br />
pop takes a block<br />
workers pop items off the queue<br />
items can be processed in parallel</p>
<p>EM::Channel &#8211; similar to queue, but publish/subscribe model where multiple things can subscribe</p>
<p>EM.system &#8211; run external commands without blocking.  block receives stdout and exitstatus</p>
<p>EM Handlers &#8211; it is recommended to use these</p>
<p>EM::Connection &#8211; networking</p>
<p>EM::Protocols &#8212; send_object, receive_object &#8212; handles marshalling, unmarshalling of objects</p>
<p>can watch files or processes with the reactor</p>
<p>could use an EM enabled webserver &#8212; Thin or Rainbows!<br />
async_sinatra for streaming and delayed responses &#8212; good for long polling</p>
<p>here&#8217;s the code:<br />
http://gist.github.com/329682</p>
<h3>Lightning Talks</h3>
<p>Testing Queries<br />
  &#8211; @ginnyhendry<br />
  &#8211; Never do an unindexed read<br />
  &#8211; This test will make sure you always have a good index on your query<br />
  &#8211; gist.github.com/328822  &#8212; mongo specific   </p>
<p>git instaweb<br />
  &#8211; git instaweb &#8211;httpd webrick<br />
  &#8211; nice github like interface without needing internet<br />
  &#8211; already installed on your system!</p>
<p>ruby-fs-stack gem<br />
  &#8211; tap into the world&#8217;s geneology<br />
  &#8211; FamilySearch<br />
  &#8211; new.familysearch.org &#8212; collaborative family tree<br />
  &#8211; REST-like Web Service<br />
	- ruby gem: http://github.com/jimmyz/ruby-fs-stack<br />
  &#8211; Family Search Developers Conference in April</p>
<p>RubyMine<br />
  &#8211; IntelliJ Ruby IDE &#8212; about $100<br />
  &#8211; nice documentation, code completion, etc</p>
<p>Geo Tweeter<br />
  &#8211; geo-tweeter.heroku.com<br />
  &#8211; set or fake out the geolocation on tweets<br />
  &#8211; sinatra-twitter-oauth</p>
<p>Command Event DTO Architecture<br />
  &#8211; speaker &#8211; Alistair Cockburn<br />
  &#8211; Hexagonal architecture &#8211; insulate app from outside world<br />
  &#8211; the app never knows anything about the external world<br />
     &#8211; user<br />
     &#8211; database<br />
  &#8211; @gregyoung<br />
  &#8211; Command Event DTO Architecture<br />
  &#8211; greg put another hexagon around the database, and app and db talk to each other through message queue</p>
<p>Bash Deployment &#038; Server Manager (BDSM)<br />
  &#8211; Wayne E. Seguin (RVM guy)<br />
  &#8211; Service Management via Extensions, and Deployments<br />
  &#8211; modular &#8212; any executable file, template system, config, etc<br />
  &#8211; deploy, rollback, update</p>
<p>Gitty<br />
  &#8211; Unobtrusively extending Git<br />
  &#8211; install hooks from common repository &#038; share hooks with team<br />
  &#8211; example of hook &#8212; don&#8217;t allow commits with trailing whitespace<br />
  &#8211; github.com/timcharper/gitty</p>
<p>Agile &#8211; Back to the Future<br />
  &#8211; Agile is developer-geared<br />
  &#8211; Wall of Confusion<br />
  &#8211; agileroots.com</p>
<p>Donkey<br />
  &#8211; Howard Yeh (hayeah)<br />
  &#8211; Concurrency == Reliability == Scalability<br />
  &#8211; Learn from Erlang &#8212; use message-passing Actors<br />
  &#8211; based on EventMachine and AMQP</p>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2010/03/13/mountainwest-ruby-conf-2010-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Development Tidbits &#8211; Part I</title>
		<link>http://melinthropy.org/2009/08/08/web-development-tidbits-part-i/</link>
		<comments>http://melinthropy.org/2009/08/08/web-development-tidbits-part-i/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 22:29:52 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[technical]]></category>
		<category><![CDATA[os x]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tidbits]]></category>
		<category><![CDATA[web-development]]></category>

		<guid isPermaLink="false">http://melinthropy.org/?p=87</guid>
		<description><![CDATA[
div.item {margin-top: 40px;}

I recently moved from doing full-time Java &#38; Oracle PL/SQL in a Windows environment (with Rails development in my free time) to doing full-time Rails development on Mac OS X.  This post lists a few helpful little tidbits that I&#8217;ve found along the way that I thought someone on the Interwebs might find [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
div.item {margin-top: 40px;}
</style>
<p><img class="alignright size-full wp-image-94" title="Tidbits" src="http://melinthropy.org/wp-content/uploads/2009/08/picture-5.png" alt="Tidbits" width="89" height="120" />I recently moved from doing full-time Java &amp; Oracle PL/SQL in a Windows environment (with Rails development in my free time) to doing full-time Rails development on Mac OS X.  This post lists a few helpful little tidbits that I&#8217;ve found along the way that I thought someone on the Interwebs might find useful.  I call it Part I not because I&#8217;m holding back on you, but more because hopefully it will encourage me to post some more on this subject in the future.</p>
<div class="item">
<strong>1. DigitalColor Meter (Mac OS X only)</strong>
</div>
<p>If you&#8217;re on Mac OS X and you want to grab the color value of something else on your screen to use in your website, there is a tool that comes with OS X for just that purpose called DigitalColor Meter.  Do ⌘+Space and type &#8220;Color&#8221; and select the DigitalColor Meter to bring it up. Check its menus for more features, such as copying the current color value to the clipboard.</p>
<p style="text-align: center;"><img class="size-full wp-image-89 aligncenter" title="Digital Color Meter Screenshot" src="http://melinthropy.org/wp-content/uploads/2009/08/digitalcolormeter.jpg" alt="Digital Color Meter Screenshot" width="406" height="205" /></p>
<div class="item">
<strong>2. console.log(obj);</strong>
</div>
<p>You can log javascript objects directly to the Firebug console with console.log. Then you can drill into your object in the console and see all its properties in Firebug, rather than pushing a bunch of strings into alert();. This even works with Facebook apps.  More information here: <a href="http://getfirebug.com/console.html" target="_blank">Firebug Console Object</a></p>
<div class="item">
<strong>3. Firefox Error Console</strong>
</div>
<p>In the main Firefox Tools menu, there is an &#8220;Error Console&#8221; item.  It is apparently not part of FireBug, but Firefox itself.  This thing is awesome. It shows you JS and CSS errors and warnings, and it doesn&#8217;t lose them when you redirect to another page.</p>
<p style="text-align: center;"><img class="size-medium wp-image-90 aligncenter" title="Firefox Error Console" src="http://melinthropy.org/wp-content/uploads/2009/08/picture-2-300x201.png" alt="Firefox Error Console" width="300" height="201" /></p>
<div class="item">
<strong>4. Firebug in a separate window</strong>
</div>
<p>A few people have been surprised when they&#8217;ve seen me do this, so I thought I&#8217;d throw it in.  Firebug has a little button to tell it to run in its own window which is especially helpful if you have two monitors.  You can do this with the little round &#8220;^&#8221; button in firebug, shown with the smudgy red arrow below.</p>
<p style="text-align: center;"><img class="size-medium wp-image-91 aligncenter" title="Firebug Separate Window" src="http://melinthropy.org/wp-content/uploads/2009/08/picture-4-300x55.png" alt="Firebug Separate Window" width="300" height="55" /></p>
<p>
Well, that&#8217;s all the tidbits for now.  What are your favorite tidbits?</p>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2009/08/08/web-development-tidbits-part-i/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Music for a Snowy Day</title>
		<link>http://melinthropy.org/2009/03/01/music-for-a-snowy-day/</link>
		<comments>http://melinthropy.org/2009/03/01/music-for-a-snowy-day/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 23:56:23 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://melinthropy.org/?p=76</guid>
		<description><![CDATA[My husband and I took the dogs for a walk in the snow this afternoon &#8212; it was really coming down!  While we were having some hot chocolate afterwards, I started improvising a snowy day piece on the piano.  Here&#8217;s what came out of it. I called it &#8220;Snowy Day&#8221;. The descending piano runs represent the [...]]]></description>
			<content:encoded><![CDATA[<p>My husband and I took the dogs for a walk in the snow this afternoon &#8212; it was really coming down!  While we were having some hot chocolate afterwards, I started improvising a snowy day piece on the piano.  Here&#8217;s what came out of it. I called it &#8220;Snowy Day&#8221;. The descending piano runs represent the snow as it makes its way down.</p>
<p><em>(Click the play button to hear it&#8230;)</em><span><br />
</span></p>
<p>As usual, I used GarageBand. I improvised the piano part through my midi keyboard (although at a slightly slower tempo to be honest). I recorded the bass part through my midi keyboard as well, and I recorded the violin with an Electro-Voice Cardinal condenser mic.</p>
<p>Apparently it&#8217;s been over a year since I posted a piece.  Here is the last one, &#8220;Good Morning Mr. Fish&#8221;, incase you missed it&#8230;</p>
<p><em>(Click the play button to hear it&#8230;)</em><span><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2009/03/01/music-for-a-snowy-day/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://melinda.theweatherses.org/wp-content/uploads/2009/02/SnowyDay.mp3" length="2671512" type="audio/mpeg" />
<enclosure url="http://melinda.theweatherses.org/wp-content/uploads/2007/09/goodmorningmrfish.mp3" length="1568523" type="audio/mpeg" />
		</item>
		<item>
		<title>Garage Band Artist Lessons</title>
		<link>http://melinthropy.org/2009/02/22/garage-band-artist-lessons/</link>
		<comments>http://melinthropy.org/2009/02/22/garage-band-artist-lessons/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 02:03:05 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[music]]></category>
		<category><![CDATA[garage_band]]></category>
		<category><![CDATA[norah_jones]]></category>

		<guid isPermaLink="false">http://melinthropy.org/?p=65</guid>
		<description><![CDATA[I bought the new iLife when it came out, mainly so that I could try out the new GarageBand.  Sure, it has some other cool features, such as the auto face recognition in iPhoto, but I don&#8217;t take that many pictures, so I haven&#8217;t played with it much.  Anyways, one of the things in the [...]]]></description>
			<content:encoded><![CDATA[<p>I bought the new iLife when it came out, mainly so that I could try out the new GarageBand.  Sure, it has some other cool features, such as the auto face recognition in iPhoto, but I don&#8217;t take that many pictures, so I haven&#8217;t played with it much.  Anyways, one of the things in the new GarageBand that I was excited about was the Artist Lessons you can purchase for $5 each.  The Artist Lesson is where a well-known artist teaches you to play one of their songs on piano or guitar.  (There are also basic lessons for piano and guitar that are free with the new GarageBand, but I haven&#8217;t looked at those yet.)  I picked the Norah Jones &#8220;Thinking About You&#8221; advanced piano lesson.  Here&#8217;s what it looks like:</p>
<p><img class="alignnone size-full wp-image-69" title="norah_jones_lesson" src="http://melinthropy.org/wp-content/uploads/2009/02/norah_jones_lesson.png" alt="norah_jones_lesson" width="450" height="281" /></p>
<p>As you can kind of see, Norah walks you through each part of the song, playing and explaining the basic chords. The verse is cut into three different pieces, each with 3 or 4 different chords.  The next section goes through the chorus, and the last few sections talk (briefly) about soloing and embellishment.  </p>
<p>(More after the jump&#8230;)</p>
<p><span id="more-65"></span></p>
<p>At first, I was a little disappointed, since I can already read music well, so there wasn&#8217;t much advantage to watching the video over just buying the sheet music. However, I&#8217;d like to get better at playing from chord notation in order to more easily memorize/improvise pieces, rather than just reading the notes.  I took some improvisational jazz piano in college, but I haven&#8217;t really done it since then &#8212; it&#8217;s so much easier to just read the notes.  So anyways, once I dug around in the settings and found the option to turn on the chords, the lesson got more fun and challenging for me.  Thankfully, you can slow the music down all the way to half speed, and still play along with the lesson. The band also still plays along with you at the slower tempos, but of course the vocals are only on when you are playing at full tempo.  Here&#8217;s a screenshot with just the chord notation:</p>
<p><img class="alignnone size-full wp-image-67" title="norah_jones_with_chords" src="http://melinthropy.org/wp-content/uploads/2009/02/norah_jones_with_chords.png" alt="norah_jones_with_chords" width="450" height="281" /></p>
<p>One thing I was wondering was would I want to go through the lessons more than once, and I think the answer is &#8220;yes&#8221;.  When I solo over the chords right now, it sounds like me playing &#8212; it does not sound like Norah Jones. But I am definitely interested in watching the improvisational pieces of the lesson a few times to try to incorporate a little more Norah Jones grooviness into it.  Also, you don&#8217;t have to do the lesson part again &#8212; you can just play the whole song all the way through with the band, vocals, and piano, or you could mute any of the tracks so that, for instance, it&#8217;s just you and the band, as if you had a drum and brass section in your living room grooving along with you.</p>
<p>So the verdict is it was definitely worth the $5, and I&#8217;ll probably try another one in a few weeks.  I&#8217;m also interested in trying the guitar lessons.  Maybe &#8220;Roxanne&#8221; by Sting.  Hopefully Apple will continue to add artist lessons to their list.  Right now, I only see eight of them.  But at any rate, the whole concept of music lessons right in GarageBand is very cool and exciting, as if GarageBand wasn&#8217;t great enough before!</p>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2009/02/22/garage-band-artist-lessons/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DNA test reveals my dog is a mutt</title>
		<link>http://melinthropy.org/2009/01/01/dna-test-reveals-my-dog-is-a-mutt/</link>
		<comments>http://melinthropy.org/2009/01/01/dna-test-reveals-my-dog-is-a-mutt/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 19:35:58 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DNA]]></category>
		<category><![CDATA[dogs]]></category>

		<guid isPermaLink="false">http://melinthropy.org/?p=55</guid>
		<description><![CDATA[Yes, the marvels of modern science have concluded what was extremely obvious to the casual observer.
My husband and I recently sent in a sample of our dog Doobie&#8217;s DNA to BioPet to find out what the heck he is.  We got back the results a few days ago and we were very surprised.  Before the [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, the marvels of modern science have concluded what was extremely obvious to the casual observer.</p>
<p>My husband and I recently sent in a sample of our dog Doobie&#8217;s DNA to <a href="http://www.biopetvetlab.com/dnahome.htm">BioPet</a> to find out what the heck he is.  We got back the results a few days ago and we were very surprised.  Before the test, I was convinced that he was a german short-haired pointer mix, but according to the test, that isn&#8217;t even one of his main breeds.  The test returns approximate levels of ancestry of each breed, which I have summarized in a pie chart below:<br />
<img src="http://melinthropy.org/wp-content/uploads/2009/01/doobies_heritage.png" alt="" /><br />
 <br />
So, now we know.  When people ask what he is, we can state with confidence that he is a Golden ChowBull Dallie, and then act a little surprised when they don&#8217;t know what that is.  But even if he&#8217;s a mixed breed dog, he&#8217;s still 100% sweetness.  (Awwwww.)</p>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2009/01/01/dna-test-reveals-my-dog-is-a-mutt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello, Arduino</title>
		<link>http://melinthropy.org/2008/12/31/hello-arduino/</link>
		<comments>http://melinthropy.org/2008/12/31/hello-arduino/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 06:19:01 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[electronics]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://melinthropy.org/?p=42</guid>
		<description><![CDATA[For Christmas, I asked my husband to get me an Arduino starter kit (specifically, this one from Hacktronics ) along with the book Getting Started with Arduino .  What is the Arduino?  Arduino is basically a little electronic board with input/output capability (meaning it can read from sensors &#8211; input, and control things &#8211; output) that [...]]]></description>
			<content:encoded><![CDATA[<p>For Christmas, I asked my husband to get me an <a href="http://www.arduino.cc/">Arduino</a> starter kit (specifically, <a href="http://www.hacktronics.com/Arduino/Arduino-Starter-Kit/flypage.tpl.html">this one from Hacktronics</a> ) along with the book <a href="http://www.amazon.com/Getting-Started-Arduino-Make-Projects/dp/0596155514/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1230695893&amp;sr=8-1">Getting Started with Arduino</a> .  What is the Arduino?  Arduino is basically a little electronic board with input/output capability (meaning it can read from sensors &#8211; input, and control things &#8211; output) that has a tiny computer on it (an <a href="http://www.avrfreaks.net/index.php?module=Freaks%20Devices&amp;func=displayDev&amp;objectid=78">AVR microcontroller</a>) that you can program from your computer.  Here it is:<br />
<img src="http://melinthropy.org/wp-content/uploads/2008/12/arduino.jpg" alt="" /></p>
<p>Some cool things about it are the USB port &#8212; you can upload programs, power the board, and receive communications from the board all using USB.  (Or you can use an AC adapter for power). Also, the Arduino app you can use to interface from your computer runs great from my MacBook.  And, I love how everything on the board is just so small and <em>cute</em>.</p>
<p>The book <em>Getting Started with Arduino</em> is excellent.  It is written for someone with no particular electronics or programming experience, and despite that, it manages to walk through several little projects which anyone could do and which should demystify the whole thing.  The examples seem simple, and the book is pretty small, but in the end, it really does give you a starting point, and it points out web resources if you want to go into detail on, say, some particular type of sensor.  There are plenty more involved projects online for further reference.</p>
<p>As to why I&#8217;m interested, I have a top-secret project in mind, which I&#8217;ll reveal if it ever gets off the ground.  And then you can think, &#8220;wow, that&#8217;s lame.&#8221;  But it would be even worse if I revealed my lame project idea and then it didn&#8217;t even work.  Anyways, I have this idea for a project, and I thought it should use a microcontroller.  I was originally thinking I could use my Motorola 68HC11 from college, so I pulled it out of the box.  I paid over $100 for it in 1998, so surely I could put it to good use, right?  Here it is on its evaluation board:<br />
<img src="http://melinthropy.org/wp-content/uploads/2008/12/86hc11evb.jpg" alt="" /></p>
<p>The MCU itself is the square chip on the lower left.  Immediately, I realized that (1) it requires serial cables, (2) it requires something to power it (+12V, -12V, +5V and ground), (3) the software I have for interfacing to it is on floppy disks and runs on DOS, and (4) I have almost completely forgotten assembly language, and really, everything about this board.  And it has been discontinued by Motorola, so if I ever wanted to make something else, I&#8217;d have to start over anyways.</p>
<p>So, after these realizations, I went searching for something new, and the Arduino seemed to be the way to go for a hobbyist.  I am very happy with my Arduino kit, and I&#8217;ll be sure to post about my project if it ever works.</p>
<p>BTW, a couple great resources for Arduino projects:  http://www.embedds.com/ posts a new project every day.  I haven&#8217;t tried any of them yet, but I hope to soon.  The projects sound very interesting, like this one for an <a href="http://www.embedds.com/this-arduino-thermin-should-be-an-interesting-project/">Arduino Theremin</a> .  And of course there is <a href="http://makezine.com/">Make Magazine</a> but the blog is a little more prolific than I can actually keep up with.</p>
<p>[Update: I forgot to mention that the hacktronics arduino starter kit didn't quite have all the components used in the examples in the <em>Getting Started with Arduino</em> book.  In particular, it didn't have a pushbutton switch or a light-dependent resistor.]</p>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2008/12/31/hello-arduino/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Addicted to World of Goo</title>
		<link>http://melinthropy.org/2008/12/28/addicted-to-world-of-goo/</link>
		<comments>http://melinthropy.org/2008/12/28/addicted-to-world-of-goo/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 01:23:01 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[goo]]></category>

		<guid isPermaLink="false">http://melinthropy.org/?p=39</guid>
		<description><![CDATA[That&#8217;s right, I&#8217;m seriously addicted to World of Goo .  I&#8217;ve been playing it for the last day or two or three straight.  (Yeah, I&#8217;m not sure what day it is.  Vacation rocks.)  Also, the irony is not lost on me that I&#8217;m sick and sneezing goo the whole time I&#8217;m playing.  It&#8217;s like my own [...]]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s right, I&#8217;m seriously addicted to <a href="http://www.worldofgoo.com/">World of Goo</a> .  I&#8217;ve been playing it for the last day or two or three straight.  (Yeah, I&#8217;m not sure what day it is.  Vacation rocks.)  Also, the irony is not lost on me that I&#8217;m sick and sneezing goo the whole time I&#8217;m playing.  It&#8217;s like my own little world of goo to go with the virtual one in the game.  As a bonus, some of the goo in the game is also green.</p>
<p>Anyways, World of Goo falls into the physics/construction game genre, but it&#8217;s such a beautifully executed game.  Each level looks different from the previous level, and each level is really interesting.  The music is epic.  The plot is fun and mysterious.  Everything about the game is great.  I haven&#8217;t finished it yet, but I assume the ending is cool.</p>
<p>I&#8217;m not sure what made my husband spontaneously buy it for me (I could probably ask since he&#8217;s sitting just a few feet away.  Nah.  Please post it in the comments, honey.) but it made a really great gift.  Looks like it&#8217;s available for Mac, Windows, and Wii.  (It&#8217;s available for instant download gratification!  I&#8217;m playing it on the Mac, which is single player.  Apparently the Wii version supports up to 4 players.)</p>
<p>Come on and let the Goo times roll!</p>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2008/12/28/addicted-to-world-of-goo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Early birthday present!</title>
		<link>http://melinthropy.org/2008/05/11/early-birthday-present/</link>
		<comments>http://melinthropy.org/2008/05/11/early-birthday-present/#comments</comments>
		<pubDate>Sun, 11 May 2008 15:23:48 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[old-age]]></category>

		<guid isPermaLink="false">http://melinthropy.org/?p=33</guid>
		<description><![CDATA[Incase you didn&#8217;t already know, I am turning the BIG THREE-OH in a few weeks.  But I already got an early birthday present from my husband!  It&#8217;s the melinthropy.org domain!  Yay!
I think all of my friends have already turned 30, so I probably won&#8217;t get any sympathy.  And anyways, I&#8217;m sure 30 is the new [...]]]></description>
			<content:encoded><![CDATA[<p>Incase you didn&#8217;t already know, I am turning the BIG THREE-OH in a few weeks.  But I already got an early birthday present from my husband!  It&#8217;s the melinthropy.org domain!  Yay!</p>
<p>I think all of my friends have already turned 30, so I probably won&#8217;t get any sympathy.  And anyways, I&#8217;m sure 30 is the new 25, so what am I worried about!</p>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2008/05/11/early-birthday-present/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Absolut-ly Cool!</title>
		<link>http://melinthropy.org/2008/04/02/absolut-ly-cool/</link>
		<comments>http://melinthropy.org/2008/04/02/absolut-ly-cool/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 00:29:44 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[machines]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://melinda.theweatherses.org/?p=32</guid>
		<description><![CDATA[I ran across this video on youtube.  Check it out!  She types in a melody, and these machines that shoot balls into the air landing on a marimba, along with some wine glasses and percussion, improvise on it!

The really cool thing is you can actually go to the website here and interact with the machines [...]]]></description>
			<content:encoded><![CDATA[<p>I ran across this video on youtube.  Check it out!  She types in a melody, and these machines that shoot balls into the air landing on a marimba, along with some wine glasses and percussion, improvise on it!</p>
<p><a href="http://www.youtube.com/watch?v=1e9AJVtuCKc"><img src="http://img.youtube.com/vi/1e9AJVtuCKc/default.jpg" width="130" height="97" border=0></a></p>
<p>The really cool thing is you can actually <a href="http://absolut.com/absolutmachines">go to the website here</a> and interact with the machines playing the music!  You type in your melody (which I did horribly, because I thought I was in &#8220;practice&#8221; mode, but apparently I wasn&#8217;t &#8212; I guess you only get a second to &#8220;practice&#8221;), then you see the thing playing your melody (and its own variations) live, and then they send you a video of it.  How cool is that!</p>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2008/04/02/absolut-ly-cool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easter Bunny Cake</title>
		<link>http://melinthropy.org/2008/03/29/easter-bunny-cake/</link>
		<comments>http://melinthropy.org/2008/03/29/easter-bunny-cake/#comments</comments>
		<pubDate>Sun, 30 Mar 2008 02:39:35 +0000</pubDate>
		<dc:creator>Melinda Weathers</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dogs]]></category>
		<category><![CDATA[Easter]]></category>
		<category><![CDATA[flip]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://melinda.theweatherses.org/?p=25</guid>
		<description><![CDATA[I just wanted to post this little  video I put together on Easter (filmed on The Flip!) that shows Bunny Cakes being assembled.  But of course, I had to be difficult, and embed the video rather than posting a link (since I want to start using more video in general).  My version of [...]]]></description>
			<content:encoded><![CDATA[<p>I just wanted to post this little  video I put together on Easter (filmed on The Flip!) that shows Bunny Cakes being assembled.  But of course, I had to be difficult, and embed the video rather than posting a link (since I want to start using more video in general).  My version of Wordpress was too old to use the plugin I wanted, so I decided to upgrade to the one that was released just this afternoon. Bleeding edge, baby.  So, of course I had to import my tags from Ultimate Tag Warrior, and then of course, I had to pick a new theme (since it should *look* different if I bothered to go to this trouble), then I had to add random junk into the theme&#8230;  And then something about the Apache configuration wasn&#8217;t allowing my plugin to work, which we spent hours looking at (literally).  And now my plugin breaks some of the new WordPress version&#8230; It always amazes me how much time you can sink into this kind of stuff.</p>
<p>Wordpress 2.5 seems very nice, by the way.  I just noticed it is auto-saving this post as I write it.  Also, I was having some problems with the visual editor stripping out all my line breaks (maybe because I&#8217;m using Safari), and that seems to be resolved.  The interface in general looks very nice as well.  And thanks to the SVN option, future upgrades will be very easy!</p>
<p>So anyways, here is the video (be sure to watch all the way to the end to see the special cameo from the Easter Bunny himself!)  Click on the picture to watch it.  It&#8217;s only about a minute long.  If you click on it and you don&#8217;t see video starting up, please <a href="http://www.apple.com/quicktime/download/" target="_blank">download the latest version of Quicktime.</a></p>
<div class="hvlog" style="margin-left:-12px"><a rel="enclosure" href="http://melinda.theweatherses.org/wp-content/uploads/2008/03/easter2008.mp4"> <img src="http://melinda.theweatherses.org/wp-content/uploads/2008/03/bunnycakethumbnail.jpg" alt="" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://melinthropy.org/2008/03/29/easter-bunny-cake/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
<enclosure url="http://melinda.theweatherses.org/wp-content/uploads/2008/03/easter2008.mp4" length="3880648" type="video/mp4" />
		</item>
	</channel>
</rss>

