<?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-5485972740370684445</id><updated>2011-11-14T00:29:22.954-08:00</updated><category term='ruby'/><category term='werewolf'/><category term='lysbyg'/><category term='vim anki'/><category term='gaming lunches'/><category term='go'/><category term='weight loss'/><category term='la times'/><title type='text'>Alf Mikula</title><subtitle type='html'>Alf Mikula's personal blog, about stuff, and also things.  Some Ruby, some Go, and a lot of miscellaneous.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5485972740370684445.post-9028339389284400354</id><published>2010-11-11T06:51:00.000-08:00</published><updated>2010-11-11T06:53:44.074-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim anki'/><title type='text'>Using Spaced Repetition Software to Master Vim</title><content type='html'>&lt;p&gt;
  I've been a vim user for about 20 years. During that time I've
  used IDEs and other text editors, but I've never found one to fit
  my needs better than vim does, and I always end up finding my way
  back to vim.  As a developer's editor, it's really making inroads
  in the Ruby community, which I love because it means there are
  lots of great vim plugins being developed and improved right now,
  and my experience with vim is getting better all the time.
&lt;/p&gt;
&lt;p&gt;
  However, I've also found that I'm often aware that a particular
  command exists, but I don't remember it long enough to be able
  to use it when I need it. It's a pain to have to look up a
  command when what I really want to do is to write code.  So, I've
  gotten to a set of core commands that I know, and when I get that
  particular itch, I take the time to look up a particular command,
  use it, and usually forget it sometime in the next 24-48 hours.
  It turns out that when you learn something, if you fail to reinforce
  or exercise that knowledge you will inevitably forget it. When
  was the last time you tried to remember a list of capitol cities
  that you memorized in grade school?  You use it, or you lose it.
&lt;/p&gt;
&lt;h2&gt;Spaced Repetition Software&lt;/h2&gt;
&lt;p&gt;
  Spaced Repetition Software, SRS for short, is software that keeps
  track of how long it takes for you to forget something, whether
  it's vocabulary in a foreign language, state capitols, or other
  facts, and refreshes your memory at just the right time to keep
  you from forgetting. I first learned of SRS through Piotr Wozniak's
  &lt;a href='http://www.supermemo.com/english/smintro.htm'&gt;SuperMemo&lt;/a&gt;
  (which is about incremental reading as much as it is
  about SRS), but there are many flashcard-only systems out there
  that will drill you on things you want to remember.
&lt;/p&gt;
&lt;p&gt;
  &lt;a href='http://twitter.com/#!/alfmikula/status/26775752860'&gt;I asked on Twitter&lt;/a&gt;
  if anyone knew about flashcards for vim and
  didn't get much response.  I think the very notion of SRS is new
  to people (it was new to me), so there's not much activity in
  this area. Still, I started to think that this could be an excellent
  solution to my problem of learning new vim commands: If I could
  simply memorize a bunch of commands, those commands would be ready
  at my beck and call when I was writing code. It was time for an
  experiment.
&lt;/p&gt;
&lt;h2&gt;Enter Anki&lt;/h2&gt;
&lt;p&gt;
  I checked out a few different SRS systems before settling on
  &lt;a href='http://ankisrs.net/'&gt;Anki&lt;/a&gt;
  , which is free and open source, and available on Mac, Windows,
  Linux, and Android. There is also an iPhone version that will set
  you back $25, and an open source program called
  &lt;a href='http://www.mnemosyne-proj.org/'&gt;Mnemosyne&lt;/a&gt;
  that does SRS.
&lt;/p&gt;
&lt;h2&gt;Vim Commands Stack&lt;/h2&gt;
&lt;p&gt;
  So, the Vim Commands flashcard stack was born. I started adding
  commands that I wanted to learn, guided by quick reference cards,
  vim's own excellent help system, and my own vague notion that
  "there's a command for that, if only I could remember what it
  is&amp;hellip;"
&lt;/p&gt;
&lt;p&gt;
  I started spending just a few minutes a day memorizing and reviewing
  commands, and collecting more commands, until I had a pretty decent
  collection. The experiment started bearing fruit almost immediately.
  I was able to remember some of the more obscure cursor movements,
  search commands, advanced undo commands, and so on.  Before long
  I was giving my co-workers tips on advanced commands that would
  help them out.
&lt;/p&gt;
&lt;p&gt;
  Today the stack has 241 commands, many of which I knew existed
  but never could remember when it was time to use them. I regularly
  pause to remember a command and it comes to me quickly. Some of
  these commands have already become part of my muscle memory, and
  it feels like many more are on their way.
&lt;/p&gt;
&lt;h2&gt;Github Project&lt;/h2&gt;
&lt;p&gt;
  I've exported the stack from Anki and am keeping it in a text
  format that is easy to edit and re-import to Anki. I've reordered
  the facts in the deck to start with Basic commands, progress
  through Beginner commands, to Intermediate and Advanced commands.
  The Github project is called
  &lt;a href='http://github.com/amikula/vim_flashcards'&gt;vim_flashcards&lt;/a&gt;
  and the all_cards.txt file is suitable for import directly into
  Anki.
&lt;/p&gt;
&lt;p&gt;
  Currently the cards are all stored in a flat file, but I'm thinking
  about creating a Ruby gem for managing SRS flashcard stacks and
  exporting them to multiple systems. Please contact me if you are
  interested in helping out with this effort.
&lt;/p&gt;
&lt;h2&gt;Getting Started With Anki&lt;/h2&gt;
&lt;p&gt;
  You can begin by
  &lt;a href='http://ankisrs.net/'&gt;downloading Anki&lt;/a&gt;
  and installing it. Once it
  starts up, click on the "Download" button and search for "Vim
  Commands". Alternatively, clone the github repository and import
  the cards into Anki from the all_cards.txt file.
&lt;/p&gt;
&lt;p&gt;
  When you open the deck, be sure to tune the goals to
  your liking. For beginners, I would recommend no more than 5 new
  commands per day; expert users might want to stick with 20 or
  even set the value higher. Remember, if you're trying too hard,
  you might fatigue out.
&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;
  My vim flashcard experiment is still in its early stages. I'm
  still adding new commands on a regular basis, and still trying
  to organize the stack so that it is presented in an order of
  increasing difficulty, with the easiest and most useful commands
  at the beginning, and the harder and more esoteric commands at
  the end. It will be interesting to see how relevant the stack is
  to me in the long term: will it be necessary to keep commands in
  mind, or will I use all of them regularly enough that refreshing
  them with Anki becomes redundant?
&lt;/p&gt;
&lt;p&gt;
  I invite you to participate in the experiment and provide feedback.
  If you use the vim deck, let me know if you find it helpful,
  whether you're brand new to vim or an old hand. Actually, if
  you're brand new to vim, I recommend that you first go through
  vimtutor (type "vimtutor" at the command line and start reading)
  before trying out the Anki deck.
&lt;/p&gt;
&lt;p&gt;
  If you use a different text editor, like emacs or TextMate, you
  might want to create your own flashcard stack to help you remember
  all the commands for your editor.
