<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Corey's Ramblings</title>
    <link>http://www.coreyhaines.com/coreysramblings/</link>
    <description>The internet's premiere source of ramblings from Corey Haines</description>
    <image><link>http://creativecommons.org/licenses/by-nc-nd/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image>
    <language>en-us</language>
    <copyright>Corey Haines</copyright>
    <lastBuildDate>Thu, 02 Oct 2008 12:50:37 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>coreyhaines@gmail.com</managingEditor>
    <webMaster>coreyhaines@gmail.com</webMaster>
    <geo:lat>41.473451</geo:lat><geo:long>-81.735801</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/CoreysRamblings" type="application/rss+xml" /><item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=7df7fe3b-f1d4-4d9c-ab6f-69fe9bb599ab</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,7df7fe3b-f1d4-4d9c-ab6f-69fe9bb599ab.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,7df7fe3b-f1d4-4d9c-ab6f-69fe9bb599ab.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=7df7fe3b-f1d4-4d9c-ab6f-69fe9bb599ab</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Well, <a href="http://www.codemash.org/">Codemash</a> is coming up, and I've been
threatening to do a talk. I think I may have thought of a reasonable topic.
</p>
        <h3>Object-Oriented Techniques through Design Principles
</h3>
        <p>
Most OO developers are familiar with OO techniques, such as encapsulation, polymorphism,
etc. But, not as many are familiar with general design principles, such as Single
Responsibility, Open-Closed, Liskov Substitution, Law of Demeter, etc. And, if they
are, sometimes it is difficult to see the connection between the base design guidelines
and their implementation as OO techniques.
</p>
        <p>
This talk will discuss standard Object-Oriented techniques as applications of the
more general design principles, rather than as stand-alone laws. Attendees will come
away with a better view of the 'why' behind the OO techniques, rather than just a
set a rules to follow.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=7df7fe3b-f1d4-4d9c-ab6f-69fe9bb599ab" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Thoughts on a talk</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,7df7fe3b-f1d4-4d9c-ab6f-69fe9bb599ab.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/409252432/ThoughtsOnATalk.aspx</link>
      <pubDate>Thu, 02 Oct 2008 12:50:37 GMT</pubDate>
      <description>&lt;p&gt;
Well, &lt;a href="http://www.codemash.org/"&gt;Codemash&lt;/a&gt; is coming up, and I've been
threatening to do a talk. I think I may have thought of a reasonable topic.
&lt;/p&gt;
&lt;h3&gt;Object-Oriented Techniques through Design Principles
&lt;/h3&gt;
&lt;p&gt;
Most OO developers are familiar with OO techniques, such as encapsulation, polymorphism,
etc. But, not as many are familiar with general design principles, such as Single
Responsibility, Open-Closed, Liskov Substitution, Law of Demeter, etc. And, if they
are, sometimes it is difficult to see the connection between the base design guidelines
and their implementation as OO techniques.
&lt;/p&gt;
&lt;p&gt;
This talk will discuss standard Object-Oriented techniques as applications of the
more general design principles, rather than as stand-alone laws. Attendees will come
away with a better view of the 'why' behind the OO techniques, rather than just a
set a rules to follow.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=7df7fe3b-f1d4-4d9c-ab6f-69fe9bb599ab" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,7df7fe3b-f1d4-4d9c-ab6f-69fe9bb599ab.aspx</comments>
      <category>Programming</category>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/10/02/ThoughtsOnATalk.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=0529463a-a7d0-419a-9a17-d2ffeff9a6ea</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,0529463a-a7d0-419a-9a17-d2ffeff9a6ea.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,0529463a-a7d0-419a-9a17-d2ffeff9a6ea.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=0529463a-a7d0-419a-9a17-d2ffeff9a6ea</wfw:commentRss>
      <title>How I got started in programming</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,0529463a-a7d0-419a-9a17-d2ffeff9a6ea.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/306938429/HowIGotStartedInProgramming.aspx</link>
      <pubDate>Sat, 07 Jun 2008 19:12:12 GMT</pubDate>
      <description>&lt;p&gt;
