<?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-7127036200914843180</id><updated>2011-08-02T15:58:47.886-08:00</updated><category term='arduino'/><category term='research'/><category term='cuda'/><category term='python'/><category term='reference'/><category term='CentOS'/><category term='random'/><title type='text'>Casual Engineer</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-5423609707281931487</id><published>2011-01-13T13:25:00.002-09:00</published><updated>2011-01-13T13:32:49.140-09:00</updated><title type='text'>Exploring Node.js</title><content type='html'>Over the past few days I've been messing around with node.js trying to figure it out. The fundamental thing I've been struggling with is the event-driven programming, which I've never done before. This whole process has been a substantial change in how I think about problem solving with software.&lt;br /&gt;&lt;br /&gt;So why am I looking at node.js? Essentially I'm interested in having a very light weight server for a data logging application. The idea is the data logger should be able to take the sensor measurements and push them to a server on the local network. The server will store the values in some manner (maybe a small database, maybe a file). A webpage could be hosted to present the recorded data.&lt;br /&gt;&lt;br /&gt;I have some experience with setting up a LAMP stack, but my intuition is that having an Apache server (though it will work) may be a bit overkill for what I'm envisioning. So I'm exploring alternative technology that may be out there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-5423609707281931487?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/5423609707281931487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2011/01/exploring-nodejs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/5423609707281931487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/5423609707281931487'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2011/01/exploring-nodejs.html' title='Exploring Node.js'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-5005675758254491549</id><published>2009-11-30T13:25:00.000-09:00</published><updated>2009-11-30T13:27:16.263-09:00</updated><title type='text'>Hamiltonian Mechanics: Now I Get It</title><content type='html'>So today i was reading &lt;a href="http://terrytao.wordpress.com/2009/11/26/from-bose-einstein-condensates-to-the-nonlinear-schrodinger-equation/"&gt;this&lt;/a&gt; and followed some of the links to the wikipedia entries. The one for &lt;a href="http://en.wikipedia.org/wiki/Hamiltonian_mechanics"&gt;Hamiltonian Mechanics&lt;/a&gt; really made a bunch of stuff clear and make sense.&lt;br /&gt;&lt;br /&gt;Wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-5005675758254491549?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/5005675758254491549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/11/hamiltonian-mechanics-now-i-get-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/5005675758254491549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/5005675758254491549'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/11/hamiltonian-mechanics-now-i-get-it.html' title='Hamiltonian Mechanics: Now I Get It'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-2271178642157163949</id><published>2009-09-18T16:30:00.011-08:00</published><updated>2011-01-14T10:49:29.908-09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CentOS'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Install Python 2.6.2 on CentOS 5.3</title><content type='html'>Normally I don't use CentOS but rather Ubuntu since I like the shiny new stuff. Unfortunately for me, though, my work gave me some new processing machines with the provision I use CentOS. CentOS is great in that it's rock-solid stable. It sucks because to get that stability the software versions are rarely updated except for back-ports of security fixes. This isn't much of an issue unless you need some features existing in newer versions. What sucked is my current projects take full advantage of the multiprocessing library in python 2.6. This was a bit of a pain to figure out.&lt;br /&gt;&lt;br /&gt;For example, CentOS 5.3 has python 2.4 which is hella old. It works in general, but if your project requires the use of something like the multiprocessing library (available in python 2.6) then you're hosed. Furthermore, just upgrading CentOS to 2.6 will significantly break the system. Bunches of things are tightly bound to version 2.4, really important stuff like yum for instance.&lt;br /&gt;&lt;br /&gt;The way around this is to install python 2.6 along side 2.4 and adjust your bash environment variables to look there. Once that's established you can take advantage of all sorts of tasty things like multiprocessing and virtualenv. Since it was a nuisance to figure out, I'm gonna go ahead and document the steps here. Much of this is swiped from &lt;a href="http://villaroad.com/2009/08/rolling-python-2-6-2-on-centos-5-3/"&gt;Villa Road&lt;/a&gt; with some alterations determined from my own experience and some other sites I've already forgotten.&lt;br /&gt;&lt;br /&gt;Step 1: login as root&lt;br /&gt;&lt;pre class="brush:bash"&gt;ssh root@yourbox.com&lt;br /&gt;cd&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 2: Install the extra packages for enterprise linux repository. It adds some previously unavailable packages and also provides some updates to existing repo packages&lt;br /&gt;&lt;pre class="brush:bash"&gt;rpm -ivh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 3: Install development tools, ssl and zlib. These development tools will allow us to build python properly as well as aide setuptools when using easy_install later in this tutorial.&lt;br /&gt;&lt;pre class="brush:bash"&gt;yum groupinstall 'Development Tools'&lt;br /&gt;yum install openssl-devel* zlib*.x86_64&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 4: Download sqlite, python and setuptools&lt;br /&gt;&lt;pre class="brush:bash"&gt;wget http://www.sqlite.org/sqlite-amalgamation-3.6.18.tar.gz&lt;br /&gt;wget http://www.python.org/ftp/python/2.6.2/Python-2.6.2.tgz&lt;br /&gt;wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c9-py2.6.egg&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 5: Build and Install SQLite&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd&lt;br /&gt;tar zxvf sqlite-amalgamation-3.6.18.tar.gz&lt;br /&gt;cd sqlite-3.6.18/&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 6: Build and install Python 2.6.2. Now, there are some important things to discuss here. First and foremost we have given the option –prefix=/opt/python2.6. This option installs the python binaries and the python library in /opt/python2.6 (it will make the dir for us) rather than in /usr/local/ which would, as we stated above, replace the standard python interpreter and inherently be bad juju. The /opt directory in redhat based distributions is a directory provides a home for larger, mostly custom built, binaries and applications.&lt;br /&gt;&lt;br /&gt;Also, we made sure that the interpreter is going to make use of multiple threads by adding the –with-threads option. The –enable-shared option just allows python to be embedded into other apps.&lt;br /&gt;&lt;pre class="brush:bash"&gt;cd&lt;br /&gt;tar xfz Python-2.6.2.tgz&lt;br /&gt;cd Python-2.6.2&lt;br /&gt;./configure --prefix=/opt/python2.6 --with-threads --enable-shared&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 7: Now we need to make sure all our users can use the new python. To do this, we will need to add a couple of aliases and an addition to the $PATH to each users .bash_profile. This file is kept in the home directory of each user (eg: /home/rwilson/.bash_profile)&lt;br /&gt;&lt;pre class="brush:bash"&gt;su - root&lt;br /&gt;cd&lt;br /&gt;nano .bash_profile&lt;br /&gt;# add the following lines to the bottom of the file&lt;br /&gt;alias python='/opt/python2.6/bin/python'&lt;br /&gt;alias python2.6='/opt/python2.6/bin/python'&lt;br /&gt;PATH=$PATH:/opt/python2.6/bin&lt;br /&gt;# 'ctrl + o' to save the file and 'ctrl+x' to close the file&lt;br /&gt;&lt;br /&gt;# now do the same for every other user, like this:&lt;br /&gt;nano /home/rwilson/.bash_profile&lt;br /&gt;alias python='/opt/python2.6/bin/python'&lt;br /&gt;alias python2.6='/opt/python2.6/bin/python'&lt;br /&gt;PATH=$PATH:/opt/python2.6/bin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 8: Now we need to update BASH so that it knows about the new shared libraries that we have put on the system. Create a symlink to them and then reload the cache of the shared libraries&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;su -&lt;br /&gt;cd&lt;br /&gt;cat &gt;&gt; /etc/ld.so.conf.d/opt-python2.6.conf&lt;br /&gt;/opt/python2.6/lib    #hit 'enter' and then 'ctrl+d'&lt;br /&gt;ldconfig&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 9: Now that bash is aware of our new libraries and such, let's go ahead and make /opt/python2.6 writable by everyone. Normally this may be a no no, but it was the only way I could make a clean break from the system library when it came time to install setuptools.&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;chmod -R a+w /opt/bin/python2.6&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 10: At this point I chose to close out my terminal and bring it back up, then log back in as a non-root user to be certain my .bash_profile was loaded correctly. There is most certainly another way to do it, but I'm lazy and know this works fine. Then I checked my python version (which should be 2.6.2) and went from there&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;#do this after logging out, closing the terminal, bringing the terminal back up, and logging back in as non-root user&lt;br /&gt;which python&lt;br /&gt;# should say:&lt;br /&gt;# alias python='/opt/python2.6/bin/python'&lt;br /&gt;# /opt/python2.6/bin/python&lt;br /&gt;&lt;br /&gt;python -V&lt;br /&gt;# should say:&lt;br /&gt;#Python 2.6.2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 11: OK now we're all good to go with install setuptools to our new python&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;cd&lt;br /&gt;wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c9-py2.6.egg&lt;br /&gt;sh setuptools-0.6c9-py2.6.egg&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Step 12: And finally we make a symlink for our shared library&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;cd /opt/python2.6/lib/python2.6/config&lt;br /&gt;ln -s ../../libpython2.6.so .&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now you can use easy_install for grabbing things like numpy for your shiny new Python 2.6.2 =)&lt;br /&gt;&lt;br /&gt;The next article will be about getting virtualenv setup and running. That one should be fairly universal for most distributions. Then later we'll be looking at building BLAS, ATLAS, FFTW and friends from source so they take advantage of our specific hardware. =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-2271178642157163949?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/2271178642157163949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/09/install-python-262-on-centos-53.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/2271178642157163949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/2271178642157163949'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/09/install-python-262-on-centos-53.html' title='Install Python 2.6.2 on CentOS 5.3'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-1802505834575333767</id><published>2009-08-28T00:05:00.003-08:00</published><updated>2009-08-28T00:18:03.713-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>It's Been a While</title><content type='html'>Indeed it has. So much has happened within the past month or so. Mom and Lowell came to visit. Benedikt our German intern moved in downstairs. My son Ben has grown a lot, holding his head up, smiling, etc. We even took him to Sears for a photo session. He was such a ham. I'll get some of the photos up sometime. I got offered a cool opportunity at work to present a scientific paper in November. Becky, Ben and I went to Anchorage for her cousins wedding. We shopped a lot, I had Arby's =), and we met up with a friend of hers. Yeah a lot has been going on.&lt;br /&gt;&lt;br /&gt;I've been spending most of my time working on the science project. I was told I'm the only person at the facility that could possibly pull it off so naturally I accepted. The appeal to my ego worked it seems and now i'm spending many late nights in the office cranking out code and building a number crunching machine. That, actually, has been a real pain in the but. It's an 8-core xeon rig, with 12GB ram, and about 10TB storage. I've been having networking issues that after about 5 full days and extremely late nights of troubleshooting ended up being that it was plugged into a network switch that was failing. Good going linksys. Your $20 switch cost us about $1000+ in man-hours. Stupid. &lt;br /&gt;&lt;br /&gt;Over the past month I've been coding a lot in python. It rocks my face off so hard I can't begin to describe. Part of my project involved doing a baseline set of image processing. I had the majority of the code completed in about two days because python handled a lot of the tedious stupid stuff like file management, memory management, and options parsing. I spent the next few days learning about the multiprocessing library so i could fork the number crunching software to multiple cpus. I only had 70 images to process for this round, but it took a whole 13 hours because i only had 2 cpus on my desktop. With my new server I can fork them to 8 cpus running about the same speed. Essentially it will be a switch from having a cpu limited process, to a throughput limited process. Each image is about 1GB, and I can only push data around from the hdd's so fast. &lt;br /&gt;&lt;br /&gt;Anyways I should get going for now.&lt;br /&gt;&lt;br /&gt;Laters&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-1802505834575333767?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/1802505834575333767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/08/its-been-while.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/1802505834575333767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/1802505834575333767'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/08/its-been-while.html' title='It&apos;s Been a While'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-6823364642343259714</id><published>2009-07-14T09:58:00.003-08:00</published><updated>2009-07-14T10:09:48.088-08:00</updated><title type='text'></title><content type='html'>Ok, so I've toyed with the absolute minimal Arduino I could figure, see: &lt;a href="http://itp.nyu.edu/physcomp/Tutorials/ArduinoBreadboard"&gt;http://itp.nyu.edu/physcomp/Tutorials/ArduinoBreadboard&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've drawn the electrical schematic (also with the corresponding Arduino pins from Arduino.cc):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_8qMrooa6wWw/SlzJttG10pI/AAAAAAAAAA8/2eIKJnBCbHk/s1600-h/ArduinoNada.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5358379443703632530" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 268px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://2.bp.blogspot.com/_8qMrooa6wWw/SlzJttG10pI/AAAAAAAAAA8/2eIKJnBCbHk/s400/ArduinoNada.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Now for the best part - I priced the components (including a DIP socket for the ATMega8) from Jameco.com it comes out to $5.73! (8 pennies less if you don't care to have the power LED)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;From what I can gather, it has no serial I/O, so complex sensors are out, but for simple read a sensor, take an action it doesn't get any better than this!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I'm hoping that it'll be as simple as swapping out the ATMega chips on an existing Arduino to burn the bootloader, then download your program. Then simply put in the ATMega chip and power up. Not 100% sure, I'll have to check the bootloader stuff on Arduino.cc &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The best thing here is you won't have to waste your $30 Arduino for simple stuff!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-6823364642343259714?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/6823364642343259714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/07/ok-so-ive-toyed-with-absolute-minimal.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6823364642343259714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6823364642343259714'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/07/ok-so-ive-toyed-with-absolute-minimal.html' title=''/><author><name>Bengineer</name><uri>http://www.blogger.com/profile/04868431102854054151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_8qMrooa6wWw/SlzJttG10pI/AAAAAAAAAA8/2eIKJnBCbHk/s72-c/ArduinoNada.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-8704354642927527373</id><published>2009-07-10T12:47:00.007-08:00</published><updated>2011-01-14T10:39:39.921-09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python - Recursively Zip Directories (extended)</title><content type='html'>This looks pretty useful, especially for work since we rip through hundreds of files for zipping and unzipping.&lt;br /&gt;&lt;br /&gt;The idea and snippet are from Corey Goldberg's &lt;a href="http://coreygoldberg.blogspot.com/2009/07/python-zip-directories-recursively.html"&gt;post&lt;/a&gt; sharing the work he did to improve a bit of recursive zipping code. I extended what he made to include command line options and some usage help, complete with lazy loading in case somebody wants to use it as a library later. Just wanted to share and record for my own purposes.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:python"&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;import os, zipfile&lt;br /&gt;&lt;br /&gt;def zipper(dir, zip_file):&lt;br /&gt;    zip = zipfile.ZipFile(zip_file, 'w', compression=zipfile.ZIP_DEFLATED)&lt;br /&gt;    root_len = len(os.path.abspath(dir))&lt;br /&gt;    for root, dirs, files in os.walk(dir):&lt;br /&gt;        archive_root = os.path.abspath(root)[root_len:]&lt;br /&gt;        for f in files:&lt;br /&gt;            fullpath = os.path.join(root, f)&lt;br /&gt;            archive_name = os.path.join(archive_root, f)&lt;br /&gt;            print f&lt;br /&gt;            zip.write(fullpath, archive_name, zipfile.ZIP_DEFLATED)&lt;br /&gt;    zip.close()&lt;br /&gt;    return zip_file&lt;br /&gt;&lt;br /&gt;if '__main__' == __name__:&lt;br /&gt;    # Late import, in case this project becomes a library, never to be run as main again&lt;br /&gt;    import optparse&lt;br /&gt;    &lt;br /&gt;    # Populate our options, -h/--help is already there for you&lt;br /&gt;    usage = "usage: %prog [options]"&lt;br /&gt;    version="%prog 1.0"&lt;br /&gt;    parser = optparse.OptionParser(usage=usage, version=version)&lt;br /&gt;    parser.add_option("-d", "--dir", dest="inputDir", default="~/test", action="store", help="sets the input directory to something other than the default (~/test)")&lt;br /&gt;    parser.add_option("-f", "--file", dest="outputFile", default="~/temp/test.zip", action="store", help="sets the output zip file to something other than the default (~/temp/test.zip)")&lt;br /&gt;    parser.set_defaults()&lt;br /&gt;    &lt;br /&gt;    # Parse the arguments (defaults to parsing sys.argv)&lt;br /&gt;    (options, args) = parser.parse_args()&lt;br /&gt;&lt;br /&gt;    # Here would be a good place to check what came in on the command line and&lt;br /&gt;    # call parser.error("Useful message") to exit if all is not well&lt;br /&gt;    if len(args) &gt; 0 and (1 != options.inputDir or 1 != options.outputFile):&lt;br /&gt;        parser.error("Additional arguments are not supported\nYou can only change the inputDir or outputFile using the -d and -f options.\nType zippy.py -h for help.\n")&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;    # Do the actual work&lt;br /&gt;    zipper(options.inputDir, options.outputFile)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-8704354642927527373?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/8704354642927527373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/07/python-recursively-zip-directories.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/8704354642927527373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/8704354642927527373'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/07/python-recursively-zip-directories.html' title='Python - Recursively Zip Directories (extended)'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-6606111214406824603</id><published>2009-07-09T11:42:00.002-08:00</published><updated>2009-07-09T11:52:13.666-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>Weekend</title><content type='html'>My Arduino has arrived and I'm stoked =P Now I need to make some time to mess around with it. There are some oscilloscope projects I'm interested in fiddling with. &lt;a href="http://www.blendedtechnologies.com/realtime-plot-of-arduino-serial-data-using-python/231"&gt;Link&lt;/a&gt; &lt;a href="http://code.google.com/p/arduinoscope/"&gt;Link &lt;/a&gt;&lt;a href="http://accrochages.drone.ws/en/node/90"&gt;Link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This morning I found a nifty &lt;a href="http://www.evanfosmark.com/2009/07/single-process-ascii-spinner/"&gt;little snippet&lt;/a&gt; for adding an ascii spinner to your output. So if you have a long process, which we face often here at work, you can have this displaying to let you know it's doing stuff.&lt;br /&gt;&lt;br /&gt;And of course this Saturday is when Mom, Lowell, and my Grandparents are arriving for a week long visit =D To say we're excited is an understatement. So much to do in just a week.&lt;br /&gt;&lt;br /&gt;Ben is looking into some local positioning systems. I don't know much about these yet so some investigation is needed. Surely there's a way to use bluetooth or rfid in a manner similar to how gps works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-6606111214406824603?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/6606111214406824603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/07/weekend.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6606111214406824603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6606111214406824603'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/07/weekend.html' title='Weekend'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-240375377233080195</id><published>2009-07-08T07:52:00.003-08:00</published><updated>2009-07-08T08:06:13.500-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>Arduino GPS guidance</title><content type='html'>I've done a little bit of digging on GPS guidance for the Arduino, my main concern being accuracy of the unit. I've got several projects backed up in my head that involve GPS to some extent, the main project being the Lawnmowbot. But it seems that these projects are in jeopardy as I've found out that the accuracy of the GPS unit ( &lt;a href="http://www.robotshop.us/adafruit-gps-logger-shield-kit-arduino-1.html"&gt;http://www.robotshop.us/adafruit-gps-logger-shield-kit-arduino-1.html&lt;/a&gt; ) is 5 to 10 meters - that's almost 33 feet! I can't mow a lawn leaving a 10 meter buffer ring around obstacles, infact for my yard that may only be one stripe down the center. So unless we can figure out some fancy workaround, the Lawnmowbot is going to have to be shelved. One idea I had is to mount two or three GPS units onto the mowbot. They'll be fixed (and known) relative to eachother, so perhaps we can come up with a method to trim down the error based on their readings and their known distances from eachother. I dunno, I'll probably have to buy one and tinker with it for a while. Worst case, I move on to the next GPS project - I'm thinking a UAV based on a R/C helicopter; 10 meters error shouldn't be detrimental for something like that :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-240375377233080195?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/240375377233080195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/07/arduino-gps-guidance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/240375377233080195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/240375377233080195'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/07/arduino-gps-guidance.html' title='Arduino GPS guidance'/><author><name>Bengineer</name><uri>http://www.blogger.com/profile/04868431102854054151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-3267268702603796695</id><published>2009-07-06T13:12:00.007-08:00</published><updated>2011-01-14T10:52:35.325-09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>Arduino + Fridge + Beer = Happiness</title><content type='html'>Now this is a project worth working on =P &lt;a href="http://www.instructables.com/id/Digital_Thermostatic_Beer_Refreshment_Regulator/"&gt;link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;this is the code from the project. there is likely some cleanup that can be done, or expansion.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:cpp"&gt;&lt;br /&gt;/*&lt;br /&gt;Purpose: Temperature Regulator for a Kegerator with LCD display.&lt;br /&gt;Using a LM35 and Arduino to check temperature and display current temp to an LCD.&lt;br /&gt;Also the Arduino will turn a Solid State Relay on/off within a defined temp range&lt;br /&gt;-LM35 connected to 5V, Grd, Analog Pin 0&lt;br /&gt;-Serial LCD connected to 5V, Grd, Digital Pin 1 (tx pin)&lt;br /&gt;-SS Relay connected to Grd, Digital Pin 12&lt;br /&gt;-Back Light Button connected to Digital Pin 3, Grd, 5V via 10K resistor (pin pulled HIGH in open state).&lt;br /&gt;&lt;br /&gt;Many thanks to Brutus@ brutusweb.com and Mikal @ the Arduino forums for all the help and inspiration!&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#define ledPin 13   // LED connected to digital pin 13&lt;br /&gt;#define lm35 0           // LM35 on Analog 0&lt;br /&gt;#define blightPin 3   // Momentary switch for back light to digital pin 3&lt;br /&gt;#define relayPin 7   // Relay connected to digital pin 7&lt;br /&gt;&lt;br /&gt;unsigned long last_temperature_check_time = 0;&lt;br /&gt;unsigned long last_lcd_turn_on_time = 0;&lt;br /&gt;&lt;br /&gt;void sendlcd(byte command)  //Quick function to send LCD commands.&lt;br /&gt;{&lt;br /&gt;Serial.print(command, BYTE);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void setup()   // run once, when the sketch starts&lt;br /&gt;{&lt;br /&gt;analogReference(INTERNAL); //using internal voltage reference ~1.1v&lt;br /&gt;pinMode(ledPin, OUTPUT);  // sets the digital pin as output&lt;br /&gt;pinMode(lm35, INPUT);  // sets the analog pin as input&lt;br /&gt;pinMode(blightPin, INPUT);  // sets the digital pin as input&lt;br /&gt;pinMode(relayPin, OUTPUT); // sets the digital pin as output&lt;br /&gt;digitalWrite(ledPin, HIGH);&lt;br /&gt;&lt;br /&gt;delay(1000);&lt;br /&gt;&lt;br /&gt;Serial.begin(9600);&lt;br /&gt;delay(1000);   //Let Ports Stabilize&lt;br /&gt;&lt;br /&gt;sendlcd(27);   //Reset Command For LCD&lt;br /&gt;sendlcd(122);&lt;br /&gt;&lt;br /&gt;delay(500);   //Full Reset takes a bit&lt;br /&gt;&lt;br /&gt;sendlcd(254);   //Clear and Go Home on LCD&lt;br /&gt;sendlcd(1);&lt;br /&gt;digitalWrite(ledPin, LOW);  //turn off LED&lt;br /&gt;delay(250);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//new loop with millis... sweet&lt;br /&gt;&lt;br /&gt;void loop()   // run till the end of days or the beer runs out...&lt;br /&gt;{&lt;br /&gt;unsigned long time = millis();&lt;br /&gt;if (time - last_temperature_check_time &gt; 20000) //has it been 20 seconds?&lt;br /&gt;{ last_temperature_check_time = time;&lt;br /&gt;digitalWrite(ledPin,HIGH);     //turn on LED for running routine status&lt;br /&gt;&lt;br /&gt;//Check Temperature routine&lt;br /&gt;long temp;&lt;br /&gt;long temp1;&lt;br /&gt;long temp2;&lt;br /&gt;long temp_x;&lt;br /&gt;int lm35_val=0;&lt;br /&gt;&lt;br /&gt;//delay(500);   //Delay to allow stabilized analog read.. not needed?&lt;br /&gt;lm35_val=analogRead(lm35); //read value of center leg of LM35&lt;br /&gt;temp = lm35_val;   //output voltage of LM35, 10mV = 1 Degree Celcius&lt;br /&gt;temp1=temp/10;   //creates true Celcius reading&lt;br /&gt;temp2=temp%10;   //modulus operation to calculate remainder for higher resolution reading&lt;br /&gt;&lt;br /&gt;if (temp2 &gt;= 5){&lt;br /&gt;  temp_x++;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Send temperature to LCD routine&lt;br /&gt;sendlcd(254);           //Clear LCD Screen&lt;br /&gt;sendlcd(1);&lt;br /&gt;Serial.println("Current Temp");  //Print "Current Temp" message&lt;br /&gt;Serial.print(temp1);   //Print CelsuisTemperature&lt;br /&gt;Serial.print(".");   //Print decimal place&lt;br /&gt;Serial.print(temp2);   //Print "Tenths" place&lt;br /&gt;sendlcd(223);           //Print degree charater&lt;br /&gt;Serial.print("C");   //Print "C" for Celsuis&lt;br /&gt;&lt;br /&gt;digitalWrite(ledPin,LOW);  //Turn off LED&lt;br /&gt;&lt;br /&gt;//Turn Relay on/off routine&lt;br /&gt;if ((temp1) &gt; 7 )    //check temp is above x degrees&lt;br /&gt;{&lt;br /&gt;  digitalWrite (relayPin, HIGH); //if temp is above x degrees turn pin "ON"&lt;br /&gt;}&lt;br /&gt;else if ((temp1) &lt; last_lcd_turn_on_time =" time;"&gt; 10000)  // has it been 10 seconds?&lt;br /&gt;{&lt;br /&gt;sendlcd(27);           //Turn back light off&lt;br /&gt;sendlcd(42);&lt;br /&gt;sendlcd(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-3267268702603796695?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/3267268702603796695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/07/arduino-fridge-beer-happiness.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/3267268702603796695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/3267268702603796695'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/07/arduino-fridge-beer-happiness.html' title='Arduino + Fridge + Beer = Happiness'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-312572815136247162</id><published>2009-06-30T15:37:00.003-08:00</published><updated>2009-06-30T15:43:45.586-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>On Productivity</title><content type='html'>One of my biggest problems is distraction and forgetfulness. There are so many projects and related things I want to get to that finding time to do them, heck even remembering to do them, is becoming a real challenge. Thats why when I come across good ideas for addressing this, I try to remember them.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lifehacker.com/5303204/top-10-productivity-basics-explained"&gt;Here&lt;/a&gt; is a nice collection from lifehacker for productivity&lt;br /&gt;&lt;br /&gt;Try some of those out and let me know what you think.&lt;br /&gt;&lt;br /&gt;Oh, and &lt;a href="http://www.mozilla.com/en-US/firefox/upgrade.html"&gt;Firefox 3.5&lt;/a&gt; was released =) We finally have multi-threaded Firefox =P&lt;br /&gt;&lt;br /&gt;Now my system shouldn't hang so bad when I have 100 tabs open. Woot&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-312572815136247162?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/312572815136247162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/on-productivity.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/312572815136247162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/312572815136247162'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/on-productivity.html' title='On Productivity'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-9189012968014869272</id><published>2009-06-30T04:45:00.005-08:00</published><updated>2009-06-30T08:59:08.471-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>More learning on the Arduino...</title><content type='html'>So I was able to control a servomotor with a potentiometer this past weekend. That was pretty cool, it was pretty much 1:1, half turn on the pot was about a half turn on the servo. I was using Analog out to control the motor, most of the tutorials I've found use PWM on a digital pin. Seems my way is easier (but I'm sure there's a reason for the PWM on digital that I have yet to discover).&lt;br /&gt;Then I got the wild hair to hack an old mouse. Didn't work too well, but nothing detrimental. I cut off the PS/2 plug and stripped the wires: red, green, blue and white - notice anything missing? That's right, the black. But that's not the worst of it, the red wasn't even the power in; the blue was. green happened to be ground, red and white were send and receive. It took 5V @ 20 mA - just about the upper safe threshold for the Arduino. I wrote a program that read the red and white and sent back to the computer what it was reading to print on screen. I know something was going on because I initialized the variables to 0 but all I got on screen was:&lt;br /&gt;mouseVar1 = 1&lt;br /&gt;mouseVar2 = 1&lt;br /&gt;mouseVar1 = 1&lt;br /&gt;mouseVar2 = 1...&lt;br /&gt;so it was reading something, but nothing discernible. I read online that the receive line was supposed to be a clock signal, so I'm guessing the mouse was having a hissy fit because it wasn't getting a clock in. I probably should have read a little more on the PS/2 mouse - somehow you're supposed to get an X, a Y, and 3 mouse clicks from just one line.&lt;br /&gt;Next on the list, I'm going to have to buy a few MOSFETs and start learning about controlling high loads. Though here is a gripe I'm having with all of these tutorials, it's a trap I'm sure I'd fall into if I were writing them as well. It seems to me that the people writing these tutorials know the subject so well they're taking for granted that their audience knows certain things. For example, yesterday I searched between 10 and 15 tutorials for controlling DC motors with the Arduino, no two were alike when it came to the additional circuitry required to control the higher loads. That's fine, it shows the flexibility and different options. But what's not fine is not a single one explained why they chose what they did. Some used MOSFETs, others used H-bridges, some used 2 H-bridges, others used commercial motor control chips, and there were more that used off the shelf motor shields. Another example is the resistors, all the tutorials say "use xx Ohm resistor" and I'm left thinking, "Ok, no problem but... why that value?"&lt;br /&gt;I'm mechanical. If I can't see it, I have a hard time figuring out how it works. A little explanation would go a long way to improving some of these tutorials.&lt;br /&gt;&lt;br /&gt;[EDIT] Ok, so I'm learning now :P&lt;br /&gt;&lt;br /&gt;It seems that the MOSFET is used for simple one direction high load on/off switching.&lt;br /&gt;The H-bridge is for bi-direction, varying loading, and multiple high loads, and seems to be basically an array of MOSFETs.&lt;br /&gt;&lt;br /&gt;here's a good academic link:&lt;br /&gt;&lt;a href="http://itp.nyu.edu/physcomp/Labs/DCMotorControl"&gt;http://itp.nyu.edu/physcomp/Labs/DCMotorControl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-9189012968014869272?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/9189012968014869272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/more-learning-on-arduino.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/9189012968014869272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/9189012968014869272'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/more-learning-on-arduino.html' title='More learning on the Arduino...'/><author><name>Bengineer</name><uri>http://www.blogger.com/profile/04868431102854054151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-3343108451405342938</id><published>2009-06-29T18:07:00.012-08:00</published><updated>2011-01-14T10:50:39.372-09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Determining Multiple CPUs with Python</title><content type='html'>Just a quick entry for something i learned about that's pretty nifty. So if you wanted to take advantage of multiple cpus in python, it used to be you'd have to do a bit of OS detection first. &lt;a href="http://codeliberates.blogspot.com/2008/05/detecting-cpuscores-in-python.html"&gt;This post&lt;/a&gt; has the source i repeat here:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:python"&gt;&lt;br /&gt;def detectCPUs():&lt;br /&gt;"""&lt;br /&gt;Detects the number of CPUs on a system. Cribbed from pp.&lt;br /&gt;"""&lt;br /&gt;# Linux, Unix and MacOS:&lt;br /&gt;if hasattr(os, "sysconf"):&lt;br /&gt;  if os.sysconf_names.has_key("SC_NPROCESSORS_ONLN"):&lt;br /&gt;      # Linux &amp;amp; Unix:&lt;br /&gt;      ncpus = os.sysconf("SC_NPROCESSORS_ONLN")&lt;br /&gt;      if isinstance(ncpus, int) and ncpus &gt; 0:&lt;br /&gt;          return ncpus&lt;br /&gt;  else: # OSX:&lt;br /&gt;      return int(os.popen2("sysctl -n hw.ncpu")[1].read())&lt;br /&gt;# Windows:&lt;br /&gt;if os.environ.has_key("NUMBER_OF_PROCESSORS"):&lt;br /&gt;      ncpus = int(os.environ["NUMBER_OF_PROCESSORS"]);&lt;br /&gt;      if ncpus &gt; 0:&lt;br /&gt;          return ncpus&lt;br /&gt;return 1 # Default&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That is a bit of a pain to remember all the time. Thankfully since Python 2.6, you can use the multiprocessing library to handle this for you. All the details of how it determines the number of cpus are now abstracted away from me. I don't really care, just do it =)&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:python"&gt;&lt;br /&gt;import multiprocessing&lt;br /&gt;numCPUs = multiprocessing.cpu_count()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then you can go from there. For instance, if i have 1 cpu, the program could decide to use the threading library. If i have 2+ cpus then it may benefit from using the full on multiprocessor library. Depends on your application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-3343108451405342938?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/3343108451405342938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/determining-multiple-cpus-with-python.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/3343108451405342938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/3343108451405342938'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/determining-multiple-cpus-with-python.html' title='Determining Multiple CPUs with Python'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-2166926975522825503</id><published>2009-06-24T04:15:00.007-08:00</published><updated>2009-06-30T15:44:23.535-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>"My" first Arduino program</title><content type='html'>Ray invited me to post on his blog to share in learning experiences and to collaborate on different projects. We both seem to be interested in learning the Arduino at the moment, so here's a bit on that, "my" first Arduino program. Not too interesting to many, but to anyone learning microcontrollers (specifically the Arduino) there might be a lesson or two to be gleaned.&lt;br /&gt;&lt;br /&gt;I'll admit that it's not 100% mine, infact it's nearly all not mine (thus the quotes around "my"), BUT it didn't come verbatim from a tutorial (I hacked a couple tutorials to come up with it, mainly to force me not to just follow the bouncing tutorial-dot). It's a script that has chasing LEDs (Knight Rider style), and the speed which the LEDs chase is controlled directly with a potatometer (less resistance = faster chase. From 0 millisec up to 1023 millisec, just over 1 full sec in between flashes for max resistance).&lt;br /&gt;&lt;br /&gt;The code is posted below. I would have posted pictures but my camera seems to have a crappy USB port, and won't upload pics. A moving picture would be better, but to my knowledge man has yet to invent moving pictures (or "movies" as I would like to call them). &lt;a href="http://2.bp.blogspot.com/_8qMrooa6wWw/SkIdiAOxYcI/AAAAAAAAAAM/BNxqKVp4L6I/s1600-h/VKR_sch.JPG"&gt;&lt;img style="margin: 0px 10px 10px 0px; width: 272px; float: left; height: 320px;" id="BLOGGER_PHOTO_ID_5350871777284284866" alt="" src="http://2.bp.blogspot.com/_8qMrooa6wWw/SkIdiAOxYcI/AAAAAAAAAAM/BNxqKVp4L6I/s320/VKR_sch.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Schematic shown here is, if nothing else, pretty ugly. The jagged scribbles between the Arduino and the LEDs are resistors (I used 220 Ohm, for no other reason than that's about what all the tutorials use for LEDs - no idea why that specific value though). There's also an error in it, the digital pins 1-5 should be 2-6.&lt;br /&gt;&lt;br /&gt;The first thing I realized was that pin 14 is also analog pin 0. They're one in the same, the only difference is when using it as an analog pin with "analogWrite" (or read) it's pin 0, when using it as a digital pin with "digitalWrite" (or read) it's pin 14. The second interesting thing I learned was kind of the opposite of PWM control, though it was inadvertent. I accidentially hooked up the potatometer's ground to the LED ground. When I ran the program, the potatometer controlled the brightness of the LED's rather than their speed. I was using an analog signal to control the digital outputs (in PWM, you use pulsed digital to control analog). Another interesting thing was that the Arduino was still reading the analog 0 pin (which was hooked up to nothing) so it read some random value, which just happened to give me about a half-second delay. Luckily I saw that I was hooked up incorrectly and rewired. The program ran exactly as intended. Turning the pot slowed or sped the chasing lights accordingly.&lt;br /&gt;&lt;br /&gt;This excercise also drove home the operation of the "for" function. When the lights are chasing quickly, you don't notice, but when they're chasing slowly and you turn the pot, the way this program is structured, the lights will complete their chase before reading the new pot value to speed things up.&lt;br /&gt;&lt;br /&gt;I was also able to notice how the "delay(x)" function delays everything - could be bad to use in certian situations when you need an immediate change or read, etc... if the sketch is in the middle of a "delay" it doesn't seem to respond to anything until it's good and ready.&lt;br /&gt;&lt;br /&gt;Thanks for reading, hope I didn't bore you too much and maybe you learned from some of my errors.&lt;br /&gt;&lt;br /&gt;Here's the code:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;/* Variable Chasing LEDs&lt;br /&gt;This adjusts the rate at which a chasing LED array operates&lt;br /&gt;Circut: Potatometer is attached to analog input 0 (digital pin 14), 5 LEDs are attached to digital outputs 2 through 6 (to ground through 220 Ohm resistors).&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;int sensorPin = 0; //initalize which pin is potentometer input&lt;br /&gt;int ledPin[] = {2,3,4,5,6}; // initalize LED pin outputs&lt;br /&gt;int numleds = 5; // number of LED outputs in circut&lt;br /&gt;int potVal = 0; // potentometer's value (initalized @ zero)&lt;br /&gt;&lt;br /&gt;void setup(){&lt;br /&gt;//loop to initalize LED pins as outputs:&lt;br /&gt;for(i=0; i&lt;br /&gt;pinMode(ledPin[i], OUTPUT);}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop(){&lt;br /&gt;potVal = analogRead(sensorPin); //read potentometer value&lt;br /&gt;&lt;br /&gt;// forward chasing, delayed according to value of potentometer:&lt;br /&gt;for(int i=0; i&lt;br /&gt;digitalWrite(ledPin[i], HIGH);&lt;br /&gt;delay(potVal);&lt;br /&gt;digitalWrite(ledPin[i], LOW);&lt;br /&gt;}&lt;br /&gt;// now back chasing:&lt;br /&gt;for(int i=numleds-1; i&gt;=0; i--){&lt;br /&gt;digitalWrite(ledPin[i], HIGH);&lt;br /&gt;delay(potVal);&lt;br /&gt;digitalWrite(ledPin[i], LOW);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-2166926975522825503?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/2166926975522825503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/my-first-arduino-program.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/2166926975522825503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/2166926975522825503'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/my-first-arduino-program.html' title='&quot;My&quot; first Arduino program'/><author><name>Bengineer</name><uri>http://www.blogger.com/profile/04868431102854054151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_8qMrooa6wWw/SkIdiAOxYcI/AAAAAAAAAAM/BNxqKVp4L6I/s72-c/VKR_sch.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-3226205644984752936</id><published>2009-06-22T11:32:00.003-08:00</published><updated>2009-06-30T15:45:18.929-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><title type='text'>Arduino and Contributing Author</title><content type='html'>The main intention of the blog is for it to be as much a way to share research progress as it is a way to keep in touch with friends and family. As such I want to share this space with my good friend Ben who is a fellow Casual Engineer (and who it happens my son is named after). I look forward to future posts from him =)&lt;br /&gt;&lt;br /&gt;Ok, now an update on our Arduino progress. Ben got his hands on a Duemilanove this past week and got to monkeying with the tutorials. I have to still order mine but am reading as much as I can beforehand, not to mention daydreaming about all the projects =) MMmmmmm kegerator outfitted with sensors and digital display. It could send a tweet when the keg is running low, or maybe send a preformatted email to the local distributor to order a new one. Excellent!! (insert maniacle laugh)&lt;br /&gt;&lt;br /&gt;Here are some of my favorite links so far:&lt;br /&gt;&lt;a href="http://www.arduino.cc/en/Tutorial/HomePage"&gt;Arduino's main site&lt;/a&gt;&lt;br /&gt;&lt;a href="http://hacknmod.com/hack/top-40-arduino-projects-of-the-web/"&gt;Hacknmod&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ladyada.net/learn/arduino/"&gt;Ladyada&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sheepdogguides.com/arduino/artut.htm"&gt;Sheepdog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So far I'm really liking how simple the basic software structure is.&lt;br /&gt;void setup(){&lt;br /&gt;   setup stuff;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop(){&lt;br /&gt;   do stuff;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;pretty cool. more to come later.&lt;br /&gt;&lt;br /&gt;oh and a bit of coolness. &lt;a href="http://diydrones.com/profiles/blog/show?id=705844%3ABlogPost%3A44814"&gt;uav with arduino&lt;/a&gt; =P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-3226205644984752936?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/3226205644984752936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/arduino-and-contributing-author.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/3226205644984752936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/3226205644984752936'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/arduino-and-contributing-author.html' title='Arduino and Contributing Author'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-6249820273407661239</id><published>2009-06-22T11:26:00.002-08:00</published><updated>2009-06-22T11:32:23.778-08:00</updated><title type='text'>Solstice and Father's Day</title><content type='html'>This past weekend was pretty busy. Here in Alaska we celebrate the solstice, the longest day of the year. Fairbanks throws a huge block party and there is a midnight baseball game our local team hosts. Pretty cool.&lt;br /&gt;&lt;br /&gt;This year we were absent from the town festivities since our friends Abby and Kyle got married on Saturday. That was a fun time with plenty of beer =P It was an outdoor wedding and wouldn't you know it we had our first big rain of the summer. But the party went on.&lt;br /&gt;&lt;br /&gt;Sunday was also father's day =) Becky let me game all day with a few breaks to eat and open presents lol. It was nice to escape to the dungeon for a while. She rocked me with a sweet Dremel tool set!! I can't wait to start building things with it. And her parents surprised me with some desperately needed garden tools like a wheel barrow and yard rakes. It was a sweet father's day. I couldn't have been happier =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-6249820273407661239?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/6249820273407661239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/solstice-and-fathers-day.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6249820273407661239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6249820273407661239'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/solstice-and-fathers-day.html' title='Solstice and Father&apos;s Day'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-2228587395891674165</id><published>2009-06-16T10:41:00.003-08:00</published><updated>2009-06-16T12:13:53.891-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='research'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='cuda'/><title type='text'>Python, Arduino, and CUDA</title><content type='html'>It seems uncommon anymore to get really pumped about something. And by pumped, i mean &lt;a href="http://www.realultimatepower.net/index4.htm"&gt;real ultimate power&lt;/a&gt; pumped. It just so happens that a few things have recently got me that pumped.&lt;br /&gt;&lt;br /&gt;1. The birth of my son. No question there and pretty self-explanatory so we'll move onto the others.&lt;br /&gt;2. &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; programming language. Holy heck is this a &lt;a href="http://en.wikibooks.org/wiki/Python_Programming"&gt;rocking&lt;/a&gt; language.&lt;br /&gt;3. &lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt; prototyping platform. Once again, rocking.&lt;br /&gt;4. nVidia &lt;a href="http://en.wikipedia.org/wiki/CUDA"&gt;CUDA library&lt;/a&gt;. Using your video card as a math coprocessor? Awesome.&lt;br /&gt;&lt;br /&gt;I've been programming for a little while now, mostly Matlab and Perl. Some C/C++ from classes but nothing production. It's only been recent that I've discovered Python, and quite frankly I wish I'd discovered it earlier. I'm enjoying how straightforward the syntax is and how much you can do with little coding. It's very programmer friendly. I intend to write much more about Python, especially since there is now a Python interface to nVidia's CUDA library.&lt;br /&gt;&lt;br /&gt;The Arduino is essentially the face of physical computing. Generally speaking, it isn't a trivial thing to get your computer to interface with the real world and act upon it. There's all sorts of kits and what have you for the crummy basic stamp and related trash, but they were always extremely limiting and rather proprietary. In fact I always found those to be rather discouraging.&lt;br /&gt;&lt;br /&gt;The Arduino, however, is open source, powerful, and very flexible. There are tons of projects on &lt;a href="http://www.instructables.com/tag/?q=arduino&amp;amp;limit%3Atype%3Aid=on&amp;amp;type%3Aid=on&amp;amp;type%3Auser=on&amp;amp;type%3Acomment=on&amp;amp;type%3Agroup=on&amp;amp;type%3AforumTopic=on&amp;amp;type%3AforumTopic=on&amp;amp;sort=none"&gt;instructables&lt;/a&gt; involving the Arduino. There's tons of info out there where all sorts of people have fiddled with it and made really cool things. Heck &lt;a href="http://www.botanicalls.com/"&gt;here's one&lt;/a&gt; that has your plants twitter you when they need watering. Freaking cool. The biggest thing about what I find on instructables is how inspiring the projects are. Everyone swears by how easy the Arduino is to program. It's time to start fiddling.&lt;br /&gt;&lt;br /&gt;And then there's nVidia's CUDA library. It essentially allows you to use your video card for matrix math operations. The one I have here at work was able to run a n-body simulation with 27,000 objects at 360 GFlops. Trust me, that's freaking insane. It also did an eigenvector decomposition of a 2048 x 2048 randomly generated matrix in 4.8ms. So yeah, if it's matrix math you need done, especially on a large matrix or system of equations, the CUDA library lets you have a supercomputer on your desktop.&lt;br /&gt;&lt;br /&gt;Anyways I'll be writing more about these later. This is just the starting point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-2228587395891674165?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/2228587395891674165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/arduino.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/2228587395891674165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/2228587395891674165'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/arduino.html' title='Python, Arduino, and CUDA'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-6302803987000245098</id><published>2009-06-15T06:52:00.003-08:00</published><updated>2009-06-16T08:26:13.441-08:00</updated><title type='text'>Little Visitor</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_W0a26ufKYP4/SjZhOE6hSxI/AAAAAAAABOI/cTRSr_bUmbo/s1600-h/DSCN0303.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_W0a26ufKYP4/SjZhOE6hSxI/AAAAAAAABOI/cTRSr_bUmbo/s320/DSCN0303.JPG" alt="" id="BLOGGER_PHOTO_ID_5347568502014298898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We had a little visitor in the house this weekend. Looks like he flew in from an open window. This is the second time we've had a bird in the house so it looks like I will need to put a screen up around the back deck. In fact, the whole deck needs some reworking, including the screen, a door, and astro turf.&lt;br /&gt;&lt;br /&gt;There's also all this extra wood construction from when the previous owners housed their dog. They even built a ramp for him from the deck to the ground. I guess it had trouble with the stairs. So very sweet, but it has to go.&lt;br /&gt;&lt;br /&gt;Yesterday I took the afternoon off work. Becky was thrilled and we planned on going to the movies and hanging out. After a nap of course, since we were exhausted. We wake up to hit the theater and realize it's 8pm lol. Of course the sun is up all day long now, so it doesn't feel like 8pm. Guess we needed to catch up on our sleep =P I ran out the blockbuster and rented some movies and got a Papa Murphy's pizza. We're planning to have a big date on the 30th though. I can't wait =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-6302803987000245098?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/6302803987000245098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/little-visitor.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6302803987000245098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6302803987000245098'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/little-visitor.html' title='Little Visitor'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_W0a26ufKYP4/SjZhOE6hSxI/AAAAAAAABOI/cTRSr_bUmbo/s72-c/DSCN0303.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-6810136946545323238</id><published>2009-06-12T14:17:00.002-08:00</published><updated>2009-06-12T14:30:36.052-08:00</updated><title type='text'>Friday with some hockey</title><content type='html'>So today is Friday and as it turns out, it's also the NHL Stanley Cup finals. To celebrate game 7, the director of our facility is letting us out early. Out here the game will be starting at 4pm, so we're all heading out around 3-3:30. Pretty cool. It helps that she is a die hard hockey fan =P It seems many people in Fairbanks are.&lt;br /&gt;&lt;br /&gt;I'm hoping to get quite a bit done this weekend. I really need to clean up the downstairs area at the house. It seems permanently under construction. Since my folks are coming up in a few weeks it seems better to go ahead and get some of this knocked out sooner rather than later.&lt;br /&gt;&lt;br /&gt;There's a couple outdoor projects that need to get some traction as well. During the breakup, where all the snow and ice melt, our driveway was completely flooded. Since the drive is all gravel I've been thinking about having some more gravel dumped and spread around in an attempt to raise it. Maybe next year my little civic won't be swimming as bad.&lt;br /&gt;&lt;br /&gt;Last weekend I tore through the backyard with the lawnmower, clearing out all the overgrowth. It seems the previous owners didn't do much in the way of yard care. It was looking like nature had reclaimed the land. The mower blasted most of the knee-high growth out so this weekend will be all about raking and preparing it for proper tilling. I just want to turn the soil over and start fresh. Heh, will need to put some before and after photos up to show the difference.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-6810136946545323238?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/6810136946545323238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/friday-with-some-hockey.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6810136946545323238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6810136946545323238'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/friday-with-some-hockey.html' title='Friday with some hockey'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7127036200914843180.post-6901800610726377152</id><published>2009-06-10T11:53:00.000-08:00</published><updated>2009-06-10T11:57:04.756-08:00</updated><title type='text'>Begin</title><content type='html'>Hello to everyone. With all the requests for updates on Ben and life in alaska with Becky I figured it's time to try blogging. Not ready to do facebook or whatever, and this may allow for more creativity. That and some place to put the random things I get thinking about =P&lt;br /&gt;&lt;br /&gt;Thanks, Justin, for giving some inspiration to do this. And best of luck with your move to Japan soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7127036200914843180-6901800610726377152?l=casualengineer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://casualengineer.blogspot.com/feeds/6901800610726377152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://casualengineer.blogspot.com/2009/06/begin.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6901800610726377152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7127036200914843180/posts/default/6901800610726377152'/><link rel='alternate' type='text/html' href='http://casualengineer.blogspot.com/2009/06/begin.html' title='Begin'/><author><name>Rayjan Wilson</name><uri>http://www.blogger.com/profile/13002422148848504227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