&lt;/p&gt;
&lt;p&gt;
  Happy editing!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-9028339389284400354?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/9028339389284400354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2010/11/using-spaced-repetition-software-to.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/9028339389284400354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/9028339389284400354'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2010/11/using-spaced-repetition-software-to.html' title='Using Spaced Repetition Software to Master Vim'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5485972740370684445.post-6950855250569656530</id><published>2010-10-19T21:04:00.000-07:00</published><updated>2010-10-19T21:43:38.567-07:00</updated><title type='text'>Where is all the Linux Shareware?</title><content type='html'>&lt;p&gt;I'm back on Linux. No, really. After about 8 years of OS X, I've made the move back to Linux. Ubuntu, to be specific. Don't get me wrong &amp;mdash; it's not that I have something against OS X. It's Apple and Apple Fandom I don't like (and the fact that Steve Jobs has recently taken over as the &lt;a href="http://www.youtube.com/watch?v=Tn-YesqzvNk"&gt;Evil Sith Lord&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;It's only been a few days, but so far I'm really liking Ubuntu. It installed pretty easily on my '07 MacBook Pro, and although the trackpad is a little spotty, I can live with it. I'm even ok with the minor glitches in the video display and other little bugs I can work around. It's all cool, and frankly, it's a heck of a lot better than Linux was 8 years ago.&lt;/p&gt;
&lt;p&gt;So what do I do when I come back to this somewhat edgy environment? I start looking for shareware. You know, handy programs written by independent developers that you can try out for a time before deciding to pay for it. There's plenty of it for Windows, and there's plenty of it for OS X as well. In fact, I'm especially impressed with the quality of software available from independent developers for OS X. It turns out there's not much software that you can actually pay for, if you have a Linux desktop machine.&lt;/p&gt;
&lt;p&gt;I know, you're thinking this Alf guy is pretty crazy, wanting to pay for Linux software when Linux is all about Free-As-In-Speech. But guess what? There's no money in Free. Oh, but you already knew that.&lt;/p&gt;
&lt;p&gt;Open Source software is wonderful. I make my living as a software developer using (and sometimes releasing) Open Source Free-As-In-Speech software. I believe standards should be Free. But I'm also practical, and my time is very limited. Creating something that's fun and scratches an Itch is really important, and I do that when I can. And I release it free of charge. And yet, I want to pay other developers for software. Why?&lt;/p&gt;
&lt;p&gt;Well, here's the rub: Creating something that mostly works is fun, even if it's kind of buggy for cases that I don't care about too much. Creating something that's flawless, and works smoothly for a broad class of users takes real work. And at the end of the day, software developers only get paid for doing real work. Sometimes I need software that's more or less flawless, and it's hard to find that kind of software for Linux.&lt;/p&gt;
&lt;p&gt;This week I read an article about how &lt;a href="http://www.pcworld.com/businesscenter/article/207999/desktop_linux_the_dream_is_dead.html?tk=hp_new"&gt;Linux on the desktop is dead&lt;/a&gt;. I know it's not really true, but if Linux is going to ever really thrive on the desktop, it's not going to happen on Free software alone. So take a few moments to seek out useful Linux software that's useful and NOT free, and spend a few bucks (or euros or pounds) in support of an independent software developer.&lt;/p&gt;
&lt;p&gt;In the end, we'll all benefit if you do.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-6950855250569656530?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/6950855250569656530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2010/10/where-is-all-linux-shareware.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6950855250569656530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6950855250569656530'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2010/10/where-is-all-linux-shareware.html' title='Where is all the Linux Shareware?'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-2602046197280831543</id><published>2010-08-09T21:21:00.000-07:00</published><updated>2010-09-27T07:46:23.899-07:00</updated><title type='text'>U.S. Go Congress 2010 Report</title><content type='html'>&lt;p&gt;
At the beginning of August, I attended my first U.S. Go Congress. After a few years of telling people that "I'd like to go" and "I can never quite seem to make it happen", I realized that I simply wasn't trying hard enough. So, I did what I needed to do to make it to the Go Congress this year.
&lt;/p&gt;

&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;
If you don't know what Go is, check out the American Go Association's &lt;a href="http://usgo.org/resources/whatisgo.html"&gt;description of Go&lt;/a&gt;. I also highly recommend &lt;a href="http://playgo.to/interactive"&gt;The Interactive Way to Go&lt;/a&gt;, which will teach you about the rules and basics of the game, and give you simple puzzles to test yourself.
&lt;/p&gt;
&lt;p&gt;
This year the 28th annual U.S. Go Congress was held in Colorado Springs. The Congress is a week-long convention where people from all over the United States (and in some cases other nearby countries like Canada or Mexico) come together to play, talk about, and study Go. Professional players come from all over the United States, as well as Japan, China, and Korea, to teach and to play.
&lt;/p&gt;

&lt;h2&gt;Eight Days of Go, not Nine&lt;/h2&gt;
&lt;p&gt;
Back when I got my plane tickets for the Congress, I made a rookie mistake: I scheduled myself to fly back home on Sunday night, figuring I wouldn't miss anything that way. Well, it turns out that after the banquet and awards ceremony on Saturday night, there's basically nothing else to do. People fly out the same night, or the next morning. When I mentioned this to people at the Congress, I found this is actually a fairly common mistake. This year's Congress went from Saturday, July 31st, through Saturday, August 7th.
&lt;/p&gt;

&lt;h2&gt;The Main Event: The U.S. Open&lt;/h2&gt;
&lt;p&gt;
The main event at the U.S. Go Congress is the U.S. Open. This week-long tournament runs from Sunday through Saturday, and consists of six games with a day off on Wednesday. The time limit is one and a half hours per side (2 hours per side in the upper dan divisions), with 5 30-second byo yomi periods. That's twice the typical time limit in a Go tournament! I wasn't sure if I could handle the longer game, but I actually used up all of my time in the first two games of the tournament, and hardly noticed that the time limit was so much longer.
&lt;/p&gt;

&lt;h2&gt;Professional Game Reviews&lt;/h2&gt;
&lt;p&gt;
In the afternoons, there are a lot of opportunities to attend scheduled game review sessions, where professional players would go over your game with you and help you to understand how to improve your game. I found this extremely helpful, and sometimes when a professional would point out the best move, it turned out to be the next move I played. Other times, the response would be "I played that later". In fact, it seemed to become kind of a running joke, with players admitting "I played that later" as opposed to as the next move in the game. Still, it's good to feel that we were finding the right moves, even if the timing wasn't perfect.
&lt;/p&gt;
&lt;p&gt;
I attended game reviews by Jennie Shen, Mingjiu Jiang, and Xuefen Lin. In fact, I was lucky enough to attend a review by Xuefen Lin with only one other person, and it turned into something more like a private lesson, a game review where we had enough time to go over the entire games and lots of variations. She also shared a favorite tesuji from a recent professional game that she had studied. It was really a rare opportunity to get to know a professional player a little bit better.
&lt;/p&gt;

&lt;h2&gt;Other Tournaments&lt;/h2&gt;
&lt;p&gt;
There are a number of other tournaments that take place at the Congress, including 9x9 and 13x13 tournaments, the Die Hard Tournament (a 1-day tournament that takes place on the day off from the U.S. Open), the Redmond Cup (a youth tournament named for Michael Redmond, the only non-Asian in history to achieve the professional rank of 9 dan), and the Ing Masters Tournament (attended both by professionals and strong amateur players).
&lt;/p&gt;

&lt;h2&gt;The Lectures&lt;/h2&gt;
&lt;p&gt;
I attended lectures by several professionals, including Ryo Maeda, whose series of lectures has been very popular among kyu players for the last 10 years, Yilun Yang, and Mingjiu Jiang. I walked away from all of the lectures with valuable lessons about how to approach my game, and in my recent games I'm still applying the principles I learned.
&lt;/p&gt;

&lt;h2&gt;Other Events&lt;/h2&gt;
&lt;p&gt;
There are other presentations at the Congress that gave me a chance to learn about events going on in the world of Go.
This is another area where the Congress materials could be a little bit clearer! Before the Congress, I was wondering if there was room to do discussions about community projects, but it was hard to find anything about this on the Congress site. There were presentations from GoGoD, GoClubsOnline, and there was one scheduled for IgoLocal.net, but unfortunately Chuck Thomas couldn't make it to the Congress. If you're not familiar with IgoLocal.net, it's basically the same service as the PromoteGo.org project that I've been working on, on and off, for the last couple of years. I'll talk a little more about that in a future post.
&lt;/p&gt;

&lt;h2&gt;Next Year&lt;/h2&gt;
&lt;p&gt;
I had a great time at the U.S. Go Congress this year! It definitely made me a stronger player, and it really inspired me to work on my game again. I also met some great people in the U.S. Go community, and made some new friends. I really wish I had gone to some of the previous Congresses now.
&lt;/p&gt;
&lt;p&gt;
Next year's U.S. Go Congress will be taking place in Santa Barbara! Santa Barbara is one of my favorite vacation spots. Hopefully this beautiful city will inspire a lot of Go players to come, and to bring their families. We need lots of volunteers, from Saturday-only registration volunteers (which doesn't interfere with the Congress at all...there's not much that happens on Saturday) to Treasurer and Tournament Director positions, which require a much larger commitment. If you're interested, please see the list of available &lt;a href="http://www.usgo.org/congresses/2011/frontend/volunteer.php"&gt;U.S. Go Congress Volunteer Positions&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-2602046197280831543?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/2602046197280831543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2010/08/us-go-congress-2010-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/2602046197280831543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/2602046197280831543'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2010/08/us-go-congress-2010-report.html' title='U.S. Go Congress 2010 Report'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-7775197578935822595</id><published>2010-05-31T12:09:00.000-07:00</published><updated>2010-05-31T12:47:30.943-07:00</updated><title type='text'>Bilski, Software Patents, and Patent Reform</title><content type='html'>&lt;p&gt;
In the last month, I've been hearing more about software patents.  I've always thought software patents were stupid since I first discovered that someone had managed to get a patent on "backing store", the notion that windowing systems could save a copy of the pixels that have been obscured by a graphical window in order to display them back more quickly once the window was moved away again.  Anyway, it turns out that the Supreme Court is about to rule on &lt;i&gt;In re Bernard L. Bilski and Rand A. Warsaw&lt;/i&gt;, which stands to be a landmark ruling of the SCOTUS.  The patent claim has been rejected by the court of appeals, and it's expected that sometime in the month of June, the Supreme Court will rule on the Bilski patent application.
&lt;/p&gt;
&lt;p&gt;
It's largely expected that the Supreme Court will uphold the decision of the lower court, and it's possible that the Supreme Court will decide that business methods cannot be patented.  Since business methods are very similar to software algorithms, it seems possible that the Court will decide that software is also not patentable, but however hopeful I am that this may happen, that seems unlikely.
&lt;/p&gt;
&lt;p&gt;
So, I'm continuing my self-education about software patents.  It seems that there is plenty of innovation in software, and that patents are not necessary to promote innovation.  The software industry moves so fast that even a 1-year head start can be a huge boon for a company, so maybe that's a reform to consider: reduce the patent lifetime for a software patent down to 1 year.  That would be a step in the right direction!
&lt;/p&gt;
&lt;p&gt;
For a great summary of how software patents got to the state they're in today, watch the &lt;a href="http://patentabsurdity.com/watch.html"&gt;Patent Absurdity video&lt;/a&gt;.  There's also a lot going on over at &lt;a href="http://endsoftpatents.org/"&gt;End Software Patents&lt;/a&gt;, and I also found out where you can donate to the FSF's &lt;a href="https://my.fsf.org/donate/directed-donations/esp?amount=20"&gt;Fund to End Software Patents&lt;/a&gt;.  Are you involved in software patent reform?  Have some good resources?  Post them here!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-7775197578935822595?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/7775197578935822595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2010/05/bilski-software-patents-and-patent.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7775197578935822595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7775197578935822595'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2010/05/bilski-software-patents-and-patent.html' title='Bilski, Software Patents, and Patent Reform'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-5677855490291163069</id><published>2010-04-25T15:25:00.000-07:00</published><updated>2010-04-25T16:13:58.902-07:00</updated><title type='text'>Keeping up with all those habits</title><content type='html'>&lt;p&gt;At the beginning of the year, I announced on this blog that I would average a blog entry per month, and two Facebook updates per week.  The idea is that there are a lot of things that I would like to be in the habit of doing regularly, and starting a new habit for a new year has worked well for me in the past.&lt;/p&gt;
&lt;p&gt;I'm happy to say that I'm doing reasonably well with those two habits, but thinking about those habits and all the other things I'd like to be doing regularly got me to thinking: Wouldn't it be great to have a tool to help track all those habits?  So, being a web developer, I started writing exactly such a tool.  It's helped to remind me when I'm overdue for updating this blog, and when it's time to take the dog for a walk, when it's time to check the oil in the car, do the bills, take out the trash, etc.  I even have a habit set up to remind me when it's time to work on the app itself!&lt;/p&gt;
&lt;p&gt;Well, it's very much a work in progress.  There's not yet a way to keep track of accounts, so at the moment it's only good for one user, but I plan on adding user accounts soon.  Let me know if you're interested in beta testing it!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-5677855490291163069?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/5677855490291163069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2010/04/keeping-up-with-all-those-habits.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/5677855490291163069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/5677855490291163069'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2010/04/keeping-up-with-all-those-habits.html' title='Keeping up with all those habits'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-9139530957824209648</id><published>2010-03-06T17:49:00.000-08:00</published><updated>2010-03-06T18:05:55.649-08:00</updated><title type='text'>Life with Nexus One, part II</title><content type='html'>&lt;p&gt;
I still love my Nexus One!  I just wanted to comment on a couple of things:
&lt;ol&gt;
&lt;li&gt;
Battery life
&lt;/li&gt;
&lt;li&gt;
Swype beta
&lt;/li&gt;
&lt;li&gt;
QR Codes
&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;

&lt;h2&gt;Battery life&lt;/h2&gt;
&lt;p&gt;
Regarding battery life...I was at a LARubyConf a couple of weeks ago, and my battery drained like crazy all day both days, even though I wasn't really using it all that much.  My theory?  3G signals were weak but present, so the phone was constantly trying to connect to a 3G network.  Solution?  Turn off 3G, problem solved!
&lt;/p&gt;
&lt;p&gt;
Seriously, do we really need 3G anyway?  I mean, it's nice to have faster networking, but that's why God invented WiFi, right?  I'd much rather have WiFi than some proprietary cell network.
&lt;/p&gt;

&lt;h2&gt;Swype beta&lt;/h2&gt;
&lt;p&gt;
I joined the &lt;a href='http://www.swypeinc.com/'&gt;Swype&lt;/a&gt; beta this morning.  So far I haven't used it much, but it really is a lot faster than typing on a touch keyboard.  You basically just drag your finger from letter to letter and the predictive text system does the rest.  Check out this &lt;a href='http://www.huffingtonpost.com/2009/11/24/swype-vs-iphone-typing-sw_n_368850.html'&gt;smackdown video&lt;/a&gt; and prepare to be impressed!
&lt;/p&gt;

&lt;h2&gt;QR Codes&lt;/h2&gt;
&lt;p&gt;
I really love the QR codes that often go along with reviews of Android apps.  It's so easy to just scan the QR code off the screen and go right to the download for the app.  It's really sweet.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-9139530957824209648?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/9139530957824209648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2010/03/life-with-nexus-one-part-ii.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/9139530957824209648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/9139530957824209648'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2010/03/life-with-nexus-one-part-ii.html' title='Life with Nexus One, part II'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-7739937363040568123</id><published>2010-02-06T09:37:00.000-08:00</published><updated>2010-02-06T16:13:07.387-08:00</updated><title type='text'>Life with the Nexus One, part I</title><content type='html'>&lt;p&gt;
  I bought a Nexus One directly from Google for full price, the week after it came out.
  I had been waiting for an Android phone for most of 2009, and the Nexus One looked like
  the phone for me.
&lt;/p&gt;
&lt;h2&gt;A phone that doesn't suck too much&lt;/h2&gt;
&lt;p&gt;
  My primary goal for getting an Android phone was to find a phone
  that doesn't suck
  &lt;em&gt;significantly more&lt;/em&gt;
  than the iPhone.  I mean, let's face it: walled gardens suck.
  Also, you can't use it on any network besides AT&amp;amp;T without
  jailbreaking your phone.  The way I see it, smart phones are
  computers, plain and simple.  I wouldn't dream of buying a computer
  that wouldn't let me run whatever I want to run on it.
&lt;/p&gt;
&lt;p&gt;
  So the iPhone sucks, but then so do most Android phones.  Look at how
  ugly and clunky the G1 and MyTouch are.  And the screens are so
  small.  And don't forget, you have to buy them from T-Mobile!
&lt;/p&gt;
&lt;p&gt;
  The Nexus One is the first of the current generation of smart phones
  that you can buy without a contract.  It's an open platform.  And
  nobody is trying to tell me what I can or can't run on it.  The
  touchscreen is actually the same size as the iPhone, and the touch
  buttons directly beneath the touch screen give you some good
  contextual actions that you can take, so most apps are able to make
  better use of the screen real estate than the iPhone allows.
&lt;/p&gt;
&lt;p&gt;
  Don't get me wrong, the Nexus One still sucks.  The battery life
  isn't what I would want.  There's also a slight design flaw with the
  location of the speaker pointing towards the back of the phone.  In
  loud environments, I find myself wanting to point the screen away
  from me so I can hear the speaker.  Pretty annoying.
&lt;/p&gt;
&lt;h2&gt;The Camera&lt;/h2&gt;
&lt;p&gt;
  The Nexus One comes with a 5 megapixel camera.  I've had trouble
  sometimes with the automatic white balance making pictures more
  yellow than they should be, but overall it takes really great
  pictures, and the autofocus lets it take really close pictures,
  really sharp.
&lt;/p&gt;
&lt;p&gt;
  Autofocus combined with the 5MP camera leads to really fast decoding
  of bar codes and QR codes.
&lt;/p&gt;
&lt;h2&gt;The Apps&lt;/h2&gt;
&lt;p&gt;
  As a Go enthusiast, I'm a little bit disappointed by the number of
  Go applications on the Android market.  I haven't yet found a great
  app for recording Go games, although an open source app called
  "gobandroid" appears to be making some really great progress.
&lt;/p&gt;
&lt;p&gt;
  There are tons of both free and for-pay apps in the Android Market.
  I don't see any shortage of applications really.
&lt;/p&gt;
&lt;h2&gt;Battery Life&lt;/h2&gt;
&lt;p&gt;
  The battery doesn't seem to last as long as the battery in my iPhone
  3G did.  I'm not sure what the reason for this is, but it could be
  due to a number of factors, not least of which is the fact that I'm
  always messing around with the phone.  Background processing may
  account for some of that, but I don't really know.
&lt;/p&gt;
&lt;h2&gt;Email&lt;/h2&gt;
&lt;p&gt;
  One of the things I really hated about the iPhone is the fact that
  it took me so many steps to check email:
  &lt;ol&gt;
    &lt;li&gt;Unlock the phone&lt;/li&gt;
    &lt;li&gt;Run the "Mail" app&lt;/li&gt;
    &lt;li&gt;Select the correct email account&lt;/li&gt;
    &lt;li&gt;Select the inbox&lt;/li&gt;
    &lt;li&gt;Wait for the client to connect to the mail server&lt;/li&gt;
  &lt;/ol&gt;
  On my Nexus One, there's only one step, thanks to background
  processing and a helpful status bar:
  &lt;ol&gt;
    &lt;li&gt;Press the "standby" button&lt;/li&gt;
    &lt;li&gt;There is no step 2&lt;/li&gt;
  &lt;/ol&gt;
&lt;/p&gt;
&lt;h2&gt;The Verdict Thus Far&lt;/h2&gt;
&lt;p&gt;
  So far, I really love my Nexus one.  I'm still discovering new
  apps and new things about the phone, but I really use it a lot more
  than I ever used my iPhone.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-7739937363040568123?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/7739937363040568123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2010/02/life-with-nexus-one-part-i.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7739937363040568123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7739937363040568123'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2010/02/life-with-nexus-one-part-i.html' title='Life with the Nexus One, part I'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-8237446677020338463</id><published>2009-12-31T20:52:00.000-08:00</published><updated>2010-01-01T16:59:22.068-08:00</updated><title type='text'>New Year's resolutions, 2009 and 2010</title><content type='html'>&lt;p&gt;Ok, wow.  I made a New Year's resolution last year to write a blog entry every week.  After falling hopelessly behind in February, I gave up on blogging entirely.  Ouch, ouch, ouch.&lt;/p&gt;
&lt;p&gt;Actually, I made two resolutions on this blog last year:
&lt;ol&gt;
&lt;li&gt;Tweet at least once a day&lt;/li&gt;
&lt;li&gt;Post at least one blog entry a week on one of my blogs&lt;/li&gt;
&lt;/ol&gt;
How did I do with my other resolution?  Pretty good, actually.  Well, sort of.  I certainly didn't tweet every single day, but that wasn't really the point.  I was going for the daily average.  According to &lt;a href="http://tweetstats.com/"&gt;TweetStats&lt;/a&gt;, I tweeted 587 times last year.&lt;/p&gt;
&lt;p&gt;So one for two?  Not bad.  But what went wrong with that resolution that I missed on?  I think it's pretty simple:
&lt;ol&gt;
&lt;li&gt;Make a resolution you can stick to.&lt;/li&gt;
&lt;li&gt;Renegotiate your resolutions if you need to.&lt;/li&gt;
&lt;/ol&gt;
So yeah, a blog post every week is way too much for me, with all the other things I have going.  And when I realized I couldn't keep up the pace, I should have simply changed my resolution to something attainable.
&lt;/p&gt;
&lt;p&gt;
This year, I'm going to stick to a similar theme.  It's about forming habits.  And it's about social networking:
&lt;ol&gt;
&lt;li&gt;One blog entry per month.&lt;/li&gt;
&lt;li&gt;Two facebook updates per week.&lt;/li&gt;
&lt;/ol&gt;
These are both things I can easily stick to, and can definitely overshoot if I try.  But the resolution is about forming a habit, not so much about meeting a goal.
&lt;/p&gt;
&lt;p&gt;Oh yeah, and this post doesn't count towards the 12 blog posts I'm resolving to write this year!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-8237446677020338463?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/8237446677020338463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2009/12/new-years-resolutions-2009-and-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/8237446677020338463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/8237446677020338463'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2009/12/new-years-resolutions-2009-and-2010.html' title='New Year&apos;s resolutions, 2009 and 2010'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-743836537415225315</id><published>2009-02-12T18:20:00.000-08:00</published><updated>2009-02-12T18:32:22.943-08:00</updated><title type='text'>Branching after committing locally in git</title><content type='html'>&lt;p&gt;Today I found out that one of my co-workers had a local commit that he wanted to undo, so that he could work on another task that he actually wanted his earlier commit to come after.  His question was: How do I undo a commit but keep the files?  The answer to that is simple: simply use &lt;code&gt;git reset HEAD^&lt;/code&gt; to point master to the commit before the current HEAD.  By default, this leaves the checked out code alone, and it remains as uncommitted changes locally.  &lt;code&gt;git reset --hard&lt;/code&gt; will check out the previous changes and blow your commit away completely.&lt;/p&gt;

&lt;p&gt;On the other hand, branches in git are essentially just pointers to nodes in the repository tree.  So, consider doing this instead:
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git checkout master&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git branch new_branch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git reset --hard HEAD^&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
What does this do?  It creates a new branch that points to the HEAD of the current master, then resets master to point to the previous commit from HEAD.  Once that's done, you can continue working in the branch, or make further commits to HEAD.  Then, when you're ready to continue work in new_branch, you can rebase it against master and continue on your way as usual!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-743836537415225315?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/743836537415225315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2009/02/branching-after-committing-locally-in.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/743836537415225315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/743836537415225315'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2009/02/branching-after-committing-locally-in.html' title='Branching after committing locally in git'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-902477617925541239</id><published>2009-02-08T17:59:00.000-08:00</published><updated>2009-02-08T18:14:18.008-08:00</updated><title type='text'>Gaming Lunches at AT&amp;T Interactive</title><content type='html'>&lt;p&gt;I started a new job as a Ruby developer at AT&amp;T Interactive (AKA YellowPages.com) in Glendale, CA, back on December 1st.  While I've organized gaming lunches at my previous two companies, I've always been a little bit conservative, worrying about being too successful and not being able to handle too many participants.  Ha!&lt;/p&gt;

&lt;p&gt;Well, having too many participants is a problem I'd love to have.  So, I decided to go all out on this one.  I worked with HR to send out an allstaff email to get participants.  I made up fliers with pull tabs giving the e-mail address to contact to join the mailing list.  I hold the gaming events in the main break room, which has room for plenty of people.  And I'm varying the games played from week to week so that we'll cover a wide variety of choices, and hopefully we'll bring more people out because of it.&lt;/p&gt;

&lt;p&gt;So far, we've played Scrabble, Rummy, and Chess.  Scrabble had the best turnout so far: 8 people.  Chess was close, with 7 players.  This week we'll be playing Hearts.&lt;/p&gt;

&lt;p&gt;I have 35 people total on my mailing list so far, and hopefully I'll be able to build the events and get more regular players.  These kinds of events need to reach a critical mass before they can be self-sustaining.  The group has to be big enough to be able to lose a couple of people here and there and still have at least 5 or 6 attendees every week.&lt;/p&gt;

&lt;p&gt;I'll be updating with my status periodically.  Have you ever organized an event like this at work?  I'd love to hear from you!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-902477617925541239?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/902477617925541239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2009/02/gaming-lunches-at-at-interactive.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/902477617925541239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/902477617925541239'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2009/02/gaming-lunches-at-at-interactive.html' title='Gaming Lunches at AT&amp;T Interactive'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-7477362076454532745</id><published>2009-01-01T14:32:00.001-08:00</published><updated>2009-01-01T15:40:19.369-08:00</updated><title type='text'>New Year's Resolution: 365 Tweets, 52 Blog Entries</title><content type='html'>&lt;p&gt;Well, 2009 is upon us, and for those of us who believe in them, it's time to make our New Year's resolutions.  I have to admit, I've been one of those people who don't believe in New Year's resolutions.  After all, if you're not eager enough to do something &lt;em&gt;right now&lt;/em&gt;, you're probably not going to stick with it.  Want to stop smoking?  Do it when you're ready.  That might be on January 1st, but it may just as well be on any other day of the year.  So why bother making resolutions?  And how do you make a resolution that's going to stick?&lt;/p&gt;

&lt;p&gt;It's really refreshing to look at today as the first day of a completely new year where I can change important things in my life.  Some of those things I wonder about, and others I just have to have the resolve to do, and they are in my reach.&lt;/p&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_aILt-4LhZHc/SV1QKiwv3RI/AAAAAAAAABU/zovtn14nbPc/s1600-h/books_500_428.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 274px;" src="http://1.bp.blogspot.com/_aILt-4LhZHc/SV1QKiwv3RI/AAAAAAAAABU/zovtn14nbPc/s320/books_500_428.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5286469679663013138" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last year, I made a simple and attainable resolution that I hoped I would be able to stick with, and that would get me back into a habit that I'd been sorely missing: I resolved to read a novel every month.  It's a resolution I was able to keep.  I didn't have to work too hard to do it.  I had about 50 minutes of reading time on the train every day during my commute from Pasadena to my job Downtown at the LA Times.  I ended up reading 16 novels last year, up from only two novels in the previous five years.&lt;/p&gt;

&lt;p&gt;Why did it work?  I think it worked because all I needed was to form a new habit.  I had plenty of time to read the books, it was something I truly wanted to do, and all I needed was to make a commitment to myself that I was going to take the time to do it.&lt;/p&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.squidoo.li/twitter-icon.jpg"&gt;&lt;img style="display:inline; cursor:pointer; cursor:hand;width: 100px; height: 100px;" src="http://www.squidoo.li/twitter-icon.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.iconspedia.com/uploads/677166248.png"&gt;&lt;img style="display:inline; cursor:pointer; cursor:hand;width: 100px; height: 100px;" src="http://www.iconspedia.com/uploads/677166248.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This year I'm resolving to be better about social networking.  Everybody I know is already involved with social networking, and I'm partly involved already.  I know that if I improve my social networking, it will be good for both my personal life and for my career.  I have a decent &lt;a href="http://www.linkedin.com/in/alfmikula"&gt;LinkedIn profile&lt;/a&gt;, a &lt;a href="http://www.facebook.com/people/Alf-Mikula/1082841989"&gt;Facebook account&lt;/a&gt; complete with friends from high school I still don't talk to, a &lt;a href="http://twitter.com/alfmikula"&gt;Twitter account&lt;/a&gt;, and &lt;a href="http://promotego.blogspot.com"&gt;several&lt;/a&gt; &lt;a href="http://yugoclub.blogspot.com"&gt;blogs&lt;/a&gt; that I haven't updated in a while.  I'm picking two of those for improvement: Twitter and blogging.&lt;/p&gt;

&lt;p&gt;For those of you who don't know &lt;a href="http://twitter.com"&gt;Twitter&lt;/a&gt;, you should really check it out.  It's a great way to stay connected to people around you, and of course it's a lot more fun, the more people you know who are active on Twitter.&lt;/p&gt;

&lt;p&gt;So, this year, I resolve to:
&lt;ul&gt;
&lt;li&gt;Tweet at least once a day&lt;/li&gt;
&lt;li&gt;Post at least one blog entry a week on one of my blogs&lt;/li&gt;
&lt;/ul&gt;
Good luck to all of you in the new year!&lt;/p&gt;

&lt;p&gt;P.S. Yes, this blog post counts as my first of the year.  Maybe this is gonna be too easy.  I'm already 1.92% of the way there!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-7477362076454532745?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/7477362076454532745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2009/01/new-years-resolution-365-tweets-52-blog.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7477362076454532745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7477362076454532745'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2009/01/new-years-resolution-365-tweets-52-blog.html' title='New Year&apos;s Resolution: 365 Tweets, 52 Blog Entries'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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://1.bp.blogspot.com/_aILt-4LhZHc/SV1QKiwv3RI/AAAAAAAAABU/zovtn14nbPc/s72-c/books_500_428.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5485972740370684445.post-5248372553173752143</id><published>2008-08-19T17:35:00.000-07:00</published><updated>2008-08-19T17:38:39.733-07:00</updated><title type='text'>Yu Go Club</title><content type='html'>I've started a new blog for the Go club here in Pasadena, the Yu Go Club.  You can find it here: &lt;a href="http://yugoclub.blogspot.com"&gt;Yu Go Club Blog&lt;/a&gt;

In particular, I want to start writing about the future of Human-Computer Go.  You can find my first article on the subject &lt;a href="http://yugoclub.blogspot.com/2008/08/what-does-future-hold-for-human.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-5248372553173752143?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/5248372553173752143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/08/yu-go-club.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/5248372553173752143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/5248372553173752143'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/08/yu-go-club.html' title='Yu Go Club'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-6058415899224462110</id><published>2008-07-15T13:54:00.000-07:00</published><updated>2008-07-15T13:59:47.897-07:00</updated><title type='text'>Advice to a fellow developer</title><content type='html'>Here's my advice to a fellow Java developer who asked me how to learn Ruby on Rails.  Having gone 100% Ruby on Rails since October of last year, I had a lot to say:

&lt;blockquote&gt;
Join a local Ruby group if you can find one in your area.

I would say definitely get the newest version of the Rails book, but wait a month or two if a new version is about to come out.  Older versions aren't useless, but things change every day.  Even the newest book will be missing things before ink even touches paper.

I highly recommend Rails for Java Developers as the fastest way for you to get up to speed.  After slogging through the Ruby and Rails books, I found RfJD wished I had read it first.  They build on what you know from Java instead of starting you from ground zero, and that will save you a lot of time.

Build a couple of VERY SMALL projects first before you launch yourself on a big project.  Your first few projects will be very messy and hard to maintain, despite your best intentions to the contrary.

Practice Ruby with simple problems like the ones at &lt;a href="http://projecteuler.net"&gt;Project Euler&lt;/a&gt;.

Ask a lot of questions.

Shun the Rails Wiki pages.  The information there is generally a mix of wrong AND out of date.

Watch Railscasts videos.

Suffer gracefully.

Ask more questions.
&lt;/blockquote&gt;

Got any more advice to share?  Post it here!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-6058415899224462110?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/6058415899224462110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/07/advice-to-fellow-developer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6058415899224462110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6058415899224462110'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/07/advice-to-fellow-developer.html' title='Advice to a fellow developer'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-9130305179785877502</id><published>2008-07-02T22:10:00.000-07:00</published><updated>2008-07-02T22:22:44.301-07:00</updated><title type='text'>BookMooch vs. PaperbackSwap (Part 1 of 2)</title><content type='html'>I've been using BookMooch to trade books with people, and it's generally worked pretty well for me.  However, I found myself ultimately with a number of points and a big wishlist of books that I wanted that nobody offered.

Enter PaperbackSwap.  I've been a member for about a week now.  What do I think about it?  I think they got a bunch of stuff right that BookMooch hasn't.  Take a minor example:

&lt;a href="http://www.paperbackswap.com/index.php?n=9&amp;r_by=amikula%40gmail.com" alt="PaperBackSwap - Swap your used paperback books with other club members."&gt;&lt;img src="http://www.paperbackswap.com/images/icons/weblog_icon_300_250_1.gif" width="300" height="250"&gt;&lt;/a&gt;

That's a referral banner that I can include in my blog post.  I get points if you sign up through it.  If you find this post at all helpful, I hope you'll use that banner to sign up for PaperbackSwap.

What's the difference, you're asking?  The most compelling reason for me is that they have a bigger catalog than BookMooch.  Checking out the "Under the Hood" link earlier today, I found that they have around 4 books posted every minute.  Right now the site says 2,280,827 books available.

One of the most striking differences, to me, is the fact that BookMooch only gives you 2 points to start with (meaning you can request 2 books), and after that you can only ship books to other members or buy points, as a means of getting more points to request books.  BookMooch, on the other hand, awards 0.1 points for every book posted and 0.1 points for every book you receive and provide feedback on.  This means that BM is creating points constantly regardless of whether you're posting useful books into the system or not.  More points received than spent means that it's easy to mooch books, and you don't even have to post books that anybody wants.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-9130305179785877502?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/9130305179785877502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/07/bookmooch-vs-paperbackswap-part-1-of-2.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/9130305179785877502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/9130305179785877502'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/07/bookmooch-vs-paperbackswap-part-1-of-2.html' title='BookMooch vs. PaperbackSwap (Part 1 of 2)'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5485972740370684445.post-6749069037511285253</id><published>2008-05-08T21:12:00.000-07:00</published><updated>2008-05-08T21:19:21.392-07:00</updated><title type='text'>Surprising findings using Ruby Arrays as Queues</title><content type='html'>I'm working on an Aho-Corasick implementation in Ruby, and found something interesting about Ruby.  Well, something interesting to a relative newbie, I suppose...

Arrays are the Ruby object that people use for Queues in Ruby.  Which is a little odd, because the performance of Ruby arrays as queues is pretty poor.  Worse, in fact, than inserts into a Hash.  This is probably due to the fact that pushing objects into an array requires growing the array.

Furthermore, I found that the performance of Array#+ is better than Array#push and Array#&lt;&lt;, even though all three methods ostensibly do the same thing.

It turns out that Ruby does have a Queue object that performs well.  It's intended for producer/consumer operations across multiple threads, but nonetheless it performs much better as a Queue than arrays do.  Here it is, the &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/thread/rdoc/classes/Queue.html"&gt;Queue&lt;/a&gt; class in all its glory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-6749069037511285253?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/6749069037511285253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/05/surprising-findings-using-ruby-arrays.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6749069037511285253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6749069037511285253'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/05/surprising-findings-using-ruby-arrays.html' title='Surprising findings using Ruby Arrays as Queues'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-6481035832972220762</id><published>2008-04-27T15:44:00.000-07:00</published><updated>2008-04-27T15:48:55.678-07:00</updated><title type='text'>2008 Presidential Election Poll</title><content type='html'>I've created a &lt;a href="http://vote.superduperapps.com/polls/vote/h6QMzvPAuxXygRhk"&gt;2008 Presidential Election Poll&lt;/a&gt; using my Range Voting poll that I wrote about earlier.  The polling application is ready for general use, although I do have a few more features I want to add to it.

In the meantime, &lt;a href="http://vote.superduperapps.com/polls/vote/h6QMzvPAuxXygRhk"&gt;cast your vote&lt;/a&gt; for president!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-6481035832972220762?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/6481035832972220762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/04/2008-presidential-election-poll.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6481035832972220762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6481035832972220762'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/04/2008-presidential-election-poll.html' title='2008 Presidential Election Poll'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-1480743352184696883</id><published>2008-04-20T12:07:00.000-07:00</published><updated>2008-04-20T12:16:32.846-07:00</updated><title type='text'>Range Voting Application</title><content type='html'>I'm happy to announce my new &lt;a href="http://vote.superduperapps.com"&gt;Range Voting Application&lt;/a&gt;, which allows you to set up your own range voting polls.  After finding that &lt;a href="http://www.doodle.ch"&gt;Approval Voting&lt;/a&gt; didn't give my co-workers at the LA Times enough expressiveness, I started looking for a Range Voting system I could use for my weekly polls.  When I didn't find a great Range Voting application, I decided to create my own.  It's easy to use, both for voters, and for poll administrators.  Try it out by voting in one of the example polls on the &lt;a href="http://vote.superduperapps.com"&gt;home page&lt;/a&gt; or jump right in by &lt;a href="http://vote.superduperapps.com/polls/new"&gt;creating your own poll&lt;/a&gt; today!

If you want to learn more about Range Voting, the folks over at &lt;a href="http://rangevoting.org"&gt;RangeVoting.org&lt;/a&gt; have a fantastic site with lots of great information about Range Voting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-1480743352184696883?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/1480743352184696883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/04/range-voting-application.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/1480743352184696883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/1480743352184696883'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/04/range-voting-application.html' title='Range Voting Application'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-3988805836003090263</id><published>2008-03-23T21:17:00.000-07:00</published><updated>2008-03-23T21:27:29.545-07:00</updated><title type='text'>SuperDuperApps.com</title><content type='html'>&lt;p&gt;After several attempts to get Google to index my server at home on my DSL (using a dyndns.org hostname, of course), I decided I needed to set up a more "legitimate" host.  So, I bought a VPS instance at &lt;a href="http://www.buyavps.com/"&gt;BuyAVPS.com&lt;/a&gt; for $9.99 a month so I could mess around with my own Ruby on Rails apps.&lt;/p&gt;&lt;p&gt;I tried to use some of the pointers I got from &lt;a href="http://www.amazon.com/Principles-Beautiful-Web-Design/dp/0975841963"&gt;The Principles of Beautiful Web Design&lt;/a&gt;, which I finished reading last week, and ended up with a logo and welcome page that I can actually be proud of!  Ok, so it's not much, but now I have a home for &lt;a href="http://superduperapps.com/stamp_calculator/"&gt;StampCalculator&lt;/a&gt; so people can actually discover and use it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-3988805836003090263?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/3988805836003090263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/03/superduperappscom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/3988805836003090263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/3988805836003090263'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/03/superduperappscom.html' title='SuperDuperApps.com'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-7820091673895962413</id><published>2008-03-06T21:22:00.000-08:00</published><updated>2008-03-07T06:43:31.192-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='werewolf'/><category scheme='http://www.blogger.com/atom/ns#' term='gaming lunches'/><title type='text'>Werewolf: Kill the quiet people!</title><content type='html'>Well, today I had the opportunity to be the storyteller in a game of &lt;a href="http://www.eblong.com/zarf/werewolf.html"&gt;Werewolf&lt;/a&gt; at our L.A. Times gaming lunch.  Having played as a werewolf in the last three games in a row, I figured the villagers were going to kill me in the first round anyway, so why not be the moderator and break my streak?

Today, we went down to two werewolves, after three werewolves have won every one of the last 4 games, with 10-14 players total.  I'm promoting a handicapping strategy similar to what we use in &lt;a href="http://usgo.org"&gt;Go&lt;/a&gt;.  Basically, the villagers are trying to handle as many werewolves as possible.  So, if one side wins 3 games in a row, you increase or decrease the number of werewolves by 1.

As the moderator, I got to immediately see what role each player had, from the very beginning.  So I got to see the seer accuse the one person she knew was a villager in the first round!  I thought this was a clever ruse at the time, but in hindsight, the only person she fooled by this was a villager.  Oh, well.  I guess that's my "werewolf logic" showing through!

Anyway, to the point: The villagers lost again.  However, if they had stuck to the rule of "kill the quiet people first", they would have won.  Why?  The werewolves were quiet.  Now, pay attention because I think this next bit is the thing people haven't been getting: If you have a policy of "kill the quiet people", you &lt;strong&gt;force&lt;/strong&gt; the werewolves to participate!  Werewolves are liars, and when you're a liar, you don't want to draw attention to yourself.  So if the villagers show that they're intent on killing quiet people, the werewolves have no choice but to participate in the conversation.  By smoking them out in this fashion (and not letting quiet people off because "we don't think that person is really a werewolf"), you force the werewolves to participate, and you might catch them in a lie.

&lt;b&gt;Update:&lt;/b&gt; I remembered what's so clever about the seer accusing an innocent person.  It fools the werewolves, who are looking to kill the seer as quickly as possible.  Bonus points if the seer gets a quiet person in this fashion, because that helps to flush out the wolves.  While they're off the scent of the seer, the seer can continue to gather data about everybody.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-7820091673895962413?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/7820091673895962413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/03/werewolf-kill-quiet-people.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7820091673895962413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7820091673895962413'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/03/werewolf-kill-quiet-people.html' title='Werewolf: Kill the quiet people!'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-1458885128788767487</id><published>2008-03-03T21:43:00.000-08:00</published><updated>2008-03-04T06:14:36.731-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>Improbable Truths in Ruby</title><content type='html'>&lt;p&gt;The following statements are all true in Ruby 1.8.6:
&lt;code&gt;
0.6 - 0.5 &lt; 0.1
(0.29 * 100).to_i == 28
0.28 * 100 != 28
(0.28 * 100).to_i == 28
(0.27 * 100) == 27
&lt;/code&gt;
Well, what can I say?  Floating point errors in Ruby can really bite you.  I had always thought higher precision numbers were necessary only when dealing with very small numbers or when computing compound interest, but look out!  Ruby floating point can really bite you with some strange, unexpected results.  It makes me wonder why Matz included a to_i method at all!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-1458885128788767487?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/1458885128788767487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/03/improbable-truths-in-ruby.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/1458885128788767487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/1458885128788767487'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/03/improbable-truths-in-ruby.html' title='Improbable Truths in Ruby'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-6482917753942811463</id><published>2008-03-01T12:53:00.001-08:00</published><updated>2008-03-04T06:14:20.237-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>Weird Floating Point Problem in Ruby</title><content type='html'>I'm working on a simple postage stamp calculator, just one of several projects I have for some Ruby on Rails practice.  So I set up my rspec tests and find that one of my tests is failing.  After stepping through the test, I found something that I find very surprising: 0.5 - 0.4 &lt; 0.1:
&lt;code&gt;
irb(main):001:0&gt; 0.5-0.4
=&gt; 0.1
irb(main):002:0&gt; 0.5-0.4&lt;0.1
=&gt; true
irb(main):003:0&gt; ((0.5-0.4)*10)
=&gt; 1.0
irb(main):004:0&gt; ((0.5-0.4)*10).to_i
=&gt; 0
irb(main):005:0&gt; ((0.5-0.4)*20).to_i
=&gt; 1
irb(main):006:0&gt; ((0.5-0.4)*20)     
=&gt; 2.0
&lt;/code&gt;
...well, this certainly violates the principle of least astonishment, but I guess the lesson is that I should be using values in terms of pennies (ie, integers not floats).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-6482917753942811463?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/6482917753942811463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/03/weird-floating-point-problem-in-ruby.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6482917753942811463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/6482917753942811463'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/03/weird-floating-point-problem-in-ruby.html' title='Weird Floating Point Problem in Ruby'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-3355122963167144433</id><published>2008-02-24T21:24:00.000-08:00</published><updated>2008-02-25T19:00:34.837-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lysbyg'/><category scheme='http://www.blogger.com/atom/ns#' term='weight loss'/><title type='text'>Misconceptions about diet and exercise</title><content type='html'>Most people I talk to about losing weight have two misconceptions about getting and keeping their weight under control:
&lt;ol&gt;
&lt;li&gt;"Going on a diet" is a good way to lose weight.&lt;/li&gt;
&lt;li&gt;If only I could exercise more, I could lose weight.&lt;/li&gt;
&lt;/ol&gt;
"Going on a diet" is a bad way to lose weight.  Why?  Because of the tacit understanding that the diet is something you would never willingly follow for the rest of your life, some day you're already planning up-front to &lt;strong&gt;go off&lt;/strong&gt; the diet.  What's going to happen then?  You'll eventually be right back where you were before you &lt;strong&gt;went on&lt;/strong&gt; the diet.

As for exercise...well, we all know we &lt;strong&gt;should&lt;/strong&gt; be exercising, but that doesn't mean we always have time to exercise.  In fact, many of my overweight friends are just waiting for themselves to have time to exercise.  Let's face it.  Sometimes you'll have time to exercise, and sometimes you won't.  There is no need to wait for yourself to have time to exercise.  You can change the way you eat and lose weight without exercising.  On the other hand, you could start exercising today, eat more, and not lose a pound.  Diet and exercise are two different things that are very important to your overall health, but exercising while ignoring your eating habits is self-defeating: When you don't have time to exercise, you'll start gaining back whatever weight you lost.

I submit that the &lt;strong&gt;only way&lt;/strong&gt; to lose weight is to take in fewer calories than you burn.  So, if your weight is relatively stable, then all you have to do is be consistent about eating a little bit less at every meal, and with no changes at all to your exercise, you'll stabilize at a lower weight than you have today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-3355122963167144433?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/3355122963167144433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/02/misconceptions-about-diet-and-exercise.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/3355122963167144433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/3355122963167144433'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/02/misconceptions-about-diet-and-exercise.html' title='Misconceptions about diet and exercise'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-8625496634520631373</id><published>2008-02-24T08:49:00.000-08:00</published><updated>2008-02-24T08:59:54.345-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lysbyg'/><category scheme='http://www.blogger.com/atom/ns#' term='weight loss'/><title type='text'>Why the French aren't as fat as Americans</title><content type='html'>Found this today...researchers are supporting what I've been telling people for a while: &lt;a href="http://www.sciencedaily.com/releases/2008/02/080215103153.htm"&gt;Cleaning your plate will make you fat&lt;/a&gt;!

Actually, the article says something more interesting than that: it says that the French rely on internal cues such as feeling hungry and feeling full, while Americans rely on external cues like whether the plate is empty, whether they have remaining beverage, and whether the TV show is over.  Furthermore, they say there's a correlation in both populations between relying on external cues and being overweight:
&lt;blockquote&gt;"Furthermore, we have found that the heavier a person is -- French or American -- the more they rely on external cues to tell them to stop eating and the less they rely on whether they felt full."&lt;/blockquote&gt;
What does this have to LYSBYG?  Everything!  Your stomach tells you when to eat, and it tells you when to stop eating.  In order to lose weight, you first need to start heeding your stomach.  Stop eating &lt;strong&gt;immediately&lt;/strong&gt; when you feel full.  The second step is to consistently eat a little bit less, and drink a little bit less at meals, and your stomach will adapt itself to a lower intake level if you're consistent about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-8625496634520631373?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/8625496634520631373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/02/why-french-arent-as-fat-as-americans.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/8625496634520631373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/8625496634520631373'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/02/why-french-arent-as-fat-as-americans.html' title='Why the French aren&apos;t as fat as Americans'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-3953291781236669717</id><published>2008-02-23T17:17:00.001-08:00</published><updated>2008-02-24T21:27:26.284-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='go'/><title type='text'>Go Club finally taking off at the Pasadena Central Library</title><content type='html'>For a couple of years now, I've been coordinating a Go program at the &lt;a href="http://www.ci.pasadena.ca.us/"&gt;Pasadena Central Library&lt;/a&gt;.  It's been tough, with many weeks having only 1 or 2 kids in attendance and others with no kids at all.  I've lost a couple of my original volunteers, and I'm always on the lookout for more.  At this point I have only two others and myself to cover the weekly Saturday sessions.

Back in December, though, attendance started to pick up, and this Saturday I had 11 kids, one parent, and one adult who dropped in to learn the rules.  This is very exciting!  It proves my theory that you need 4-5 people weekly in order for new people to come to your club and decide to stick around, but more importantly, it means that we finally have a real club at the Pasadena Central Library.  We meet every Saturday from 2-4 pm in the Teen Central room.  You should come by sometime and check it out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-3953291781236669717?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/3953291781236669717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/02/go-club-finally-taking-off-at-pasadena.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/3953291781236669717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/3953291781236669717'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/02/go-club-finally-taking-off-at-pasadena.html' title='Go Club finally taking off at the Pasadena Central Library'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-173793897629333863</id><published>2008-02-19T21:10:00.000-08:00</published><updated>2008-02-24T09:02:55.907-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='la times'/><category scheme='http://www.blogger.com/atom/ns#' term='go'/><category scheme='http://www.blogger.com/atom/ns#' term='gaming lunches'/><title type='text'>Gaming Lunches at the LA Times</title><content type='html'>As a shameless promoter of the game of &lt;a href="http://usgo.org"&gt;Go&lt;/a&gt;, I'm always trying to get my co-workers involved in the game.  After talking to Reid, one of my co-workers, about various games that we enjoy playing, I decided to set up a weekly gaming lunch.  The idea is pretty simple:
&lt;ol&gt;&lt;li&gt;Use &lt;a href="http://www.doodle.ch"&gt;Doodle&lt;/a&gt; to set up polls to choose a time and a game.&lt;/li&gt;&lt;li&gt;Schedule a conference room for the weekly game.&lt;/li&gt;&lt;li&gt;Order lunch for people.&lt;/li&gt;&lt;li&gt;Have fun!&lt;/li&gt;&lt;/ol&gt;I'm proud to say that Go won the first week and consistently comes in second.  The most popular game?  &lt;a href="http://www.eblong.com/zarf/werewolf.html"&gt;Werewolf&lt;/a&gt;, introduced to our group by &lt;a href="http://gilesbowkett.blogspot.com/"&gt;Giles Bowkett&lt;/a&gt;.  It's apparently very popular at Ruby conferences, and our group has lots of fun with it too.

Me?  I like it because it excites people in a way that Go doesn't, and it keeps the lunches popular.  And once in a while people decide to move on to something else, which means I get to introduce more people to Go.  What can I say?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-173793897629333863?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/173793897629333863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/02/gaming-lunches-at-la-times.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/173793897629333863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/173793897629333863'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/02/gaming-lunches-at-la-times.html' title='Gaming Lunches at the LA Times'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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-5485972740370684445.post-7563216293889691969</id><published>2008-02-16T17:17:00.000-08:00</published><updated>2008-02-24T09:01:53.570-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lysbyg'/><category scheme='http://www.blogger.com/atom/ns#' term='weight loss'/><title type='text'>LYSBYG: Let your stomach be your guide, and lose weight</title><content type='html'>I've lost weight by enlisting my stomach to help me in my quest for thinness.  Since last June, I've gone from 248 pounds to 194 pounds, and for the first time in my adult life I'm under 200 pounds.  People keep asking me how I lost the weight, and I've been trying to boil it down to some simple steps.

The basic idea that I had was that I needed to make a permanent life change.  Since I was pretty happy with the food I ate, I figured the permanent life change I needed was to reduce the volume of food that I eat.  This worked amazingly well.  I found that my stomach shrank, and I became physically unable to eat as much as I worked before.  It's like getting your stomach altered to reduce the amount of food you can eat, only much, much healthier and cheaper!  Here's what I did:
&lt;ol&gt;&lt;li&gt;Set a modest goal for myself, about 0.5% of my weight every week.  (about 1 lb for me)
&lt;/li&gt;&lt;li&gt;I weighed myself every week at the same time, at least 1-2 hours after eating.  (Sunday evening after dinner)
&lt;/li&gt;&lt;li&gt;I stopped cleaning my plate.  Plate cleaning really is a habit that leads to overeating.&lt;/li&gt;&lt;li&gt;I reduced my portions by a very small amount across every meal, every week I missed my goal, and increased my portions when I overshot my goal by losing 2 pounds or more.&lt;/li&gt;&lt;li&gt;I stopped snacking except for when I felt physical, stomach-growling hunger.  When I felt hungry like this, I would eat a small snack.&lt;/li&gt;&lt;/ol&gt;That's it!  I know it sounds like something that takes an awful lot of will power, but it really didn't.  Half a percent of your body weight isn't really all that much, and if you stick to that amount, you'll find that you're really not starving yourself.  Plus, if you're really consistent about it, you'll find that your stomach actually shrinks, which means you'll feel satisfied with less food, and you'll feel physically full much faster.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5485972740370684445-7563216293889691969?l=alfmikula.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alfmikula.blogspot.com/feeds/7563216293889691969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://alfmikula.blogspot.com/2008/02/lysbyg-let-your-stomach-be-your-guide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7563216293889691969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5485972740370684445/posts/default/7563216293889691969'/><link rel='alternate' type='text/html' href='http://alfmikula.blogspot.com/2008/02/lysbyg-let-your-stomach-be-your-guide.html' title='LYSBYG: Let your stomach be your guide, and lose weight'/><author><name>Alf Mikula</name><uri>http://www.blogger.com/profile/18048306647934100085</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></feed>