Well, &lt;a href="http://michaeleatonconsulting.com/blog/Default.aspx"&gt;Michael Eaton&lt;/a&gt; posted
a blog question to everyone regarding &lt;a href='http://michaeleatonconsulting.com/blog/archive/2008/06/04/how-did-you-get-started-in-software-development.aspx'&gt;how
you got started in programming&lt;/a&gt;. My blog is up right now, so I thought I would
answer the questions.
&lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;How old were you when you started programming?
&lt;/h2&gt;
&lt;p&gt;
That's kind of a tough question. I don't really remember a time in my life without
a computer. Although I dabbled here and there with small alterations with source code,
I would have to say that I started really understanding it in my pre-teens. I took
a computer course in 8th grade and already had at least a rudimentary understanding
of programming; I obviously had spent a lot of time, because I remember clocking around
60wpm with hunt-and-peck typing. I guess I don't really remember not having at least
a rudimentary grasp of code. I do remember a lot of copying of code from magazines
and books.
&lt;/p&gt;
&lt;h2&gt;How did you get started in programming?
&lt;/h2&gt;
&lt;p&gt;
My father was a programmer when I was a kid, so computers were around me. I remember
dialing in to his work on an old acoustic coupler modem and playing silly games. Somewhere
along the line, I started learning about source listings and taking a look at how
the games that I was playing were written.&lt;br /&gt;
Now, knowing that my entire memory is filled with at least a basic understanding of
programming, there is a distinct point when I consider myself starting actual programming.
I started calling up BBS's when I was probably 11-12, and I remember meeting a guy
named Fred McClain (who I recently contacted again after all these years). Now, I
had already written little things in BASIC, probably starting on the TRS-80, then
moving to a PC, but Fred (and others on the bulletin boards) showed me C. My father
was a fortran programmer, and I didn't really have a grasp of that. I guess I never
really thought about what he actually did as a day job. For me, computers were a hobby
and not something I even thought of as a career; hell, I wanted to be a theoretical
cosmologist (yeah, even at around 13, I knew what I wanted to be). Fred recommended
that I get the &lt;a href='http://www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1212860031&amp;sr=8-1'&gt;K&amp;R&lt;/a&gt; and
the TurboC Bible, plus, of course, TurboC. So, that's what I did. Holy Shit! It was
like a whole new world. I couldn't get enough of it. I remember waking up on Saturday,
turning on my hand-me-down Tandy 1000 (when my dad got his 286), then realizing that
my mother was calling me down for dinner. I have a bit of strange memory for years,
as I thought I got TurboC++ 1.0 (now with MDI support, sweetness!) in 1989, but wikipedia
says it was released in 1991. Oh well, you never know (okay, maybe they do know, and
I don't). In any case, I remember that all I wanted for christmas was TurboC++ 1.0,
and, for sure, it was sitting under the tree (I wonder if it was TurboC that I got
for christmas, which would explain the timing difference in my mind). In any case,
I loved that app with all my heart. I still remember how wonderful it was to work
with; keyboard support for everything, MDI support (editing multiple files at once,
wowsers), etc.&lt;br /&gt;
Somewhere along being a teenager, I wrote a small calendaring application that I sold
to my sister's work. It was a very simple application that allowed you to schedule
events. When you turned on your computer, a small application in your autoexec.bat
would check to see if there was anything scheduled for that day. If so, it would alert
you. Super sweet! Yeah, it was a small database, and I had figured out a rudimentary
indexing mechanism using two flat files. It was pretty cool to actually write something
and sell it. I think I got $15, or something, which is a lot when you are young.&lt;br /&gt;
I also remember writing a fairly complex 'install program' for a game that my friend,
Mike Denton, and I were giving to a friend. The kicker was that the 'install' would
actually put some other stuff on his machine. The point was to stick a small application
in his autoexec.bat that would pop up porn every few boots. The app was sensitive
as to whether it was being run on boot, or not, so it spit something like 'microsoft
time tracker' or something silly if it was being run from the command-line. The porn
was spread out all over his machine, so it was going to be a bitch to track down and
remove, if he ever figured out what was causing it. In the end, we didn't deploy it,
but it sure was fun.&lt;br /&gt;
When I was 19, I moved to Berkeley, CA, for a 9-month stint in the Department of Energy's
Science and Engineering Research Semester. I worked in the astronomy department in
a team that was searching for supernovae to try to measure whether the universe was
going to collapse or keep expanding. I had a solid grasp of programming by then, as
I definitely did some programming for them. I remember writing a budget tracking application
in Excel 4 using macros. I wrote a small interface in C++ that would integrate with
a specific telescope motion controller and draw off the data into Excel to be analyzed
(we needed to make sure that this specific motion controller could support the tolerances
we needed for a 5-minute exposure). I also worked on interfacing with a clock that
synchronized over the air with the national atomic clock. It didn't have any documentation,
so I was left sending commands over the RS-232 and trying to figure out what came
back. I figured out how to get the data back, but I don't think I ever actually got
the time coming back. Somewhere along the lines there I built a null-modem and a rudimentary
terminal program between a PC and a dummy terminal. The experience in Berkeley was
amazing and life-changing for me, and I met some great people.
&lt;/p&gt;
&lt;h2&gt;What was your first language?
&lt;/h2&gt;
&lt;p&gt;
Well, it was most assuredly some form of BASIC, probably GW-BASIC. My first language
that I REALLY worked with was C on MS-DOS.
&lt;/p&gt;
&lt;h2&gt;What was the first real program you wrote?
&lt;/h2&gt;
&lt;p&gt;
As outlined above, my first real program was a calendaring application. That was super
cool and led to some great understandings. I also wrote an application for a &lt;a href='http://www.citadel.org/doku.php/documentation:citadel_past_present_and_future'&gt;citadel&lt;/a&gt;-based
BBS that simulated a griffin-racing game, so you could win credits on &lt;a href='http://www.tyrinth.com/gateway/G.HTM'&gt;City
of Edgekeep&lt;/a&gt; (Scot Ranney's BBS).&lt;br /&gt;
Scot Ranney and I also learned C++ together by writing a port of the old Atari 2600
combat game.&lt;br /&gt;
My first major application was a language school management application that I wrote
in Hungary for the school I was working at. I figured I could write it in Excel, since
I had experience with the macros. This was in 1995, I believe, and Excel 5 had come
out with VBA. Wow! I ended up writing the application in VBA. Unfortunately, I only
had the help files to learn from, and, to top it all, they were in Hungarian. Needless
to say, the application was ugly, but it worked. One side note is that I ended up
writing a fairly robust relational database system in Excel, including referential
integrity and cascading deletes. It was super sweet! Of course, I could have done
it in Access, but I had never heard of it. :) I actually got paid for writing that
application, so I was pretty excited. It wasn't a lot of money, but it definitely
helped my living expenses there.&lt;br /&gt;
Based on my database system in Excel, I wrote a super cool little quiz application,
as well. I originally used it as a way to practice Hungarian, putting in words and
having the system ask me what they meant. I ended up selling this to a few of my students,
as well. It had a few different quiz types that you could use, as well as allowing
you to invert the language. It supported exporting lists into a file that another
user could import into their own copy. This allowed students to share the burden of
typing in the lists. 
&lt;/p&gt;
&lt;h2&gt;What languages have you used since you started programming? 
&lt;/h2&gt;
&lt;p&gt;
In the beginning: C/C++, GW-Basic, MS-Dos batch
&lt;/p&gt;
&lt;p&gt;
For various amounts of pay: Visual Basic for Applications, Visual Basic (4-6), C#,
VB.Net, Java, VBScript, Javascript, Ruby, XSLT
&lt;/p&gt;
&lt;p&gt;
For fun and learning (this means varying levels of actual writing code/familiarity):
Lisp, F#, Python
&lt;/p&gt;
&lt;h2&gt;What was your first professional programming gig?
&lt;/h2&gt;
&lt;p&gt;
Well, if by 'gig', I mean 'actual job' then it would be in 1996 at the Hungarian company,
Elender. I worked as the web developer there from fall of 1996 to fall of 1997. I
ended up running the web studio there, which was when I learned that I shouldn't be
a manager: I am horrible at it. Would I be better now, based on my experience? Sure,
I would. I don't want to, though, so I just keep telling everyone that I'm a horrible
manager.
&lt;/p&gt;
&lt;h2&gt;If you knew then what you know now, would you have started programming?
&lt;/h2&gt;
&lt;p&gt;
Absolutely! It is an amazing hobby and career.
&lt;/p&gt;
&lt;h2&gt;If there is one thing you learned along the way that you would tell new developers,
what would it be?
&lt;/h2&gt;
&lt;p&gt;
This has been repeated many times by people answering these questions, but I'll repeat
it: Programming is a social activity. Do not let yourself get stuck in a heads-down,
cube-farm job. Get involved in the community. Make connections, build your network.
The best way to get ahead is to do with with support from other people.&lt;p&gt;
&lt;p&gt;
My own contribution is that you are responsible for your own career. A company is
responsible for your job, but you must actively take steps to further your own career.
Don't complain that your company isn't sending you to that conference: pay for it
yourself and go, even if you have to take time off. Read, write, talk, program!
&lt;/p&gt;
&lt;h2&gt;What's the most fun you've ever had ... programming?
&lt;/h2&gt;
&lt;p&gt;
Wow! What a crazy thing to answer. I have had so many fantastic experiences programming,
I don't know which to choose. Here's a couple examples:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Writing code with Scot Ranney as a teenager. How awesome is was to program as a hobby;
we would just sit down and start writing code. What do we want it to do? Let's write
it. Doesn't work? Change it and try again.&lt;/li&gt;
&lt;li&gt;
Working on the first version of FUnit with Mike Kerkel. I remember my first real experience
with getting into the pair-programming groove: we worked for something like 8 hours
straight together and just cranked out an amazing amount of code.&lt;/li&gt;
&lt;li&gt;
Pairing at agile conferences. 2004 XP Universe: when I stumbled into the coding room
and met David Chelimsky. Late night drunken programming at Agile 2007.&lt;/li&gt;
&lt;li&gt;
Definitely neither last nor least, I am loving my job at within3. We are a small team
of really passionate people working on something that could potentially save lives.
Am I working my tail off? Yes. Am I having more fun than I've had in a long time?
Absolutely!&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=0529463a-a7d0-419a-9a17-d2ffeff9a6ea" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,0529463a-a7d0-419a-9a17-d2ffeff9a6ea.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/06/07/HowIGotStartedInProgramming.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=532fafa8-3b8e-43ea-b8dc-b3873de77191</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,532fafa8-3b8e-43ea-b8dc-b3873de77191.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,532fafa8-3b8e-43ea-b8dc-b3873de77191.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=532fafa8-3b8e-43ea-b8dc-b3873de77191</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have a post coming up to recap the <a href="http://www.clevelanddodn.org/">Cleveland
Day of Dot Net (CDoDN)</a>, but I wanted to make sure to blog about the beginning
of 30 days of vegetarianism. For a while now, I've been having some thoughts about
how eating meats fits with my life. I've been contemplating how the animals around
us are related to me. Genetic evidence shows that we all have a common ancestor. What
makes me that much different than them? Yes, I have self-awareness, which the animals
we eat don't have, but that is just a fluke of evolution.
</p>
        <p>
The higher-order animals that make up our diet, while not necessarily self-aware,
most assuredly feel pain, have feelings, personalities. Now, these qualities may not
be as strong in some animals as in us, but they still have them. So, if this is true,
and I accept it, I feel a bit hypocritical supporting an industry that is notorious
for cruelty. It isn't really that I feel bad eating them, it is more that I feel bad
with the circumstances that lead to my dinner; I started feeling a bit hypocritical.
This always bothers me.
</p>
        <p>
The way I see it, I had two choices: stop eating meat or switch to a diet of verifiably
humanely raised and slaughtered meat. Now, thinking about it, the second option just
seems like a lot of hassle, not to mention very expensive. That certainly helped my
decision. Of course, I hate plants, so eating vegetables seemed like a good option.
</p>
        <p>
I've been fooling with this for a few months now, but, the timing was right at the
CDoDN this weekend. I was lucky enough to sit next to <a href="http://netcave.org/">Alan
Stevens</a> at dinner. He is a vegetarian, and we had a nice conversation about it.
I don't remember exactly what was said, but, during the course of the conversation,
I determined that I would try to be a vegetarian. Alan was very cool about his reasons,
not really overbearing about it. That's super cool. So, coming back from the conference,
I determined to see if I could do it. One of the things they say about making a habit
is to try it for a certain amount of time. So, I decided to try it for 30 days. At
this point, I certainly hope that the 30 days will be enough for it to become part
of my day-to-day life, but we shall see.
</p>
        <p>
The other thing they say is to make sure that the people around you know. Don't be
obnxious, but just let people know. This will make it more likely that you will keep
it up. So, consider this letting people know.
</p>
        <p>
Everyone says that switching to a vegetable diet will help you lose weight, too. That's
a definite plus.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=532fafa8-3b8e-43ea-b8dc-b3873de77191" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>30 Days of Vegetarianism</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,532fafa8-3b8e-43ea-b8dc-b3873de77191.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/293954274/30DaysOfVegetarianism.aspx</link>
      <pubDate>Tue, 20 May 2008 03:07:46 GMT</pubDate>
      <description>&lt;p&gt;
I have a post coming up to recap the &lt;a href='http://www.clevelanddodn.org/'&gt;Cleveland
Day of Dot Net (CDoDN)&lt;/a&gt;, but I wanted to make sure to blog about the beginning
of 30 days of vegetarianism. For a while now, I've been having some thoughts about
how eating meats fits with my life. I've been contemplating how the animals around
us are related to me. Genetic evidence shows that we all have a common ancestor. What
makes me that much different than them? Yes, I have self-awareness, which the animals
we eat don't have, but that is just a fluke of evolution.
&lt;/p&gt;
&lt;p&gt;
The higher-order animals that make up our diet, while not necessarily self-aware,
most assuredly feel pain, have feelings, personalities. Now, these qualities may not
be as strong in some animals as in us, but they still have them. So, if this is true,
and I accept it, I feel a bit hypocritical supporting an industry that is notorious
for cruelty. It isn't really that I feel bad eating them, it is more that I feel bad
with the circumstances that lead to my dinner; I started feeling a bit hypocritical.
This always bothers me.
&lt;/p&gt;
&lt;p&gt;
The way I see it, I had two choices: stop eating meat or switch to a diet of verifiably
humanely raised and slaughtered meat. Now, thinking about it, the second option just
seems like a lot of hassle, not to mention very expensive. That certainly helped my
decision. Of course, I hate plants, so eating vegetables seemed like a good option.
&lt;/p&gt;
&lt;p&gt;
I've been fooling with this for a few months now, but, the timing was right at the
CDoDN this weekend. I was lucky enough to sit next to &lt;a href='http://netcave.org/'&gt;Alan
Stevens&lt;/a&gt; at dinner. He is a vegetarian, and we had a nice conversation about it.
I don't remember exactly what was said, but, during the course of the conversation,
I determined that I would try to be a vegetarian. Alan was very cool about his reasons,
not really overbearing about it. That's super cool. So, coming back from the conference,
I determined to see if I could do it. One of the things they say about making a habit
is to try it for a certain amount of time. So, I decided to try it for 30 days. At
this point, I certainly hope that the 30 days will be enough for it to become part
of my day-to-day life, but we shall see.
&lt;/p&gt;
&lt;p&gt;
The other thing they say is to make sure that the people around you know. Don't be
obnxious, but just let people know. This will make it more likely that you will keep
it up. So, consider this letting people know.
&lt;/p&gt;
&lt;p&gt;
Everyone says that switching to a vegetable diet will help you lose weight, too. That's
a definite plus.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=532fafa8-3b8e-43ea-b8dc-b3873de77191" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,532fafa8-3b8e-43ea-b8dc-b3873de77191.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/05/20/30DaysOfVegetarianism.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=6b68ac9b-7b77-41fe-a6b2-5db4e42f3c52</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,6b68ac9b-7b77-41fe-a6b2-5db4e42f3c52.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,6b68ac9b-7b77-41fe-a6b2-5db4e42f3c52.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=6b68ac9b-7b77-41fe-a6b2-5db4e42f3c52</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As I've mentioned earlier, I'm experimenting with two DSCM providers: Mercurial and
Bazaar. I'm currently using Bazaar, but will be switching to Mercurial soon to try
it out. Joe Fiorini, the <a href="http://www.faithfulgeek.org" target="_blank">Faithful
Geek</a>, and I were hanging out on Saturday, talking about it, and he had the idea
of recording <a href="http://www.faithfulgeek.org/2008/2/24/distributed-source-control-with-corey-haines" target="_blank">a
conversation on my DSCM experience</a> for his "Conversations in Technology" podcast.
He plugged his microphone in, and we had a nice conversation. As conversations do,
we meandered a bit, got on some tangents, but it was fairly focused. I haven't listened
to it, yet, but I'll post any comments if I notice anything crazy.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=6b68ac9b-7b77-41fe-a6b2-5db4e42f3c52" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Distributed SCM Conversation</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,6b68ac9b-7b77-41fe-a6b2-5db4e42f3c52.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/242062194/DistributedSCMConversation.aspx</link>
      <pubDate>Wed, 27 Feb 2008 12:04:21 GMT</pubDate>
      <description>&lt;p&gt;
As I've mentioned earlier, I'm experimenting with two DSCM providers: Mercurial and
Bazaar. I'm currently using Bazaar, but will be switching to Mercurial soon to try
it out. Joe Fiorini, the &lt;a href="http://www.faithfulgeek.org" target="_blank"&gt;Faithful
Geek&lt;/a&gt;, and I were hanging out on Saturday, talking about it, and he had the idea
of recording &lt;a href="http://www.faithfulgeek.org/2008/2/24/distributed-source-control-with-corey-haines" target="_blank"&gt;a
conversation on my DSCM experience&lt;/a&gt; for his "Conversations in Technology" podcast.
He plugged his microphone in, and we had a nice conversation. As conversations do,
we meandered a bit, got on some tangents, but it was fairly focused. I haven't listened
to it, yet, but I'll post any comments if I notice anything crazy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=6b68ac9b-7b77-41fe-a6b2-5db4e42f3c52" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,6b68ac9b-7b77-41fe-a6b2-5db4e42f3c52.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/02/27/DistributedSCMConversation.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=8926f263-a0bc-4af5-a43c-50370381d00d</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,8926f263-a0bc-4af5-a43c-50370381d00d.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,8926f263-a0bc-4af5-a43c-50370381d00d.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=8926f263-a0bc-4af5-a43c-50370381d00d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Currently, I put a validation step in the coupon savings new user registration that
forces a user to wait until I can verify their email before giving them an account.
This is annoying, as a captcha should work okay (I hope).
</p>
        <p>
          <a href="http://deadprogrammersociety.blogspot.com/" target="_blank">Dead Programmer's
Society</a> had an article on <a href="http://deadprogrammersociety.blogspot.com/2008/02/recaptcha-on-rails.html" target="_blank">implementing
captcha in rails backed</a> by  <a href="http://recaptcha.net/" target="_blank">Recaptcha</a>.
Recaptcha is cool, as it uses words from digitized books that couldn't be understood
by an OCR. So, as people use Recaptcha on my site, they will be helping digitize books.
Look at it; it is pretty cool.
</p>
        <p>
Let's see how long it takes me to get it integrated.
</p>
        <p>
[Update: Well, it appears that following the instructions in the blog post worked,
and I have captcha up in the new user registration. I haven't uploaded it to Heroku,
yet, as I want to test a bit more on my local and make sure it really does work.]
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=8926f263-a0bc-4af5-a43c-50370381d00d" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>ReCaptcha on Rails</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,8926f263-a0bc-4af5-a43c-50370381d00d.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/232810182/ReCaptchaOnRails.aspx</link>
      <pubDate>Sun, 10 Feb 2008 22:15:09 GMT</pubDate>
      <description>&lt;p&gt;
Currently, I put a validation step in the coupon savings new user registration that
forces a user to wait until I can verify their email before giving them an account.
This is annoying, as a captcha should work okay (I hope).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://deadprogrammersociety.blogspot.com/" target="_blank"&gt;Dead Programmer's
Society&lt;/a&gt; had an article on &lt;a href="http://deadprogrammersociety.blogspot.com/2008/02/recaptcha-on-rails.html" target="_blank"&gt;implementing
captcha in rails backed&lt;/a&gt; by&amp;nbsp; &lt;a href="http://recaptcha.net/" target="_blank"&gt;Recaptcha&lt;/a&gt;.
Recaptcha is cool, as it uses words from digitized books that couldn't be understood
by an OCR. So, as people use Recaptcha on my site, they will be helping digitize books.
Look at it; it is pretty cool.
&lt;/p&gt;
&lt;p&gt;
Let's see how long it takes me to get it integrated.
&lt;/p&gt;
&lt;p&gt;
[Update: Well, it appears that following the instructions in the blog post worked,
and I have captcha up in the new user registration. I haven't uploaded it to Heroku,
yet, as I want to test a bit more on my local and make sure it really does work.]
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=8926f263-a0bc-4af5-a43c-50370381d00d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,8926f263-a0bc-4af5-a43c-50370381d00d.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/02/10/ReCaptchaOnRails.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=bd662d89-7b3a-4aa3-9525-5a1d9655af85</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,bd662d89-7b3a-4aa3-9525-5a1d9655af85.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,bd662d89-7b3a-4aa3-9525-5a1d9655af85.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=bd662d89-7b3a-4aa3-9525-5a1d9655af85</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Gary Bernhardt says that Bazaar is different Mercurial, because it stores more metadata
about the tree rather than just the state of the tree. This keeps you locked in a
certain version of the repository, keeping them from being able to add metadata. Mercurial
just stores the state of the tree, so you get a better chance of keeping up with the
versions.
</p>
        <p>
Interesting! I'll have to keep this in mind if Mercurial is as easy to use as Bazaar.
</p>
        <p>
[Update: Gary has put a comment on this entry that gives more detail about what he
means. Well worth reading it.]
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=bd662d89-7b3a-4aa3-9525-5a1d9655af85" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>New Information on Mercurial v Bazaar</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,bd662d89-7b3a-4aa3-9525-5a1d9655af85.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/231274168/NewInformationOnMercurialVBazaar.aspx</link>
      <pubDate>Thu, 07 Feb 2008 23:51:16 GMT</pubDate>
      <description>&lt;p&gt;
Gary Bernhardt says that Bazaar is different Mercurial, because it stores more metadata
about the tree rather than just the state of the tree. This keeps you locked in a
certain version of the repository, keeping them from being able to add metadata. Mercurial
just stores the state of the tree, so you get a better chance of keeping up with the
versions.
&lt;/p&gt;
&lt;p&gt;
Interesting! I'll have to keep this in mind if Mercurial is as easy to use as Bazaar.
&lt;/p&gt;
&lt;p&gt;
[Update: Gary has put a comment on this entry that gives more detail about what he
means. Well worth reading it.]
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=bd662d89-7b3a-4aa3-9525-5a1d9655af85" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,bd662d89-7b3a-4aa3-9525-5a1d9655af85.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/02/07/NewInformationOnMercurialVBazaar.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=b9687676-7685-49e1-920e-a754efe72b3a</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,b9687676-7685-49e1-920e-a754efe72b3a.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,b9687676-7685-49e1-920e-a754efe72b3a.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=b9687676-7685-49e1-920e-a754efe72b3a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Well, as I am writing stuff on my home computer, I need to step into the modern world
and get into a DSCM. I put out an email to the rspec group to get people's opinions
on what I should use. <a href="http://blog.davidchelimsky.net/" target="_blank">David
Chelimsky</a> likes mercurial and git, then bazaar came up. Git doesn't run on windows,
so it is out. <a href="http://www.selenic.com/mercurial/wiki/" target="_blank">Mercurial</a> and <a href="http://bazaar-vcs.org/" target="_blank">Bazaar</a> are
written in Python, so they'll run on my system. After reading this comparison of Mercurial
and Bazaar (yeah, I know, it was written by the Bazaar people), I decided to give
Bazaar a chance first.
</p>
        <p>
If I find anything interesting, I'll post. I'm going to give Bazaar two weeks of use,
then Mercurial two weeks of use.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=b9687676-7685-49e1-920e-a754efe72b3a" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Trying a Distributed Version Control System - Bazaar</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,b9687676-7685-49e1-920e-a754efe72b3a.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/229216159/TryingADistributedVersionControlSystemBazaar.aspx</link>
      <pubDate>Mon, 04 Feb 2008 23:43:09 GMT</pubDate>
      <description>&lt;p&gt;
Well, as I am writing stuff on my home computer, I need to step into the modern world
and get into a DSCM. I put out an email to the rspec group to get people's opinions
on what I should use. &lt;a href="http://blog.davidchelimsky.net/" target="_blank"&gt;David
Chelimsky&lt;/a&gt; likes mercurial and git, then bazaar came up. Git doesn't run on windows,
so it is out. &lt;a href="http://www.selenic.com/mercurial/wiki/" target="_blank"&gt;Mercurial&lt;/a&gt; and &lt;a href="http://bazaar-vcs.org/" target="_blank"&gt;Bazaar&lt;/a&gt; are
written in Python, so they'll run on my system. After reading this comparison of Mercurial
and Bazaar (yeah, I know, it was written by the Bazaar people), I decided to give
Bazaar a chance first.
&lt;/p&gt;
&lt;p&gt;
If I find anything interesting, I'll post. I'm going to give Bazaar two weeks of use,
then Mercurial two weeks of use.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=b9687676-7685-49e1-920e-a754efe72b3a" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,b9687676-7685-49e1-920e-a754efe72b3a.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/02/04/TryingADistributedVersionControlSystemBazaar.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=21d6db36-a95f-4836-be45-c5ab3947d134</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,21d6db36-a95f-4836-be45-c5ab3947d134.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,21d6db36-a95f-4836-be45-c5ab3947d134.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=21d6db36-a95f-4836-be45-c5ab3947d134</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We are having the first coding dojo for the Cleveland Ruby User Group
</p>
        <div style="FONT-SIZE: 12px; WIDTH: 214px; FONT-FAMILY: tahoma, verdana, sans serif; TEXT-ALIGN: center">
          <embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.meetup.com/swf/membership_badge.swf?chapterid=731646" width="214" height="142" type="application/x-shockwave-flash">
          </embed>
          <br />
          <a href="http://ruby.meetup.com/119/?track=i3/mu_hkbw3fsttp">Click here to check out<br />
The Cleveland/North East Ohio Ruby Users Group!</a>
        </div>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=21d6db36-a95f-4836-be45-c5ab3947d134" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>February Coding Dojo for Cleveland Ruby User Group</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,21d6db36-a95f-4836-be45-c5ab3947d134.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/229056984/FebruaryCodingDojoForClevelandRubyUserGroup.aspx</link>
      <pubDate>Mon, 04 Feb 2008 18:31:15 GMT</pubDate>
      <description>&lt;p&gt;
We are having the first coding dojo for the Cleveland Ruby User Group
&lt;/p&gt;
&lt;div style="FONT-SIZE: 12px; WIDTH: 214px; FONT-FAMILY: tahoma, verdana, sans serif; TEXT-ALIGN: center"&gt;&lt;embed pluginspage=http://www.macromedia.com/go/getflashplayer src=http://www.meetup.com/swf/membership_badge.swf?chapterid=731646 width=214 height=142 type=application/x-shockwave-flash&gt;&lt;/embed&gt;
&lt;br&gt;
&lt;a href="http://ruby.meetup.com/119/?track=i3/mu_hkbw3fsttp"&gt;Click here to check out&lt;br&gt;
The Cleveland/North East Ohio Ruby Users Group!&lt;/a&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=21d6db36-a95f-4836-be45-c5ab3947d134" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,21d6db36-a95f-4836-be45-c5ab3947d134.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/02/04/FebruaryCodingDojoForClevelandRubyUserGroup.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=76a4ef34-defc-4c5a-88b5-1b103ce94505</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,76a4ef34-defc-4c5a-88b5-1b103ce94505.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,76a4ef34-defc-4c5a-88b5-1b103ce94505.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=76a4ef34-defc-4c5a-88b5-1b103ce94505</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Mary sent me <a title="Evangelicals a Liberal Can Love" href="http://www.nytimes.com/2008/02/03/opinion/03kristof.html?ex=1359694800&amp;en=98d799f84015fa63&amp;ei=5124&amp;partner=permalink&amp;exprod=permalink" target="_blank">this
editorial from the new york times</a>. UGH! Here's the first paragraph:
</p>
        <blockquote>
          <p>
At a New York or Los Angeles cocktail party, few would dare make a pejorative comment
about Barack Obama’s race or Hillary Clinton’s sex. Yet it would be easy to get away
with deriding Mike Huckabee’s religious faith.
</p>
        </blockquote>
        <p>
So, the first part of his argument is that Obama's race (what is it, really?) and
Hillary Clinton's sex (can I say the same thing?) is exactly the same as Mike Huckabee's
choice of invisible friend. Yeah, that makes sense. That's like saying that mocking <a href="http://www.sherdog.net/forums/showthread.php?t=688218&amp;page=1" target="_blank">goth
kids</a> is the exact same as making fun of children with <a href="http://www.ndss.org/" target="_blank">down
syndrome</a> (note: I'm not condoning the active mocking of <a href="http://i5.photobucket.com/albums/y181/josephineca/loren-goth-chick-big-breasts.jpg" target="_blank">this
girl</a> more like mocking <a href="http://i115.photobucket.com/albums/n314/Fakehuman00/Pics/Goths/page-159-05.jpg" target="_blank">this
girl</a>).
</p>
        <p>
He then quickly switches to the standard argument of "look, everyone, we aren't burning
people at the stake anymore. Evangelicals do some good." Here's a good quote:
</p>
        <blockquote>
          <p>
Scorning people for their faith is intrinsically repugnant, and in this case it also
betrays a profound misunderstanding of how far evangelicals have moved over the last
decade. Today, conservative Christian churches do superb work on poverty, AIDS, sex
trafficking, climate change, prison abuses, malaria and genocide in Darfur.
</p>
        </blockquote>
        <p>
He starts off, of course, with making a statement as though it is a fact: "Scorning
people for their faith is intrinsically repugnant..." Really? Why is this such a self-obvious
fact? Explain to me why scorning people because they have a leftover from the invisible
friends of childhood is "intrinsically repugnant."
</p>
        <p>
I love the line "...how far evangelicals have moved over the last decade." Oh, I'm
sorry, I didn't realize they had much such strides in their humanitarianism OVER THE
LAST DECADE!
</p>
        <p>
He goes on to explain how evangelicals have FINALLY started putting fighting poverty
over abortion as their issue of choice. WOW! Thanks, christies! As he says, they used
to be mean (<a href="http://blogs.chicagotribune.com/news_columnists_ezorn/2005/03/22_years_later_.html" target="_blank">Falwell
describing AIDS as "God's judgement against promiscuity"</a>), but now, oh man, they
are so nice and interested in helping people now!
</p>
        <p>
He then goes on to talk about Rick Warren and how fantastic it is that he and his
megachurch are finally getting around to helping people. I wonder what percentage
of their profits are used in pure humanitarian aid and what percentage are used to
further their own aims of poisoning the minds of our youth.
</p>
        <p>
Well, the rest of the column is just the same old attempts to give examples of how
the christies are doing good and we should be thankful for it. We've heard these arguments
before, and they follow the same pattern: give examples of how there are some nice
christee organizations, not bothering to mention all the of the negative that is done,
all the while ignoring the secular organization doing exactly the same task without
the negative overhead of an invisible friend telling you that you have the truth over
the person you are trying to help.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=76a4ef34-defc-4c5a-88b5-1b103ce94505" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>WTF? I'm so glad that Evangelicals are trying to be nice.</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,76a4ef34-defc-4c5a-88b5-1b103ce94505.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/228446219/WTFImSoGladThatEvangelicalsAreTryingToBeNice.aspx</link>
      <pubDate>Sun, 03 Feb 2008 16:49:20 GMT</pubDate>
      <description>&lt;p&gt;
Mary sent me &lt;a title="Evangelicals a Liberal Can Love" href="http://www.nytimes.com/2008/02/03/opinion/03kristof.html?ex=1359694800&amp;amp;en=98d799f84015fa63&amp;amp;ei=5124&amp;amp;partner=permalink&amp;amp;exprod=permalink" target="_blank"&gt;this
editorial from the new york times&lt;/a&gt;. UGH! Here's the first paragraph:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
At a New York or Los Angeles cocktail party, few would dare make a pejorative comment
about Barack Obama’s race or Hillary Clinton’s sex. Yet it would be easy to get away
with deriding Mike Huckabee’s religious faith.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So, the first part of his argument is that Obama's race (what is it, really?) and
Hillary Clinton's sex (can I say the same thing?) is exactly the same as Mike Huckabee's
choice of invisible friend. Yeah, that makes sense. That's like saying that mocking &lt;a href="http://www.sherdog.net/forums/showthread.php?t=688218&amp;amp;page=1" target="_blank"&gt;goth
kids&lt;/a&gt; is the exact same as making fun of children with &lt;a href="http://www.ndss.org/" target="_blank"&gt;down
syndrome&lt;/a&gt; (note: I'm not condoning the active mocking of &lt;a href="http://i5.photobucket.com/albums/y181/josephineca/loren-goth-chick-big-breasts.jpg" target="_blank"&gt;this
girl&lt;/a&gt; more like mocking &lt;a href="http://i115.photobucket.com/albums/n314/Fakehuman00/Pics/Goths/page-159-05.jpg" target="_blank"&gt;this
girl&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
He then quickly switches to the standard argument of "look, everyone, we aren't burning
people at the stake anymore. Evangelicals do some good." Here's a good quote:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Scorning people for their faith is intrinsically repugnant, and in this case it also
betrays a profound misunderstanding of how far evangelicals have moved over the last
decade. Today, conservative Christian churches do superb work on poverty, AIDS, sex
trafficking, climate change, prison abuses, malaria and genocide in Darfur.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
He starts off, of course, with making a statement as though it is a fact: "Scorning
people for their faith is intrinsically repugnant..." Really? Why is this such a self-obvious
fact? Explain to me why scorning people because they have a leftover from the invisible
friends of childhood is "intrinsically repugnant."
&lt;/p&gt;
&lt;p&gt;
I love the line "...how far evangelicals have moved over the last decade." Oh, I'm
sorry, I didn't realize they had much such strides in their humanitarianism OVER THE
LAST DECADE!
&lt;/p&gt;
&lt;p&gt;
He goes on to explain how evangelicals have FINALLY started putting fighting poverty
over abortion as their issue of choice. WOW! Thanks, christies! As he says, they used
to be mean (&lt;a href="http://blogs.chicagotribune.com/news_columnists_ezorn/2005/03/22_years_later_.html" target="_blank"&gt;Falwell
describing AIDS as "God's judgement against promiscuity"&lt;/a&gt;), but now, oh man, they
are so nice and interested in helping people now!
&lt;/p&gt;
&lt;p&gt;
He then goes on to talk about Rick Warren and how fantastic it is that he and his
megachurch are finally getting around to helping people. I wonder what percentage
of their profits are used in pure humanitarian aid and what percentage are used to
further their own aims of poisoning the minds of our youth.
&lt;/p&gt;
&lt;p&gt;
Well, the rest of the column is just the same old attempts to give examples of how
the christies are doing good and we should be thankful for it. We've heard these arguments
before, and they follow the same pattern: give examples of how there are some nice
christee organizations, not bothering to mention all the of the negative that is done,
all the while ignoring the secular organization doing exactly the same task without
the negative overhead of an invisible friend telling you that you have the truth over
the person you are trying to help.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=76a4ef34-defc-4c5a-88b5-1b103ce94505" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,76a4ef34-defc-4c5a-88b5-1b103ce94505.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/02/03/WTFImSoGladThatEvangelicalsAreTryingToBeNice.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=31ec5dcc-1a72-4a05-b30e-516abdab6d0f</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,31ec5dcc-1a72-4a05-b30e-516abdab6d0f.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,31ec5dcc-1a72-4a05-b30e-516abdab6d0f.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=31ec5dcc-1a72-4a05-b30e-516abdab6d0f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Interested in Coupon Tracker, but not sure if you really want to use it? Watch this
screencast of entering a <a href="http://www.screencast.com/users/CoreyHaines/folders/Jing/media/144e55c9-8a81-46bb-a2b4-e2880cd1b8d2" target="_blank">coupon
into Coupon Tracker</a> to see just how easy it is.
</p>
        <p>
 
</p>
        <p>
Here's the previous entries for this topic
</p>
        <p>
          <a href="http://www.coreyhaines.com/coreysramblings/ct.ashx?id=0af44216-fd7b-4293-a03b-d2d0c2d9da56&amp;url=http%3a%2f%2fwww.coreyhaines.com%2fcoreysramblings%2f2008%2f01%2f13%2fTrackingEntertainmentBookSavingsInRails.aspx" target="_blank">part
I</a>, <a href="http://www.coreyhaines.com/coreysramblings/ct.ashx?id=0af44216-fd7b-4293-a03b-d2d0c2d9da56&amp;url=http%3a%2f%2fwww.coreyhaines.com%2fcoreysramblings%2f2008%2f01%2f27%2fTrackingEntertainmentBookSavingsInRailsPartIIWantToUseIt.aspx" target="_blank">part
II</a>, <a href="Tracking Entertainment Book Savings in Rails Part III - Why aren't you using it?" target="_blank">part
III</a></p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=31ec5dcc-1a72-4a05-b30e-516abdab6d0f" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Tracking Entertainment Book Savings in Rails Part IV - Watch Me Use It</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,31ec5dcc-1a72-4a05-b30e-516abdab6d0f.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/228091233/TrackingEntertainmentBookSavingsInRailsPartIVWatchMeUseIt.aspx</link>
      <pubDate>Sun, 03 Feb 2008 00:24:50 GMT</pubDate>
      <description>&lt;p&gt;
Interested in Coupon Tracker, but not sure if you really want to use it? Watch this
screencast of entering a &lt;a href="http://www.screencast.com/users/CoreyHaines/folders/Jing/media/144e55c9-8a81-46bb-a2b4-e2880cd1b8d2" target="_blank"&gt;coupon
into Coupon Tracker&lt;/a&gt; to see just how easy it is.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Here's the previous entries for this topic
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.coreyhaines.com/coreysramblings/ct.ashx?id=0af44216-fd7b-4293-a03b-d2d0c2d9da56&amp;amp;url=http%3a%2f%2fwww.coreyhaines.com%2fcoreysramblings%2f2008%2f01%2f13%2fTrackingEntertainmentBookSavingsInRails.aspx" target="_blank"&gt;part
I&lt;/a&gt;, &lt;a href="http://www.coreyhaines.com/coreysramblings/ct.ashx?id=0af44216-fd7b-4293-a03b-d2d0c2d9da56&amp;amp;url=http%3a%2f%2fwww.coreyhaines.com%2fcoreysramblings%2f2008%2f01%2f27%2fTrackingEntertainmentBookSavingsInRailsPartIIWantToUseIt.aspx" target="_blank"&gt;part
II&lt;/a&gt;, &lt;a href="Tracking Entertainment Book Savings in Rails Part III - Why aren't you using it?" target="_blank"&gt;part
III&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=31ec5dcc-1a72-4a05-b30e-516abdab6d0f" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,31ec5dcc-1a72-4a05-b30e-516abdab6d0f.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/02/03/TrackingEntertainmentBookSavingsInRailsPartIVWatchMeUseIt.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=0af44216-fd7b-4293-a03b-d2d0c2d9da56</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,0af44216-fd7b-4293-a03b-d2d0c2d9da56.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,0af44216-fd7b-4293-a03b-d2d0c2d9da56.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=0af44216-fd7b-4293-a03b-d2d0c2d9da56</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Well, as I mentioned in <a href="http://www.coreyhaines.com/coreysramblings/2008/01/13/TrackingEntertainmentBookSavingsInRails.aspx">part
I</a> and <a href="http://www.coreyhaines.com/coreysramblings/2008/01/27/TrackingEntertainmentBookSavingsInRailsPartIIWantToUseIt.aspx">part
II</a>, I'm building an application track my coupon savings, specifically <a href="http://www.entertainment.com/discount/home.shtml">Entertainment
Book coupons</a>, called <a title="Coupon Tracker" href="http://coupon-savings.heroku.com/">Coupon
Tracker</a>. I've got a couple people signed up, but there is still lots of room for
people to try it out. Just go on and <a title="Sign up for Coupon Tracker" href="http://coupon-savings.heroku.com/">go
sign up</a>.
</p>
        <p>
Today, I got a day to work on it, so I spent the day finishing up my specs for remove,
as well as adding some specs for better user feedback if a coupon can't be saved for
some reason. I also discovered the form.date_select helper, which creates a nice set
of drop-down selections for choosing a date. Before this, the date field was a text
box, which makes it way to easy to put in a date wrong. I also added a <a title="What's New with Coupon Tracker" href="http://coupon-savings.heroku.com/whatsnew">What's
New</a> page, along with some other stuff. I also got to play a bit with some unnecessary
AJAX with script.aculo.us to make a title pulsate a bit. Here's the list from the
what's new page of what I did today:
</p>
        <blockquote>
          <h5>
            <strong>2008-02-02</strong>
          </h5>
          <ul>
            <li>
What's New (this page) added 
</li>
            <li>
Added the ability to delete a coupon. Just click the x next to the coupon in the list 
</li>
            <li>
Put some validation feedback on the coupon to give feedback on why the coupon wasn't
saved 
</li>
            <li>
Changed "Date Used" input to an easier input format (drop-down selections) 
</li>
            <li>
Sorted coupons from newest to oldest 
</li>
            <li>
Added header to show how many coupons for how many users we track 
</li>
          </ul>
        </blockquote>
        <p>
I'm learning a lot of rails as I go along, so I'm definitely making this well worth
my while. 
</p>
        <p>
I also recorded a screencast of <a title="Video of using Coupon Tracker" href="http://screencast.com/t/raseAzbYGw" target="_blank">using
Coupon Tracker</a> to see how easy it is right now.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=0af44216-fd7b-4293-a03b-d2d0c2d9da56" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Tracking Entertainment Book Savings in Rails Part III - Why aren't you using it?</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,0af44216-fd7b-4293-a03b-d2d0c2d9da56.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/228091235/TrackingEntertainmentBookSavingsInRailsPartIIIWhyArentYouUsingIt.aspx</link>
      <pubDate>Sun, 03 Feb 2008 00:23:19 GMT</pubDate>
      <description>&lt;p&gt;
Well, as I mentioned in &lt;a href="http://www.coreyhaines.com/coreysramblings/2008/01/13/TrackingEntertainmentBookSavingsInRails.aspx"&gt;part
I&lt;/a&gt; and &lt;a href="http://www.coreyhaines.com/coreysramblings/2008/01/27/TrackingEntertainmentBookSavingsInRailsPartIIWantToUseIt.aspx"&gt;part
II&lt;/a&gt;, I'm building an application track my coupon savings, specifically &lt;a href="http://www.entertainment.com/discount/home.shtml"&gt;Entertainment
Book coupons&lt;/a&gt;, called &lt;a title="Coupon Tracker" href="http://coupon-savings.heroku.com/"&gt;Coupon
Tracker&lt;/a&gt;. I've got a couple people signed up, but there is still lots of room for
people to try it out. Just go on and &lt;a title="Sign up for Coupon Tracker" href="http://coupon-savings.heroku.com/"&gt;go
sign up&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Today, I got a day to work on it, so I spent the day finishing up my specs for remove,
as well as adding some specs for better user feedback if a coupon can't be saved for
some reason. I also discovered the form.date_select helper, which creates a nice set
of drop-down selections for choosing a date. Before this, the date field was a text
box, which makes it way to easy to put in a date wrong. I also added a &lt;a title="What's New with Coupon Tracker" href="http://coupon-savings.heroku.com/whatsnew"&gt;What's
New&lt;/a&gt; page, along with some other stuff. I also got to play a bit with some unnecessary
AJAX with script.aculo.us to make a title pulsate a bit. Here's the list from the
what's new page of what I did today:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;h5&gt;&lt;strong&gt;2008-02-02&lt;/strong&gt;
&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
What's New (this page) added 
&lt;li&gt;
Added the ability to delete a coupon. Just click the x next to the coupon in the list 
&lt;li&gt;
Put some validation feedback on the coupon to give feedback on why the coupon wasn't
saved 
&lt;li&gt;
Changed "Date Used" input to an easier input format (drop-down selections) 
&lt;li&gt;
Sorted coupons from newest to oldest 
&lt;li&gt;
Added header to show how many coupons for how many users we track 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I'm learning a lot of rails as I go along, so I'm definitely making this well worth
my while. 
&lt;/p&gt;
&lt;p&gt;
I also recorded a screencast of &lt;a title="Video of using Coupon Tracker" href="http://screencast.com/t/raseAzbYGw" target="_blank"&gt;using
Coupon Tracker&lt;/a&gt; to see how easy it is right now.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=0af44216-fd7b-4293-a03b-d2d0c2d9da56" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,0af44216-fd7b-4293-a03b-d2d0c2d9da56.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/02/03/TrackingEntertainmentBookSavingsInRailsPartIIIWhyArentYouUsingIt.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=51964400-f5f0-4e82-9a53-f58e89c10856</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,51964400-f5f0-4e82-9a53-f58e89c10856.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,51964400-f5f0-4e82-9a53-f58e89c10856.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=51964400-f5f0-4e82-9a53-f58e89c10856</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Every year, Mary and I get an entertainment book for christmas. A few years ago, I
decided to track how much I saved. Being a programmer, I decided to over complicate
it, so, instead of using Excel, I wrote a javascript-based solution for a blogger-based
blog. Basically, each blog entry was call to a javascript function that saved the
data. The blog template had a little snippet of javascript that would sum up the savings
for each blog entry's javascript call. It worked great. I think I saved around $150.
</p>
        <p>
[Update: I just loaded up <a href="http://coreysentertainmentsavings.blogspot.com/">the
old one on blogger</a>, and it says that I saved $125.40, not quite $150. Also, if
you are interested, you can look at the javascript in the page to see how I did it:
nothing too impressive, though, especially with how mature the javascript implementations
are these days.]
</p>
        <p>
One thing I also noticed was that I was driven to use the entertainment book more.
The next year, I didn't track the savings, and we hardly used it at all. I think that
seeing a running total made me strive to take the total higher.
</p>
        <p>
As I mentioned in <a href="http://www.coreyhaines.com/coreysramblings/2008/01/13/TrackingEntertainmentBookSavingsInRails.aspx">part
I</a>, I am creating an application for this as a learning experience in Rails. Well,
after working off and on for the last couple weeks, I have a working version of <a title="Coupon Tracker" href="http://coupon-savings.heroku.com/">Coupon
Tracker</a>, a multi-user coupon tracking website that allows you to enter coupons
with a description and tags. You have your own personal savings list, along with a
tag cloud for them. The tags can be used to categorize them however you want. For
example, why not have a tags Restaurants, Shopping, Entertainment, etc. Maybe you
also want a set of tags that describe how likely you would go back. The sky is the
limit.
</p>
        <p>
If you would like to use it, please go to <a title="Coupon Tracker" href="http://coupon-savings.heroku.com/">Coupon
Tracker</a> and register as a new user. Send me an email (when you register, the page
has my email address) with your user name, and I will validate you as a new user.
After that, just come back, login and start entering your savings. I would appreciate
any and all feedback, as well, considering possible features.
</p>
        <p>
One thing that I would like to add is a pledging piece: users can pledge to donate
a certain percentage of their savings to charity. The site would track how much the
user has pledged and how much the user has contributed.
</p>
        <p>
It is still in its infancy, feature-wise, but I am constantly adding new features
to get the site completely usable. Currently, the feature set includes the following:
</p>
        <ul>
          <li>
Multi-user 
</li>
          <li>
Enter new coupon 
</li>
          <li>
Support for tags 
</li>
          <li>
List entered coupons and total savings</li>
        </ul>
        <p>
The list of features currently being prioritized for addition:
</p>
        <ul>
          <li>
Delete a coupon 
</li>
          <li>
Edit a coupon 
</li>
          <li>
Filter list by tags 
</li>
          <li>
Custom sorting of coupon list 
</li>
          <li>
Export to CSV 
</li>
          <li>
Integration with charitable donation sites / paypal to donate part of your savings</li>
        </ul>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=51964400-f5f0-4e82-9a53-f58e89c10856" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Tracking Entertainment Book Savings in Rails Part II - Want to use it?</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,51964400-f5f0-4e82-9a53-f58e89c10856.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/223745365/TrackingEntertainmentBookSavingsInRailsPartIIWantToUseIt.aspx</link>
      <pubDate>Sun, 27 Jan 2008 00:39:18 GMT</pubDate>
      <description>&lt;p&gt;
Every year, Mary and I get an entertainment book for christmas. A few years ago, I
decided to track how much I saved. Being a programmer, I decided to over complicate
it, so, instead of using Excel, I wrote a javascript-based solution for a blogger-based
blog. Basically, each blog entry was call to a javascript function that saved the
data. The blog template had a little snippet of javascript that would sum up the savings
for each blog entry's javascript call. It worked great. I think I saved around $150.
&lt;/p&gt;
&lt;p&gt;
[Update: I just loaded up &lt;a href="http://coreysentertainmentsavings.blogspot.com/"&gt;the
old one on blogger&lt;/a&gt;, and it says that I saved $125.40, not quite $150. Also, if
you are interested, you can look at the javascript in the page to see how I did it:
nothing too impressive, though, especially with how mature the javascript implementations
are these days.]
&lt;/p&gt;
&lt;p&gt;
One thing I also noticed was that I was driven to use the entertainment book more.
The next year, I didn't track the savings, and we hardly used it at all. I think that
seeing a running total made me strive to take the total higher.
&lt;/p&gt;
&lt;p&gt;
As I mentioned in &lt;a href="http://www.coreyhaines.com/coreysramblings/2008/01/13/TrackingEntertainmentBookSavingsInRails.aspx"&gt;part
I&lt;/a&gt;, I am creating an application for this as a learning experience in Rails. Well,
after working off and on for the last couple weeks, I have a working version of &lt;a title="Coupon Tracker" href="http://coupon-savings.heroku.com/"&gt;Coupon
Tracker&lt;/a&gt;, a multi-user coupon tracking website that allows you to enter coupons
with a description and tags. You have your own personal savings list, along with a
tag cloud for them. The tags can be used to categorize them however you want. For
example, why not have a tags Restaurants, Shopping, Entertainment, etc. Maybe you
also want a set of tags that describe how likely you would go back. The sky is the
limit.
&lt;/p&gt;
&lt;p&gt;
If you would like to use it, please go to &lt;a title="Coupon Tracker" href="http://coupon-savings.heroku.com/"&gt;Coupon
Tracker&lt;/a&gt; and register as a new user. Send me an email (when you register, the page
has my email address) with your user name, and I will validate you as a new user.
After that, just come back, login and start entering your savings. I would appreciate
any and all feedback, as well, considering possible features.
&lt;/p&gt;
&lt;p&gt;
One thing that I would like to add is a pledging piece: users can pledge to donate
a certain percentage of their savings to charity. The site would track how much the
user has pledged and how much the user has contributed.
&lt;/p&gt;
&lt;p&gt;
It is still in its infancy, feature-wise, but I am constantly adding new features
to get the site completely usable. Currently, the feature set includes the following:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Multi-user 
&lt;li&gt;
Enter new coupon 
&lt;li&gt;
Support for tags 
&lt;li&gt;
List entered coupons and total savings&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The list of features currently being prioritized for addition:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Delete a coupon 
&lt;li&gt;
Edit a coupon 
&lt;li&gt;
Filter list by tags 
&lt;li&gt;
Custom sorting of coupon list 
&lt;li&gt;
Export to CSV 
&lt;li&gt;
Integration with charitable donation sites / paypal to donate part of your savings&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=51964400-f5f0-4e82-9a53-f58e89c10856" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,51964400-f5f0-4e82-9a53-f58e89c10856.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/01/27/TrackingEntertainmentBookSavingsInRailsPartIIWantToUseIt.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=cdaa2ce8-90fc-4939-a813-4505d626f322</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,cdaa2ce8-90fc-4939-a813-4505d626f322.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,cdaa2ce8-90fc-4939-a813-4505d626f322.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=cdaa2ce8-90fc-4939-a813-4505d626f322</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Pastie <a href="http://pastie.caboo.se/">http://pastie.caboo.se/</a></p>
        <p>
Pledgie <a title="http://www.pledgie.com/" href="http://www.pledgie.com/">http://www.pledgie.com/</a></p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=cdaa2ce8-90fc-4939-a813-4505d626f322" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Online services to keep in mind</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,cdaa2ce8-90fc-4939-a813-4505d626f322.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/221700266/OnlineServicesToKeepInMind.aspx</link>
      <pubDate>Wed, 23 Jan 2008 15:30:01 GMT</pubDate>
      <description>&lt;p&gt;
Pastie &lt;a href="http://pastie.caboo.se/"&gt;http://pastie.caboo.se/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Pledgie &lt;a title="http://www.pledgie.com/" href="http://www.pledgie.com/"&gt;http://www.pledgie.com/&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=cdaa2ce8-90fc-4939-a813-4505d626f322" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,cdaa2ce8-90fc-4939-a813-4505d626f322.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/01/23/OnlineServicesToKeepInMind.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=0396a7e1-61fb-47fd-a895-8ea54101409d</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,0396a7e1-61fb-47fd-a895-8ea54101409d.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,0396a7e1-61fb-47fd-a895-8ea54101409d.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=0396a7e1-61fb-47fd-a895-8ea54101409d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I got an account with <a href="http://www.heroku.com/">Heroku</a> to host the rails
app that I'm working on (a coupon tracker), and it is awesome! I have been developing
on my local, then uploading the files to their site when I have my specs passing and
my brief manual tests pass.
</p>
        <p>
There was on gotcha, though. I recently added user authentication, which meant I had
a bunch of files in different directories that needed to be uploaded. I could have
re-imported my whole application, but that flushes your database, as it treats it
like the initial setting up of the application. This sucks, as I'm using the app to
actually track my real savings with the Entertainment Book.
</p>
        <p>
I contacted their support about this. My suggestion was to allow me to upload a tarball
into a root somewhere and have it expand it with overwrite. I got a reply back from
James Lindenbaum there pretty promptly. He agreed that importing the application wouldn't
work exactly for me, but he suggested the following:
</p>
        <blockquote>
          <p>
- in the rake window, run "db:data:dump", this will create a db/data.yml file with
your data in it<br />
- download db/data.yml<br />
- import your new code<br />
- upload data.yml to db/<br />
- in the rake window, run "db:data:load"
</p>
        </blockquote>
        <p>
Well, I just did it, and it worked great! This is also a great way to just do a simple
refresh, in case I've missed some stuff. 
</p>
        <p>
So, all-in-all, I'm very happy with Heroku, especially with their support.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=0396a7e1-61fb-47fd-a895-8ea54101409d" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Refreshing your rails app and saving the data when using Heroku</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,0396a7e1-61fb-47fd-a895-8ea54101409d.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/221691974/RefreshingYourRailsAppAndSavingTheDataWhenUsingHeroku.aspx</link>
      <pubDate>Wed, 23 Jan 2008 15:06:10 GMT</pubDate>
      <description>&lt;p&gt;
I got an account with &lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt; to host the rails
app that I'm working on (a coupon tracker), and it is awesome! I have been developing
on my local, then uploading the files to their site when I have my specs passing and
my brief manual tests pass.
&lt;/p&gt;
&lt;p&gt;
There was on gotcha, though. I recently added user authentication, which meant I had
a bunch of files in different directories that needed to be uploaded. I could have
re-imported my whole application, but that flushes your database, as it treats it
like the initial setting up of the application. This sucks, as I'm using the app to
actually track my real savings with the Entertainment Book.
&lt;/p&gt;
&lt;p&gt;
I contacted their support about this. My suggestion was to allow me to upload a tarball
into a root somewhere and have it expand it with overwrite. I got a reply back from
James Lindenbaum there pretty promptly. He agreed that importing the application wouldn't
work exactly for me, but he suggested the following:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
- in the rake window, run "db:data:dump", this will create a db/data.yml file with
your data in it&lt;br&gt;
- download db/data.yml&lt;br&gt;
- import your new code&lt;br&gt;
- upload data.yml to db/&lt;br&gt;
- in the rake window, run "db:data:load"
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Well, I just did it, and it worked great! This is also a great way to just do a simple
refresh, in case I've missed some stuff. 
&lt;p&gt;
So, all-in-all, I'm very happy with Heroku, especially with their support.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=0396a7e1-61fb-47fd-a895-8ea54101409d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,0396a7e1-61fb-47fd-a895-8ea54101409d.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/01/23/RefreshingYourRailsAppAndSavingTheDataWhenUsingHeroku.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=cf80677d-9a40-4e7f-aa1f-3810afce10fd</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,cf80677d-9a40-4e7f-aa1f-3810afce10fd.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,cf80677d-9a40-4e7f-aa1f-3810afce10fd.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=cf80677d-9a40-4e7f-aa1f-3810afce10fd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you are going to use inject to sum up an attribute of an object (such as amount),
make sure you give an initial value. Don't do this:
</p>
        <blockquote>
          <p>
@total_savings = @coupons.inject { |sum, coupon| sum + coupon.amount }
</p>
        </blockquote>
        <p>
because you will get an error:
</p>
        <blockquote>
          <pre>undefined method `+' for #&lt;Coupon:0x4398ee8&gt;</pre>
        </blockquote>
        <p>
It is trying to pass in the first coupon object as the initial sum parameter to your
block. Instead, do this: 
</p>
        <blockquote>
          <p>
@total_savings = @coupons.inject(0) { |sum, coupon| sum + coupon.amount } 
</p>
        </blockquote>
        <p>
Then, it passes 0 as the first value of sum. 
</p>
        <p>
Obvious? Once you see it, it sure is, but this confused me for a bit. I hope it helps
someone else in the future (probably me).
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=cf80677d-9a40-4e7f-aa1f-3810afce10fd" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>enum.inject needs an initial value if you are injecting on an attribute</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,cf80677d-9a40-4e7f-aa1f-3810afce10fd.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/219895526/enuminjectNeedsAnInitialValueIfYouAreInjectingOnAnAttribute.aspx</link>
      <pubDate>Sun, 20 Jan 2008 15:40:47 GMT</pubDate>
      <description>&lt;p&gt;
If you are going to use inject to sum up an attribute of an object (such as amount),
make sure you give an initial value. Don't do this:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
@total_savings = @coupons.inject { |sum, coupon| sum + coupon.amount }
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
because you will get an error:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;undefined method `+' for #&amp;lt;Coupon:0x4398ee8&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
It is trying to pass in the first coupon object as the initial sum parameter to your
block. Instead, do this: &lt;blockquote&gt; 
&lt;p&gt;
@total_savings = @coupons.inject(0) { |sum, coupon| sum + coupon.amount } 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Then, it passes 0 as the first value of sum. 
&lt;p&gt;
Obvious? Once you see it, it sure is, but this confused me for a bit. I hope it helps
someone else in the future (probably me).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=cf80677d-9a40-4e7f-aa1f-3810afce10fd" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,cf80677d-9a40-4e7f-aa1f-3810afce10fd.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/01/20/enuminjectNeedsAnInitialValueIfYouAreInjectingOnAnAttribute.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=f854c33b-67c6-4c52-89ae-0e69a206e9e0</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,f854c33b-67c6-4c52-89ae-0e69a206e9e0.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,f854c33b-67c6-4c52-89ae-0e69a206e9e0.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=f854c33b-67c6-4c52-89ae-0e69a206e9e0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Well, the holidays filled up time that I would have spent working on my rspec blogging.
I haven't forgotten, though. I'm going to be continuing the rspec-lunking series,
as well as my quest to read lots and lots of Ruby code. Along the way, though, I'm
writing a small rails app to keep track of my entertainment book savings. I did it
in javascript and blogger a few years ago, and I got a lot of value out of it: I was
able to track how much I had saved; I was stimulated to try new places; and, more
importantly, I felt the positive feedback of how much I was savings caused me to use
it more. So, I figured I'd start work on this application. I got an account on <a href="http://www.herko.com">Heroku</a>,
so I have a place to upload my rails apps. I'm not 100% sure what level I'll go blogging
it, but I'll definitely track my experiences in one form or another.
</p>
        <p>
The general idea for the application is to keep track of coupon usages. I would also
like to have a rating engine of some sort in it, so I can give a small review and
a rate to restaurants/services I discover. Eventually, it would be cool if I could
make it multi-user application.
</p>
        <p>
Along with that, I want to track the amount saved each time, as well as a running
total. Eventually, categories would be cool, so I could get more fine-grained subtotals.
</p>
        <p>
Where to start? Well, I guess at the beginning.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=f854c33b-67c6-4c52-89ae-0e69a206e9e0" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Tracking Entertainment Book Savings in Rails</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,f854c33b-67c6-4c52-89ae-0e69a206e9e0.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/216060598/TrackingEntertainmentBookSavingsInRails.aspx</link>
      <pubDate>Sun, 13 Jan 2008 19:23:42 GMT</pubDate>
      <description>&lt;p&gt;
Well, the holidays filled up time that I would have spent working on my rspec blogging.
I haven't forgotten, though. I'm going to be continuing the rspec-lunking series,
as well as my quest to read lots and lots of Ruby code. Along the way, though, I'm
writing a small rails app to keep track of my entertainment book savings. I did it
in javascript and blogger a few years ago, and I got a lot of value out of it: I was
able to track how much I had saved; I was stimulated to try new places; and, more
importantly, I felt the positive feedback of how much I was savings caused me to use
it more. So, I figured I'd start work on this application. I got an account on &lt;a href="http://www.herko.com"&gt;Heroku&lt;/a&gt;,
so I have a place to upload my rails apps. I'm not 100% sure what level I'll go blogging
it, but I'll definitely track my experiences in one form or another.
&lt;/p&gt;
&lt;p&gt;
The general idea for the application is to keep track of coupon usages. I would also
like to have a rating engine of some sort in it, so I can give a small review and
a rate to restaurants/services I discover. Eventually, it would be cool if I could
make it multi-user application.
&lt;/p&gt;
&lt;p&gt;
Along with that, I want to track the amount saved each time, as well as a running
total. Eventually, categories would be cool, so I could get more fine-grained subtotals.
&lt;/p&gt;
&lt;p&gt;
Where to start? Well, I guess at the beginning.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=f854c33b-67c6-4c52-89ae-0e69a206e9e0" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,f854c33b-67c6-4c52-89ae-0e69a206e9e0.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/01/13/TrackingEntertainmentBookSavingsInRails.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=45d81ca9-fdf9-4d68-a855-384ada0708b0</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,45d81ca9-fdf9-4d68-a855-384ada0708b0.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,45d81ca9-fdf9-4d68-a855-384ada0708b0.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=45d81ca9-fdf9-4d68-a855-384ada0708b0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This really is a great list.
</p>
        <p>
10 - You vigorously deny the existence of thousands of<br />
gods claimed by other religions, but feel outraged<br />
when someone denies the existence of yours.
</p>
        <p>
          <br />
9 - You feel insulted and "dehumanized" when<br />
scientists say that people evolved from other life<br />
forms, but you have no problem with the Biblical claim<br />
that we were created from dirt.<br /></p>
        <p>
8 - You laugh at polytheists, but you have no problem<br />
believing in a Triune God.<br /></p>
        <p>
7 - Your face turns purple when you hear of the<br />
"atrocities" attributed to Allah, but you don't even<br />
flinch when hearing about how God/Jehovah slaughtered<br />
all the babies of Egypt in "Exodus" and ordered the<br />
elimination of entire ethnic groups in "Joshua"<br />
including women, children, and trees!<br /></p>
        <p>
6 - You laugh at Hindu beliefs that deify humans, and<br />
Greek claims about gods sleeping with women, but you<br />
have no problem believing that the Holy Spirit<br />
impregnated Mary, who then gave birth to a man-god who<br />
got killed, came back to life and then ascended into<br />
the sky.<br /></p>
        <p>
5 - You are willing to spend your life looking for<br />
little loopholes in the scientifically established age<br />
of Earth (few billion years), but you find nothing<br />
wrong with believing dates recorded by Bronze Age<br />
tribesmen sitting in their tents and guessing that<br />
Earth is a few generations old.<br /></p>
        <p>
4 - You believe that the entire population of this<br />
planet with the exception of those who share your<br />
beliefs -- though excluding those in all rival sects -<br />
will spend Eternity in an infinite Hell of Suffering.<br />
And yet consider your religion the most "tolerant" and<br />
"loving."<br /></p>
        <p>
3 - While modern science, history, geology, biology,<br />
and physics have failed to convince you otherwise,<br />
some idiot rolling around on the floor speaking in<br />
"tongues" may be all the evidence you need to "prove"<br />
Christianity.<br /></p>
        <p>
2 - You define 0.01% as a "high success rate" when it<br />
comes to answered prayers.  You consider that to be<br />
evidence that prayer works.  And you think that the<br />
remaining 99.99% FAILURE was simply the will of God.<br /></p>
        <p>
1 - You actually know a lot less than many atheists<br />
and agnostics do about the Bible, Christianity, and<br />
church history - but still call yourself a Christian.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=45d81ca9-fdf9-4d68-a855-384ada0708b0" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Top Ten Signs You're a Fundamentalist Christian</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,45d81ca9-fdf9-4d68-a855-384ada0708b0.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/215982641/TopTenSignsYoureAFundamentalistChristian.aspx</link>
      <pubDate>Sun, 13 Jan 2008 15:38:03 GMT</pubDate>
      <description>&lt;p&gt;
This really is a great list.
&lt;/p&gt;
&lt;p&gt;
10 - You vigorously deny the existence of thousands of&lt;br&gt;
gods claimed by other religions, but feel outraged&lt;br&gt;
when someone denies the existence of yours.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
9 - You feel insulted and "dehumanized" when&lt;br&gt;
scientists say that people evolved from other life&lt;br&gt;
forms, but you have no problem with the Biblical claim&lt;br&gt;
that we were created from dirt.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
8 - You laugh at polytheists, but you have no problem&lt;br&gt;
believing in a Triune God.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
7 - Your face turns purple when you hear of the&lt;br&gt;
"atrocities" attributed to Allah, but you don't even&lt;br&gt;
flinch when hearing about how God/Jehovah slaughtered&lt;br&gt;
all the babies of Egypt in "Exodus" and ordered the&lt;br&gt;
elimination of entire ethnic groups in "Joshua"&lt;br&gt;
including women, children, and trees!&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
6 - You laugh at Hindu beliefs that deify humans, and&lt;br&gt;
Greek claims about gods sleeping with women, but you&lt;br&gt;
have no problem believing that the Holy Spirit&lt;br&gt;
impregnated Mary, who then gave birth to a man-god who&lt;br&gt;
got killed, came back to life and then ascended into&lt;br&gt;
the sky.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
5 - You are willing to spend your life looking for&lt;br&gt;
little loopholes in the scientifically established age&lt;br&gt;
of Earth (few billion years), but you find nothing&lt;br&gt;
wrong with believing dates recorded by Bronze Age&lt;br&gt;
tribesmen sitting in their tents and guessing that&lt;br&gt;
Earth is a few generations old.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
4 - You believe that the entire population of this&lt;br&gt;
planet with the exception of those who share your&lt;br&gt;
beliefs -- though excluding those in all rival sects -&lt;br&gt;
will spend Eternity in an infinite Hell of Suffering.&lt;br&gt;
And yet consider your religion the most "tolerant" and&lt;br&gt;
"loving."&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
3 - While modern science, history, geology, biology,&lt;br&gt;
and physics have failed to convince you otherwise,&lt;br&gt;
some idiot rolling around on the floor speaking in&lt;br&gt;
"tongues" may be all the evidence you need to "prove"&lt;br&gt;
Christianity.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
2 - You define 0.01% as a "high success rate" when it&lt;br&gt;
comes to answered prayers.&amp;nbsp; You consider that to be&lt;br&gt;
evidence that prayer works.&amp;nbsp; And you think that the&lt;br&gt;
remaining 99.99% FAILURE was simply the will of God.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
1 - You actually know a lot less than many atheists&lt;br&gt;
and agnostics do about the Bible, Christianity, and&lt;br&gt;
church history - but still call yourself a Christian.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=45d81ca9-fdf9-4d68-a855-384ada0708b0" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,45d81ca9-fdf9-4d68-a855-384ada0708b0.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/01/13/TopTenSignsYoureAFundamentalistChristian.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=41a3c61f-8489-4e05-a90f-1919e3a222b6</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,41a3c61f-8489-4e05-a90f-1919e3a222b6.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,41a3c61f-8489-4e05-a90f-1919e3a222b6.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=41a3c61f-8489-4e05-a90f-1919e3a222b6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I ran into Russ the last day of codemash (I'll be posting my ravings about codemash
soon), and I mentioned that I would put a link to the cleveland ruby user group. Here's
the link: <a title="http://ruby.meetup.com/119/" href="http://ruby.meetup.com/119/">http://ruby.meetup.com/119/</a></p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=41a3c61f-8489-4e05-a90f-1919e3a222b6" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>Cleveland Ruby User Group</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,41a3c61f-8489-4e05-a90f-1919e3a222b6.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/215976302/ClevelandRubyUserGroup.aspx</link>
      <pubDate>Sun, 13 Jan 2008 15:28:15 GMT</pubDate>
      <description>&lt;p&gt;
I ran into Russ the last day of codemash (I'll be posting my ravings about codemash
soon), and I mentioned that I would put a link to the cleveland ruby user group. Here's
the link: &lt;a title="http://ruby.meetup.com/119/" href="http://ruby.meetup.com/119/"&gt;http://ruby.meetup.com/119/&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=41a3c61f-8489-4e05-a90f-1919e3a222b6" /&gt;
&lt;br /&gt;
&lt;hr /&gt;This weblog is brought to you by the color Orange and the sesame street character, Bert. </description>
      <comments>http://www.coreyhaines.com/coreysramblings/CommentView,guid,41a3c61f-8489-4e05-a90f-1919e3a222b6.aspx</comments>
    <feedburner:origLink>http://www.coreyhaines.com/coreysramblings/2008/01/13/ClevelandRubyUserGroup.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.coreyhaines.com/coreysramblings/Trackback.aspx?guid=904dc46a-59fa-44ab-a11a-48b1d5309dcd</trackback:ping>
      <pingback:server>http://www.coreyhaines.com/coreysramblings/pingback.aspx</pingback:server>
      <pingback:target>http://www.coreyhaines.com/coreysramblings/PermaLink,guid,904dc46a-59fa-44ab-a11a-48b1d5309dcd.aspx</pingback:target>
      <dc:creator>Corey</dc:creator>
      <wfw:comment>http://www.coreyhaines.com/coreysramblings/CommentView,guid,904dc46a-59fa-44ab-a11a-48b1d5309dcd.aspx</wfw:comment>
      <wfw:commentRss>http://www.coreyhaines.com/coreysramblings/SyndicationService.asmx/GetEntryCommentsRss?guid=904dc46a-59fa-44ab-a11a-48b1d5309dcd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
[Note: Due to length, this post covers only the beginning of the run method, up to
getting the examples_to_run. It will be continued in future posts.]
</p>
        <p>
Here we are at run. We aren't going to look through the runners themselves; you'll
have to trust me that I looked at ExampleGroupRunner, and it calls the run method
on the ExampleGroup. :) Let's get down and dirty with ExampleGroup now. Naturally,
the actual run method is in module ExampleGroupMethods. Here's run:
</p>
        <blockquote>
          <pre>     # File lib/spec/example/example_group_methods.rb, line 110
