<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7653016102658131633</id><updated>2012-01-23T04:09:31.989-08:00</updated><category term='actionscript 3.0'/><category term='computational biology'/><category term='rubyamf'/><category term='photography'/><category term='programming'/><category term='species'/><category term='evolutionary biology'/><category term='tutorial'/><category term='physiological biology'/><category term='video'/><category term='fractals'/><category term='mammals'/><category term='philosophy'/><category term='general science'/><category term='bioinformatics'/><category term='flex'/><title type='text'>Nature and Technology</title><subtitle type='html'>Using technology to discover our natural world</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-81569669152630516</id><published>2007-10-09T15:57:00.000-07:00</published><updated>2007-12-09T15:07:09.444-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyamf'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Beginner's Tutorial to RubyAMF with RESTful Rails</title><content type='html'>&lt;p&gt;&lt;strong&gt;Update Dec. 9, 2007&lt;/strong&gt;: I decided to get my own domain and to use Wordpress instead of Blogger so this blog has moved.  The new address is &lt;a href="http://panscendo.com"&gt;panscendo.com&lt;/a&gt;.  Any new updates to this tutorial will be &lt;a href="http://panscendo.com/beginners-tutorial-to-rubyamf-with-restful-rails/"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Update Nov. 29, 2007&lt;/strong&gt;: Tutorial now current for Rails 2.0 RC2 and RubyAMF 1.5&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.rubyamf.org/"&gt;RubyAMF&lt;/a&gt; is a flash remoting gateway that allows a Rails backend to communicate with a Flex frontend.  The marriage allows rapid development of rich internet applications. This tutorial goes over the basic steps of creating a RESTful Rails project that has a HTML and Flex frontend and data persistence via MySQL database.&lt;/p&gt;&lt;h1&gt;Rails&lt;/h1&gt; &lt;h2&gt;Setting up the Rails Project&lt;/h2&gt; &lt;p&gt;Create a new rails project by first opening a command prompt and then changing the working directory to your rails project directory.  Once there type the following command to create a rails project called "rubyamf"&lt;/p&gt; &lt;code&gt;&gt; &lt;strong&gt;rails rubyamf&lt;/strong&gt;&lt;/code&gt; &lt;p&gt;Now that we have a project created we need to install RubyAMF by using the rails installer.  To do this you must first move into the rubyamf directory and then run the ruby plugin installer script&lt;/p&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&gt; &lt;strong&gt;cd rubyamf&lt;/strong&gt;&lt;br /&gt;rubyamf&gt; &lt;strong&gt;ruby script/plugin install http://rubyamf.googlecode.com/svn/trunk/rubyamf&lt;/strong&gt;&lt;/pre&gt;&lt;/code&gt;&lt;p&gt;&lt;em&gt;Note: If you receive a error like this: &amp;quot;Missing the Rails 1.99.0 gem.  Please 'gem install -v=1.99.0 rails', update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.&amp;quot; then you just need to commet out the the line specified by the error.  Since Rails 2.0 is still being developed it isn't actually 1.99.0 but 1.99.blah.&lt;/em&gt;&lt;/p&gt; &lt;h2&gt;Connecting Rails to your Database&lt;/h2&gt; &lt;p&gt;Since we want to be able to save our data we need to create a database to store said data.  Open up a command prompt again and, assuming MySQL is already running, type:&lt;/p&gt;&lt;code&gt;&lt;pre&gt;&gt; &lt;strong&gt;mysql -u root -p&lt;/strong&gt;&lt;br /&gt;Enter password:&lt;br /&gt;mysql&gt; &lt;strong&gt;create database rubyamf;&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;p&gt;Good, now we need to tell Rails how to communicate with the database we just created.  Open up the config/database.yml file and edit the text to look like this:&lt;/p&gt;&lt;code&gt;&lt;pre&gt;development:&lt;br /&gt; adapter: mysql&lt;br /&gt; endocing: utf8&lt;br /&gt; database: &lt;strong&gt;rubyamf&lt;/strong&gt;&lt;br /&gt; username: root&lt;br /&gt; password: &lt;strong&gt;yourpassword&lt;/strong&gt;&lt;br /&gt; host: localhost&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;h2&gt;Creating a REST controller&lt;/h2&gt; &lt;p&gt;We now have a Rails project that is able to talk to a database.  Cool!  Now what we need to do is create a controller that issues the commands.  Rails allows us to do this with a little beauty command called "scaffold_resource."  When we run it we always follow it with an uppercase singular noun and a series of name value pairs.  The noun is the name of the Rails model, or the database table, and the name:value pairs are the names of the column in the table and their datatype.  Lets try it out; open up that command prompt once again, make the rubyamf directory the active dir and then issue the following command:&lt;/p&gt;&lt;code&gt;rubyamf&gt; &lt;strong&gt;ruby script/generate scaffold Message text:string&lt;/strong&gt;&lt;/code&gt;&lt;p&gt;&lt;em&gt;Note: &amp;quot;scaffold_resource&amp;quot; has been changed to &amp;quot;resource&amp;quot; in Rails 2.0.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Among other things you now have two important files; messages_controller.rb which Flex and RubyAMF will communicate with, and a migrate file (called 001_create_messages.rb) that we will run to create the database table.&lt;/p&gt;&lt;p&gt;Lets do the latter right now. In the command prompt type this:&lt;/p&gt;&lt;code&gt;rubyamf&gt; &lt;strong&gt;rake db:migrate&lt;/strong&gt;  &lt;h2&gt;Making Sure it all Works&lt;/h2&gt; &lt;p&gt;We're basically finished with rails for now. But before we call it good lets just make sure that it is running smoothly (and so we can look in awe of what we just did).&lt;/p&gt; &lt;p&gt;Boot up your rails server:&lt;/p&gt; &lt;code&gt;rubyamf&gt; &lt;strong&gt;ruby script/server&lt;/strong&gt;&lt;/code&gt;&lt;p&gt;Now open up your favorite browser and make sure that RubyAMF is running by going to &lt;a href="http://localhost:3000/rubyamf/gateway"&gt;http://localhost:3000/rubyamf/gateway&lt;/a&gt;.  You should see something like the following image.&lt;/p&gt; &lt;img src="http://brudert.googlepages.com/check_html_ui.gif" alt="Screenshot of RubyAMF Gateway up and running" /&gt; &lt;p&gt;If you do not get the above image and instead get prompted to download an AMF file you need to edit the app/controllers/rubyamf_controller.rb file.  Open it up and change:&lt;/p&gt;&lt;code&gt;&lt;pre&gt;amf_response = if request.env['CONTENT_TYPE'].to_s.match(/x-amf/) &lt;br /&gt;    headers['Content-Type'] = "application/x-amf"&lt;br /&gt;    RailsGateway.new.service(request.raw_post) #send the raw data throught the rubyamf gateway and create the response&lt;br /&gt;  else &lt;br /&gt;    welcome_screen_html # load in some stub html&lt;br /&gt;  end&lt;br /&gt;send_data(amf_response, :type =&gt; 'application/x-amf')&lt;/pre&gt;&lt;/code&gt;&lt;p&gt;To:&lt;/p&gt;&lt;code&gt;&lt;pre&gt;amf_response = if request.env['CONTENT_TYPE'].to_s.match(/x-amf/) &lt;br /&gt;    &lt;strong&gt;content_type  = "application/x-amf"&lt;/strong&gt;&lt;br /&gt;    RailsGateway.new.service(request.raw_post) #send the raw data throught the rubyamf gateway and create the response&lt;br /&gt;  else &lt;br /&gt;    &lt;strong&gt;content_type = "text/html"&lt;/strong&gt;&lt;br /&gt;   welcome_screen_html # load in some stub html&lt;br /&gt;  end&lt;br /&gt;&lt;strong&gt;send_data(amf_response, :type =&gt; content_type, :disposition=&gt;'inline')&lt;/strong&gt;&lt;/pre&gt;&lt;/code&gt;&lt;p&gt;&lt;em&gt;Note: If you use the &lt;a href="http://blog.rubyamf.org/?p=88#comment-497"&gt;rubyamf controller fix&lt;/a&gt; suggested on the &lt;a href="http://blog.rubyamf.org/"&gt;RAMF blog&lt;/a&gt; it will brake your application (thanks goes to Quest4 for &lt;a href="http://natureandtech.blogspot.com/2007/10/beginners-tutorial-to-rubyamf-with.html#comment-5604273395245235170"&gt;figuring&lt;/a&gt; this one out).  The above code is not official so use it at your own risk.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Now make sure our Messages controller is working by pointing your browser to &lt;a href="http://localhost:3000/messages"&gt;http://localhost:3000/messages&lt;/a&gt; and witnessing this:&lt;/p&gt;&lt;img src="http://brudert.googlepages.com/check_messages.gif" alt="Screenshot of message controller" /&gt;&lt;p&gt;So far so good. Now what we need to do is to add some data into the database so our Flex app has something to retrieve.  Lets do that by clicking the "New Message" link at http://localhost:3000/messages, typing a short message (this tutorial uses "Hello World"), and press the "Create" button.  *Bam* you just added a new Message to the database.&lt;/p&gt;&lt;p&gt;Enough of Rails, lets dive into Flex&lt;/p&gt;&lt;h1&gt;Flex&lt;/h1&gt;&lt;h2&gt;Setting up the Flex Project&lt;/h2&gt;&lt;p&gt;Boot up Adobe Flex and create a new project. I named mine rubyamf for consistency but you could name it something else (like planctomyces). Click the "Next" button, not the "Finish" button.  Set the output folder to the "bin" dir (you'll probably have to create this) in the "public" dir of your rails project.  That is, &lt;strong&gt;\rubyamf\public\bin&lt;/strong&gt;.  Press "Next." Now make sure that your output folder URL is set to: &lt;strong&gt;http://localhost:3000/bin&lt;/strong&gt;.  Press "Finish." You now have a shiny new Flex project.&lt;/p&gt;  &lt;h2&gt;Adding services-config.xml&lt;/h2&gt; &lt;p&gt;We need to create an XML file that will point your Flex project in the direction of your Rails project.  This is called the "services-config.xml" file and it needs to be placed in the same folder as your MXML file.  Create a new file via &lt;strong&gt;File &gt; New &gt; File&lt;/strong&gt; and name it "services-config.xml"&lt;/p&gt; &lt;p&gt;Now for the code.  Open up "services-config.xml" and add this code:&lt;/p&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt; &amp;lt;services-config&amp;gt;&lt;br /&gt;  &amp;lt;services&amp;gt;&lt;br /&gt;   &amp;lt;service id="rubyamf-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage"&amp;gt;&lt;br /&gt;    &amp;lt;destination id="rubyamf"&amp;gt;&lt;br /&gt;     &amp;lt;channels&amp;gt;&lt;br /&gt;      &amp;lt;channel ref="rubyamf"/&amp;gt;&lt;br /&gt;     &amp;lt;/channels&amp;gt;&lt;br /&gt;     &amp;lt;properties&amp;gt;&lt;br /&gt;      &amp;lt;source&amp;gt;*&amp;lt;/source&amp;gt;&lt;br /&gt;     &amp;lt;/properties&amp;gt;&lt;br /&gt;    &amp;lt;/destination&amp;gt;&lt;br /&gt;   &amp;lt;/service&amp;gt;&lt;br /&gt;  &amp;lt;/services&amp;gt;&lt;br /&gt;  &amp;lt;channels&amp;gt;&lt;br /&gt;   &amp;lt;channel-definition id="rubyamf" class="mx.messaging.channels.AMFChannel"&amp;gt;&lt;br /&gt;    &amp;lt;endpoint uri="http://localhost:3000/rubyamf/gateway" class="flex.messaging.endpoints.AMFEndpoint"/&amp;gt;&lt;br /&gt;   &amp;lt;/channel-definition&amp;gt;&lt;br /&gt;  &amp;lt;/channels&amp;gt;&lt;br /&gt; &amp;lt;/services-config&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;p&gt;Now we tell Flex to include "services-config.xml" when it compiles the application.  To do this we need to add a command to the flex compiler.  Do this by &lt;strong&gt;Project &gt; Properties &gt; Flex Compiler&lt;/strong&gt; and adding &lt;strong&gt;-services "services-config.xml"&lt;/strong&gt; to the "Additional compiler arguments" field.&lt;/p&gt;&lt;img src="http://brudert.googlepages.com/compiler_options.gif" alt="Screenshot showing additional compiler arguments field" /&gt;&lt;h2&gt;Creating the UI&lt;/h2&gt;&lt;p&gt;Now the fun part.  Here's the Flex UI code to paste into the MXML file:&lt;/p&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt; &amp;lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"&amp;gt;&lt;br /&gt;  &amp;lt;mx:TextArea id="resultTxt"&lt;br /&gt;   width="80%" height="30%" /&amp;gt;&lt;br /&gt;  &amp;lt;mx:Button id="getMessage"&lt;br /&gt;   label="Get Messages" /&amp;gt;&lt;br /&gt;  &amp;lt;mx:TextArea id="createTxt"&lt;br /&gt;   width="80%" height="30%" /&amp;gt;&lt;br /&gt;  &amp;lt;mx:Button id="createMessage"&lt;br /&gt;   label="Create Message" /&amp;gt;&lt;br /&gt; &amp;lt;/mx:Application&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;p&gt;The above should look something like this:&lt;/p&gt;&lt;img src="http://brudert.googlepages.com/flex_ui.gif" alt="Screenshot of flex ui" /&gt;&lt;p&gt;The above is pretty and all but it's like a mannequin; looks good but it has no function.  Lets give it a purpose and turn it into a real live lady.  We'll do this by adding the RemoteObject code.&lt;/p&gt;&lt;p&gt;Between the &amp;lt;mx:Application&amp;gt; and &amp;lt;mx:TextArea /&amp;gt; tags add this:&lt;/p&gt;&lt;code&gt;&lt;pre&gt; &amp;lt;mx:Script&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;   import mx.rpc.events.ResultEvent;&lt;br /&gt;   import mx.rpc.events.FaultEvent;&lt;br /&gt;   import mx.rpc.Fault;&lt;br /&gt;&lt;br /&gt;   private function onFault(e:FaultEvent):void&lt;br /&gt;   {&lt;br /&gt;    resultTxt.text = e.fault.faultString;&lt;br /&gt;   }&lt;br /&gt;   private function onResult(e:ResultEvent):void&lt;br /&gt;   {&lt;br /&gt;    resultTxt.text = e.message.toString();&lt;br /&gt;   }&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt; &amp;lt;/mx:Script&amp;gt;&lt;br /&gt; &lt;br /&gt; &amp;lt;mx:RemoteObject id="messageService" fault="onFault(event)" &lt;br /&gt;  source="MessagesController" destination="rubyamf"&amp;gt;&lt;br /&gt;  &amp;lt;mx:method name="index" result="onResult(event)" /&amp;gt;&lt;br /&gt;  &amp;lt;mx:method name="create" result="onResult(event)" /&amp;gt;&lt;br /&gt; &amp;lt;/mx:RemoteObject&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;RemoteObject&lt;/strong&gt; is where the magic occurs.  This particular instance we chose to call &lt;strong&gt;id="messageService"&lt;/strong&gt;&lt;/li&gt;  &lt;li&gt;&lt;strong&gt;source="MessagesController"&lt;/strong&gt; is the name of the rails controller we want to communicate with.  The actual name needs to be exactly the same as the ruby class name (open up app/controllers/messages_controller.rb)&lt;/li&gt;  &lt;li&gt;&lt;strong&gt;destination="rubyamf"&lt;/strong&gt; maps to the channel-definition in the services-config.xml file we created earlier (which then points Flex to the rubyamf remoting endpoint).&lt;/li&gt;&lt;li&gt;The two &lt;strong&gt;&amp;lt;mx:method /&amp;gt;&lt;/strong&gt; tags map to two of the methods in the MessagesController class.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;To call our methods we'll update the "click" event handlers of the two buttons in our UI. Add &lt;strong&gt;click="messageService.index.send();"&lt;/strong&gt; to the "getMessage" button and &lt;strong&gt;click="messageService.create.send({text: createTxt.text});"&lt;/strong&gt; to the "createMessage" button.&lt;/p&gt;&lt;code&gt;&lt;pre&gt; &amp;lt;mx:Button id="getMessage"&lt;br /&gt;  label="Get Messages"&lt;br /&gt;  click="messageService.index.send();" /&amp;gt;&lt;br /&gt;  &lt;br /&gt; &amp;lt;mx:Button id="createMessage"&lt;br /&gt;  label="Create Message" &lt;br /&gt;  click="messageService.create.send({text: createTxt.text});" /&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;h1&gt;Back to Rails&lt;/h1&gt; &lt;h2&gt;Tweaking messages_controller.rb&lt;/h2&gt; &lt;p&gt;We're almost finished. All we have to do now is explain to our rails controller about AMF. We'll be polite and speak it's native language; ruby.  Open up &lt;strong&gt;app/controllers/messages_controller.rb&lt;/strong&gt; and add &lt;strong&gt;"format.amf { render :amf =&gt; @messages }"&lt;/strong&gt; to the &lt;strong&gt;respond_to&lt;/strong&gt; block of the &lt;strong&gt;index&lt;/strong&gt; method.&lt;/p&gt;&lt;code&gt;&lt;pre&gt; def index&lt;br /&gt;     @messages = Message.find(:all)&lt;br /&gt;&lt;br /&gt;     respond_to do |format|&lt;br /&gt;       format.html # index.rhtml&lt;br /&gt;       format.xml  { render :xml =&gt; @messages.to_xml }&lt;br /&gt;       format.amf { render :amf =&gt; @messages }&lt;br /&gt;     end&lt;br /&gt; end&lt;/pre&gt;&lt;/code&gt;&lt;p&gt;The &lt;strong&gt;respond_to&lt;/strong&gt; block tells our controller to act differently when different mediums are attempting to work with it.  If a browser calls the &lt;strong&gt;index&lt;/strong&gt; method the controller will spit out HTML but now if the Flash Player requests something the controller will spit out AMF.  Perfect!&lt;/p&gt; &lt;p&gt;Updating the &lt;strong&gt;create&lt;/strong&gt; method is a bit trickier.  We add an &lt;strong&gt;if&lt;/strong&gt; statement to check if AMF was sent, and if so, do some tricky stuff.&lt;/p&gt;&lt;code&gt;&lt;pre&gt; def create&lt;br /&gt;  if is_amf&lt;br /&gt;   @message = Message.new({:text =&gt; params[0][:text]})&lt;br /&gt;  else&lt;br /&gt;   @message = Message.new(params[:message])&lt;br /&gt;  end&lt;br /&gt; ...&lt;/pre&gt;&lt;/code&gt;&lt;p&gt;&lt;em&gt;Note: params[0][:text] was &lt;a href="http://natureandtech.blogspot.com/2007/10/beginners-tutorial-to-rubyamf-with.html#comment-4536511138216079615"&gt;suggested&lt;/a&gt; by Peter Armstrong - thanks!&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Then we add some code to the respond_to block that tells the controller to speak AMF if it's talking to the flash player.&lt;/p&gt;&lt;code&gt;&lt;pre&gt; ...&lt;br /&gt;  respond_to do |format|&lt;br /&gt;    if @message.save&lt;br /&gt;         flash[:notice] = 'Message was successfully created.'&lt;br /&gt;         format.html { redirect_to message_url(@message) }&lt;br /&gt;         format.xml  { head :created, :location =&gt; message_url(@message) }&lt;br /&gt;   format.amf  { render :amf =&gt; "Message Saved" }&lt;br /&gt;       else&lt;br /&gt;         format.html { render :action =&gt; "new" }&lt;br /&gt;         format.xml  { render :xml =&gt; @message.errors.to_xml }&lt;br /&gt;   format.amf  { render :amf =&gt; @message.errors }&lt;br /&gt;       end&lt;br /&gt;     end&lt;br /&gt;   end&lt;/pre&gt;&lt;/code&gt;&lt;p&gt;Whew!  That's it.  We can test the app now.&lt;/p&gt; &lt;h2&gt;Testing... (in awe)&lt;/h2&gt; &lt;p&gt;First we need to start our server (or restart it).&lt;/p&gt; &lt;code&gt;rubyamf&gt; &lt;strong&gt;ruby script/server&lt;/strong&gt;&lt;/code&gt; &lt;p&gt;Compile and run your Flex project.  It should be running from the URL "http://localhost:3000/bin/rubyamf.html." Click on "Get Messages" and you should see something like this:&lt;/p&gt; &lt;img src="http://brudert.googlepages.com/check_get_messages.gif" alt="checking if get-messages works" /&gt; &lt;p&gt;Type a message into the second text area ("We received data from RubyAMF, can we send data to it?").  Press the button and you should see:&lt;/p&gt; &lt;img src="http://brudert.googlepages.com/check_create_message.gif" alt="checking if create-message works" /&gt; &lt;h1&gt;Finished!&lt;/h1&gt; &lt;br /&gt;&lt;p&gt;Yee-haw! By using the powers of RubyAMF we have just grabbed data from a database and written some right back at speeds &lt;a href="http://blog.vixiom.com/2007/07/19/flex-rubyamf-screencasts/"&gt;much faster&lt;/a&gt; than XML or JSON. Plus, we still get a HTML front end for those types that fear flash.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-81569669152630516?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/81569669152630516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=81569669152630516' title='50 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/81569669152630516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/81569669152630516'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/10/beginners-tutorial-to-rubyamf-with.html' title='Beginner&apos;s Tutorial to RubyAMF with RESTful Rails'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>50</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-1746596937890826071</id><published>2007-10-07T20:46:00.000-07:00</published><updated>2007-10-09T07:37:02.029-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='actionscript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='bioinformatics'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='computational biology'/><title type='text'>DNA Painter</title><content type='html'>DNA Painter is a small application that reads a nucleotide sequence and outputs an image.  The logic behind it is pretty simple.  I coded it while being influenced by ideas of cellular automata although it, technically, is not implementing those ideas.&lt;br /&gt;&lt;br /&gt;The program works by reading a nucleotide string (A, T, C, or G) and applying logic to the current character.  Each nucleotide gives the program a different and simple instruction.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A: Move one pixel down and add some red to the current color&lt;/li&gt;&lt;li&gt;T: Move one pixel right and add some green to the current color&lt;/li&gt;&lt;li&gt;C: Move one pixel up and add some blue to the current color&lt;/li&gt;&lt;li&gt;G: Move one pixel left and do something wacky (I think the current build right now just darkens the pixel)&lt;/li&gt;&lt;/ul&gt;In Actionscript 3.0 a pixel is a 32 bit number with 8 bits corresponding to the Alpha (transparency), Red, Green, and Blue values respectively.  By mapping the RGB values to certain nucleotides I'll get at least 3 colors per image.  Since chances are good that certain pixels will be painted on more than once the combination of two or more RGB values will result in a different color (red + blue = magenta, etc).  This means that any image, given a long enough nucleotide sequence, will result in a multitude of color.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Application&lt;/h2&gt;&lt;br /&gt;Although I created DNA Painter as an expression of art through computation and science one use of DNA Painter is the creation of visual representations of genes.  The application can output an image based off of, say, the aldolase gene of three different mammalian species so the relative divergence of the gene can be seen.  Yes, I realize that using some sort of bioinformatic statistical analysis on the actual DNA string will be much better.  But it's not cool you see, and in this world we need cooo-oool.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Notes on usage&lt;/h2&gt;Some things to think about while playing around with the program:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A long red line in an image means the mapped gene has a long series of A (adenine) and a long green horizontal line means T (thymine) and so on.&lt;/li&gt;&lt;li&gt;A stair step in the image is a sequence of alternating nucleotides&lt;/li&gt;&lt;li&gt;Increasing the bitmap size will show a more accurate picture of the gene.  This is because the drawing wraps when it reaches an edge of the bitmap.  So a larger bitmap means less overlap so less "noise".&lt;/li&gt;&lt;li&gt;The five available genes that are embedded in the application are all human genes&lt;/li&gt;&lt;/ul&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="dna_painter" width="100%" height="500" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"&gt;&lt;param name="movie" value="http://brudert.googlepages.com/dna_painter.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowScriptAccess" value="sameDomain" /&gt;&lt;embed src="http://brudert.googlepages.com/dna_painter.swf" quality="high" bgcolor="#FFFFFF" width="100%" height="500" name="dna_painter" align="middle" play="true" loop="false" quality="high" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;More Info on the genes&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://genome.ucsc.edu/cgi-bin/hgGene?hgsid=98427357&amp;db=hg18&amp;hgg_gene=uc003kxz.1&amp;hgg_chrom=chr5&amp;hgg_start=132224776&amp;hgg_end=132228376"&gt;GDF9&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://genome.ucsc.edu/cgi-bin/hgGene?hgsid=98427357&amp;db=hg18&amp;hgg_gene=uc001hxy.1&amp;hgg_chrom=chr1&amp;hgg_start=234753361&amp;hgg_end=234779619"&gt;ZNF7&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://genome.ucsc.edu/cgi-bin/hgGene?hgsid=98427357&amp;db=hg18&amp;hgg_gene=uc003zei.1&amp;hgg_chrom=chr8&amp;hgg_start=146023817&amp;hgg_end=146039409"&gt;CEACAM6&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://genome.ucsc.edu/cgi-bin/hgGene?hgsid=98427357&amp;db=hg18&amp;hgg_gene=uc002orm.1&amp;hgg_chrom=chr19&amp;hgg_start=46951340&amp;hgg_end=46967953"&gt;BAAT&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://genome.ucsc.edu/cgi-bin/hgGene?hgsid=98427357&amp;db=hg18&amp;hgg_gene=uc004bbd.1&amp;hgg_chrom=chr9&amp;hgg_start=103162889&amp;hgg_end=103187108"&gt;LGALS8&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Further Development&lt;/h2&gt;&lt;br /&gt;Although I would like to make the images prettier by applying filters and other effects I think I would like to focus more on the application of the program rather than the aesthetics.  It would be nice to remove the wrap effect so each gene or sequence will be a consistent image no matter the bitmap size.  This will allow the user to zoom in and out (and pan).  It'll allow the visualization of repeating sections of nucleotides that can be shown to exist across related genes.  Furthermore, by applying the application to mRNA we could break down each image to a series of codons.&lt;br /&gt;&lt;br /&gt;Now that I think about it we could create a catalog of common DNA sequences.  Whoa!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-1746596937890826071?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/1746596937890826071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=1746596937890826071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/1746596937890826071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/1746596937890826071'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/10/dna-painter.html' title='DNA Painter'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-8131873423001642752</id><published>2007-10-05T12:39:00.000-07:00</published><updated>2007-10-05T12:49:41.584-07:00</updated><title type='text'>Exposed: Crows using tools</title><content type='html'>&lt;a href="http://users.ox.ac.uk/~kgroup/tools/crowcams.shtml"&gt;&lt;img src="http://users.ox.ac.uk/~kgroup/tools/images/crowcam.jpg" alt="Crow cam" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://users.ox.ac.uk/~kgroup/index.html"&gt;Behavioural Ecology Research Group&lt;/a&gt; of Oxford has recently published a paper in &lt;em&gt;Science&lt;/em&gt; detailing tool use by New Caledonian crows, &lt;em&gt;Corvus moneduloides&lt;/em&gt;, by attaching miniature cameras to their tail feathers.&lt;br /&gt;&lt;br /&gt;Both &lt;a href="http://www.sciam.com/article.cfm?chanID=sa003&amp;articleID=6B81B7F7-E7F2-99DF-39863302C45E0D3B&amp;ref=rss"&gt;Sciam &lt;/a&gt;and &lt;a href="http://news.bbc.co.uk/2/hi/science/nature/7027923.stm"&gt;BBC News&lt;/a&gt; cover the story.  BBC News links to the videos but if you want to avoid the 30 sec advertisements I suggest you go straight to the &lt;a href="http://users.ox.ac.uk/~kgroup/tools/crowcams_movies.shtml"&gt;source&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-8131873423001642752?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/8131873423001642752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=8131873423001642752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/8131873423001642752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/8131873423001642752'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/10/exposed-crows-using-tools.html' title='Exposed: Crows using tools'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-2939677465405146119</id><published>2007-10-04T20:25:00.000-07:00</published><updated>2007-10-04T20:50:20.717-07:00</updated><title type='text'>Free college lectures</title><content type='html'>Ah yes, get your quality learnings right &lt;a href="http://youtube.com/profile?user=ucberkeley"&gt;here &lt;/a&gt;- all for free.  UC Berkeley has uploaded a series of lectures to youtube on various topics including biology, physics, and chemistry.  There will be more to come.&lt;br /&gt;&lt;br /&gt;So far, in the biology realm, there is only Integrative Biology 131.  The lectures I browsed are very good and I look forward to more.  Be a lobbyist and help get some lectures on evolution and/or ecology up.&lt;br /&gt;&lt;br /&gt;This page lists the lectures by class: &lt;a href="http://youtube.com/profile?user=ucberkeley"&gt;http://youtube.com/profile?user=ucberkeley&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update:&lt;/strong&gt; I found out that Berkeley has been uploading webcasts and podcasts of their lectures since 2005.  This semester they have a total of 45 classes.  Here is the &lt;a href="http://webcast.berkeley.edu/courses.php?semesterid=22"&gt;class list&lt;/a&gt;.  To watch or listen to achieved lectures change the number following "semesterid=" in the URL to a previous semester (changing it to "1" will give you Spring 2005's &lt;a href="http://webcast.berkeley.edu/courses.php?semesterid=1"&gt;class list&lt;/a&gt;).  There are some semesters with no classes and others with only a few.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-2939677465405146119?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/2939677465405146119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=2939677465405146119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/2939677465405146119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/2939677465405146119'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/10/free-college-lectures.html' title='Free college lectures'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-9013089892710980610</id><published>2007-09-29T10:22:00.000-07:00</published><updated>2007-09-29T12:16:23.724-07:00</updated><title type='text'>Scientists Ask Congress To Fund $50 Billion Science Thing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.theonion.com/content/files/images/Scientist-Ask-Jump.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 400px;" src="http://www.theonion.com/content/files/images/Scientist-Ask-Jump.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;According to the scientists, the electromagnetic science-maker will make atoms move and spin around very quickly, though spectators at the hearing said afterward they could not account for how one could get some atoms to move around faster than other ones if everything is made of atoms anyway. In addition, the scientists said that the device would be several miles in circumference, which puzzled onlookers who had long assumed that atoms were tiny. Despite these apparent inconsistencies, the scientists, in Rep. Gordon's words, appeared "very smart-sounding" and confident that their big spinner would solve some kind of problem they described.&lt;/blockquote&gt;&lt;br /&gt;- via &lt;a href="http://www.theonion.com/content/news/scientists_ask_congress_to_fund_50"&gt;The Onion&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The above article is a stunningly good satire on the difficulties of scientific journalism and thus the way the public views scientific funding and research.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-9013089892710980610?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/9013089892710980610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=9013089892710980610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/9013089892710980610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/9013089892710980610'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/09/scientists-ask-congress-to-fund-50.html' title='Scientists Ask Congress To Fund $50 Billion Science Thing'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-3226218468360982325</id><published>2007-09-19T21:23:00.000-07:00</published><updated>2007-09-19T21:30:11.566-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='general science'/><category scheme='http://www.blogger.com/atom/ns#' term='computational biology'/><title type='text'>Encyclopedia of Life</title><content type='html'>&lt;blockquote&gt;Comprehensive, collaborative, ever-growing, and personalized, the Encyclopedia of Life is an ecosystem of websites that makes all key information about life on Earth accessible to anyone, anywhere in the world. Our goal is to create a constantly evolving encyclopedia that lives on the Internet, with contributions from scientists and amateurs alike. To transform the science of biology, and inspire a new generation of scientists, by aggregating all known data about every living species. And ultimately, to increase our collective understanding of life on Earth, and safeguard the richest possible spectrum of biodiversity.&lt;/blockquote&gt;&lt;br /&gt;I get goosebumps every time I watch the promo video for the &lt;a href="http://www.eol.org/home.html"&gt;Encyclopedia of Life&lt;/a&gt;.  It was launched back in May and I haven't heard anything about it since then.  If E. O. Wilson pulls this off it could be the best thing to hit the internet.  Ever.&lt;br /&gt;&lt;br /&gt;&lt;embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=6637229921456127443&amp;hl=en" flashvars=""&gt; &lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-3226218468360982325?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/3226218468360982325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=3226218468360982325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/3226218468360982325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/3226218468360982325'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/09/encyclopedia-of-life.html' title='Encyclopedia of Life'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-9071688983760408468</id><published>2007-09-18T21:17:00.000-07:00</published><updated>2007-09-18T21:35:54.882-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='general science'/><category scheme='http://www.blogger.com/atom/ns#' term='evolutionary biology'/><title type='text'>Cordyceps Fungi vs Ants</title><content type='html'>Cordyceps is a type of fungi that parasitizes insects and some arthropods.  BBC's &lt;em&gt;Planet Earth&lt;/em&gt; had a clip on a type of ant that, when parasitized, is 'brainwashed' (the ants perception of pheromones is screwed) into climbing up a tall structure.  The fruiting body consumes the ant's brain and grows out of its head.  The result is a mystical ant-unicorn chimera.  &lt;br /&gt;&lt;br /&gt;Is this a case of extreme co-evolution or just a sort of unintended effect (much like many plants have chemicals that evolved for self-defense but work in such a way that we just have to use them recreationally)?  I'll do some sleuthing in the near future.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;fungi growth on insect! [youtube]&lt;/h3&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/o3t4v8PmY_Q"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/o3t4v8PmY_Q" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Find more info &lt;a href="http://neurophilosophy.wordpress.com/2006/11/20/brainwashed-by-a-parasite/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-9071688983760408468?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/9071688983760408468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=9071688983760408468' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/9071688983760408468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/9071688983760408468'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/09/cordyceps-fungi-vs-ants.html' title='Cordyceps Fungi vs Ants'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-5694558093114351686</id><published>2007-09-16T20:50:00.000-07:00</published><updated>2007-09-16T21:12:58.736-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='general science'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><title type='text'>Enemies of Reason</title><content type='html'>Richard Dawkins, the head-cheese of atheism, has recently broaden his attacks to superstition vs reason instead of religion vs science.  In his two part series titled &lt;em&gt;Enemies of Reason&lt;/em&gt; Dawkins argues that religion and pseudo-scientific health care are a result of poor reasoning and that both tax human society.&lt;br /&gt;&lt;br /&gt;I highly recommend the series.  I've embedded them on this blog for your convenience.  It is now easier to watch the two episodes than turning on your tv.  So, ummm, don't turn on your tv.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Slaves to Superstition&lt;/h3&gt;&lt;br /&gt;&lt;embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-7218293233140975017&amp;hl=en" flashvars=""&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;The Irrational Health Service&lt;/h3&gt;&lt;br /&gt;&lt;embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-4720837385783230047&amp;hl=en" flashvars=""&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-5694558093114351686?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/5694558093114351686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=5694558093114351686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/5694558093114351686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/5694558093114351686'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/09/enemies-of-reason.html' title='Enemies of Reason'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-6749065060152766869</id><published>2007-09-08T04:07:00.000-07:00</published><updated>2007-09-25T09:02:30.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general science'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><title type='text'>Randomness and Free Will</title><content type='html'>For the past few days I have been interested in the history of life on Earth.  One question that is sure to arise when dealing with such things is if we restart the system (from the big bang) will intelligent life arise again.  More specifically, will humans always be the victors on the top of the evolutionary tree.  Will we truly be the king of the mountain?&lt;br /&gt;&lt;br /&gt;I think that the above question begs another.  Is there true randomness in nature or are there definite causes and effects?  For different outcomes to occur in a system that is initiated with the same values for each variable there needs to be randomness.  If the evolution of intelligent life is inevitable then it would have to be the end of a long string of causes and effects occurring in a world that lacks randomness.&lt;br /&gt;&lt;br /&gt;Nature is all about regularly occurring phenomenon.  The laws of physics must work in such a way that a certain set of causes will produce an effect.  Science, at its foundation, requires the 'necessity' of a certain effect from a certain cause (science of course does not dictate how the world works but only finds the best way of explaining it.  So far it has worked really well).  There are plenty of terms like "random" in scientific models, such as the "stochasticity" or how the "electron cloud"  but these are random in the sense that they are uncertain.  There are so many variables affecting the model that we just say it is random.  But of course it is not &lt;em&gt;truely&lt;/em&gt; random.&lt;br /&gt;&lt;br /&gt;So we do not see any randomness in nature.  What does this mean about free will?  Unless we conjure up some sort of spiritual tinkerer to bless our minds with something outside of the physical world then we must accept that our thoughts and actions are predestined.  We are part of the same laws that govern everything else in the world and if those laws lack randomness then we must as well.&lt;br /&gt;&lt;br /&gt;It seems that the actions you &lt;em&gt;choose&lt;/em&gt; to take when you're 80 years old are predictable from the moment you are conceived.  Well, actually, they are predictable from the moment the universe began.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update:&lt;/strong&gt;Hmmmm.... &lt;a href="http://en.wikipedia.org/wiki/Determinism"&gt;Determinism&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-6749065060152766869?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/6749065060152766869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=6749065060152766869' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/6749065060152766869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/6749065060152766869'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/09/randomness-and-free-will.html' title='Randomness and Free Will'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-4371451084861514551</id><published>2007-08-30T09:30:00.000-07:00</published><updated>2007-08-30T09:38:08.949-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general science'/><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='species'/><title type='text'>Sword Fern, Polystichum munitum</title><content type='html'>&lt;a href="http://picasaweb.google.com/brudert/MiscInWA/photo#5104532170707801074"&gt;&lt;img src="http://lh4.google.com/brudert/Rtbw9tuXk_I/AAAAAAAAAj4/ZXlIlmt4mS0/s288/IMG_2896.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;Sword Fern.  Photo taken near middle fork snoqualmie river, WA.&lt;br /&gt;&lt;br /&gt;Although the above sword fern may look and act almost exactly like another in nearby Oregon it has hints of once being on the track to becoming a different species.  A paper by Soltis &lt;em&gt;et al&lt;/em&gt;. (1996) looked at chloroplast DNA of the sword fern, among other plants, and found that there is a significant difference between populations in the north (Alaska to central Oregon) and populations in the south (central Oregon to northern California).&lt;br /&gt;&lt;br /&gt;Genetic isolation of a once uniform population does not occur easily.  For two populations to emerge from one there must be some sort of isolating mechanism that prevents the exchange of genetic material.  Isolation allows the two populations to diverge genetically through genetic drift and selection without sharing the changes.&lt;br /&gt;&lt;br /&gt;Soltis &lt;em&gt;et al&lt;/em&gt;. (1996) suggested that the isolating mechanism was extensive glaciation which occurred in the Pleistocene (the famous Ice Age).  Because plants have an extremely difficult time growing on moving rivers of ice the sword fern population was cleaved and left with, at least, one northern refugium and one southern refugium.  The two populations were left to go about their own business and respond to their own local environment.&lt;br /&gt;&lt;br /&gt;Today the glaciers are mostly gone and the northern and southern populations are allowed to fill the gap.  Genetic material is being transferred between the two and the differences will most likely blur but there will always be the hint of what once could have been a new and noble species.&lt;br /&gt;&lt;br /&gt;Sources&lt;br /&gt;&lt;br /&gt;Soltis, D., Gitzendanner, M., Strenge, D., Soltis, P. (1996) Chloroplast DNA intraspecific phylogeography of plants from the Pacific Northwest of North America.  Plant Systematics and Evolution (206) 353-373.  http://www.springerlink.com/content/v15m72k6238462p3/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-4371451084861514551?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/4371451084861514551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=4371451084861514551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/4371451084861514551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/4371451084861514551'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/08/sword-fern-polystichum-munitum.html' title='Sword Fern, Polystichum munitum'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-8399944274391609762</id><published>2007-08-25T12:10:00.000-07:00</published><updated>2007-08-25T14:01:20.312-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general science'/><title type='text'>Lunar Eclipse</title><content type='html'>Tuesday morning people in the western hemisphere and eastern Asia will be able to view the second lunar eclipse of 2007.  A lunar eclipse occurs when the Earth comes between the sun and the moon.  The Earth prevents sunlight from hitting the moon so a shadow is cast.&lt;br /&gt;&lt;br /&gt;Here's a simulation of a lunar eclipse created by &lt;a href="http://science.slashdot.org/comments.pl?sid=279687&amp;cid=20353673"&gt;E-Lad&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;embed style="width:400px; height:326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=818612007133271890&amp;hl=en" flashvars=""&gt; &lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-8399944274391609762?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/8399944274391609762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=8399944274391609762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/8399944274391609762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/8399944274391609762'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/08/lunar-eclipse.html' title='Lunar Eclipse'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-7283927956366955386</id><published>2007-08-23T08:21:00.000-07:00</published><updated>2007-08-23T08:26:48.926-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general science'/><title type='text'>SciVee</title><content type='html'>It is often difficult to communicate scientific findings to both the scientific community and the general public.  This is because journals are numerous, expensive, and often difficult to digest.  In an attempt to remedy this problem &lt;a href="http://www.scivee.tv/"&gt;SciVee&lt;/a&gt; has launched.&lt;br /&gt;&lt;br /&gt;From the &lt;a href="http://www.scivee.tv/help/view/16"&gt;FAQ&lt;/a&gt;, "SciVee is about the free and widespread dissemination and comprehension of science."  It's a video service, kind of like youtube, but smart.  SciVee has the support of &lt;a href="http://www.plos.org/"&gt;PloS&lt;/a&gt;, an online, free, peer-reviewed, journal.  It works by having scientists submit their paper and accompany it with a short video presentation explaining what their paper is addressing.  It's neat.  It's a step towards getting science out to the masses.&lt;br /&gt;&lt;br /&gt;Right now there seems to be a shortage of content but check it out anyways.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-7283927956366955386?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/7283927956366955386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=7283927956366955386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/7283927956366955386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/7283927956366955386'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/08/scivee.html' title='SciVee'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-1012293891950873589</id><published>2007-08-21T20:20:00.000-07:00</published><updated>2007-08-30T09:38:37.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general science'/><category scheme='http://www.blogger.com/atom/ns#' term='mammals'/><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='physiological biology'/><category scheme='http://www.blogger.com/atom/ns#' term='species'/><title type='text'>Meadow Vole, Microtus pennsylvanicus</title><content type='html'>&lt;a href="http://picasaweb.google.com/brudert/MiscInWA/photo#5101013282372390274"&gt;&lt;img src="http://lh3.google.com/brudert/RspwjdJbDYI/AAAAAAAAAiA/ayVyAF2CrgQ/s400/IMG_3117.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;Baby meadow vole, taken near Rochester, WA.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://cat.inist.fr/?aModele=afficheN&amp;cpsidt=16974435"&gt;paper &lt;/a&gt;by Pierce &lt;em&gt;et al&lt;/em&gt;. (2005) titled &lt;em&gt;Food-deprivation-induced changes in sexual behavior of meadow voles, Microtus pennsylvanicus&lt;/em&gt; addresses one small aspect of the complex conditions which determine vole reproduction.  The research found that short-term food availability has an impact on reproduction of meadow voles.&lt;br /&gt;&lt;br /&gt;The researches basically withheld food from male and female voles and observed the changes in sexual behavior.  The females were more sensitive to brief (6-12 hr) and moderate (18-24 hr) pauses in food than the males.  Females must expend more resources on carrying babies than males do with expending semen so it makes sense that females are more sensitive to a decrease in important resources such as food.&lt;br /&gt;&lt;br /&gt;Sources&lt;br /&gt;&lt;br /&gt;Pierce, A. Ferkin, M. Williams, T. 2005. Food-deprivation-induced changes in sexual behavior of meadow voles, Microtus pennsylvanicus. Animal behaviour 70(2): 339-348.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-1012293891950873589?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/1012293891950873589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=1012293891950873589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/1012293891950873589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/1012293891950873589'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/08/meadow-vole-microtus-pennsylvanicus.html' title='Meadow Vole, Microtus pennsylvanicus'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7653016102658131633.post-1925170556664648451</id><published>2007-08-12T08:25:00.000-07:00</published><updated>2007-08-12T09:38:26.079-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='computational biology'/><category scheme='http://www.blogger.com/atom/ns#' term='fractals'/><title type='text'>Fractals in Nature</title><content type='html'>The morphology of plants is structured in such a way that repetitive patterns occur.  This is termed modular organization and is a method of defining certain repetitive structures of a plant.  If we consider a single instance of a leaf or a branch as a module then we can reduce a (very) simplified tree to being just a collection of these two components.  If we are in need of representing a tree programmically then realizing the above makes things much easier.  Even more interesting Ferra et al. (2005) states that “in some cases, the modules are arranged into compound, recursively nested, fractal-like structures, with similar patterns appearing at different scales.”&lt;br /&gt;&lt;br /&gt;&lt;div align="middle"&gt;&lt;a href="http://www.flickr.com/photos/roddh/156854158"&gt;&lt;img src="http://farm1.static.flickr.com/73/156854158_bd278abdbf_m.jpg" alt="fern" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ferra et al. mentioned that many plants have fractal-like structures.  So what are they?  Fractals are statistically self-similar structures, which, according to Mandelbrot (1982), is “when each piece of a shape is geometrically similar to the whole, both the shape and the cascade that generate it are called self-similar.”  To see this graphically it'll help to refer to the picture of the fern.  Each pinnule (the smallest 'leaf') of the fern is geometrically similar to each pinna which is geometrically similar to the entire fern.  Nature repeats and beauty is a result.&lt;br /&gt;&lt;br /&gt;Below is a flash application that I created by modifying &lt;a href="http://zenbullets.com/blog/?page_id=80"&gt;code&lt;/a&gt; written by Matt Pearson (2007).  The tree is composed of a 'trunk' and a 'leaf' both of which are laid down by a recursive function.  Click it to randomly generate a new tree.&lt;br /&gt;&lt;br /&gt;&lt;div align="middle"&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="Tree" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" height="300" width="300"&gt;&lt;param name="movie" value="http://www.trailtracer.com/naturetech/Tree.swf"&gt;&lt;param name="quality" value="high"&gt;&lt;param name="bgcolor" value="#ffffff"&gt;&lt;param name="allowScriptAccess" value="sameDomain"&gt;&lt;embed src="http://www.trailtracer.com/naturetech/Tree.swf" bgcolor="#ffffff" name="Tree" play="true" loop="false" quality="high" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" height="300" width="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Sources&lt;br /&gt;&lt;br /&gt;[1] B. B. Mandelbrot. The fractal geometry of nature. W. H. Freeman, San Francisco, 1982.&lt;br /&gt;[2] Ferrao P., Godin C., Prusinkiewicz P. Toward a quantification of self-similarity in plants. Fractals, 2005. http://algorithmicbotany.org/papers/similar.fractals2005.pdf&lt;br /&gt;[3] Pearson, M. Fractals in ActionScript 3 - A Flash Tutorial. zenbullets.com. 2007. http://zenbullets.com/blog/?page_id=80&lt;br /&gt;[4] http://www.flickr.com/photos/roddh/156854158/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7653016102658131633-1925170556664648451?l=natureandtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://natureandtech.blogspot.com/feeds/1925170556664648451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7653016102658131633&amp;postID=1925170556664648451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/1925170556664648451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7653016102658131633/posts/default/1925170556664648451'/><link rel='alternate' type='text/html' href='http://natureandtech.blogspot.com/2007/08/fractals-in-nature.html' title='Fractals in Nature'/><author><name>bryanc</name><uri>http://www.blogger.com/profile/03416619625782455123</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://lh6.google.com/image/brudert/RhUksLy8sxI/AAAAAAAAARI/JmQLpIYO_Jw/s144/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/73/156854158_bd278abdbf_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
