<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Frictionless Floor</title>
    <link>http://blog.frictionlessfloor.com</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>programming and design with minimal resistance</description>
    <item>
      <title>How not to Retain a Customer</title>
      <description>&lt;p&gt;About 6-7 months ago, I found a link to the &lt;a href="http://www.vongo.com"&gt;Vongo&lt;/a&gt; movie download service and signed up for their 14-day trial. Everything worked fine, movies downloaded correctly, and there was a lot to choose from despite the poor titles they managed to license. It reminded me of Starz On-Demand, which I used to have when we had digital cable. Later, I found out that Vongo was a service provided by Starz, thus explaining the similarities.&lt;/p&gt;


	&lt;p&gt;Fast forward to last month or so, when &lt;a href="http://www.blockbuster.com"&gt;Blockbuster Online&lt;/a&gt; began their new program that allows users to exchange movies from the online program for a free rental, rather than mailing them in a-la-netflix. At this time, I was considering a switch to Netflix, solely based on the interface (BB queue management is horrible). However, with the advent of instantaneous rentals for simply stopping by the store on my way home, I decided to put my Blockbuster viewing into overdrive, or at least watch more than 3-4 movies per month.&lt;/p&gt;


	&lt;p&gt;Needless to say, this resulted in the demise of most of my Vongo viewing. I occasionally watched an old 80&amp;#8217;s movie a few times per week, but suffice it to say that my library grew quickly to around 60GB and I was downloading more than I was watching. I thought about canceling, but I did manage to watch 7 or so Vongo movies a month, so it was worth the monthly fee (I&amp;#8217;m a big movie watcher).  Plus, I could occasionally get a movie from Vongo that was also in my Blockbuster Queue, helping to keep my queue under control.&lt;/p&gt;


	&lt;p&gt;Fast forward to a few weeks ago, when my old Wachovia Check Card finally died on me and I activated a new card with a different number. Obviously, this wreaked havoc with all my online services, but at most I got an email for each online service, with instructions on how to update my credit card information, and a timeline for when that needed to be done by. I was prompt to update my information as soon as I got those emails.&lt;/p&gt;


	&lt;p&gt;Vongo was not so nice. Instead of sending a warning email, or even alerting me from within the Vongo software, they simply canceled my account. And by Cancel, I don&amp;#8217;t mean &amp;#8220;place into an unusable state until the information is updated&amp;#8221;, I mean they automatically deleted my whole library, movies I intended to watch, basically forcing me to quit or start over.&lt;/p&gt;


	&lt;p&gt;Bad customer service. I was already on the borderline of whether to keep the account, and with an easy out and 60GB restored on my computer, do you think I&amp;#8217;d go through the effort of signing back up? The answer is &amp;#8220;heck no&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;So, the lessons I learned:&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;When creating a model for an online subscription-based business, one of the first things that should be planned is the exit strategy for users, even before an entrance strategy. If you want to allow them to keep data, plan what format and even the interface they will be able to access that from. Most importantly, make these terms clear to the user when he signs up.&lt;/li&gt;
		&lt;li&gt;Communicate with the user. Make absolutely sure that if you cannot bill them, that they actually wish to end their service. Make it easy for them to end, but if they simply need an extra week to get things together, provide access to a grace period during which they can do so. I feel if you allow people extra time, the little money you lose in fees is easily recuperated by the way they&amp;#8217;ll rave about your customer service to their friends and on their blogs. Or, it will at least be the opposite of this blog entry.&lt;/li&gt;
		&lt;li&gt;Last, but not least, a very easy way to cancel services you don&amp;#8217;t want anymore (and that give you a hard time), such as &lt;span class="caps"&gt;AOL&lt;/span&gt; or Netzero or others, is to change your debit or credit card number. For identity theft purposes, most creditors or banks should allow you to do this with little trouble. I wound up canceling two other services (Netzero was giving me trouble cancelling, but that&amp;#8217;s another entry) at the same time just by not providing new billing information.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;So let that be a lesson to the web 2.0 crowd that does so well on micropayments. I&amp;#8217;ll be there soon enough, so this was an equaly good lesson for me. Good customer retention is not always done by providing an awesome incentive to stay, but rather good communication, and an easy exit and return strategy (listen up, cellular providers!)&lt;/p&gt;</description>
      <pubDate>Wed, 27 Dec 2006 15:16:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:fde8505c-ac0f-4006-9159-5afb324bd42a</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/12/27/how-not-to-retain-a-customer</link>
      <category>Random</category>
      <category>vongo</category>
      <category>web</category>
      <category>2.0</category>
      <category>communication</category>
    </item>
    <item>
      <title>True Phases of the Software Development Lifecycle</title>
      <description>&lt;p&gt;I&amp;#8217;ve not been a developer for a long time, but I&amp;#8217;ve been around just long enough already to learn the lifecycle of a &amp;#8220;real world&amp;#8221; project. Note that this is for single-developer projects. Team projects give you a lot more latitude and ability to make these things work more seamlessly. Sometimes.&lt;/p&gt;


	&lt;h2&gt;Phase 1: Planning&lt;/h2&gt;


	&lt;p&gt;Most projects at least, thankfully, begin with planning. It&amp;#8217;s almost never enough, and rarely covers all the special cases you&amp;#8217;ll later be coding late nights to fix. But there is still almost always a phase where you at least are given a set of features, maybe a basic UI desire, and a pat on the back. As the developer, you get hard to work designing the perfect database structure, thinking of clever ways to organize code, until a day or two later in&amp;#8230;&lt;/p&gt;


	&lt;h2&gt;Phase 2: &amp;#8220;Git &amp;#8216;r Done!&amp;#8221;&lt;/h2&gt;


	&lt;p&gt;This is the point where you have things about half organized in your brain, and then get told &amp;#8220;We needed that yesterday!&amp;#8221; And, the corollary, &amp;#8220;Get it done, it doesn&amp;#8217;t have to be perfect!&amp;#8221; And it&amp;#8217;s not perfect, not the shining gem you hoped to produce, but it works. It works for every case they gave you, and when you&amp;#8217;re finished you sit back, hoping that&amp;#8217;s all they want. But it never is&amp;#8230;&lt;/p&gt;


	&lt;h2&gt;Phase 3: &amp;#8220;But see, there&amp;#8217;s one exception&amp;#8230;&amp;#8221;&lt;/h2&gt;


	&lt;p&gt;In this phase, you realize what they told you in phase 1, and which you used to shortcut code in phase 2, did not line up with reality. For example, they say &amp;#8220;All employees come in at 8am and leave at 5am.&amp;#8221; So when you&amp;#8217;re rushing for release, you make that an assumption. Phase 3 is where they come in and say &amp;#8220;Well, we have this one employee, Bill, who comes in at 10am and leaves at 3pm&amp;#8221;. For a minute, you think you might can get away with coding that one special case in. Until you realize that later they&amp;#8217;ll have yet another exception to cover. So you rewrite most of the business logic and make a few database schema changes. And in the end, you wind up with better code anyway, and start to feel good about what you&amp;#8217;ve produced. Until the inevitable&amp;#8230;&lt;/p&gt;


	&lt;h2&gt;Phase 4: &amp;#8220;I&amp;#8217;m a creep, I&amp;#8217;m a weirdo. What the hell am I doing here?&amp;#8221;&lt;/h2&gt;


	&lt;p&gt;Of course, we&amp;#8217;re talking about the inevitable and dreaded Feature Creep. For months, maybe years, you add feature after requested feature to that nice little software package. Maybe it began as a simple timesheet application, but now it&amp;#8217;s a fully functional document repository with full search and indexing capabilities. We&amp;#8217;ve all been there. Thankfully, the end seems to be in sight when&amp;#8230;&lt;/p&gt;


	&lt;h2&gt;Phase 5: &amp;#8220;We had to let Bill go&amp;#8230;&amp;#8221;&lt;/h2&gt;


	&lt;p&gt;They make a policy change that renders that previous Phase 3 exception void. Maybe all employees are forced to get there at 8am. Maybe they fire the guy who keeps coming in late. Either way, they no longer need your clever system for time configuration, as it adds a slight bit of complexity they get no benefit from. Only now, the whole system hinges ever so slightly on that one bit of business logic, you know that if you even touch that code the whole mountain will topple. So you finally stand up for yourself and say &amp;#8220;no!&amp;#8221; And then you quickly come back with &amp;#8220;Well, it would be possible if we did a&amp;#8230;&amp;#8221;&lt;/p&gt;


	&lt;h2&gt;Phase 6: Rewrite.&lt;/h2&gt;


	&lt;p&gt;Inevitably, your code will reach a point where you just need to rewrite it from the ground up. If you had known they wanted a document repository from the beginning, you would have designed it in. This phase gives you the chance to really plan things out knowing everything that should be included. So you work and work and release a final version that does everything right, only to find out that&amp;#8230;&lt;/p&gt;


	&lt;p&gt;They hired Bill&amp;#8217;s son, who works Bill&amp;#8217;s old schedule.&lt;/p&gt;


	&lt;p&gt;And the cycle thus repeats itself.