110:       def run
111:         examples = examples_to_run
112:         return true if examples.empty?
113:         reporter.add_example_group(self)
114:         return dry_run(examples) if dry_run?
115: 
116:         plugin_mock_framework
117:         define_methods_from_predicate_matchers
118: 
119:         success, before_all_instance_variables = run_before_all
120:         success, after_all_instance_variables  = execute_examples(success, before_all_instance_variables, examples)
121:         success                                = run_after_all(success, after_all_instance_variables)
122:       end</pre>
        </blockquote>
        <pre>examples_to_run isn't in the rdoc, but it is in the sourcecode for ExampleGroupMethods. Here it is:</pre>
        <blockquote>
          <p>
def examples_to_run<br />
  all_examples = examples<br />
  return all_examples unless specified_examples?<br />
  all_examples.reject do |example|<br />
    matcher = ExampleMatcher.new(description.to_s, example.description)<br />
    !matcher.matches?(specified_examples)<br />
  end<br />
end 
</p>
        </blockquote>
        <p>
Wow, I don't know about you, but I like the rdoc format much better (I copied this
out of aptana). I wonder if there is an option on rdoc to include private methods.
I could regenerate the rdocs to include them. Let me take a look. Sure enough, it
does have a -all option. I wonder what would be the best way to generate the docs.
Well, I went into the lib\spec folder and executed the following line: 
</p>
        <blockquote>
          <p>
