<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CyberFOX Software Inc. &#187; coding</title>
	<atom:link href="http://cyberfox.com/blog/category/coding/feed" rel="self" type="application/rss+xml" />
	<link>http://cyberfox.com/blog</link>
	<description>Coding, Connections, and Other Bloggy Bits of Goodness</description>
	<lastBuildDate>Sat, 25 Jul 2009 21:27:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The three kinds of Rails migrations</title>
		<link>http://cyberfox.com/blog/2009/05/22/54/the-three-kinds-of-rails-migrations</link>
		<comments>http://cyberfox.com/blog/2009/05/22/54/the-three-kinds-of-rails-migrations#comments</comments>
		<pubDate>Sat, 23 May 2009 01:21:56 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[migrations]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.cyberfox.com/blog/?p=54</guid>
		<description><![CDATA[Greetings,
What alternative do you suggest for using models in migrations? I was in several situations where I had to not only change the underlying db structure but change the contained data, too.
Data changes, especially moving data around, are almost always rake task-worthy in my experience.
The other side of that, populating large amounts of seed data [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,</p>
<p style="padding-left: 30px;"><em>What alternative do you suggest for using models in migrations? I was in several situations where I had to not only change the underlying db structure but change the contained data, too.</em></p>
<p>Data changes, especially moving data around, are almost always rake task-worthy in my experience.</p>
<p>The other side of that, populating large amounts of seed data into new databases, is a difficult task no matter the method; seed_fu attempted to deal with it, but it’s not an optimal solution and pretty old. I’m not even sure if it works anymore. It’s worse if you need the seed data to be from a legacy database in tests (e.g. a nutritional database). Reloading lots of data each time a clone_structure_to_test is done makes your tests very slow.</p>
<p>I break down migrations into three kinds; structural (tables, columns, indices, etc.), data (pre-populating tables, etc.) and procedural (moving data around, recalculating counts, etc.). The first is what I strive to limit migrations to. I feel like there should be a good answer for the second and Rails 3.0 has a &#8216;Simplest Thing That Can Work&#8217; feature in <span class="status-body"><span class="entry-content"> Rails <a title="This is also known as the &quot;Stop Putting Gawd Damn Seed Data In Your Migrations&quot; feature [DHH]" href="http://github.com/rails/rails/commit/4932f7b38f72104819022abca0c952ba6f9888cb">commit #4932f7b</a></span></span>. The third, I try to relegate to rake tasks that are usually run once, on deployment of the branch.</p>
<p>The procedural tasks don’t need to be run when building a fresh database, because there isn’t legacy data to correct. That’s why you can usually define the model in the migration to force it to work even if the real model is gone or renamed; there’s no data, so the operations often don’t matter. If they don’t NEED to be run when building a fresh database, I try not to put them in the migrations.</p>
<p>It’s not ‘hard and fast’, because I usually work in startups to small companies, where dogma doesn’t work so well. Imagine, though, a large and thin piece of foam. It’s flexible, and you can make it into all sorts of shapes, and yet it’s simple. Each time you add code that makes reasonable changes in the future painful, it’s like putting a thin glass rod into the foam. It’s still flexible, but there’s some bends you can’t do without breaking. Add too many and you’ve got an inflexible and brittle object, no matter how dynamic the base material is.</p>
<p>The fear of breaking things by changing the code is deeply demotivating for everyone.</p>
<p>I know I waterboarded that analogy, but hopefully it makes sense…</p>
<p>—  Morgan Schweers, Cyber<strong>FOX</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2009/05/22/54/the-three-kinds-of-rails-migrations/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Approaching an inherited Rails codebase</title>
		<link>http://cyberfox.com/blog/2009/05/21/56/approaching-an-inherited-rails-codebase</link>
		<comments>http://cyberfox.com/blog/2009/05/21/56/approaching-an-inherited-rails-codebase#comments</comments>
		<pubDate>Fri, 22 May 2009 06:20:29 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[maintenance]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.cyberfox.com/blog/?p=56</guid>
		<description><![CDATA[Greetings,
[Edit: Since writing this article up back in early March, I've moved on from this job. The folks who are now maintaining it at least know where the pain points are, can run migrations safely, deploy it locally, and to dev servers, and to the main deployment area.  It's a working app, although I never [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,</p>
<p><small><em>[Edit: Since writing this article up back in early March, I've moved on from this job. The folks who are now maintaining it at least know where the pain points are, can run migrations safely, deploy it locally, and to dev servers, and to the main deployment area.  It's a working app, although I never got code coverage above about 45% at least the coverage was decent in the core app areas by the time I left.]</em></small></p>
<p><a title="A Fresh Cup" href="http://afreshcup.com/">Mike Gunderloy</a> had an interesting article entitled &#8216;<a href="http://afreshcup.com/2009/03/23/batting-clean-up/">Batting Clean-up</a>&#8216;, which was very timely for me.  I’ve just started maintaining and trying to improve a Rails app developed by an ‘outsourced’ group. The only tests were the ones generated automatically by ‘restful authentication’, and they were never maintained, so they didn’t come close to passing. Swaths of the program are written in terribly complex (and sometimes computed) SQL, migrations didn’t bring up a fresh database (poor use of acts_as_enumerated causes great hurt), and vendor/plugins should have just had one named ‘kitchen_sink’.</p>
<p>It hurts to see Rails abused like that; you want to take the poor application under your arm and say, ‘It’ll be okay…we’ll add some tests and get you right as rain in no time!’, but you know you’d be lying…</p>
<p>I did much of what Mike <a title="Batting Clean-Up" href="http://afreshcup.com/2009/03/23/batting-clean-up/">described</a> (half the gems it used were config.gem’ed, the other half weren’t), vendor’ed rails (it breaks on newer than 2.1.0), and brought the development database kicking and screaming into life. There was no schema.rb, it had been .gitignore’d, and the migrations added data, used models, and everything else you can imagine doing wrong. (Including using a field on a model after adding that column in the previous line…I don’t know what version of Rails that ever worked on…) I didn’t want a production database; who knows what’s been done to that by hand. I want to know what the database is _supposed_ to look like; I can figure out the difference with production later.</p>
<p>Once the clean (only data inserted by migrations) dev database was up, I brought the site up to see if it worked. Surprisingly enough, it did; apparently they used manual QA as their only testing methodology. I appreciate their QA a lot; it means it’s a working application, even if it’s not going to help me refactor it.</p>
<p>I ran <a title="Flog (grotesque art, great tool)" href="http://ruby.sadi.st/Flog.html">flog</a> and <a href="http://ruby.sadi.st/Flay.html">flay</a> and looked at the pain points they found to get an idea how bad things might be. I picked an innocuous join table (with some extra data and functionality) to build the first set of tests for, which gave me insight into both sides of the join without having to REALLY dig into the ball of fur on either side. I viciously stripped all the ‘test_truth’ tests. I looked for large files that flog and flay hadn’t picked up to pore over. Check out custom rake tasks, because those often are clear stories and easy to quickly understand in a small context.</p>
<p>Checking out the deployment process tells you a lot also, although it turns out this was stock engine yard capistrano.</p>
<p>Skimming views (sort by size!) will tell you a lot also, especially when you find SQL queries being run in them…</p>
<p>Use the site for a little while, and watch the log in another window. Just let it skim by; if you’ve looked at log files much, things that seem wrong will jump out even if it’s going faster than you can really read.</p>
<p>In my case, the code’s mine now, so it’s my responsibility to make it better before anybody else has to touch it. I’ve got about a week of ‘free fix-it-up time’ before I need to start actually implementing new features and (thankfully) stripping out old ones… At my previous company, I was the guy pushing folks to test, now I’ve inherited a codebase with zero tests. Poetic justice, I suppose&#8230; <img src='http://cyberfox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Good luck!</p>
<p>—  Morgan Schweers, Cyber<strong>FOX</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2009/05/21/56/approaching-an-inherited-rails-codebase/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To fire, or not to fire, &#8216;workaholics&#8217;&#8230;</title>
		<link>http://cyberfox.com/blog/2008/03/07/37/to-fire-or-not-to-fire-workaholics</link>
		<comments>http://cyberfox.com/blog/2008/03/07/37/to-fire-or-not-to-fire-workaholics#comments</comments>
		<pubDate>Sat, 08 Mar 2008 01:07:15 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[McAfee Associates]]></category>
		<category><![CDATA[PayPal]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[passion]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.vixen.com/blog/2008/03/07/37</guid>
		<description><![CDATA[Greetings,
There&#8217;s an interesting few blog posts going on about folks who work really hard.  It started from Jason Calacanis&#8217;s article of tips on how to save money when running a startup (many of which are good, but #11 is &#8216;Fire people who are not workaholics&#8230;&#8217;) and that was picked up at the 37signals SvN [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,<br />
There&#8217;s an interesting few blog posts going on about folks who work really hard.  It started from Jason Calacanis&#8217;s article of <a title="How to save money running a startup" href="http://www.calacanis.com/2008/03/07/how-to-save-money-running-a-startup-17-really-good-tips/">tips on how to save money when running a startup</a> (many of which are good, but #11 is &#8216;Fire people who are not workaholics&#8230;&#8217;) and that was picked up at the <a title="Signal vs. Noise" href="http://www.37signals.com/svn/">37signals SvN blog</a> which <a title="Fire the workaholics" href="http://www.37signals.com/svn/posts/902-fire-the-workaholics">comes out strongly against workaholics</a>.</p>
<p>As with everything else, it&#8217;s not that simple&#8230;</p>
<p>In the successful startups I&#8217;ve worked at, a core of people staying late, working long hours, was a symptom of having an idea that people can believe in.</p>
<p>I have not seen any very successful startups where the developers weren&#8217;t at least a little monomaniacal about their work.</p>
<p>On the contrary, I&#8217;ve been at two successful startups (defined here as wildly successful IPO&#8217;s) where having those fanatic developers was a core reason of why they were successful.</p>
<p>The people who were putting in overwhelming hours at those companies weren&#8217;t doing it because they&#8217;re workaholics.  They were doing it because they were true believers.  Both in the company itself and the product they were building.</p>
<p>It&#8217;s not about the workaholics making the company successful, it&#8217;s about the company being one that the employees can believe in, to the point of _wanting_ to be there, wanting to be making it better.</p>
<p>In those cases, you don&#8217;t fire the people who are passionate about building your company.  You support them, and accept that they&#8217;re going to crash occasionally, and try to nerf the crash some&#8230;</p>
<p>In my experience, it&#8217;s the fervent employees who are the core of successful startups.  This was true at McAfee Associates (went public in 1992), and PayPal (went public in 2002), both successful startups that I was part of.</p>
<p>You also need people who aren&#8217;t as fervent, who can see a wider view, so it&#8217;s always a balance.  So you can&#8217;t really &#8216;fire&#8217; either of them, out of hand.</p>
<p>I&#8217;ve been that true believer, focusing everything into a job or project that I deeply care about.  I&#8217;m a much calmer, more balanced person now, though.  We&#8217;ll see what happens in 2012&#8230;  <img src='http://cyberfox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#8211;  Morgan</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2008/03/07/37/to-fire-or-not-to-fire-workaholics/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TDD: The &#8216;Logans Run&#8217; of Software Development&#8230;</title>
		<link>http://cyberfox.com/blog/2007/10/05/35/tdd-the-logans-run-of-software-development</link>
		<comments>http://cyberfox.com/blog/2007/10/05/35/tdd-the-logans-run-of-software-development#comments</comments>
		<pubDate>Sat, 06 Oct 2007 03:09:23 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[BDD]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.vixen.com/blog/2007/10/05/35</guid>
		<description><![CDATA[Greetings,
I want to start by making it clear that I know why testing is good, and that it&#8217;s really important, but I think that the TDD proponents are glossing over the most difficult part of a project.
I would very much like someone to address the issue of modifying code that is not new, and not [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,</p>
<p>I want to start by making it clear that I know <strong>why</strong> testing is good, and that it&#8217;s <em>really</em> important, but I think that the TDD proponents are glossing over the most difficult part of a project.</p>
<p>I would very much like someone to address the issue of modifying code that is <strong>not new</strong>, and <strong>not already perfectly tested</strong> (or even completely specified!).  That is to say, the vast majority of actual code out there.</p>
<p>TDD <em>is</em> intensely focused on the early development phase (or at least TDD proponents are), and on writing <em>new</em> code, as opposed to what the majority of software developers actually do; maintain and update existing code.</p>
<p>It&#8217;s really straightforward (and fun!) to write entirely new code in the TDD fashion.  I&#8217;ve done it for about 3 decent sized projects now (one Java and two Rails), and it can be really pleasant, and a great focusing tool.  No arguments there; when you do it from the start, it&#8217;s really wonderful.</p>
<p>On the other hand, when you&#8217;re making incremental changes here and there throughout a very large, pre-existing, only partially tested codebase, it&#8217;s vastly less pleasant to try and do it test-first.</p>
<p>The Ruby Autotest tool is not such a pleasant tool at that point.  You stop wanting to write failing tests, because fixing it means autotest is going to try to do a <em>full retest</em>, which <strong>sucks</strong> for developer flow&#8230;  Even if your tests take &#8216;only&#8217; 5 minutes to run, breaking a test makes you wince, and writing a failing test and then fixing it is for masochists only (and ones who want to miss the project milestones at that).</p>
<p>The focus of <em>every</em> presentation (<a title="How I learned to love testing..." href="http://www.railsenvy.com/2007/10/4/how-i-learned-to-love-testing-presentation">this one</a> included) I&#8217;ve seen on TDD being on the <em>start</em> of a project makes me wonder why nobody&#8217;s talking about later in projects&#8230;</p>
<p>Nearly every developer out there is going to face a large codebase with poor testing coverage, and will have to make changes that aren&#8217;t entirely new code, to existing code that isn&#8217;t entirely tested.  Does TDD have a solution for the &#8216;large, crufty codebase&#8217;, or is it suited only for 1.0 versions, small projects, and projects that were TDD from the start?</p>
<p>This isn&#8217;t really a rhetorical question for me.  I <em>really</em> want to get my organization&#8217;s culture more oriented towards testing.  I&#8217;ve got buy-in from lots of people that when they&#8217;re writing new modules and services, they&#8217;ll do it test-first (or at least &#8216;test around the same time as the code&#8217;, which is all I can ask for at this point), and that&#8217;s great.  But has anybody developed <strong>any</strong> tools to make TDD better suited to <em>maintenance</em> and improving existing code?</p>
<p>&#8211;  Morgan</p>
<p>p.s.  I&#8217;m skipping BDD entirely, because BDD is so hardcore in the &#8216;only for already very well specified solutions&#8217; camp, that it&#8217;s meaningless for this question.  I&#8217;m also using &#8216;TDD&#8217; and &#8216;test-first&#8217; interchangeably, and I probably shouldn&#8217;t be.</p>
<p>p.p.s.  The title refers to how in Logans Run, everybody was destroyed at 30, so there weren&#8217;t any old people. In the world of TDD (or at least TDD presentations), there are no old projects, every one is fresh and new, so the issues that come with an old code base are never addressed.</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2007/10/05/35/tdd-the-logans-run-of-software-development/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>JBidwatcher 1.0.1 is released</title>
		<link>http://cyberfox.com/blog/2007/04/29/28/jbidwatcher-101-is-released</link>
		<comments>http://cyberfox.com/blog/2007/04/29/28/jbidwatcher-101-is-released#comments</comments>
		<pubDate>Mon, 30 Apr 2007 01:26:03 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[jbidwatcher]]></category>
		<category><![CDATA[sniping]]></category>

		<guid isPermaLink="false">http://www.vixen.com/blog/2007/04/29/28</guid>
		<description><![CDATA[Greetings,
I&#8217;ve put up the latest version, 1.0.1 of JBidwatcher.  It&#8217;s mainly a bug fix release.  It includes a few new features towards better documentation, error messages, and recognition of eBay states, and a new (still completely optional) approach to the eBay affiliate idea.
One of the important fixes has to do with a wording change; eBay [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,</p>
<p>I&#8217;ve put up the latest version, <a target="_blank" title="JBidwatcher home page w/ download links" href="http://www.jbidwatcher.com">1.0.1 of JBidwatcher</a>.  It&#8217;s mainly a bug fix release.  It includes a few new features towards better documentation, error messages, and recognition of eBay states, and a new (still completely optional) approach to the eBay affiliate idea.</p>
<p>One of the important fixes has to do with a wording change; eBay changed &#8216;You have been outbid&#8217; to &#8216;You&#8217;ve been outbid&#8217;, and JBidwatcher didn&#8217;t handle the wording change, reporting it as an &#8216;unknown error&#8217;.  Also eBay changed the text on their captcha pages, so JBidwatcher was failing logins for unknown reasons.  Now it should be better at recognizing those situations.</p>
<p>There was a sporadic startup failure when sorting by a currency-based column with unknown values in it, and saving and restarting.  I hope to have addressed that as well.</p>
<p>Very little UI has changed, although the internal FAQ has been enhanced a little, and a <a target="_blank" title="JBidwatcher web FAQ" href="http://www.jbidwatcher.com/help/faq.shtml">whole new FAQ</a> has been put on the web site.  There is also a <a target="_blank" title="JBidwatcher Forums" href="http://forum.jbidwatcher.com">new community forum area</a> that&#8217;s much better than the old SourceForge forums.  In fact, SourceForge is deprecated for everything except bug reports, feature requests, and CVS access to the source.</p>
<p>More information is available at <a href="http://www.jbidwatcher.com/changelogs/1.0.1.shtml">the JBidwatcher 1.0.1 changelog.</a></p>
<ul>
<li>Windows users can download a <a onclick="javascript:urchinTracker(&#039;/downloads/JBidWatcher-1.0.1.exe&#039;);" href="http://www.jbidwatcher.com/download/JBidWatcher-1.0.1.exe">Windows executable</a>!  (No installation required, it just runs!)</li>
<li>Mac OS X users can download an <a onclick="javascript:urchinTracker(&#039;/downloads/JBidWatcher-1.0.1.app.tar.gz&#039;);" href="http://www.jbidwatcher.com/download/JBidWatcher-1.0.1.app.tar.gz">app.tar.gz</a>.<br />
Download (it&#8217;ll automatically decompress) and double-click the .tar file to extract the Application!</li>
<li>You can also download the <a onclick="javascript:urchinTracker(&#039;/downloads/JBidWatcher-1.0.1.jar&#039;);" href="http://www.jbidwatcher.com/download/JBidWatcher-1.0.1.jar">Java binary</a> for any other platform, including Linux and Solaris.<br />
Launch with: <code>java -Xmx512m -jar JBidWatcher-1.0.1.jar</code></li>
<li>As always, you can download the <a onclick="javascript:urchinTracker(&#039;/downloads/jbidwatcher-1.0.1.tar.gz&#039;);" href="http://www.jbidwatcher.com/download/jbidwatcher-1.0.1.tar.gz">source</a> and build it for yourself.</li>
</ul>
<p>Best of luck with your auctions!</p>
<p>&#8211;  Morgan Schweers, Cyber<strong>FOX</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2007/04/29/28/jbidwatcher-101-is-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hackety Hack!</title>
		<link>http://cyberfox.com/blog/2007/04/27/27/hackety-hack</link>
		<comments>http://cyberfox.com/blog/2007/04/27/27/hackety-hack#comments</comments>
		<pubDate>Fri, 27 Apr 2007 19:31:56 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[passion]]></category>

		<guid isPermaLink="false">http://www.vixen.com/blog/2007/04/27/27</guid>
		<description><![CDATA[Greetings,
Programming should be fun, it&#8217;s what gets us programmers into it in the first place, and it&#8217;s what keeps us going at it.
Too many layers have been heaped on programming these days; most IDEs are oppressive, process-oriented beasts.
I, and many other programmers, have been concerned about how the next generation of programmers are going to [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,</p>
<p>Programming should be <strong><em>fun</em></strong>, it&#8217;s what gets us programmers into it in the first place, and it&#8217;s what keeps us going at it.</p>
<p>Too many layers have been heaped on programming these days; most IDEs are oppressive, process-oriented beasts.</p>
<p>I, and many other programmers, have been <a title="Why little Susie can&#039;t code..." target="_blank" href="http://www.whytheluckystiff.net/articles/theLittleCodersPredicament.html">concerned</a> about how the next generation of programmers are going to be introduced to the joy of programming when all the tools out there seem to suck the fun out of it.</p>
<p>Enter <a title="A really fun coding blog." target="_blank" href="http://redhanded.hobix.com/"><em>why the lucky stiff</em></a>, and <a title="Hackety Hack --  A programming environment for learning" target="_blank" href="http://hacketyhack.net/">Hackety Hack!</a>.  Taking one back to the days when programming was as easy as typing something in, and hitting enter.  <img src='http://cyberfox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hackety Hack! is about <a target="_blank" title="Included programming lessons..." href="http://code.whytheluckystiff.net/hacketyhack/wiki/HacketyLessons">learning to program</a>, and being able to do <a title="A blog in six lines of code!" target="_blank" href="http://hacketyhack.net/">really cool things</a> in a very few short lines.</p>
<p>I&#8217;ve been a fan of <a title="why the luck stiff" target="_blank" href="http://whytheluckystiff.net/"><em>_why</em></a> for a while, with a <a title="The best damn Ruby tutorial out there." target="_blank" href="http://poignantguide.net/ruby/">really wild approach to teaching Ruby</a>, and a lot of <a title="_why&#039;s coding archive" target="_blank" href="http://code.whytheluckystiff.net/">really interesting code</a>, and this is even cooler.</p>
<p>If you&#8217;re new to programming, or have kids, or just want to play with one of the simplest ways to write programs, <a title="easy introduction to programming" target="_blank" href="http://hacketyhack.net/get/">get Hackety Hack!</a></p>
<p>&#8211;  Morgan Schweers, CyberFOX!</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2007/04/27/27/hackety-hack/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBidwatcher and CyberFOX status update</title>
		<link>http://cyberfox.com/blog/2007/02/13/26/jbidwatcher-and-cyberfox-status-update</link>
		<comments>http://cyberfox.com/blog/2007/02/13/26/jbidwatcher-and-cyberfox-status-update#comments</comments>
		<pubDate>Wed, 14 Feb 2007 01:29:55 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[contemplation]]></category>
		<category><![CDATA[ebay]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[jbidwatcher]]></category>
		<category><![CDATA[sniping]]></category>

		<guid isPermaLink="false">http://www.vixen.com/blog/2007/02/13/26</guid>
		<description><![CDATA[Greetings,
A concerned user recently asked me how I was doing in the aftermath of the issue with eBay sales of JBidwatcher, specifically:
You seemed pretty depressed about it in your post to the website.
I was.
There was a really bad week there, while I was dealing with all of it, back and forth, and just feeling like [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,</p>
<p>A concerned user recently asked me how I was doing in the aftermath of the issue with eBay sales of JBidwatcher, specifically:</p>
<blockquote><p><em>You seemed pretty depressed about it in your post to the website.</em></p></blockquote>
<p>I was.</p>
<p>There was a really bad week there, while I was dealing with all of it, back and forth, and just feeling like crap.  I got a lot of user feedback, from a LOT of people, that reminded me, as the concerned user put it, not to let the few jerks make me give up.</p>
<p>I took some time to work on other projects, and I&#8217;ve been fiddling with the next major rev of JBidwatcher, mostly cleaning up the code, improving the source layout, fixing small things that nobody else will likely ever see, and writing silly features just for the fun of it.  (Like making the internal webserver take &#8216;events&#8217; to be posted to the various subsystems, so you can add an item, do a bid, or even tell it to fire off a sound effect through a REST-ish interface.  You could theoretically &#8217;script&#8217; JBidwatcher through that.)</p>
<p>I&#8217;ve also mostly moved the code base of JBidwatcher to Java 1.5 (mmmm, tasty generics!), since 1.6 is now out.  I&#8217;ve also been experimenting with including &#8216;Derby&#8217;, an embeddable (in the &#8217;ship with program&#8217; sense) tiny SQL-based database, so that JBidwatcher&#8217;s memory usage doesn&#8217;t grow at the same rate as the number of auctions.  Also so that it can offload completed auctions, so they&#8217;re not kept in memory anymore at all.  Yet another thing I&#8217;ve been playing with is including a scripting language (something simple) which would get run on certain events, which would allow for making some of the complex rules people have requested as features.  I&#8217;ve also written up an FAQ I need to publish on the site.  (The first question addresses my inability to answer emails consistently, in fact!)</p>
<p>Anyway, all told I (and work!) have been keeping myself busy, albeit quiet.  It all helps me get past the issue with the people selling JBidwatcher.  Future versions will probably not be open source, however.  <img src='http://cyberfox.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />   I may expose the source, or open certain sections, but almost all open source licenses explicitly allow what those folks were doing, and I&#8217;ve determined that it&#8217;s beyond what I&#8217;m comfortable with.  One of the things people repeatedly said in private emails was that the open source nature of JBidwatcher was not critical to their appreciation of JBidwatcher.  This means I&#8217;ll need to extricate myself from Sourceforge in various ways, and cover my own purchase of IntelliJ IDEA, but I think donations will have covered that.</p>
<p>I don&#8217;t want to charge for JBidwatcher; I prefer people using it and deciding for themselves what it&#8217;s worth to them.  Plus, because it&#8217;s scraping eBay, I feel bad about asking for money for something that could break the next day.  So I expect the program will continue to be no cost.  I&#8217;m thrilled to get donations, of course, but I don&#8217;t build JBidwatcher to make money; I have a day job for that.  <img src='http://cyberfox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>At the same time I&#8217;m working on building other projects so my morale won&#8217;t get torpedoed so badly when someone messes with the sole project I&#8217;ve been working on.</p>
<p>One of the other projects I&#8217;m working on are a health tracking tool (weight, blood pressure, hours slept, water drank, steps taken, foods eaten with nutrition information, and more stuff like that, with pretty graphs and sparklines (my weight trend: <img title="Weight Trend Sparkline" alt="Weight Trend Sparkline" src="http://fox.vulpine.com:4000/sparklines/weight/image.png" />)).  The other major one is a comprehensive multi-user outliner tool.  Both are entirely web based applications, unlike JBidwatcher, and both are in Ruby on Rails.</p>
<p>I&#8217;m sorry that I haven&#8217;t been dedicating more time to JBidwatcher, but it&#8217;s been fundamentally working okay recently, and I needed to blow off steam by doing cool new stuff.  So I&#8217;ve been letting it percolate, and rekindling my coding passion by working on other interesting problems.</p>
<p>That&#8217;s the status as of now; I hope that this sheds some light on my thought processes, and what I see in the future for JBidwatcher.  One important thing to take away is that <em><strong>YES</strong></em>, there is a future for JBidwatcher.  <img src='http://cyberfox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Thank you, every one, who wrote me, donated, or just thought well of me during all this.  I appreciate it a great deal more than I can express.</p>
<p>&#8211;  Morgan Schweers, Cyber<strong>FOX</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2007/02/13/26/jbidwatcher-and-cyberfox-status-update/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Pick your need, pick your tool.</title>
		<link>http://cyberfox.com/blog/2007/01/09/24/pick-your-need-pick-your-tool</link>
		<comments>http://cyberfox.com/blog/2007/01/09/24/pick-your-need-pick-your-tool#comments</comments>
		<pubDate>Wed, 10 Jan 2007 02:25:09 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://www.vixen.com/blog/2007/01/09/24</guid>
		<description><![CDATA[Greetings,
I had a friend recently who asked about what programming languages they should learn.  He primarily works as a system and network administrator, and had been bombarded by &#8216;Learn Ruby!&#8217; from a bunch of evangelists recently.  I assured him it wasn&#8217;t necessary, and came up with this interesting list.
What language you work in [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,</p>
<p>I had a friend recently who asked about what programming languages they should learn.  He primarily works as a system and network administrator, and had been bombarded by &#8216;Learn Ruby!&#8217; from a bunch of evangelists recently.  I assured him it wasn&#8217;t necessary, and came up with this interesting list.</p>
<p>What language you work in really depends on what you need to do.  In my definitely not so humble opinion, here are the best of breed languages/platforms for each of a set of needs, if you just want to Get Stuff Done.</p>
<p><strong>Applications </strong>- Java.  It&#8217;s cross platform with rich libraries, and 1.6 makes it even better.</p>
<p><strong>Glue</strong> &#8211; Perl and bash are best for gluing things together.  On Windows this category doesn&#8217;t really exist.</p>
<p><strong>Web </strong>- Ruby on Rails is the best tool out there right now.  You also need Javascript, CSS and HTML.</p>
<p><strong>Speed</strong> &#8211; C++ is best when it must be fast, but usually in service to another language, except for&#8230;</p>
<p><strong>Video Games</strong> &#8211; C++, because speed often trumps other considerations.</p>
<p><strong>Database &#8211; </strong>If you touch a database, you need to know SQL.</p>
<p><strong>Applet</strong> &#8211; Flash/ActionScript is the best applet language right now.</p>
<p><strong>Embedded</strong> &#8211; I believe C is still the gold standard, but I haven&#8217;t done embedded development in a while.</p>
<p><strong>Mobile</strong> &#8211; Java ME appears to be the only platform-agnostic answer currently, but again, not my field.</p>
<p>The above is based on my knowledge, as of right now.  I can make a strong argument for each of them, but that would require being negative in various ways about other languages for comparison.  Instead I prefer to note that other languages or platforms may still be good for each need, but these are the best.</p>
<p>Just like Ruby on Rails exploded onto the scene, this list may not hold true in a week, so it&#8217;s more a &#8217;snapshot&#8217; than a &#8216;bible&#8217;.  It&#8217;s also based on my knowledge of what makes for good software development, balancing (depending on the need) features that make development less error-prone, speed, cross platform capabilities, maturity, match between the development (and mental) model and the need, available tools, etc&#8230;</p>
<p>Hope it&#8217;s an interesting view into my development mindset.</p>
<p>&#8211;  Morgan Schweers, Cyber<strong>FOX</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2007/01/09/24/pick-your-need-pick-your-tool/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Seattle MindCamp 2.0</title>
		<link>http://cyberfox.com/blog/2006/04/29/14/seattle-mindcamp-20</link>
		<comments>http://cyberfox.com/blog/2006/04/29/14/seattle-mindcamp-20#comments</comments>
		<pubDate>Sat, 29 Apr 2006 18:05:58 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[MindCamp2.0]]></category>
		<category><![CDATA[Seattle]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[weekend]]></category>

		<guid isPermaLink="false">http://www.vixen.com/blog/2006/04/29/14</guid>
		<description><![CDATA[Greetings,
Wooof&#8230;  Well, MindCamp2.0 is a minute away from opening up, theoretically, and I&#8217;m about 30 minutes away from being there.
I&#8217;m really hoping this lets me immerse myself in a crowd of very smart people thinking about cool stuff, so that I can kick-start my own brain cells into working a bit better on my [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,<br />
Wooof&#8230;  Well, MindCamp2.0 is a minute away from opening up, theoretically, and I&#8217;m about 30 minutes away from being there.</p>
<p>I&#8217;m really hoping this lets me immerse myself in a crowd of very smart people thinking about cool stuff, so that I can kick-start my own brain cells into working a bit better on my personal projects.</p>
<p>If I talk about anything, it&#8217;ll probably be my current attempt at working with NLP and specifically extracting information about whether two blogs talk about similar things.  Effectively beating at the &#8216;information overload&#8217; problem.</p>
<p>Beyond that, we&#8217;ll see what happens.  I&#8217;m hoping I can stay awake for a lot of it.  I&#8217;ve got my toys (PSP, MacBookPro, Camera), and my pillow.  <img src='http://cyberfox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   I&#8217;m nervous, but excited.  Time to get going!</p>
<p>&#8211;  Morgan Schweers, Cyber<b>FOX</b>!</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2006/04/29/14/seattle-mindcamp-20/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Work/Life Balance versus The Passion of the Code.</title>
		<link>http://cyberfox.com/blog/2005/12/23/11/worklife-balance-versus-the-passion-of-the-code</link>
		<comments>http://cyberfox.com/blog/2005/12/23/11/worklife-balance-versus-the-passion-of-the-code#comments</comments>
		<pubDate>Fri, 23 Dec 2005 20:33:00 +0000</pubDate>
		<dc:creator>Cyberfox</dc:creator>
				<category><![CDATA[PayPal]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[passion]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.vixen.com/blog/2005/12/23/11</guid>
		<description><![CDATA[Greetings,
Robert Scoble takes Mark Lucovsky to task over seeing passion in Google workers sticking around until all hours of the night.
This is a hard thing to explain if you haven&#8217;t been there.  I&#8217;ve been there twice, once with McAfee Associates, in full-bore, turbo-charged engineer mode, fighting against the world-wide virus writing epidemic in the [...]]]></description>
			<content:encoded><![CDATA[<p>Greetings,<br />
<a href="http://scobleizer.wordpress.com/2005/12/23/markl-loves-4-am-workers">Robert Scoble takes Mark Lucovsky to task</a> over seeing passion in Google workers <a href="http://minimsft.blogspot.com/2005/12/comment-report-markl-nee-of-microsoft.html">sticking around until all hours of the night</a>.</p>
<p>This is a hard thing to explain if you haven&#8217;t been there.  I&#8217;ve been there twice, once with McAfee Associates, in full-bore, turbo-charged engineer mode, fighting against the world-wide virus writing epidemic in the very early days of McAfee Associates (from 7 people to more than 120 people).  Fewer people would recognize that world as would recognize the world of a modern web site developer, so I&#8217;ll focus on the second, PayPal.</p>
<p>I remember working at PayPal during their heyday just before and just after going public, when we were fighting the &#8216;good fight&#8217; against eBay, and I&#8217;d work all hours of the day and night not because I had to, but because it was deeply, personally important to me that we win, and because the work was so deeply enthralling that I lost track of time entirely.  That everything be right, and that we be first to market with features, that our code be spectacular, that we be innovative and brilliant and FAST was our world.  And until we were bought by eBay finally (demonstrating, imo, that we had the better service), no matter the hour, I never was alone at the office.</p>
<p>When you&#8217;re part of a brilliant team, trying to honest to god change the world, it&#8217;s not about deadlines.  It&#8217;s about a form of love.  It can be thoroughly, caustically destructive to everything else in your life, but it&#8217;s an experience I would be a lesser person if I had missed.</p>
<p>If you&#8217;re clocking hours at work, and the passion of what you&#8217;re doing isn&#8217;t keeping you rooted to your chair at all hours, loving the pure joy of creating, fighting the good fight, and trying to change the world, it doesn&#8217;t mean it&#8217;s not a good job.  It&#8217;s just not THAT experience.</p>
<p>I promise, there&#8217;s far more call for people who work regular hours, meeting normal deadlines, doing solid, good work, than for those of us who burn so very, very brightly, but for so short a time.</p>
<p>If you&#8217;re really in passionate love with the work you&#8217;re doing, it&#8217;s not about working to 3am to meet a deadline.  It&#8217;s about finally reaching a temporary point of closure for the days work, and raising up your head to suddenly discover it&#8217;s 3am.</p>
<p>And if you really, truly believe in your company, and you believe in your project, and have a fire to &#8216;win&#8217; in some way (usually against a more powerful competitor) it&#8217;s not about accepting an imposed deadline that makes you work hard.  It&#8217;s about DEMANDING a deadline that makes you work hard, but that you know you can meet.  Because you know it&#8217;s important, and that every second counts, and you CARE about the company being not just first, but first with a brilliant, innovative, wonderful experience.</p>
<p>After it&#8217;s all over, it&#8217;s draining.  It&#8217;s exhausting.  It&#8217;s mind-numbing.  You feel&#8230;dead, somehow, once the work is over, and you&#8217;ve been brilliant for so long, that you feel like your brain cells have used up all their energy.  You go home, don&#8217;t show up to work for a week, recharge, find out if you still have any RL friends, do something physical (skydiving, rock climbing, hiking, etc.) to get in touch with your body again.  You come back to work eventually, and you work with others to clean up any loose ends, and slowly you get back the energy from your co-workers, and the ambience in the office, and eventually you&#8217;re back on track to start another feature that&#8217;ll knock the socks off your competitors.</p>
<p>If you&#8217;re in a company where you are the dominant force, you don&#8217;t work like that.  You don&#8217;t need to, the hunger isn&#8217;t there.</p>
<p>PayPal lost that hunger when eBay bought us.  There wasn&#8217;t anything to fight for, anymore.  We&#8217;d won, in a way, and lost in a way.  I even asked it, when eBay management had a big meeting with everybody to tell us about their vision for us.  I don&#8217;t remember if it was the meeting Meg Whitman was at, or not, but I asked something like, &#8220;We&#8217;ve been fighting eBay for all this time, and now we don&#8217;t have to.  What will replace that, to keep the drive going?&#8221;  The answer was a mealy-mouthed mess of future strategy and becoming the dominant payment platform.  It wasn&#8217;t a battle anymore, we&#8217;d become the big company.</p>
<p>I left not terribly long after that, for health reasons.  (Remember what I said about caustically destructive?  <img src='http://cyberfox.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )  But also because I didn&#8217;t feel the passion in the hallways anymore.</p>
<p>The woman who I will marry in 36 days stood by me through it despite almost never seeing me, my friends teased that they&#8217;d forgotten my name, I ended up needing major surgery for a condition I let go too long&#8230;  But I was part of one of those winning teams, fighting against terrible odds, doing brilliant work, burning so very, very brightly, and changing the world one line of code at a time.</p>
<p>I think Mark understands that, as Google has Microsoft with an unlimited war-chest bearing down on them.  From what I&#8217;ve read, I don&#8217;t think Scoble completely does get it.  He gets that passion is important (Channel 9 certainly shows that), but the fight against overwhelming odds that drives it to fevered peaks, that brings it to a different level&#8230;that&#8217;s what&#8217;s missing.</p>
<p>But it&#8217;s okay.  Even I&#8217;m working a day job these days.  I still have the intense passion to program on my own projects, doing it until 4am regularly, but I&#8217;m in a larger cycle of recharge, get in touch with life, etc., before maybe doing it again if I find the right company.  Or maybe not.  I&#8217;ll be a married man shortly, settling down in theory.  Maybe I can&#8217;t fight those fights anymore.  Maybe I should work at Microsoft.  <img src='http://cyberfox.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   Just kidding&#8230;</p>
<p>&#8211;  Morgan Schweers, Cyber<b>FOX</b>!</p>
]]></content:encoded>
			<wfw:commentRss>http://cyberfox.com/blog/2005/12/23/11/worklife-balance-versus-the-passion-of-the-code/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
