<?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: Tag fictiverse</title>
    <link>http://blog.frictionlessfloor.com/articles/tag/fictiverse</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>programming and design with minimal resistance</description>
    <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>
  </channel>
</rss>