rdoc -S -N -a
</p>
        </blockquote>
        <p>
It sure did a lot. Let's go see. Sweet. It included the private methods. So, I now
have a rdoc that contains what I need. 
</p>
        <p>
Here's a better view of examples_to_run 
</p>
        <blockquote>
          <pre>     # File example/example_group_methods.rb, line 304
304:       def examples_to_run
305:         all_examples = examples
306:         return all_examples unless specified_examples?
307:         all_examples.reject do |example|
308:           matcher = ExampleMatcher.new(description.to_s, example.description)
309:           !matcher.matches?(specified_examples)
310:         end
311:       end</pre>
        </blockquote>
        <p>
I do notice that rdoc still doesn't include have everything, as it doesn't have the
examples method. Looking in Aptana, we see the following in example_group_methods: 
</p>
        <blockquote>
          <p>
def examples #:nodoc:<br />
  examples = example_objects.dup<br />
  add_method_examples(examples)<br />
  rspec_options.reverse ? examples.reverse : examples<br />
end 
</p>
        </blockquote>
        <p>
Ah, that #:nodoc: might be a good reason it doesn't show up in the rdoc. :) I can't
seem to find an option in rdoc to override this, but I'm not going to look too hard. 
</p>
        <p>
The reason this takes a dup of example_objects is that the rest of method changes
the list, adding method examples, and, if the reverse flag is set, the examples are
run in reverse order. This is done via an intrusive update to the list, so we want
to make a copy before we do something like that. Let's look at add_method_examples 
</p>
        <blockquote>
          <pre>     # File example/example_group_methods.rb, line 394