&lt;div style="float:right"&gt;&lt;a href="http://digg.com/programming/True_Phases_of_Software_Development"&gt;&lt;img src="http://digg.com/img/badges/180x35-digg-button.gif" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 30 Nov 2006 15:29:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:74afc892-5e27-4d8a-b605-6219f0dfcd1d</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/11/30/true-phases-of-the-software-development-lifecycle</link>
      <category>Programming</category>
      <category>development</category>
      <category>software</category>
      <category>lifecycle</category>
      <category>boredom</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/1830</trackback:ping>
    </item>
    <item>
      <title>reviewme.com, smart idea</title>
      <description>&lt;p&gt;This is a sponsored post for Reviewme.com:&lt;/p&gt;


	&lt;p&gt;Somewhere in the midst of today&amp;#8217;s feeds I ran across the site &lt;a href="http://reviewme.com"&gt;reviewme.com&lt;/a&gt;. After seeing what it was about, I was surprised to see that googling for a minute gave no other similar services out there. In an age where the top bloggers (such as the TechCrunch and Engadget tier) get free PSPs to test out and review, I was shocked to see that nobody else had already capitalized on this yet! Correct me if you&amp;#8217;re able to find another place. So props to these folks.&lt;/p&gt;


	&lt;p&gt;(Edit: I have since found &lt;a href="http://payperpost.com"&gt;a similar service&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;The basic premise is simple&amp;#8212;companies want to advertise, bloggers want to defray server costs. I once read that a corporation spends on average $100 for each customer they get, in terms of marketing and advertising costs. So, with a service like reviewme, assuming a review gets only one customer (and not several), businesses essentially save money by using this instead of traditional methods. Plus, it tends to promote an image of being culturally relevant; the product or service gets into the blogosphere, and we all know that never hurts.&lt;/p&gt;


	&lt;p&gt;For the blogger, it makes sense, because it might eventually get rid of all ads. As much as I like Google&amp;#8217;s Adsense, I don&amp;#8217;t yet get enough to defray the cost of renting a server. Granted, I&amp;#8217;m not a Michael Arrington, but still, one of these reviews per month gets me what Google does, with more whitespace around and slightly less of a load time.&lt;/p&gt;


	&lt;p&gt;For the reader, it makes sense, because you&amp;#8217;re alerted to a product or service you might otherwise had not known about. Reviews are impartial and biased only to the feelings of the blogger, so if you trust your rss subscriptions, you can trust the reviews. &lt;a href="http://blog.outer-court.com/archive/2006-11-10-n71.html"&gt;Some people&lt;/a&gt; believe this system isn&amp;#8217;t as ethical as ads, but they do come with a disclaimer of being a sponsored post, so I don&amp;#8217;t see any major ethical faux-pas. I think if your readership dislikes them, the blogger should probably not go that route, but these days most readers understand the need for an advert placed somewhere, so this will probably catch on too. Bloggers can accept or refuse offers, so if they don&amp;#8217;t want to review Viagra, they don&amp;#8217;t have to. And at the least, it keeps new content up on the site. On a slow news day, why not put a nice review up?&lt;/p&gt;


	&lt;p&gt;The main thing I love about it is that for once, it allows the small-medium sized blogs to actually succeed. Where large blogs get plenty of revenue, they might have to post 2-3 times per month to make the same revenue they get from a strategically-placed google ad. A small blog can post one per month and equal that amount, and still be a good benefit to the company being reviewed. At least, I hope companies won&amp;#8217;t only go for the large blogs and ignore the untapped small to medium market.&lt;/p&gt;


	&lt;p&gt;So thus far, I give reviewme.com a good chance of succeeding. They basically seem to split costs halfway with the bloggers, so it&amp;#8217;s much more fair than most advertising systems. I only hope, as with all systems, that it doesn&amp;#8217;t get abused somehow. For now, it definitely seems to make a blogger&amp;#8217;s life easier.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Nov 2006 16:54:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:af7e0811-22b0-454b-901d-d43365c4bf46</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/11/13/reviewme-com-smart-idea</link>
      <category>reviews</category>
      <category>blogging</category>
      <category>advertising</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/513</trackback:ping>
    </item>
    <item>
      <title>Next Big Idea</title>
      <description>&lt;p&gt;Ok, I&amp;#8217;ve always had this theory about music, particularly the structure behind music as a whole. Obviously, most music genres are simply a fork of an older genre. For example, we know country music is the uncle of rap music. Blues led to country and R&amp;#38;B, R&amp;#38;B leading to rap.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ve always thought this could be easily represented by using &lt;a href="http://en.wikipedia.org/wiki/Graph_theory"&gt;Graph Theory&lt;/a&gt;. Each genre gets its own vertex, with each edge representing how close or distant each genre is to another.&lt;/p&gt;


	&lt;p&gt;My next idea is to actually plot the whole history of music using graph theory.&lt;/p&gt;


	&lt;p&gt;My problem is I don&amp;#8217;t know a heck of a lot about graph theory outside the 4-color theory, traveling salesman, and the seven bridges problem. However, I think I can at least get something to capture data for the graph.&lt;/p&gt;


	&lt;p&gt;Obviously, music is subjective to the listener. So I think I will devise a certain way to gather the data via social networking. Obviously, that&amp;#8217;s the best way to get data these days.&lt;/p&gt;


	&lt;p&gt;So I&amp;#8217;m proposing a game, similar to the old Hot or Not (or maybe that&amp;#8217;s still around). A user gets two songs at random, and must rate 1-10 how much they correlate with each other. I think from that I should easily be able to calculate edge distance, or how well genres in general correlate to each other.&lt;/p&gt;


	&lt;p&gt;If such a graph were available, and then colored by historical era, it would be easy to spot musical trends, almost to a point where one could predict which genres will be reinvented a decade from now, and which will be abandoned temporarily.&lt;/p&gt;


	&lt;p&gt;My only problem is finding a source for such songs, and having them be accurately mapped to a correct genre.&lt;/p&gt;


	&lt;p&gt;The other problem is that the set of genres allowed in current &lt;span class="caps"&gt;ID3&lt;/span&gt; tags (and picked up by iTunes, &lt;span class="caps"&gt;CDDB&lt;/span&gt;, etc.) is very limited for this purpose. And I want sub-sub genres involved in this, like acid jazz or reggaeton or otherwise. I&amp;#8217;m thinking I can devise a way to collect that data from the social network too.&lt;/p&gt;


	&lt;p&gt;The benefits of this are awesome, even though it&amp;#8217;s going to take a bit of work. Imagine an algorithm that can accurately predict what a user will like given a single correct statement up front, with given probabilities. For example, the user can say &amp;#8220;Coldplay is my favorite band and I enjoy Baroque music&amp;#8221;, and an algorithm should easily traverse the graph to make the claim &amp;#8220;there is a 72.3% chance you will also enjoy Weather Report, a Jazz Fusion artist. Click here to listen.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Such a mathematical determination would easily trump algorithms used by Last.FM and other networks to choose favorite songs based on what everybody listens to. Those are good at what they do, but it&amp;#8217;s not very good about predicting a new emerging artist&amp;#8217;s fan base.&lt;/p&gt;


	&lt;p&gt;At the least, it will be cool to have a graph detailing the relationships between music genres. We already know Acid Jazz is a mixture between dance/electronica and jazz, but not to what degree they are related.&lt;/p&gt;


	&lt;p&gt;Sounds like a good CS senior project, if I can delay it that long.&lt;/p&gt;</description>
      <pubDate>Tue, 07 Nov 2006 00:36:06 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4f391388-ccbf-4b84-b120-31277ead82f8</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/11/07/next-big-idea</link>
      <category>Programming</category>
      <category>Thoughts</category>
      <category>Random</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/432</trackback:ping>
    </item>
    <item>
      <title>NaNoWriMo module for Netvibes</title>
      <description>&lt;p&gt;As some of my readership (a whopping 10-20 people that never comment) knows, November begins National Novel Writing Month, my favorite time of the year for failure.&lt;/p&gt;


	&lt;p&gt;Now, fellow &lt;a href="http://www.netvibes.com"&gt;Netvibes&lt;/a&gt; users can easily keep track of their dwindling word count! I&amp;#8217;ve thrown together a little module to make sure you stay on track. It&amp;#8217;s currently pretty bare-bones, but I hope to add some of &lt;a href="http://www.fivesided.com/nanowrimo/instructions.html"&gt;Danguyf&amp;#8217;s little widgets&lt;/a&gt; to the mix soon, as well as allow for colors for &amp;#8220;bad progress&amp;#8221; or &amp;#8220;good progress&amp;#8221;. Please use the comments section in this post to submit any bug reports or feature creep requests, as I don&amp;#8217;t feel it&amp;#8217;s a big enough tool to merit a whole Trac or something. :)&lt;/p&gt;


	&lt;p&gt;Anyway, if you use Netvibes, you know the drill:&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffrictionlessfloor.com%2Fnanowrimo.php&amp;#38;type=api"&gt;&lt;img src="http://www.netvibes.com/img/add2netvibes.gif" width="91" height="17" alt="Add to Netvibes"/&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 23 Oct 2006 15:57:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:fb8f95ef-5e62-403d-8024-78c254e20613</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/permalink?title=nanowrimo-module-for-netvibes&amp;month=10&amp;year=2006&amp;day=23</link>
      <category>netvibes</category>
      <category>nanowrimo</category>
      <category>development</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/417</trackback:ping>
    </item>
    <item>
      <title>No more Spam, hopefully</title>
      <description>&lt;p&gt;So recently this blog has become major spam fodder. I&amp;#8217;ve had little time to wade through the comments and trackbacks lately, and the old version of Typo required about 3 clicks to delete a single comment or trackback, with no optionfor bulk deleting. I&amp;#8217;ve already experimented with the latest Typo subversion trunk on my &lt;a href="http://blog.davidrossharris.com"&gt;other blog&lt;/a&gt;, so I knew it had a lot of better spam prevention and management features, including &lt;a href="http://akismet.com"&gt;Akismet&lt;/a&gt; support.&lt;/p&gt;


	&lt;p&gt;Only a simple &amp;#8220;svn up; rake db:migrate&amp;#8221; didn&amp;#8217;t quite do it this time. I visited the blog only to find a crazy batch of mysql errors, such as &amp;#8220;unknown column contents.body_html&amp;#8221; and others. Uhhh.&lt;/p&gt;


	&lt;p&gt;To save time, after freaking out a little I decided to check the fastcgi processes running under my account. I opened up top and found I had 5 still running! This is crazy to me, because normally those processes crash with a nice http 500 error every minute or two, so of course they stay intact when I need them to crash. Simply killing those processes made everything work again.&lt;/p&gt;


	&lt;p&gt;So bear with me as I remove all the spam up here, it may take a few days. I may also switch engines to Mephisto, which I fell in love with recently. And forgive me even more for the lack of content, but I&amp;#8217;m hoping things will allow me to resume work on Fictiverse and get that tutorial up and running.&lt;/p&gt;</description>
      <pubDate>Sat, 21 Oct 2006 16:48:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:7e54aa56-a128-4960-bce8-7ed09de8eb99</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/permalink?title=no-more-spam-hopefully&amp;month=10&amp;year=2006&amp;day=21</link>
      <category>comment</category>
      <category>spam</category>
      <category>upgrade</category>
      <category>typo</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/415</trackback:ping>
    </item>
    <item>
      <title>Top 10 Firefox Extensions</title>
      <description>&lt;p&gt;At some point, every Firefox-loving blogger has to put his top ten extensions out. I figure, while I&amp;#8217;m not really getting much programming done at nights, I&amp;#8217;ll write up the more simple ones like this one. So, to get down to it&amp;#8230;&lt;/p&gt;


	&lt;h2&gt;1. Web Developer&lt;/h2&gt;


	&lt;p&gt;This one has become priceless to me. As somone frequently involved in creating and designing website and web applications, I mess up sometimes. This toolbar has everything I need to make things ok again. I mean, everything. Not to mention that it&amp;#8217;s also good for removing stylesheets from awful myspace or geocities (if that&amp;#8217;s still around) pages, clearing cookies for certain domains, stopping image animations (for those sites where newbies use horrible animated gifs as avatars), hiding all images, resizing your browser window (for those sites that make it impossible to do so normally), and the magical &amp;#8220;View Generated Source&amp;#8221; option that allows you to view html source exactly as currently rendered, even counting the stuff Javascript does. Basically, professional developer or not, this tool-bar is a must have for the web-savvy.&lt;/p&gt;


	&lt;h2&gt;2. Greasemonkey&lt;/h2&gt;


	&lt;p&gt;Almost as important as seeing the internals of the sites you visit is being able to customize them on the fly. Greasemonkey enables users to submit javascript files that provide customization for many websites out there. I have several set up to give me advanced features on some browser games I play. You can either use scripts other people put into the &lt;a href="http://userscripts.org"&gt;userscripts.org&lt;/a&gt; repository (when it&amp;#8217;s actually working), or create your own.&lt;/p&gt;


	&lt;h2&gt;3. Flashblock&lt;/h2&gt;


	&lt;p&gt;I don&amp;#8217;t mind ads. You&amp;#8217;ll never see me promote Adblock, nor do I use it. I recognize sites need income to keep things going. What I do hate is intrusive ads, like those created in Flash. In fact, more than Flash ads, I hate everything made in Flash. I think Flash should have been assassinated back in 1999. I think Flash is the Britney Spears-Federline of the internet&amp;#8212;charming and beautiful when she first came out, but now with age her time is up and yet she still pokes her backwoods face in the public sphere. In fact, sites that use flash inappropriately (read: for the whole site) will never get my visit. So, for flash-hating fascists like me, Flashblock is the perfect FF extension! It simply blocks every flash out there from showing! Such simplicity brings such beauty to the web browsing experience. However, for those youtube fanatics, you can turn flash back on either piecemeal (for just the flash blocks you wish to see), or turn them on for an entire site. And it simply stays out of your way, silently protecting you from the evils of terrible design.&lt;/p&gt;


	&lt;h2&gt;4. IE Tab&lt;/h2&gt;


	&lt;p&gt;Unfortunately, we still live in a Microsoft dominated world. Not for long, my brothers! Viva la resistance! And, many designers still make their site compatible with Internet Explorer. Now, just a year ago, I still sung the praises of IE, would have joined it in jihad against the evils of open source browsing. Then, I tried using standard &lt;span class="caps"&gt;CSS&lt;/span&gt; to make a site look and feel good. By the end of the project, I had Firefox installed, IE blocked from ever using again, and vowed to buy a Mac, not even using MS Office (their one decent product) again. However, not everybody enjoys writing in standards, and thus we need IE tab to still allow us the beauty of Firefox without keeping us to enjoy helpful sites like &lt;span class="caps"&gt;MSN&lt;/span&gt;.com. How does it work? It simply allows you to click an icon on the status bar that will render the page using an embedded IE window. All the &amp;#8220;benefit&amp;#8221; of IE, using the much better interface of Firefox.&lt;/p&gt;


	&lt;h2&gt;5. Blueorganizer&lt;/h2&gt;


	&lt;p&gt;This one is a newbie to my list, but is quickly climbing the charts. Really, I don&amp;#8217;t even know how to describe what it does. You simply have to install and see for yourself. To put it basically, it functions as a linkdump for goods you see online, only it keeps semantical track of what things are, and allows you to operate on those bookmarks based on what they are. You simply have to check it out to see. You&amp;#8217;ll either love it or hate it.&lt;/p&gt;


	&lt;h2&gt;6. Fasterfox&lt;/h2&gt;


	&lt;p&gt;Claims to make Firefox faster. Does it? Who knows. It certainly seems a bit speedier. It can&amp;#8217;t hurt to try. I recommend the &amp;#8220;Optimized&amp;#8221; setting. Don&amp;#8217;t use Turbo, let&amp;#8217;s please keep inside of &lt;span class="caps"&gt;RFC&lt;/span&gt; specifications and not overload servers who are gracious enough to host data for us to enjoy.&lt;/p&gt;


	&lt;h2&gt;7. ImageZoom, ColorZilla, ShowIP&lt;/h2&gt;


	&lt;p&gt;I group these three because they each do something extremely specific, hardly enough to warrant a whole category, but yet they sit there and do their job silently but perfectly, making my web browsing just a little better. Image Zoom simply zooms images. Is that a girl picking her nose? Zoom right in and see! Colorzilla sits in the left corner of your status bar. Is there a color you think is &lt;span class="caps"&gt;UBER&lt;/span&gt; on somebody&amp;#8217;s site and you want to copy it? Colorzilla can tell you quickly what exact color that is. Perfect for emulating other people&amp;#8217;s sites! ShowIP simply shows the IP associated with the site being browsed, and allows you to run a quick Whois or other search on it. These three don&amp;#8217;t add a ton of functionality, but they&amp;#8217;re good to have there when you need them.&lt;/p&gt;


	&lt;h2&gt;8. ForecastFox (Enhanced)&lt;/h2&gt;


	&lt;p&gt;Are you obsessed with the weather? Did you just smell rain? Oh, you so just smelled rain! Before you make bets with your co-workers, install ForecastFox Enhanced! This tells you brief info on the weather in your status bar, so you can be alerted to every fahrenheit degree of change going on outside. The Enhanced version simply has a larger radar map you can view. Perfect for the weather-obsessed or those of you lucky to not be quarantined due to allergies.&lt;/p&gt;


	&lt;h2&gt;9. Adsense Notifier&lt;/h2&gt;


	&lt;p&gt;This little baby simply displays how much money you made from displaying Google Ads on your site(s) that day. This way, you don&amp;#8217;t have to actually log in to see that, yes, you made no money that day. Look for that hundred dollar check a whole decade from now.&lt;/p&gt;


	&lt;h2&gt;10. QuickProxy&lt;/h2&gt;


	&lt;p&gt;Some of us use proxies. Simply put, it allows us to see a site, after passing through another server. I use a proxy at work not because I&amp;#8217;m hiding anything, but because I can keep all my traffic in one place, and log it so that if I&amp;#8217;m at home I can easily figure out &amp;#8220;oh, what was that site I was shown the other day?&amp;#8221; without too much work. QuickProxy allows you to turn on and off your proxy with a single click, instead of going through Firefox&amp;#8217;s twenty thousand dialog boxes to perform the same action.&lt;/p&gt;


	&lt;p&gt;So, there it is, disappointing as it may seem. I&amp;#8217;m not one to install extensions that replace the functionality of a whole different program (I don&amp;#8217;t need an extension to post blog entries, I can do that from a separate, better utility). My extensions simply enhance a browsing session that&amp;#8217;s already happening. Most of them sit so far out of my way that I only notice them when I need them. Exactly how a good interface should be! If you have ones you think are more important than these, comment them. I&amp;#8217;m always looking for the next cool toy. Keep in mind I&amp;#8217;m not one to use stuff like &amp;#8220;Finance Manager for Firefox &amp;#8211; manage all your finances from this nifty sidebar!&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;Enjoy, and again, viva la resistance!&lt;/p&gt;</description>
      <pubDate>Wed, 20 Sep 2006 15:59:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:4ea10853-1106-45ea-a5d4-73484aead07e</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/09/20/top-10-firefox-extensions</link>
      <category>firefox</category>
      <category>extensions</category>
      <category>top</category>
      <category>ten</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/71</trackback:ping>
    </item>
    <item>
      <title>RightCart II and an apology</title>
      <description>&lt;p&gt;Ok, so first of all I&amp;#8217;m sorry I dropped the ball on the Fictiverse series. It was probably a bad idea to start those at the same time as my job was picking up &lt;span class="caps"&gt;AND I&lt;/span&gt; was working on my own Rails apps. Hopefully I can get back into those in the next month.&lt;/p&gt;


	&lt;p&gt;Currently, I&amp;#8217;m knee-deep in Rails junk, and realizing that the shiny goodness of Rails goes away when you get farther into application development. However, that&amp;#8217;s where the clever right-brained Ruby language picks up and leaves you able to program without getting burned out. However, having a 40-hr/week job using C# plus trying to develop in Rails at home gets a little tiring, and it&amp;#8217;s taking me a lot of effort to complete my first app.&lt;/p&gt;


	&lt;p&gt;However, much of my pain may be alleviated thanks to the guys at &lt;a href="http://www.rightcart.com"&gt;RightCart&lt;/a&gt;. I recently received an email asking for feedback on the cart. Now, as cool as the app was, I didn&amp;#8217;t have much use for it. I have no products to sell or ship, and even with the latest improvement to allow digital content purchasing (like ebooks or mp3s) I had little use. I don&amp;#8217;t sell things off my blogs, except if you want to buy my eternal love and gratitude, linked on the previous post. :)&lt;/p&gt;


	&lt;p&gt;But, while doing my own apps and some for a friend, I ran into a real problem&amp;#8230; how do I actually accept money for this? Now, I know the basics, having set up shopping cart systems for people using open source stuff like Comersus or such. I know about merchant accounts, etc., but my real problem is that I didn&amp;#8217;t want to spend time to find the perfect payment gateway that was easy to use but also allowed recurring payments (for monthly subscription models), etc.&lt;/p&gt;


	&lt;p&gt;How nice would it be just to drop in two lines of code, and have a cart that automatically handled your subscriptions? I&amp;#8217;ll tell you: it&amp;#8217;d be awesome. I was looking to use Google  Payment (because let&amp;#8217;s face it, if they wanted to buy me out I&amp;#8217;d flip it in a heartbeat, and they&amp;#8217;d have an easier time with it). In fact, I was set on making a whole Rails plugin just to handle this, so other people could have less pain. Programming a cart is not really fun, and I&amp;#8217;d rather be focusing my efforts on my application, not how I get the few bucks I gain from it.&lt;/p&gt;


	&lt;p&gt;So when RightCart requested feedback, I probably annoyed them with two incredibly-long emails. After all, subscriptions are just products I can set up in my right cart, and now they even allow recurring payments! However, there is no pingback to me when an order is made, thus I cannot update my database to allow the user a subscription. So I emailed them my suggestions, as newbie as they might seem, basically requesting that I provide a server address they can ping with an order number, such as http://application.net/orders/10200394. I then take that number, check the RightCart xml feed, and update the order as appropriate. And with the new ability to include &amp;#8220;special information&amp;#8221;, I can capture the &amp;#8220;add to cart&amp;#8221; click, record the user&amp;#8217;s information, create a hash in the DB, and then check the order information against those hashes. Basically, everything I need with one simple mod, and plus it allows for power users to ping their own website so they can use a custom order/inventory system.&lt;/p&gt;


	&lt;p&gt;Now, I&amp;#8217;m not saying it will always work for me. If an application grows to gargantuan sizes, I might consider writing a custom cart/checkout and get a real merchant account. But at 1% cost with RightCart, you can&amp;#8217;t beat that. In fact I don&amp;#8217;t know how they do it for that cheap. It&amp;#8217;s absolutely perfect for small starter sites. How many out there have spent about half the total development time handling how to get money? How much time would RightCart save us by handling that for us? Plus, it abstracts that part from my application, and frees me from the worry I&amp;#8217;ve implemented something that could potentially screw with my users? Or worse, with my income?&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;d like to thank Ryan Garver, &lt;span class="caps"&gt;CTO&lt;/span&gt; of &lt;a href="http://www.rightcart.com"&gt;RightCart&lt;/a&gt; for taking the time to listen and respond to my needs, and I fully support the company, and can&amp;#8217;t wait to use them for all my applications! They have an incredibly responsive team, and I wish them the best. I hope the mods I suggested can propel them even further. After all, they are about to make my life incredibly easier, so why would I not promote them to my best? And for you developers out there, check the app out, it will save you much time and heartache. :)&lt;/p&gt;</description>
      <pubDate>Sun, 30 Jul 2006 15:44:40 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:ab212a50-ef07-46e4-af4c-d13d6735d759</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/07/30/rightcart-ii-and-an-apology</link>
      <category>Programming</category>
      <category>rightcart</category>
      <category>rails</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/34</trackback:ping>
    </item>
    <item>
      <title>RightCart</title>
      <description>&lt;p&gt;Today, a break from the Fictiverse series so I can blog about possibly my favorite Rails application to date. You may notice the addition on my sidebar of a little goodie called &lt;a href="http://rightcart.com"&gt;RightCart&lt;/a&gt;. This little gadget is a whole hosted shopping cart made in Ruby on Rails.&lt;/p&gt;


	&lt;p&gt;Let me preface this by saying eCommerce is the bane of my existence. I have attempted the creation of several sites for &amp;#8220;individual&amp;#8221; sellers who had little computer experience. These were not businesses who had a certain inventory and kept great control over the entire selling process, they were just people who wanted to sell something they made or bought wholesale. Trying to find a solution for them was impossible, at best. I wound up using Comersus or similar open source carts, hardly the best solution.&lt;/p&gt;


	&lt;p&gt;Then came &lt;a href="http://shopify.com"&gt;Shopify&lt;/a&gt;, possibly the easiest to use commerce software of all time, ever, also built in Ruby on Rails. And it was loved by all. Finally, a storefront that was not difficult and even dummies could operate it. Yet, it was still overkill for the person wanting to sell only ten items or so, but by far the easiest to use. Judging from the technological progression of shopping carts, I figured it&amp;#8217;d be a decade before anything truly perfect came out.&lt;/p&gt;


	&lt;p&gt;Then came &lt;a href="http://rightcart.com"&gt;RightCart&lt;/a&gt;. I&amp;#8217;m not about to claim it&amp;#8217;s perfect at all, but it&amp;#8217;s leaps and bounds forward for the personal merchant who does not want to bother with merchant accounts or integrating Paypal or any of that nonsense, but wants to make some quick cash for some merchandise. Perfect for the people I&amp;#8217;ve made individual stores for in the past. Perfect for even the small business! Probably not perfect for a Wal-Mart or Target. :)&lt;/p&gt;


	&lt;p&gt;The concept is simple. You create an account at &lt;a href="http://rightcart.com"&gt;RightCart&lt;/a&gt; using just an email. It then gives you a 3-liner code to put on your website. The next step shows you a summary page, where you can create items to sell, or find existing items to sell from their catalog of existing items. Visitors to your site use the cart as if it were integrated into your own page, though behind the scenes some very simple but powerful and secure &lt;span class="caps"&gt;AJAX&lt;/span&gt; is being used to add items to the cart. Checkout happens on the cart itself, so the user never needs to leave your site.&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;s actually brilliant. It&amp;#8217;s a storefront hosted elsewhere, but you do not have to create dirty templates to match your site, the user doesn&amp;#8217;t know he&amp;#8217;s left your page, and you don&amp;#8217;t have to add any code but the three lines! They simply take a 1% cut off any money you make, and they give you 1% of any items you sell that are not your own (i.e. from the catalog). &lt;span class="caps"&gt;A 1&lt;/span&gt;% cut is amazing for something hosted elsewhere, even better than having your own merchant account with Visa. Even better, your item can gain exposure from other places outside your site if people wish to include it.&lt;/p&gt;


	&lt;p&gt;While it&amp;#8217;s great, it&amp;#8217;s not perfect. It is oh so close, though. The amount of screen real estate is horrible. They include two paragraphs of text to explain the cart, which results in almost an entire google skyscraper ad being taken. In fact, it pushes my own ad bar even farther down because the cart needs to be up above where people can interact easily, which will probably cut my ad revenue quite a bit. They could have easily opted for a small &amp;#8221;?&amp;#8221; link at the bottom (perhaps after the &amp;#8220;Shopping 2.0&amp;#8221; text) that a user could click on and it would scroll the current text down for them to see. This would result in a much improved space footprint and still allow them some advertising to get people involved in their product. Don&amp;#8217;t get me wrong, I fully support their need to initially get the product attention, but I&amp;#8217;m afraid the ton of text will turn a lot of designers off the product, because it really does detract from the whole site (everything you add takes something away from the site as a whole).&lt;/p&gt;


	&lt;p&gt;Speaking for the text, whatever font is being used bleeds like crazy at least on my monitor. It appears like an old &lt;span class="caps"&gt;JPG&lt;/span&gt; that has been through several enlargements of smaller text. I really wish they would use a cleaner small font for that too, if they aren&amp;#8217;t going to hide the text.&lt;/p&gt;


	&lt;p&gt;In the empty state, the cart is much too large. It says both &amp;#8220;this cart is empty&amp;#8221; and has a big picture of a Zero for items. One needs to go for an empty cart. I&amp;#8217;d also get rid of the &amp;#8220;title bar&amp;#8221; at the top saying &amp;#8220;RightCart Store&amp;#8221;. My users are not going to know what that means. In fact, the word RightCart appears no less than 7 times on a single empty cart! That&amp;#8217;s a little over the top. I would opt for a much plainer cart (no title bar, no text at the bottom), with a simple footer bar with a &amp;#8220;powered by (RightCart logo)&amp;#8221;, with the little &amp;#8221;?&amp;#8221; link that expands the cart to display the help text. This would create a slick cart with a much better branding scheme than the current layout.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ve also encountered a few Internal Server 500 errors, and a few Rails errors due to a nil object. I&amp;#8217;d be a hypocrite if I complained about those, however, because my apps have 500s and nil errors popping up everywhere usually. :) However, the nil errors can be solved by checking for it and handling, and the 500 errors can normally be solved with a nice stable hosting solution, but both are unfortunately a downside of Rails still. Can&amp;#8217;t fault them too much for those.&lt;/p&gt;


	&lt;p&gt;However, those are all nitpicks from a design &lt;span class="caps"&gt;POV&lt;/span&gt;. And it&amp;#8217;s almost a shame, because the control panel design is so brilliant. Adding an item makes you think it shouldn&amp;#8217;t be that easy. The fact it keeps your cart over multiple webpages is awesome. The fact it&amp;#8217;s so easy that a web novice could use it is awesome. As someone who has bore the brunt of many novices trying to get an online store up and running, I do appreciate this product.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m not sure yet how I will use it, but if you wish to purchase my eternal love and admiration (and see how this baby works), you may click here:&lt;/p&gt;


	&lt;p&gt;... well, actually I cannot get the &amp;#8220;item code&amp;#8221; link to work, so I can&amp;#8217;t offer you my eternal love and appreciation yet. Check back later. I guess there&amp;#8217;s another bad error. :)&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;EDIT 06&lt;/span&gt;/06/06: I emailed the RightCart support team, and they are great about responding quickly too! They quickly fixed the problem with the code generation (I love the speed RoR allows), and explained I only saw the Rails error page because my IP was in the same block as one of their devs. Ha, small world. :) Anyway, for those who wish to purchase my eternal love and devotion &lt;span class="caps"&gt;AND&lt;/span&gt; test out RightCart simultaneously, &lt;a href='http://rightcart.com/cart/add/378?rightcart_pid=606#anch' target='rightcart'&gt;&lt;img src='http://rightcart.com/images/add_to_rightcart.gif' alt='' width='139' height='24' border='0' /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 05 Jun 2006 10:30:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:35f5441d-8d33-48a2-8c2c-e11b8221dbd3</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/06/05/rightcart</link>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/31</trackback:ping>
    </item>
    <item>
      <title>Fictiverse: Part II - Defining the Application</title>
      <description>&lt;p&gt;Sorry this has taken so long, I&amp;#8217;ve been on vacation. I&amp;#8217;m hoping that in the future, I&amp;#8217;ll be able to update at least every few days. Anyway, last time we setup everything to get it ready for our coding, but I made the mistake of setting up my database before writing the tutorial, and thus I received several emails claiming errors and the Rails page not showing up. Again, browse the &lt;a href="http://wiki.rubyonrails.org/rails"&gt;Rails Wiki&lt;/a&gt; to see how to do this, or wait for the next tutorial. This tutorial is less of a teaching and more of an explanation of what Fictiverse is and what our constraints will be.&lt;/p&gt;


	&lt;h3&gt;Summary&lt;/h3&gt;


	&lt;p&gt;At the core, Fictiverse (abbreviated as FV from here on) is intended to be the next trend of community-based or collaborative fiction. It has elements of both &lt;a href="http://www.argn.com"&gt;Alternate Reality Gaming&lt;/a&gt; and &lt;a href="http://www.fanfiction.net"&gt;Fan Fiction&lt;/a&gt;. The premise is simple&amp;#8212;we want to create an entire separate internet that represents a fictional world. Picture a Venn Diagram of the internet, a large circle. Now superimpose a smaller circle that barely overlaps it; this is the Fictiverse world. The tiny overlap represents the site we are creating, the site that connects the real world to our fictional world.&lt;/p&gt;


	&lt;p&gt;The actions a user can take are limited only by imagination and the will of the community at large. Users basically create websites, either blogs or otherwise, that represent their persona in FV. If they wish to be the next media mogul, perhaps they create Fictiverse News Network, &amp;#8220;hire&amp;#8221; reporters, and create a &lt;span class="caps"&gt;CNN&lt;/span&gt; lookalike. If they wish to be a FV politician, perhaps they begin campaigning, and perhaps someone else becomes the head of an election committee. Perhaps someone else wishes to blog about their experiences as a space pilot in some random part of the galaxy. For those that cannot afford a domain name and hosting, perhaps someone would be so nice as to create a community blogging system for them.&lt;/p&gt;


	&lt;p&gt;Sites are either accepted or rejected by the Fictiverse community as a whole. While writing fiction is one half of a user&amp;#8217;s responsibility, the other half is voting on which sites should be part of FV and which sites should not. This will be accomplished via a dirty imitation of &lt;a href="http://www.digg.com"&gt;Digg&lt;/a&gt;, which will be the majority of the project we are creating now. A user submits his &lt;span class="caps"&gt;URL&lt;/span&gt; and persona to the site we create, and users either give it a thumbs up or down. The most voted make it to a &amp;#8220;front page&amp;#8221; where the main FV sites will be. The least voted are moved to the back where they get lost or become such a negative score that they may be moderated off the site.&lt;/p&gt;


	&lt;p&gt;For example, a user wants to just &amp;#8220;become&amp;#8221; the president of FV, so he creates an official president site. He submits it to the site. Users do not like someone circumventing normal rise to power, so they vote him negative. Eventually, he reaches the bottom, nobody even sees his site, and if it gets flagged for moderation enough, it may even be removed from the database. The site can still exist on the web, but it&amp;#8217;s no longer linked to FV through our hub and therefore not a part.&lt;/p&gt;


	&lt;p&gt;So, the rules are quite simple. Write what you may, and let the community decide what belongs or should not. The only rule set in stone is that all fiction should be able to have a PG-13 rating such that we can allow younger people to also participate. Thus, Fictiverse is fiction that evolves over time through decisions made by the community as a whole. It&amp;#8217;s like a multi-dimensional novel, as you can read of the experiences of many people in the same fictional world.&lt;/p&gt;


	&lt;h3&gt;Constraints&lt;/h3&gt;


	&lt;p&gt;So, we have a good idea of what Fictiverse will look like. Now, we will discuss what it should not look like.&lt;/p&gt;


	&lt;p&gt;The main benefit of our job here is that we are creating a system in which the &lt;strong&gt;community&lt;/strong&gt; can work on the tasks like community blogging, news aggregators, etc. This keeps our job very small and manageable. I&amp;#8217;m a huge proponent of Agility in development, and keeping it small is the best way to scale later if we need to. The beauty of only handling users, their links, voting, and moderation is that the system is not complex and probably will never need to scale past one server. In fact, I&amp;#8217;m starting it out on shared hosting, and don&amp;#8217;t expect it to run me out for awhile.&lt;/p&gt;


	&lt;p&gt;Initially, we will only deal with those tasks: users, links, votes, and moderation. However, we will allow for two other things in a future iteration&amp;#8212;a &amp;#8220;friends&amp;#8221; system, and a forum system. These forums would be used to discuss issues about FV but not inside FV, like an &lt;acronym title="Out of Character"&gt;OOC&lt;/acronym&gt; channel. Since we want all FV member sites to be in character, we might need to provide the &lt;span class="caps"&gt;OOC&lt;/span&gt; forum to make things work behind the scenes. This is ok, and I would probably integrate &lt;a href="http://www.getvanilla.com"&gt;Vanilla&lt;/a&gt; when that time comes, instead of creating a custom system. So these are our constraints as far as where we are letting the software go. No more, unless the system really requires something new to function correctly.&lt;/p&gt;


	&lt;p&gt;We do have two major things to consider in our design. The first is that FV member sites cannot bleed into the &amp;#8220;real world&amp;#8221; internet. We want the only entrance to the Fictiverse world to be through this site, or by explicitly typed in URLs. Now, this is very difficult. After all, we&amp;#8217;re using domains that are in the &amp;#8220;real world&amp;#8221; root servers, and probably have &amp;#8220;real world&amp;#8221; nameservers. And I don&amp;#8217;t plan on recreating the internet with new root servers. :) But, this is fine. What I&amp;#8217;m mainly concerned with is making sure nobody links to it from outside, or puts their site into Google, or anything like that. We don&amp;#8217;t want google indexing Fictiverse and some random googler thinking that someone actually cured cancer or something like that. And, email becomes difficult because that is in the real world. The second constraint is the moderation system, making it easy and rare.&lt;/p&gt;


	&lt;p&gt;The first problem cannot be cleanly solved. We will have to provide some guidelines for this. Users may not explicitly enter their site into a search engine, they may not link to it from elsewhere, they must have a disclaimer on the site linking to the FV hub and claiming it to be fiction, and they must set the robots.txt file on their server to disallow any crawler. This will not solve the entire problem, but it will alleviate it to some extent. If someone wishes to link someone to their site, they can use a hyperlink forwarder from within our site, which when clicked on would first stop the person at our site, and after explaining the concept would forward them to the person&amp;#8217;s fiction.&lt;/p&gt;


	&lt;p&gt;Also I should note that since I&amp;#8217;m not paying for these sites, and most people are broke, if they wish to place textual Google Ads, they may. Because it is discreet and well established, we will only allow Google ads on member sites, and they must be placed tastefully. If someone creates a site with an obvious intent to make money without providing decent content for the community, he will probably be voted to the back anyway.&lt;/p&gt;


	&lt;p&gt;As far as moderation, this becomes easy with our system. We simply allow users to &amp;#8220;flag&amp;#8221; a post for review, similar to Craigslist but not automatic. If enough flags are set, it will enter probation where it will be reviewed by a moderator. A site should be moderated for only a few reasons: 1. Violating the PG-13 rule, 2. An obvious intent to connect their site to the real world, or 3. Violates the common will of the community (someone claiming to be president that should not be). Obviously anything illegal in the real world applies here too. The goal is that users decide what FV will be, and moderators only apply in extreme cases.&lt;/p&gt;


	&lt;h3&gt;Future Evolution&lt;/h3&gt;


	&lt;p&gt;I imagine at some point, the possibility to have two or more Factions represented in FV could happen. Just as Republicans and Democrats mainly differ on about 2-3 core issues, the users of FV may also see it going in several different directions and wind up choosing a side. At some point, we may need some way to split apart like an amoeba, so we need some way to detect when this will occur and then a path for the actual &lt;a href="http://en.wikipedia.org/wiki/Mitosis"&gt;mitosis&lt;/a&gt; process. Detection may eventually be accomplished by creating a crawler to check the sites to see who in FV is linking to whom, and create a &lt;a href="http://en.wikipedia.org/wiki/Graph_%28data_structure%29"&gt;graph&lt;/a&gt; of what FV looks like with hyperlinks as the edges. If it results in two large masses then it&amp;#8217;s time to split it apart, probably through a forum system and asking the community how to handle it.&lt;/p&gt;


	&lt;p&gt;However, this is a function that does not at all need to be created at the onset, as in a utopian fictiverse, everyone can function together as a happy group of people. But we are human, so it&amp;#8217;s good to have a plan if we start hitting a lot of sites rated at 50% (equal thumbs up and down, indicating division). In general, for a long time, things should equalize well though and this is a problem we can solve later.&lt;/p&gt;


	&lt;h3&gt;Community&lt;/h3&gt;


	&lt;p&gt;Since this is a community project from creation to use, I welcome the opinions of anyone reading this through the process. If you have suggestions, complaints, or want to see something else, I will consider everything. If you want to go ahead and think up a persona to participate, I hope to be finished with this in the next several months, so start thinking! I want Fictiverse to be fun and friendly, from development to production, so everyone has a say what it should look like.&lt;/p&gt;


	&lt;p&gt;Also, know that I build applications around &lt;strong&gt;people&lt;/strong&gt; constraints more than a written paper on what the application should and should not look like. I imagine how people would react to things, and make decisions accordingly. For example, I chose Ruby on Rails not because it&amp;#8217;s the latest trend but because it will let me quickly get something running and update it easily as the site develops. I will use &lt;span class="caps"&gt;AJAX&lt;/span&gt; not because it is flashy, but I will add it where appropriate to enhance a user&amp;#8217;s experience. And I use mostly &lt;a href="http://agilemanifesto.org"&gt;Agile methods&lt;/a&gt; not to be like the &lt;a href="http://www.loudthinking.com"&gt;cool kids&lt;/a&gt;, but rather to let the whole process from start to finish be about the end user, because without them there would be little need for an application.&lt;/p&gt;


	&lt;p&gt;Next tutorial will cover creation of the database and model, so that should be fun. Please give me comments or suggestions soon so I can incorporate them into the schema early on.&lt;/p&gt;


	&lt;p style="text-align:right;"&gt;&lt;a href="http://digg.com/programming/Fictiverse_Part_II_(Ruby_on_Rails_Tutorial)"&gt;
&lt;span style="background:#ccc;"&gt;Digg this!&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 02 Jun 2006 10:14:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:abc33d58-072a-459a-a525-bb1d54bcab7c</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/06/02/fictiverse-part-ii-defining-the-application</link>
      <category>fictiverse</category>
      <category>rails</category>
      <category>tutorial</category>
      <category>ruby</category>
      <category>on</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/30</trackback:ping>
    </item>
    <item>
      <title>Fictiverse: Part I - Setup</title>
      <description>&lt;p&gt;(Quick note: If you were looking for a post entitled &amp;#8220;Solving the Password Problem&amp;#8221;, it accidentally got deleted when I tried to use a new blog editor. Performancing is great, but be careful.)&lt;/p&gt;


	&lt;p&gt;Ok, so this will be the first part in many on the journey of a rails app called Fictiverse. For this post, I&amp;#8217;m not going to detail what the app is going to be yet, but I will explain some initial setup things I&amp;#8217;ve learned. These are all things that can (and should) be done before you even think about application design. I will be creating Fictiverse on a shared host using linux, so you&amp;#8217;ll have to adapt this for your own purposes. Be forewarned, I&amp;#8217;m going to be very detailed on each point. I believe there are a lot of resources out there, but few have managed to detail every part of things; I&amp;#8217;m going to attempt to explain everything I can in this process. If you&amp;#8217;re comfortable with certain parts, skip them please! I imagine most of my audience can safely skip the first section.&lt;/p&gt;


	&lt;h3&gt;1. Getting a domain and setting it up&lt;/h3&gt;


	&lt;p&gt;I&amp;#8217;m going to assume that you already have a domain and web hosting. If you&amp;#8217;re looking for an excellent host that allows Rails and Subversion (for purposes of this series), I highly recommend the host for this domain, &lt;a href="http://www.asmallorange.com/services/hosting/?refer=frictionlessfloor.com"&gt;A Small Orange&lt;/a&gt; for their awesome support and great price. I host about 10 domains on the $5/month package and have not even used 20% of the space or bandwidth yet. Definitely the only host I&amp;#8217;ve had no major problems with yet. Once your domain is purchased and you have a hosting plan, be sure to add your domain to that plan (follow the instructions of your host, or ask them how). Now, you&amp;#8217;re pretty much set for this portion.&lt;/p&gt;


	&lt;h3&gt;2. Setting up your Subversion repository&lt;/h3&gt;


	&lt;p&gt;For those that have never used a source or revision control system, you&amp;#8217;re missing out! I can&amp;#8217;t tell you how many times I&amp;#8217;ve screwed something up and had to revert to older code to see where it went wrong. Source control basically means that after you make changes to your code, you commit the new code to a server where it keeps track of the evolution of your code over time. If something ever screws up, this is like a backup system for oh-so-important code. Luckily with Rails we&amp;#8217;re not going to have to write a lot of code, but this will still be important. Also, this allows you to easily work on the same code from two locations, and have both be a local copy. Our &amp;#8220;production&amp;#8221; copy will simply be checked out from the repository from time to time.&lt;/p&gt;


To set up your own subversion repository, issue the following commands. In my server&amp;#8217;s home directory (~), I have two subfolders I use for my rails work; one to hold subversion repositories and one to hold the actual rails code. The following series of commands will set up that structure and your repository (note that for the simplicity of this tutorial, I will not be using the branches/tags/trunk structure of most repositories):
&lt;pre&gt;&lt;code&gt; [~]# mkdir rails
 [~]# mkdir svnrepo
 [~]# svnadmin create ~/svnrepo/fictiverse
 [~]# cd rails
 [~/rails]# svn co file:///HOME/svnrepo/fictiverse fictiverse
&lt;/code&gt;&lt;/pre&gt;
Note that &lt;span class="caps"&gt;HOME&lt;/span&gt; should be replaced with wherever your home is (such as /home/davidh for me). Now, your repository is set up and you have a home for your rails app. Next, we will create the rails application structure and update the repository.
&lt;pre&gt;&lt;code&gt; [~/rails]# rails fictiverse
 [~/rails]# cd fictiverse
 [~/rails/fictiverse]# svn add . --force
 [~/rails/fictiverse]# svn ci -m "Added Rails Structure" 
 [~/rails/fictiverse]# svn up
&lt;/code&gt;&lt;/pre&gt;
Now, we will set subversion up to ignore our log files for versioning. If you wish, you can adapt this set of commands to ignore the Rails cache (tmp/*) and database.yml file (in config/) if you want to have seperate ones on each place you develop. For now, we&amp;#8217;ll just ignore the logs. We will get around the database.yml issue by using the same login/pass/db wherever we are.
&lt;pre&gt;&lt;code&gt; [~/rails/fictiverse]# svn remove log/*
 [~/rails/fictiverse]# svn propset svn:ignore "*.*" log/
 [~/rails/fictiverse]# svn ci -m "set up log file ignoring" 
 [~/rails/fictiverse]# svn up
&lt;/code&gt;&lt;/pre&gt;
Ok, so currently we have a working Rails directory, and have set it up inside version control to use from home, work, or wherever we wish to work on our application! For details on how to access this from home, this will be covered when we start coding.

	&lt;h3&gt;3. Going public&lt;/h3&gt;


Thus far, all our work has been behind the scenes. It&amp;#8217;s time to take it to the world. This section really depends on how your host is set up, so I&amp;#8217;m obviously going to assume &lt;span class="caps"&gt;ASO&lt;/span&gt;, my host. First, you need to explore where your host redirects request for your domain. For example, I type in fictiverse.com, it takes me to a directory listing, since I have nothing in there. So where is it actually looking? Well, I check out my server&amp;#8217;s log files and I see the request was looking for /users/davidh/www/fictiverse/. So now, I know where to look. Sure enough, fictiverse is a directory inside www (a symbolic link to the public_html directory). So how do we connect this to rails? Easy, we switch the directory for a symbolic link to our rails/fictiverse/public directory.
&lt;pre&gt;&lt;code&gt; [~]# cd ~/www
 [~/www]# rm -rf fictiverse
 [~/www]# ln -s ~/rails/fictiverse/public fictiverse
&lt;/code&gt;&lt;/pre&gt;
And that&amp;#8217;s all there is to it! Check it out, &amp;#8220;http://www.fictiverse.com&amp;#8221;http://www.fictiverse.com . The default Rails page comes up, telling us to welcome aboard. Not a whole lot of work to arrive at this point, and not a whole heck of a lot got accomplished, but we have a domain hosted somewhere, have the shell of a Rails application up and running, and it is all version controlled. Not bad for a few minutes of work, and utterly necessary for any rails app you wish to create. Thanks for reading Part 1, and Part 2 will come in the next few days, where we begin actually designing the application and defining constraints.

	&lt;p&gt;Edit: I&amp;#8217;m very sorry, but I completely screwed up and forgot that I have database information previously set up. I think only a few people have started this so far, from emails, so I&amp;#8217;m sorry you&amp;#8217;re all getting 500 errors! Until database information is set up it will not work. So, you might have to wait until part 3 for me to explain setting that up. But if you wish to browse the &lt;a href="http://wiki.rubyonrails.org/rails"&gt;Rails Wiki&lt;/a&gt; you can find how to set this part up on your own.&lt;/p&gt;


	&lt;p style="text-align:right;"&gt;&lt;a href="http://www.digg.com/programming/Fictiverse_Part_I_-_blogging_creation_and_deployment_of_a_Ruby_on_Rails_app"&gt;&lt;span style="background:#ccc;"&gt;Digg this!&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 24 May 2006 07:53:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:046e39cd-109c-4a69-ad0a-86e7f57c7a2d</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/05/24/fictiverse-part-i-setup</link>
      <category>fictiverse</category>
      <category>rails</category>
      <category>tutorial</category>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/28</trackback:ping>
    </item>
    <item>
      <title>Upgrade, finally</title>
      <description>&lt;p&gt;I finally upgraded to the Typo trunk! Last time I tried was also the time Rails upgraded to 1.1 and broke Typo completely, and needless to say I encountered a lot of problems. This time was a snap. I simply svn checkout&amp;#8217;d the latest copy into a new directory, created a new database, did a mysqldump and a restore on the current DB, updated database.yml, did a rake migrate, and then redirected the blog subdomain to point to the new directory. After some caching issues were resolved, we&amp;#8217;re back to normal! &lt;br /&gt;&lt;br /&gt;Only, now Lush, the beautiful theme I had up before, is broken under Trunk. I may toy around with that later to get it working again. But now is exciting because I can use code filters and everything. Which will be important for my future blog plans.&lt;br /&gt;&lt;br /&gt;I&amp;#8217;m currently learning Rails 1.1. Had a pretty good handle on it from the first PP book that came out, but things are busy and I couldn&amp;#8217;t keep up with the latest developments, like &lt;span class="caps"&gt;RJS&lt;/span&gt; and migrations, much less polymorphic goodness. So, for the nest several blog posts, which may span several months due to other committments, I plan to blog my process in creating a new application using the new 2nd edition (beta) of the Agile Rails book which documents up to the current 1.1 version. I&amp;#8217;ll introduce the actual application next post, but my plan is since it will be a non-business application for the community, then there is no fear in blogging it. I want to include as much (or little with Rails) code as possible too. I figure it will be a good series for those who can make an example cookbook, but find it difficult where to go from there. I&amp;#8217;ll be learning along with everyone, so we all win, and hopefully I can give back a bit to the community.&lt;br /&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 23 May 2006 12:02:12 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:d9950013-412d-4e06-831a-2e2fece4186a</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/05/23/upgrade-finally</link>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/26</trackback:ping>
    </item>
    <item>
      <title>Google Calendar beat me</title>
      <description>&lt;p&gt;So apparently Google just released &lt;a href="http://www.google.com/calendar/render"&gt;Google Calendar&lt;/a&gt;. And, like anything else Google, they did an excellent job at usability, even though it won&amp;#8217;t play nicely at all with Firefox (my javascript console is spitting out all kinds of sweet errors). The Tinycal project I was planning on doing may not be a reality anymore. I still don&amp;#8217;t like that they did a week view, day view, agenda, etc. Those are pointless to me. However their month view is excellent, and I was able to easily default the view to monthly. It allows me to easily ignore entering anything but the event itself. Entering multiple-date events is easy. It parses basic entries like &amp;#8220;2pm Dinner in the dining hall&amp;#8221; easily.&lt;/p&gt;


	&lt;p&gt;Basically, it&amp;#8217;s everything I wanted with my own calendar app, except not lightweight enough. While it&amp;#8217;s light years faster than most of the other calendar apps out there, I still think they&amp;#8217;ve included too much bulk with unneeded stuff. They&amp;#8217;ve gone the route of every other calendar out there. I still can&amp;#8217;t help but believe that the next generation of calendars will be very different from anything we&amp;#8217;ve seen before. Granted, business and education users need to micromanage a day into blocks of time. But people who work a normal job, and have maybe 5-6 events per week they need to keep track of, don&amp;#8217;t need to enter a time or location for every little thing. While I appreciate that Google Calendar doesn&amp;#8217;t require that, I still think they would have done better by not programming that functionality in at all. Though I do at least like that they don&amp;#8217;t force those ideals on the rest of us if we don&amp;#8217;t want it. Now if I could tell them not to even load the code for all that to speed it up&amp;#8230;&lt;/p&gt;


	&lt;p&gt;I like the ability to publish and subscribe to calendars, exactly what I imagined for a family or close group to use. &lt;span class="caps"&gt;I LOVE&lt;/span&gt; the ability to have a location hyperlinked to a google map! That is incredibly awesome, as it saves me the extra manual step of plugging in an address. This probably isn&amp;#8217;t a big deal outside of larger cities, but people are always planning something at a random place I&amp;#8217;m looking up on a map anyway. Great feature Google.&lt;/p&gt;


	&lt;p&gt;It also looks like they&amp;#8217;re trying to take the Evite market. Evite sucks, so it&amp;#8217;s likely they&amp;#8217;ll succeed. Simply add an event to your calendar, and then notify the people you want to attend. Right now this looks manual, but I&amp;#8217;m sure when it gets integrated with Gmail you&amp;#8217;ll be able to select from your contact list.&lt;/p&gt;


	&lt;p&gt;I like that they got rid of &amp;#8220;categories&amp;#8221; for events. Always thought that categorizing events was stupid. Does it matter what it is, if it makes you unavailable?&lt;/p&gt;


	&lt;p&gt;Overall, I give it a 8/10. It could be faster, and it could work on Firefox. Right now it does not look like it&amp;#8217;s integrated in Gmail. I would love to send an email out that says &amp;#8220;Poker tournament 5pm friday my place&amp;#8221; and have it automatically create a hyperlink from that, which adds the event to the users calendars if they click it. I think they could do a better color scheme, it&amp;#8217;s just too blue right now. Some bolder colors would make it less boring. But they did a great job, enough to make anything I attempted to do useless.&lt;/p&gt;</description>
      <pubDate>Thu, 13 Apr 2006 11:29:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:6f39898d641abdf98f85166b2b3014e3</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/04/13/google-calendar-beat-me</link>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/7</trackback:ping>
    </item>
    <item>
      <title>Rails 1.1</title>
      <description>&lt;p&gt;Wow, so that was different. :)&lt;/p&gt;


	&lt;p&gt;So I make a post that has some ruby code you can do with rails, that lets you basically chain database relationships into a chain of objects through a &amp;#8221;:through&amp;#8221; declaration, when I realized the current stable Typo doesn&amp;#8217;t have syntax highlighting support. So I tried to upgrade to the &lt;span class="caps"&gt;SVN&lt;/span&gt; trunk, likely at the exact moment my host did the upgrade to Rails 1.1.&lt;/p&gt;


	&lt;p&gt;So I was stuck with my old installation with a new database, a new installation that I wanted, and neither working because 1.1 broke it.&lt;/p&gt;


	&lt;p&gt;In the end, I just wanted Typo back up. Luckily, I&amp;#8217;d dumped the mysql database before that. Probably took that from working with &lt;span class="caps"&gt;SQL&lt;/span&gt; Server too much. :) So I cleaned out the databases, restored the old one, put my symbolic links back to the old installation, and tried it out. Didn&amp;#8217;t work. So, in the interest of someone with the same problem coming across this, I applied &lt;a href="http://www.typosphere.org/trac/ticket/748"&gt;this patch&lt;/a&gt; from Typo&amp;#8217;s ticketing system and it fixed everything (reassociated the rails libraries to 1.0).&lt;/p&gt;


	&lt;p&gt;It&amp;#8217;s a shame too, because from the little I&amp;#8217;ve looked at &lt;a href="http://www.typosphere.org"&gt;Typo&lt;/a&gt; code, it looks like a lot of the stuff they hack around to get database stuff to work could be completely replaced by some of the features in rails 1.1. Though apparently they are working diligently on it, so here&amp;#8217;s hoping for some code refactoring and 1.1 compatibility before Typo 4 is released.&lt;/p&gt;</description>
      <pubDate>Fri, 31 Mar 2006 09:35:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:0c7cf3df237ca03c9e4ab9d5ce087e3e</guid>
      <author>David Harris</author>
      <link>http://blog.frictionlessfloor.com/articles/2006/03/31/rails-1-1</link>
      <trackback:ping>http://blog.frictionlessfloor.com/articles/trackback/6</trackback:ping>
    </item>
  </channel>
</rss>