394:       def add_method_examples(examples)
395:         instance_methods.sort.each do |method_name|
396:           if example_method?(method_name)
397:             examples &lt;&lt; new(method_name) do
398:               __send__(method_name)
399:             end
400:           end
401:         end
402:       end</pre>
        </blockquote>
        <p>
Wow! This sorts the instance methods on the example group and loops them. If the method
is an example method, it adds it to the list of examples. Wow, this is interesting
code: 
</p>
        <blockquote>
          <pre>397:             examples &lt;&lt; new(method_name) do
398:               __send__(method_name)
399:             end</pre>
        </blockquote>
        <p>
So, this will create a new ExampleGroup with the method_name as the description and
__send__(method_name) as the implementation. Wow! So, my understanding of this is
that the method will be executed. 
</p>
        <p>
example_method? delegates to should_method? 
</p>
        <blockquote>
          <pre>     # File example/example_group_methods.rb, line 408
408:       def should_method?(method_name)
409:         !(method_name =~ /^should(_not)?$/) &amp;&amp;
410:         method_name =~ /^should/ &amp;&amp; (
411:           instance_method(method_name).arity == 0 ||
412:           instance_method(method_name).arity == -1
413:         )
414:       end</pre>
        </blockquote>
        <p>
At first, this looks like matcher methods to me, but it seems like these are actually
being added to the list of examples to run, so they can't be that. I guess you can
write methods that start with should(_not) and they will get run. It also makes sure
that you don't take parameters. Let's dissect that regular expression to figure out
the exact requirements: 
</p>
        <p>
!(a) &amp;&amp; b &amp;&amp; (c || d) 
</p>
        <p>
a = method should be either should or should_not with a ? on the end. 
</p>
        <p>
b = method name should start with should 
</p>
        <p>
c = 0 parameters 
</p>
        <p>
d = variable number of parameters (.arity == -1) 
</p>
        <p>
So, basically, it says that the method should either be a checker (should(_not)?)
or a method that starts with should but has either no parameters or a variable number
of parameters. Why the variable number of parameters? You can pass no parameters to
those, as well. If we are going to run a method as an example, you don't want to have
to provide a parameter. This could be a possible opening in the future to create parameterized
tests. 
</p>
        <p>
Whew, we made it pretty far down a rabbit-hole, but let's get back to where we were
when we started collecting up the examples: 
</p>
        <blockquote>
          <pre>     # File example/example_group_methods.rb, line 304
304:       def examples_to_run
305:         all_examples = examples
306:         return all_examples unless specified_examples?
307:         all_examples.reject do |example|
308:           matcher = ExampleMatcher.new(description.to_s, example.description)
309:           !matcher.matches?(specified_examples)
310:         end
311:       end</pre>
        </blockquote>
        <p>
So, we've now got the all_examples list properly initialized, we return it unless
specified_examples? Well, let's go take a look at this:
</p>
        <blockquote>
          <pre>     # File example/example_group_methods.rb, line 313
313:       def specified_examples?
314:         specified_examples &amp;&amp; !specified_examples.empty?
315:       end</pre>
        </blockquote>
        <blockquote>
          <pre>     # File example/example_group_methods.rb, line 317
317:       def specified_examples
318:         rspec_options.examples
319:       end</pre>
        </blockquote>
        <p>
So, if we have any examples off rspec_options and it isn't empty, then we have specified_examples.
Where did this come from?
</p>
        <blockquote>
          <p>
PS C:\ruby\lib\ruby\gems\1.8\gems\rspec-1.1.1&gt; dir -Recurse | Select-String "rspec_options.examples" 
</p>
        </blockquote>
        <blockquote>
          <p>
lib\spec.rb:15:      @run || rspec_options.examples_run?<br />
lib\spec\example\example_group_methods.rb:318:       
rspec_options.examples
</p>
        </blockquote>
        <p>
That seems very strange. Now, it is wrapped in specified_examples, so let's look for
uses of that:
</p>
        <blockquote>
          <p>
PS C:\ruby\lib\ruby\gems\1.8\gems\rspec-1.1.1\lib\spec&gt; dir -Recurse -Include *.rb
| select-string "specified_examples" 
</p>
        </blockquote>
        <blockquote>
          <p>
example\example_group_methods.rb:306:        return
all_examples unless specified_examples?<br />
example\example_group_methods.rb:309:         
!matcher.matches?(specified_examples)<br />
example\example_group_methods.rb:313:      def specified_examples?<br />
example\example_group_methods.rb:314:        specified_examples
&amp;&amp; !specified_examples.empty?<br />
example\example_group_methods.rb:317:      def specified_examples<br />
example\example_matcher.rb:9:      def matches?(specified_examples)<br />
example\example_matcher.rb:10:        specified_examples.each
do |specified_example|
</p>
        </blockquote>
        <p>
Ah, example matcher uses them. However, I don't see anyone actually adding to them.
</p>
        <p>
Let's stop and think for a bit. The examples are off the rspec_options object. Let's
search for uses of rspec_options with any sort of example stuff:
</p>
        <blockquote>
          <p>
PS C:\ruby\lib\ruby\gems\1.8\gems\rspec-1.1.1\lib\spec&gt; dir -Recurse -Include *.rb
| select-string -Pattern "rspec_options\..*example.*" 
</p>
        </blockquote>
        <blockquote>
          <p>
example\example_group_methods.rb:160:        rspec_options.reverse
? examples.reverse : examples<br />
example\example_group_methods.rb:240:        rspec_options.add_example_group
self<br />
example\example_group_methods.rb:244:        rspec_options.remove_example_group
self<br />
example\example_group_methods.rb:262:         
rspec_options.reporter.example_started(example)<br />
example\example_group_methods.rb:263:         
rspec_options.reporter.example_finished(example)<br />
example\example_group_methods.rb:318:        rspec_options.examples<br />
runner\command_line.rb:19:           
return $rspec_options.run_examples<br />
runner\heckle_runner.rb:66:        success = @rspec_options.run_examples
</p>
        </blockquote>
        <p>
Look at add_example_group and remove_example_group. This is in example_group_methods,
which looks like it might be what we are interested in.
</p>
        <blockquote>
          <pre>    # File runner/options.rb, line 71
71:       def add_example_group(example_group)
72:         @example_groups &lt;&lt; example_group
73:       end</pre>
        </blockquote>
        <p>
Okay, this starts to make sense. Let's go look in this for the examples property.
Ah, it is a simple one created with attr_accessor.
</p>
        <p>
For our purposes, example_group_methods.register is it. Now, who calls register. This
seems like we could go back to previous parts of this serious to see it. I remember
there being a register_behaviour in the old code, so it seems like we would have something
similar here. Running a select for ".register" returns only a pointer to the comment
about using register on the ExampleGroupFactory (example_group_factory.rb:13). Strange.
So, my initial searching proves fruitless: it appears at this moment that nobody calls
register on the ExampleGroup.
</p>
        <p>
Looking in the specs for RSpec, I find these two specs:
</p>
        <blockquote>
          <p>
describe '#register' do<br />
        it "should add ExampleGroup to set of ExampleGroups
to be run" do<br />
          example_group.register<br />
          options.example_groups.should
include(example_group)<br />
        end<br />
      end 
</p>
        </blockquote>
        <blockquote>
          <p>
      describe '#unregister' do<br />
        before do<br />
          example_group.register<br />
          options.example_groups.should
include(example_group)<br />
        end 
</p>
        </blockquote>
        <blockquote>
          <p>
        it "should remove ExampleGroup from set
of ExampleGroups to be run" do<br />
          example_group.unregister<br />
          options.example_groups.should_not
include(example_group)<br />
        end<br />
      end<br />
end
</p>
        </blockquote>
        <p>
Strange. Going to the root of rspec and doing a search for .register returns no uses
of calling .register on an example_group except for the test. Could this be vestigial?
</p>
        <p>
So, here's the point. If nothing ever gets added to example_groups, then the code
that uses it is never called. So, anyone using specified_examples is going to always
get false. The example_group_runner loops over them, but nobody adds. Very, very,
very strange.
</p>
        <p>
The important thing for this series (looping back around) is that we were inspecting
the following method:
</p>
        <blockquote>
          <pre>     # File example/example_group_methods.rb, line 304
304:       def examples_to_run
305:         all_examples = examples
306:         return all_examples unless specified_examples?
307:         all_examples.reject do |example|
308:           matcher = ExampleMatcher.new(description.to_s, example.description)
309:           !matcher.matches?(specified_examples)
310:         end
311:       end</pre>
        </blockquote>
        <p>
So, if specified_examples? always returns false, then we will always just return all_examples.
This excludes the loop that is rejecting examples. That looks strange anyway. We'll
postpone the look at that.
</p>
        <p>
Now, this post is getting really long, and we are only halfway through the primary
method that we are investigating here:
</p>
        <blockquote>
          <pre>     # File example/example_group_methods.rb, line 110
110:       def run
111:         examples = examples_to_run
112:         return true if examples.empty?
113:         reporter.add_example_group(self)
114:         return dry_run(examples) if dry_run?
115: 
116:         plugin_mock_framework
117:         define_methods_from_predicate_matchers
118: 
119:         success, before_all_instance_variables = run_before_all
120:         success, after_all_instance_variables  = execute_examples(success, before_all_instance_variables, examples)
121:         success                                = run_after_all(success, after_all_instance_variables)
122:       end</pre>
        </blockquote>
        <p>
We still need to look at dry_run and then the rest of the setup before we even get
to executing the samples. I'll continue in the next post.
</p>
        <img width="0" height="0" src="http://www.coreyhaines.com/coreysramblings/aggbug.ashx?id=904dc46a-59fa-44ab-a11a-48b1d5309dcd" />
        <br />
        <hr />
This weblog is brought to you by the color Orange and the sesame street character,
Bert. 
</body>
      <title>A Ruby Newbie looks through RSpec - Part IV run (I)</title>
      <guid isPermaLink="false">http://www.coreyhaines.com/coreysramblings/PermaLink,guid,904dc46a-59fa-44ab-a11a-48b1d5309dcd.aspx</guid>
      <link>http://feeds.feedburner.com/~r/CoreysRamblings/~3/207163431/ARubyNewbieLooksThroughRSpecPartIVRunI.aspx</link>
      <pubDate>Thu, 27 Dec 2007 19:21:21 GMT</pubDate>
      <description>&lt;p&gt;
[Note: Due to length, this post covers only the beginning of the run method, up to
getting the examples_to_run. It will be continued in future posts.]
&lt;/p&gt;
&lt;p&gt;
Here we are at run. We aren't going to look through the runners themselves; you'll
have to trust me that I looked at ExampleGroupRunner, and it calls the run method
on the ExampleGroup. :) Let's get down and dirty with ExampleGroup now. Naturally,
the actual run method is in module ExampleGroupMethods. Here's run:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;     # File lib/spec/example/example_group_methods.rb, line 110
110:       def run
111:         examples = examples_to_run
112:         return true if examples.empty?
113:         reporter.add_example_group(self)
114:         return dry_run(examples) if dry_run?
115: 
116:         plugin_mock_framework
117:         define_methods_from_predicate_matchers
118: 
119:         success, before_all_instance_variables = run_before_all
120:         success, after_all_instance_variables  = execute_examples(success, before_all_instance_variables, examples)
121:         success                                = run_after_all(success, after_all_instance_variables)
122:       end&lt;/pre&gt;
&lt;/blockquote&gt;&lt;pre&gt;examples_to_run isn't in the rdoc, but it is in the sourcecode for ExampleGroupMethods. Here it is:&lt;/pre&gt;
&lt;blockquote&gt; 
&lt;p&gt;
def examples_to_run&lt;br&gt;
&amp;nbsp; all_examples = examples&lt;br&gt;
&amp;nbsp; return all_examples unless specified_examples?&lt;br&gt;
&amp;nbsp; all_examples.reject do |example|&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; matcher = ExampleMatcher.new(description.to_s, example.description)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; !matcher.matches?(specified_examples)&lt;br&gt;
&amp;nbsp; end&lt;br&gt;
end 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Wow, I don't know about you, but I like the rdoc format much better (I copied this
out of aptana). I wonder if there is an option on rdoc to include private methods.
I could regenerate the rdocs to include them. Let me take a look. Sure enough, it
does have a -all option. I wonder what would be the best way to generate the docs.
Well, I went into the lib\spec folder and executed the following line: &lt;blockquote&gt; 
&lt;p&gt;
rdoc -S -N -a
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
It sure did a lot. Let's go see. Sweet. It included the private methods. So, I now
have a rdoc that contains what I need. 
&lt;p&gt;
Here's a better view of examples_to_run &lt;blockquote&gt;&lt;pre&gt;     # File example/example_group_methods.rb, line 304
304:       def examples_to_run
305:         all_examples = examples
306:         return all_examples unless specified_examples?
307:         all_examples.reject do |example|
308:           matcher = ExampleMatcher.new(description.to_s, example.description)
309:           !matcher.matches?(specified_examples)
310:         end
311:       end&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I do notice that rdoc still doesn't include have everything, as it doesn't have the
examples method. Looking in Aptana, we see the following in example_group_methods: &lt;blockquote&gt; 
&lt;p&gt;
def examples #:nodoc:&lt;br&gt;
&amp;nbsp; examples = example_objects.dup&lt;br&gt;
&amp;nbsp; add_method_examples(examples)&lt;br&gt;
&amp;nbsp; rspec_options.reverse ? examples.reverse : examples&lt;br&gt;
end 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Ah, that #:nodoc: might be a good reason it doesn't show up in the rdoc. :) I can't
seem to find an option in rdoc to override this, but I'm not going to look too hard. 
&lt;p&gt;
The reason this takes a dup of example_objects is that the rest of method changes
the list, adding method examples, and, if the reverse flag is set, the examples are
run in reverse order. This is done via an intrusive update to the list, so we want
to make a copy before we do something like that. Let's look at add_method_examples &lt;blockquote&gt;&lt;pre&gt;     # File example/example_group_methods.rb, line 394
394:       def add_method_examples(examples)
395:         instance_methods.sort.each do |method_name|
396:           if example_method?(method_name)
397:             examples &amp;lt;&amp;lt; new(method_name) do
398:               __send__(method_name)
399:             end
400:           end
401:         end
402:       end&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Wow! This sorts the instance methods on the example group and loops them. If the method
is an example method, it adds it to the list of examples. Wow, this is interesting
code: &lt;blockquote&gt;&lt;pre&gt;397:             examples &amp;lt;&amp;lt; new(method_name) do
398:               __send__(method_name)
399:             end&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So, this will create a new ExampleGroup with the method_name as the description and
__send__(method_name) as the implementation. Wow! So, my understanding of this is
that the method will be executed. 
&lt;p&gt;
example_method? delegates to should_method? &lt;blockquote&gt;&lt;pre&gt;     # File example/example_group_methods.rb, line 408
408:       def should_method?(method_name)
409:         !(method_name =~ /^should(_not)?$/) &amp;amp;&amp;amp;
410:         method_name =~ /^should/ &amp;amp;&amp;amp; (
411:           instance_method(method_name).arity == 0 ||
412:           instance_method(method_name).arity == -1
413:         )
414:       end&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
At first, this looks like matcher methods to me, but it seems like these are actually
being added to the list of examples to run, so they can't be that. I guess you can
write methods that start with should(_not) and they will get run. It also makes sure
that you don't take parameters. Let's dissect that regular expression to figure out
the exact requirements: 
&lt;p&gt;
!(a) &amp;amp;&amp;amp; b &amp;amp;&amp;amp; (c || d) 
&lt;p&gt;
a = method should be either should or should_not with a ? on the end. 
&lt;p&gt;
b = method name should start with should 
&lt;p&gt;
c = 0 parameters 
&lt;p&gt;
d = variable number of parameters (.arity == -1) 
&lt;p&gt;
So, basically, it says that the method should either be a checker (should(_not)?)
or a method that starts with should but has either no parameters or a variable number
of parameters. Why the variable number of parameters? You can pass no parameters to
those, as well. If we are going to run a method as an example, you don't want to have
to provide a parameter. This could be a possible opening in the future to create parameterized
tests. 
&lt;p&gt;
Whew, we made it pretty far down a rabbit-hole, but let's get back to where we were
when we started collecting up the examples: &lt;blockquote&gt;&lt;pre&gt;     # File example/example_group_methods.rb, line 304
304:       def examples_to_run
305:         all_examples = examples
306:         return all_examples unless specified_examples?
307:         all_examples.reject do |example|
308:           matcher = ExampleMatcher.new(description.to_s, example.description)
309:           !matcher.matches?(specified_examples)
310:         end
311:       end&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So, we've now got the all_examples list properly initialized, we return it unless
specified_examples? Well, let's go take a look at this:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;     # File example/example_group_methods.rb, line 313
313:       def specified_examples?
314:         specified_examples &amp;amp;&amp;amp; !specified_examples.empty?
315:       end&lt;/pre&gt;
&lt;/blockquote&gt; &lt;blockquote&gt;&lt;pre&gt;     # File example/example_group_methods.rb, line 317
317:       def specified_examples
318:         rspec_options.examples
319:       end&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So, if we have any examples off rspec_options and it isn't empty, then we have specified_examples.
Where did this come from?
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
PS C:\ruby\lib\ruby\gems\1.8\gems\rspec-1.1.1&amp;gt; dir -Recurse | Select-String "rspec_options.examples" 
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
lib\spec.rb:15:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @run || rspec_options.examples_run?&lt;br&gt;
lib\spec\example\example_group_methods.rb:318:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
rspec_options.examples
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
That seems very strange. Now, it is wrapped in specified_examples, so let's look for
uses of that:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
PS C:\ruby\lib\ruby\gems\1.8\gems\rspec-1.1.1\lib\spec&amp;gt; dir -Recurse -Include *.rb
| select-string "specified_examples" 
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
example\example_group_methods.rb:306:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return
all_examples unless specified_examples?&lt;br&gt;
example\example_group_methods.rb:309:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
!matcher.matches?(specified_examples)&lt;br&gt;
example\example_group_methods.rb:313:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def specified_examples?&lt;br&gt;
example\example_group_methods.rb:314:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; specified_examples
&amp;amp;&amp;amp; !specified_examples.empty?&lt;br&gt;
example\example_group_methods.rb:317:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def specified_examples&lt;br&gt;
example\example_matcher.rb:9:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def matches?(specified_examples)&lt;br&gt;
example\example_matcher.rb:10:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; specified_examples.each
do |specified_example|
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Ah, example matcher uses them. However, I don't see anyone actually adding to them.
&lt;/p&gt;
&lt;p&gt;
Let's stop and think for a bit. The examples are off the rspec_options object. Let's
search for uses of rspec_options with any sort of example stuff:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
PS C:\ruby\lib\ruby\gems\1.8\gems\rspec-1.1.1\lib\spec&amp;gt; dir -Recurse -Include *.rb
| select-string -Pattern "rspec_options\..*example.*" 
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
example\example_group_methods.rb:160:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rspec_options.reverse
? examples.reverse : examples&lt;br&gt;
example\example_group_methods.rb:240:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rspec_options.add_example_group
self&lt;br&gt;
example\example_group_methods.rb:244:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rspec_options.remove_example_group
self&lt;br&gt;
example\example_group_methods.rb:262:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
rspec_options.reporter.example_started(example)&lt;br&gt;
example\example_group_methods.rb:263:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
rspec_options.reporter.example_finished(example)&lt;br&gt;
example\example_group_methods.rb:318:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rspec_options.examples&lt;br&gt;
runner\command_line.rb:19:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
return $rspec_options.run_examples&lt;br&gt;
runner\heckle_runner.rb:66:&amp;nbsp;&amp