<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>I Can&apos;t Focus</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://today.icantfocus.com/blog/atom.xml" />
    <id>tag:today.icantfocus.com,2008-02-01:/blog//2</id>
    <updated>2008-06-30T02:34:41Z</updated>
    <subtitle>This isn&apos;t the site you&apos;re looking for.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Personal 4.1</generator>

<entry>
    <title>MVC Marathon Part 1: Creating a New Application</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/mvc-marathon-part-1-creating-a-new-application/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.879</id>

    <published>2008-06-30T01:24:19Z</published>
    <updated>2008-06-30T02:34:41Z</updated>

    <summary> Welcome to part 1 of MVC Marathon, a multipart excursion into creating an application in the major MVC frameworks...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
    <category term="c" label="c#" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cakephp" label="cakephp" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="catalyst" label="catalyst" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="django" label="django" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mvc" label="mvc" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rails" label="rails" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ruby" label="ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[		<p>
			Welcome to part 1 of <a href="/blog/mvc-marathon/">MVC Marathon</a>,
			a multipart excursion into creating an application in the major
			MVC frameworks available today.
		</p>
		<p>
			The source code for this part can be found here:
			<a href="http://svn.icantfocus.com/articles/mvc-marathon/tags/part1-creating-a-new-application/">/articles/mvc-marathon/tags/part1-creating-a-new-application/</a>
		</p>]]>
        <![CDATA[		<h2>Part 1: Creating a New Application</h2>
		<p>
			The first step in any new application is creating a directory
			structure and any necessary configuration files. Fortunately, most
			of the frameworks now a days provide ready made templates or
			scripts to make getting started as easy as possible.
		</p>
		<p>
			Today we'll explore how to create and run a new application in the
			various frameworks and explore the difference between them. You
			can jump to any specific framework using the links below. For this
			series of articles, I'm going to assume that you already have the
			basic frameworks installed.
		</p>
		<ul>
			<li><a href="#aspnetmvc">ASP.NET MVC</a></li>
			<li><a href="#cakephp">CakePHP</a></li>
			<li><a href="#catalyst">Catalyst</a></li>
			<li><a href="#django">Django</a></li>
			<li><a href="#rails">Ruby on Rails</a></li>
			<li><a href="#conclusions">Conclusions</a></li>
		</ul>

		
		<h2><a name="aspnetmvc"></a>ASP.NET MVC</h2>
		<h3>Creating the Application</h3>
		<p>
			The easiest way to create a new ASP.NET MVC application is using
			the application templates in Visual Studio. To do that, simply
			select <kbd>File -> New -> Project</kbd>:
		</p>
		<p>
			<a href="aspnetmvc-create.png">
				<img src='aspnetmvc-create.png' width="204" height="152" alt="aspnetmvc create" />
			</a>
		</p>
		<p>
			In the New Project window, select Visual C# as the
			language. Select the ASP.NET MVC Web Application, type in the name
			of the new application, in our case, BurningPlate and click OK.
			Visual Studio will create a new mvc application looking something
			like this:
		</p>
		<p>
			<a href="aspnetmvc-create2.png">
				<img src='aspnetmvc-create2.png' width="204" height="152"  alt="aspnetmvc create" />
			</a>
		</p>
		<p>
			Like nearly all MVC applications, we have the usual Controllers,
			Models and Views folders along with some other .NET specific
			folders.
		</p>
		<h3>Running the Application</h3>
		<p>
			To run your new application, simply hit <kbd>F5</kbd>, which will
			start the application in Visual Studios local web server. This
			means no messing with IIS until you have to. If all goes well, you
			should end up with the default home page:
		</p>
		<p>
			<a href="aspnetmvc.png">
				<img src='aspnetmvc.png' width="204" height="152" alt="aspnetmvc run" />
			</a>
		</p>


		<h3><a name="cakephp"></a>CakePHP</h3>
		<p>
			There seems to be at least two ways to create a new CakePHP
			application. The blog example on the CakePHP website say to just
			download and extract the latest version and start creating your
			application in the <kbd>app</kbd> subfolder. This seems like a
			good approach if you're creating app to put on a server where you
			don't know or control the version or even if CakePHP is installed.
		</p>
		<p>
			If you're running your own server, you can setup your env to point
			to a centralized install of CakePHP and use <kbd>cake</kbd> to
			create apps that reference the installed software. We'll do the
			latter as it closely follows how the other frameworks work.
		</p>
		<h3>Creating the Application</h3>
		<p>
			First, let's see what <kbd>cake</kbd> tells us when we run it:
		</p>
		<pre>claco@mbp ~/mvc-marathon $ cake
Welcome to CakePHP v1.2.0.7296 RC2 Console
---------------------------------------------------------------
Current Paths:
 -app: mvc-marathon
 -working: /Users/claco/mvc-marathon
 -root: /Users/claco
 -core: /sw/cakephp/

Changing Paths:
your working path should be the same as your application path
to change your path use the &#x27;-app&#x27; param.
Example: -app relative/path/to/myapp or -app /absolute/path/to/myapp

Available Shells:

 vendors/shells/:
         - none

 cake/console/libs/:
         acl
         api
         bake
         console
         i18n
         schema
         testsuite

To run a command, type &#x27;cake shell_name [args]&#x27;
To get help on a specific command, type &#x27;cake shell_name help&#x27;</pre>

	<p>
		Next, let's run <kbd>cake bake help</kbd> to see what our options are:
	</p>
	<pre>claco@mbp ~/mvc-marathon $ cake bake help
Welcome to CakePHP v1.2.0.7296 RC2 Console
---------------------------------------------------------------
App : mvc-marathon
Path: /Users/claco/mvc-marathon
---------------------------------------------------------------
CakePHP Bake:
---------------------------------------------------------------
The Bake script generates controllers, views and models for your application.
If run with no command line arguments, Bake guides the user through the class
creation process. You can customize the generation process by telling Bake
where different parts of your application are using command line arguments.
---------------------------------------------------------------
Usage: cake bake &lt;command&gt; &lt;arg1&gt; &lt;arg2&gt;...
---------------------------------------------------------------
Params:
        -app &lt;path&gt; Absolute/Relative path to your app folder.

Commands:

        bake help
                shows this help message.

        bake all &lt;name&gt;
                bakes complete MVC. optional &lt;name&gt; of a Model

        bake project &lt;path&gt;
                bakes a new app folder in the path supplied
                or in current directory if no path is specified

        bake plugin &lt;name&gt;
                bakes a new plugin folder in the path supplied
                or in current directory if no path is specified.

        bake db_config
                bakes a database.php file in config directory.

        bake model
                bakes a model. run &#x27;bake model help&#x27; for more info

        bake view
                bakes views. run &#x27;bake view help&#x27; for more info

        bake controller
                bakes a controller. run &#x27;bake controller help&#x27; for more info</pre>
			<p>
				Since we're starting from scratch, let's give <kbd>project</kbd>
				a whirl:
			</p>
			<pre>claco@mbp ~/mvc-marathon/cakephp $ cake bake BurningPlate
Welcome to CakePHP v1.2.0.7296 RC2 Console
---------------------------------------------------------------
App : cakephp
Path: /Users/claco/mvc-marathon/cakephp
---------------------------------------------------------------
Bake Project
Skel Directory: /sw/cakephp/cake/console/libs/templates/skel
Will be copied to: /Users/claco/mvc-marathon/cakephp/BurningPlate
---------------------------------------------------------------
Look okay? (y/n/q) 
[y] &gt;  
Do you want verbose output? (y/n) 
[n] &gt;  
---------------------------------------------------------------
Created: BurningPlate in /Users/claco/mvc-marathon/cakephp/BurningPlate
---------------------------------------------------------------

Creating file /Users/claco/mvc-marathon/cakephp/BurningPlate/views/pages/home.ctp
Wrote /Users/claco/mvc-marathon/cakephp/BurningPlate/views/pages/home.ctp
Welcome page created
Random hash key created for &#x27;Security.salt&#x27;
CAKE_CORE_INCLUDE_PATH set to /sw/cakephp in webroot/index.php
CAKE_CORE_INCLUDE_PATH set to /sw/cakephp in webroot/test.php
Remember to check these value after moving to production server
Your database configuration was not found. Take a moment to create one.
---------------------------------------------------------------
Database Configuration:
---------------------------------------------------------------
Name:  
[default] &gt; ^C
		</pre>
		<h3>Running the Application</h3>
		<p>
			At first glance, there appears to be no development server for
			CakePHP applications. There is a script called
			<a href="http://bakery.cakephp.org/articles/view/the-cakephp-instaweb-webserver">cakephp-instaweb</a>
			available on the CakePHP website geared for this purpose.
			Ironically, the script relies on Python to get the job done. When
			I ran it, it appeared to work, but all I ever got when trying to
			hit it with the browser was a CGI SCript Error carping about
			headers.
		</p>
		<p>
			The second option is to run this application under Apache. Since
			I'm on a MacBook Pro and OSX includes a running version of Apache
			and PHP, all I needed to do was place the BurningPlate directory
			in my Sites folder. After hitting
			<kbd>http://localhost/~claco/BurningPlate/</kbd> with my browser
			we get:
		</p>
		<p>
			<a href="cakephp.png">
				<img src='cakephp.png' width="204" height="152" alt="cakephp run" />
			</a>
		</p>



		<h2><a name="catalyst"></a>Catalyst</h2>
		<h3>Creating the Application</h3>
		<p>
			Just like CakePHP, Catalyst also has a command line utility for
			creating a new application. Let's see what what it has to say:
		</p>
		<pre>claco@mbp ~/mvc-marathon/catalyst $ catalyst.pl
Usage:
    catalyst.pl [options] application-name

    &#x27;catalyst.pl&#x27; creates a skeleton for a new application, and allows you
    to upgrade the skeleton of your old application.

     Options:
       -force      don&#x27;t create a .new file where a file to be created exists
       -help       display this help and exit
       -makefile   only update Makefile.PL
       -scripts    only update helper scripts
       -short      use short names, M/V/C instead of Model/View/Controller.

     application-name must be a valid Perl module name and can include &quot;::&quot;, 
     which will be converted to &#x27;-&#x27; in the project name.


     Examples:
        catalyst.pl My::App
        catalyst.pl MyApp

     To upgrade your app to a new version of Catalyst:
        catalyst.pl -force -scripts MyApp</pre>
		<p>
			Looks like we just need an application name:
		</p>
		<pre>claco@mbp ~/mvc-marathon/catalyst $ catalyst.pl BurningPlate
created &quot;BurningPlate&quot;
created &quot;BurningPlate/script&quot;
created &quot;BurningPlate/lib&quot;
created &quot;BurningPlate/root&quot;
created &quot;BurningPlate/root/static&quot;
created &quot;BurningPlate/root/static/images&quot;
created &quot;BurningPlate/t&quot;
created &quot;BurningPlate/lib/BurningPlate&quot;
created &quot;BurningPlate/lib/BurningPlate/Model&quot;
created &quot;BurningPlate/lib/BurningPlate/View&quot;
created &quot;BurningPlate/lib/BurningPlate/Controller&quot;
created &quot;BurningPlate/burningplate.conf&quot;
created &quot;BurningPlate/lib/BurningPlate.pm&quot;
created &quot;BurningPlate/lib/BurningPlate/Controller/Root.pm&quot;
created &quot;BurningPlate/README&quot;
created &quot;BurningPlate/Changes&quot;
created &quot;BurningPlate/t/01app.t&quot;
created &quot;BurningPlate/t/02pod.t&quot;
created &quot;BurningPlate/t/03podcoverage.t&quot;
created &quot;BurningPlate/root/static/images/catalyst_logo.png&quot;
created &quot;BurningPlate/root/static/images/btn_120x50_built.png&quot;
created &quot;BurningPlate/root/static/images/btn_120x50_built_shadow.png&quot;
created &quot;BurningPlate/root/static/images/btn_120x50_powered.png&quot;
created &quot;BurningPlate/root/static/images/btn_120x50_powered_shadow.png&quot;
created &quot;BurningPlate/root/static/images/btn_88x31_built.png&quot;
created &quot;BurningPlate/root/static/images/btn_88x31_built_shadow.png&quot;
created &quot;BurningPlate/root/static/images/btn_88x31_powered.png&quot;
created &quot;BurningPlate/root/static/images/btn_88x31_powered_shadow.png&quot;
created &quot;BurningPlate/root/favicon.ico&quot;
created &quot;BurningPlate/Makefile.PL&quot;
created &quot;BurningPlate/script/burningplate_cgi.pl&quot;
created &quot;BurningPlate/script/burningplate_fastcgi.pl&quot;
created &quot;BurningPlate/script/burningplate_server.pl&quot;
created &quot;BurningPlate/script/burningplate_test.pl&quot;
created &quot;BurningPlate/script/burningplate_create.pl&quot;</pre>
		<h3>Running the application</h3>
		<p>
			Unlike CakePHP, Catalyst includes a development server to get you
			started. No need to futz with Apache:
		</p>
		<pre>claco@mbp ~/mvc-marathon/catalyst $ BurningPlate/script/burningplate_server.pl
[debug] Debug messages enabled
[debug] Statistics enabled
[debug] Loaded plugins:
.----------------------------------------------------------------------------.
| Catalyst::Plugin::ConfigLoader  0.20                                       |
| Catalyst::Plugin::Static::Simple  0.20                                     |
&#x27;----------------------------------------------------------------------------&#x27;

[debug] Loaded dispatcher &quot;Catalyst::Dispatcher&quot;
[debug] Loaded engine &quot;Catalyst::Engine::HTTP&quot;
[debug] Found home &quot;/Users/claco/mvc-marathon/catalyst/BurningPlate&quot;
[debug] Loaded Config &quot;/Users/claco/mvc-marathon/catalyst/BurningPlate/burningplate.conf&quot;
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class                                                           | Type     |
+-----------------------------------------------------------------+----------+
| BurningPlate::Controller::Root                                  | instance |
&#x27;-----------------------------------------------------------------+----------&#x27;

[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private              | Class                                | Method       |
+----------------------+--------------------------------------+--------------+
| /default             | BurningPlate::Controller::Root       | default      |
| /end                 | BurningPlate::Controller::Root       | end          |
| /index               | BurningPlate::Controller::Root       | index        |
&#x27;----------------------+--------------------------------------+--------------&#x27;

[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path                                | Private                              |
+-------------------------------------+--------------------------------------+
| /                                   | /default                             |
| /                                   | /index                               |
&#x27;-------------------------------------+--------------------------------------&#x27;

[info] BurningPlate powered by Catalyst 5.7014
You can connect to your server at http://localhost:3000
[info] *** Request 1 (0.125/s) [1941] [Sat Jun 28 19:24:35 2008] ***
[debug] &quot;GET&quot; request for &quot;/&quot; from &quot;127.0.0.1&quot;
[info] Request took 0.017728s (56.408/s)
.----------------------------------------------------------------+-----------.
| Action                                                         | Time      |
+----------------------------------------------------------------+-----------+
| /index                                                         | 0.000507s |
| /end                                                           | 0.000745s |
&#x27;----------------------------------------------------------------+-----------&#x27;</pre>
	<p>
		The development server was nice enough to tell us where to go. Hitting
	<kbd>http://localhost:3000</kbd> in our browser yields:
	</p>
	<p>
		<a href="catalyst.png">
			<img src='catalyst.png' width="204" height="152" alt="catalyst run" />
		</a>
	</p>



	<h2><a name="django"></a>Django</h2>
	<h3>Creating the application</h3>
	<p>
		Rinse. Lather. Repeat. As with the previous two frameworks, we just
		need to run a command line script to create a new application.
	</p>
	<pre>claco@mbp ~/mvc-marathon/django $ django-admin.py
Usage: django-admin.py action [options]
actions:
 adminindex [appname ...]
   Prints the admin-index template snippet for the given app name(s).

 createcachetable [tablename]
   Creates the table needed to use the SQL cache backend

 dbshell 
   Runs the command-line client for the current DATABASE_ENGINE.

 diffsettings 
   Displays differences between the current settings.py and Django&#x27;s
   default settings. Settings that don&#x27;t appear in the defaults are
   followed by &quot;###&quot;.

 dumpdata [--format][appname ...]
   Output the contents of the database as a fixture of the given
   format

 flush [--verbosity] [--interactive]
   Executes ``sqlflush`` on the current database.

 inspectdb 
   Introspects the database tables in the given database and outputs
   a Django model module.

 loaddata [--verbosity] fixture, fixture, ...
   Installs the named fixture(s) in the database

 reset [--interactive][appname ...]
   Executes ``sqlreset`` for the given app(s) in the current
   database.

 runfcgi [various KEY=val options, use `runfcgi help` for help]
   Runs this project as a FastCGI application. Requires flup.

 runserver [--noreload] [--adminmedia=ADMIN_MEDIA_PATH] [optional port number, or ipaddr:port]
   Starts a lightweight Web server for development.

 shell [--plain]
   Runs a Python interactive interpreter. Tries to use IPython, if
   it&#x27;s available.

 sql [appname ...]
   Prints the CREATE TABLE SQL statements for the given app name(s).

 sqlall [appname ...]
   Prints the CREATE TABLE, initial-data and CREATE INDEX SQL
   statements for the given model module name(s).

 sqlclear [appname ...]
   Prints the DROP TABLE SQL statements for the given app name(s).

 sqlcustom [appname ...]
   Prints the custom table modifying SQL statements for the given app
   name(s).

 sqlflush 
   Returns a list of the SQL statements required to return all tables
   in the database to the state they were in just after they were
   installed.

 sqlindexes [appname ...]
   Prints the CREATE INDEX SQL statements for the given model module
   name(s).

 sqlinitialdata 
   RENAMED: see &#x27;sqlcustom&#x27;

 sqlreset [appname ...]
   Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the
   given app name(s).

 sqlsequencereset [appname ...]
   Prints the SQL statements for resetting PostgreSQL sequences for
   the given app name(s).

 startapp [appname]
   Creates a Django app directory structure for the given app name in
   the current directory.

 startproject [projectname]
   Creates a Django project directory structure for the given project
   name in the current directory.

 syncdb [--verbosity] [--interactive]
   Create the database tables for all apps in INSTALLED_APPS whose
   tables haven&#x27;t already been created.

 test [--verbosity] [appname ...]
   Runs the test suite for the specified applications, or the entire
   site if no apps are specified

 validate 
   Validates all installed models.

Options:
 --version             show program&#x27;s version number and exit
 -h, --help            show this help message and exit
 --settings=SETTINGS   Python path to settings module, e.g.
                       &quot;myproject.settings.main&quot;. If this isn&#x27;t provided, the
                       DJANGO_SETTINGS_MODULE environment variable will be
                       used.
 --pythonpath=PYTHONPATH
                       Lets you manually add a directory the Python path,
                       e.g. &quot;/home/djangoprojects/myproject&quot;.
 --plain               Tells Django to use plain Python, not IPython, for
                       &quot;shell&quot; command.
 --noinput             Tells Django to NOT prompt the user for input of any
                       kind.
 --noreload            Tells Django to NOT use the auto-reloader when running
                       the development server.
 --format=FORMAT       Specifies the output serialization format for fixtures
 --indent=INDENT       Specifies the indent level to use when pretty-printing
                       output
 --verbosity=VERBOSITY
                       Verbosity level; 0=minimal output, 1=normal output,
                       2=all output
 --adminmedia=ADMIN_MEDIA_PATH
                       Specifies the directory from which to serve admin
                       media for runserver.
	</pre>
	<p>
		To create a new app, we'll run the <kbd>startproject</kbd> command:
	</p>
	<pre>claco@mbp ~/mvc-marathon/django $ django-admin.py startproject BurningPlate</pre>
	<p>
		Unfortunately, no matter what --verbosity level I set, this is the
		only output I get.
	</p>
	<h3>Running the Application</h3>
	<pre>claco@mbp ~/mvc-marathon/django $ python BurningPlate/manage.py runserver
Validating models...
0 errors found.

Django version 0.96.2, using settings &#x27;BurningPlate.settings&#x27;
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[28/Jun/2008 18:40:25] &quot;GET / HTTP/1.1&quot; 404 2065
	</pre>
	<p>
		Lets hit <kbd>http://127.0.0.1:8000/</kbd> and see what we have:
	</p>
	<p>
		<a href="django.png">
		<img src='django.png' width="204" height="152" alt="django run" />
		</a>
	</p>



	<h2><a name="rails"></a>Ruby on Rails</h2>
	<h3>Creating the Application</h3>
	<p>Another framework; another script.</p>
	<pre>claco@mbp ~/mvc-marathon/rails $ rails
Usage: /sw/bin/rails /path/to/your/app [options]

Options:
    -r, --ruby=path                  Path to the Ruby binary of your choice (otherwise scripts use env, dispatchers current path).
                                     Default: /sw/bin/ruby1.8
    -d, --database=name              Preconfigure for selected database (options: mysql/oracle/postgresql/sqlite2/sqlite3).
                                     Default: mysql
    -f, --freeze                     Freeze Rails in vendor/rails from the gems generating the skeleton
                                     Default: false

Rails Info:
    -v, --version                    Show the Rails version number and quit.
    -h, --help                       Show this help message and quit.

General Options:
    -p, --pretend                    Run but do not make any changes.
        --force                      Overwrite files that already exist.
    -s, --skip                       Skip files that already exist.
    -q, --quiet                      Suppress normal output.
    -t, --backtrace                  Debugging: show backtrace on errors.
    -c, --svn                        Modify files with subversion. (Note: svn must be in path)

Description:
    The &#x27;rails&#x27; command creates a new Rails application with a default
    directory structure and configuration at the path you specify.

Example:
    rails ~/Code/Ruby/weblog

    This generates a skeletal Rails installation in ~/Code/Ruby/weblog.
    See the README in the newly created application to get going.
	</pre>
	<p>
		Looks like Catalyst. Give it an app name and go:
	</p>
	<pre>claco@mbp ~/mvc-marathon/rails $ rails BurningPlate
create  
create  app/controllers
create  app/helpers
create  app/models
create  app/views/layouts
create  config/environments
create  config/initializers
create  db
create  doc
create  lib
create  lib/tasks
create  log
create  public/images
create  public/javascripts
create  public/stylesheets
create  script/performance
create  script/process
create  test/fixtures
create  test/functional
create  test/integration
create  test/mocks/development
create  test/mocks/test
create  test/unit
create  vendor
create  vendor/plugins
create  tmp/sessions
create  tmp/sockets
create  tmp/cache
create  tmp/pids
create  Rakefile
create  README
create  app/controllers/application.rb
create  app/helpers/application_helper.rb
create  test/test_helper.rb
create  config/database.yml
create  config/routes.rb
create  public/.htaccess
create  config/initializers/inflections.rb
create  config/initializers/mime_types.rb
create  config/boot.rb
create  config/environment.rb
create  config/environments/production.rb
create  config/environments/development.rb
create  config/environments/test.rb
create  script/about
create  script/console
create  script/destroy
create  script/generate
create  script/performance/benchmarker
create  script/performance/profiler
create  script/performance/request
create  script/process/reaper
create  script/process/spawner
create  script/process/inspector
create  script/runner
create  script/server
create  script/plugin
create  public/dispatch.rb
create  public/dispatch.cgi
create  public/dispatch.fcgi
create  public/404.html
create  public/422.html
create  public/500.html
create  public/index.html
create  public/favicon.ico
create  public/robots.txt
create  public/images/rails.png
create  public/javascripts/prototype.js
create  public/javascripts/effects.js
create  public/javascripts/dragdrop.js
create  public/javascripts/controls.js
create  public/javascripts/application.js
create  doc/README_FOR_APP
create  log/server.log
create  log/production.log
create  log/development.log
create  log/test.log
	</pre>
	<h3>Running the Application</h3>
	<pre>claco@mbp ~/mvc-marathon/rails $ BurningPlate/script/server
=&gt; Booting WEBrick...
=&gt; Rails application started on http://0.0.0.0:3000
=&gt; Ctrl-C to shutdown server; call with --help for options
[2008-06-28 19:20:36] INFO  WEBrick 1.3.1
[2008-06-28 19:20:36] INFO  ruby 1.8.6 (2008-03-03) [i686-darwin]
[2008-06-28 19:20:36] INFO  WEBrick::HTTPServer#start: pid=1929 port=3000
127.0.0.1 - - [28/Jun/2008:19:20:41 EDT] &quot;GET / HTTP/1.1&quot; 200 7557
- -&gt; /
127.0.0.1 - - [28/Jun/2008:19:20:41 EDT] &quot;GET /javascripts/prototype.js HTTP/1.1&quot; 200 125605
http://localhost:3000/ -&gt; /javascripts/prototype.js
127.0.0.1 - - [28/Jun/2008:19:20:41 EDT] &quot;GET /javascripts/effects.js HTTP/1.1&quot; 200 38916
http://localhost:3000/ -&gt; /javascripts/effects.js
127.0.0.1 - - [28/Jun/2008:19:20:41 EDT] &quot;GET /images/rails.png HTTP/1.1&quot; 200 1787
http://localhost:3000/ -&gt; /images/rails.png
	</pre>
	<p>
		Loading <kbd>http://0.0.0.0:3000</kbd> in our browser, we see:
	</p>
	<p>
		<a href="rails.png">
			<img src='rails.png' width="204" height="152" alt="rails run" />
		</a>
	</p>





	<h2><a name="conclusions"></a>Conclusions</h2>
	<p>
		There weren't too many shockers here. For the most part, it's just a
		matter of running a command to get an application structure up and
		running. There are some areas that could use a few tweaks to help out
		the people new to their respective frameworks:
	</p>
	<ul>
		<li>
			CakePHP really could use a development server. For development,
			it's nice to not have to mess with Apache configs.
		</li>
		<li>
			Django needs to output something when it's successfully created
			a new application. No output equates to thinking nothing happened
			or that something is broken.
		</li>
		<li>
			Catalyst, Django and Rails would be a touch better if after they
			created the new applications would tell the user how to run them.
			i.e. "App created. please run xxx xxxx/xxxxx ro start your new
			app".
		</li>
		<li>
			All of the frameworks except for ASP.NET MVC tell the user where
			to go next and/or what files to start to configure. It would be
			nice if ASP.NET MVC did the ame thing rather than just display
			the "Home" page.
		</li>
	</ul>
]]>
    </content>
</entry>

<entry>
    <title>MVC Marathon</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/mvc-marathon/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.878</id>

    <published>2008-06-29T04:42:17Z</published>
    <updated>2008-06-30T01:27:42Z</updated>

    <summary> MVC Marathon: Introduction Introduction Over the last few years, I&apos;ve spent a fair amount of time on the same...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
    <category term="c" label="c#" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cakephp" label="cakephp" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="catalyst" label="catalyst" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="django" label="django" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mvc" label="mvc" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="python" label="python" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rails" label="rails" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ruby" label="ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<title>MVC Marathon: Introduction</title>
</head>
	<body>
		<h2>Introduction</h2>
		<p>
			Over the last few years, I've spent a fair amount of time on the
			same projects, using the same tools, in the same languages. By
			day, I'm a mild mannered .NET programmer. By night, I fly the Perl
			flag, and spend a lot of time using Catalyst, one of the Perl
			based MVC frameworks. While I'm not abandoning those technologies,
			I think it's time for something new.
		</p>
		<p>
			They say you should learn a new programming language every year or
			so, and I'm long over due. Why not learn three languages at the
			same time to make up for lost time? :-)
		</p>
		
		<h2>The Challenge</h2>
		<p>
			The challenge is to build the same mvc application on all of the
			frameworks listed below. While I'm comfortable with Catalyst/Perl
			and ASP.NET, I'd like to be able to work on any project that comes
			along rather than simply answering "Sorry, I can't help. I don't
			program in that frameowork/language." I started my career as a
			Windows-only web programmer and over time, learned my way through
			FreeBSD, Apache, Perl and Catalyst.
		</p>
		<p>
			Will I be an 'expert' in Ruby or Python when I'm done? Surely not.
			But 3 years ago, I couldn't program in Perl either and 10 years
			ago, I could't even begin to get a *nix OS installed and
		configured to run Apache.
		</p>
		
		<h2>The Frameworks</h2>
		<p>
			For this adventure, I've picked what might be considered the most
			popular mvc framework for each language. These frameworks will be:
		</p>
		<h3><a href="http://www.asp.net/mvc/">ASP.NET MVC: Preview 3</a></h3>
		<p>
			While my day job includes programming in ASP.NET 2.0 WebForms and
			I have followed the MVC progress, I have not yet created an
			ASP.NET MVC app. Just to be a little more challenging, I will be
			doing this project in C# instead of the usual VB.NET that we use
			at work.
		</p>
		<h3><a href="http://www.cakephp.org/">CakePHP: 1.2RC2</a></h3>
		<p>
			I've read as much of the manual as I can at this point. This will
			be my first CakePHP application and my first PHP programming since
			PHP4 was released.
		</p>
		<h3><a href="http://www.catalystframework.org/">Catalyst: 5.7</a></h3>
		<p>
			Catalyst is one of the many MVC frameworks written in Perl. I've
			been using Perl and Catalyst for about 3 years. While this could
			be my strongest framework, I'll be using none of my existing bag
			of tricks.
		</p>
		<h3><a href="http://www.djangoproject.com/">Django: 0.96</a></h3>
		<p>
			I've never written a single line of Python before. After looking
			at the Python and Ruby syntax on multiple occasions in the past,
			Python seems to be the language furthest from how my brain works
			now compared to Perl/C#.
		</p>
		<h3><a href="http://www.rubyonrails.org/">Ruby on Rails: 2.1</a></h3>
		<p>
			Just like Django/Python, I've never written a line if Ruby in my
			life. I've been through the screen casts and sifted around a few
			articles and book excerpts. However, unlike Python, Ruby seems
			to fit how my brain works with Perl a littler cleaner.
		</p>

		<h2>The Application</h2>
		<p>
			I'm sick of the usual blog demo applications so I'm going to go
			with something a little closer to my heart. Those who know me know
			that I'm a big fan of hot food: If you don't sweat, it's not hot
			enough. So for this challenge, I'm going to build a site that
			tracks lists of restaurants and a list of menu items for each
			eatery hot dish.
		</p>
		<p>
			The application will be built in stages. Each stage will be built
			in every framework before moving on to the next step. After
			completing each stage, I'll post a new blog entry covering what
			code needed to be created in each framework and the pros and cons
			each framework provides. You can follow the source code progress
			in my subversion repository:
		</p>
		<p>
			<a href="http://svn.icantfocus.com/articles/mvc-marathon/">
				http://svn.icantfocus.com/articles/mvc-marathon/
			</a>
		</p>

		<h2>Step by Step</h2>
		<ol>
			<li><a href="/blog/mvc-marathon-part-1-creating-a-new-application/">Part 1. Creating a New Application</a></li>
			<li>Part 2. Creating/Configuring a Database</li>
			<li>Part 3. Creating Site HTML/CSS Templates</li>
			<li>Part 4. Creating the Restaurants Model</li>
			<li>Part 5. CRUD Restaurants w/Scaffolding</li>
			<li>Part 6. Adding Menu Items w/o Scaffolding</li>
			<li>Part 7. Adding AJAX</li>
			<li>Part 8. Adding Atom Feeds</li>
			<li>Part 9. Adding Unit Tests</li>
			<li>Part 10. Adding User Tests</li>
			<li>Part 11. Adding REST API</li>
			<li>Part 12. Adding User Authentication</li>
			<li>...</li>
		</ol>
	</body>
</html>
]]>
        
    </content>
</entry>

<entry>
    <title>Twitter</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/www/twitter/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.876</id>

    <published>2008-05-18T01:53:14Z</published>
    <updated>2008-05-18T01:54:10Z</updated>

    <summary>I&apos;ve given in. I now have a Twitter account....</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="WWW" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="twitter" label="twitter" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>I've given in. I now have a <a href="https://twitter.com/claco/">Twitter account</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Iron Man Rocketh</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/movies/iron-man-rocketh/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.874</id>

    <published>2008-05-04T16:24:07Z</published>
    <updated>2008-05-04T16:25:47Z</updated>

    <summary>A co-worker and I went to see Iron Man Friday. It totally kicked ass. I would put it on the...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="Movies" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ironman" label="iron man" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>A co-worker and I went to see Iron Man Friday. It totally kicked ass. I would put it on the same level as Batman Begins. I would definitely pay to see that again.</p>

<p>They also had a preview for the new Batman movie, which also looks kick ass.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Notebook Mouse</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/notebook-mouse/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.873</id>

    <published>2008-05-04T16:05:42Z</published>
    <updated>2008-05-04T16:22:57Z</updated>

    <summary>I got tired of using a corded mouse on he MBP, so I broke down and bought a Logitech V450....</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
    <category term="logitech" label="logitech" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mouse" label="mouse" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="v450" label="v450" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>I got tired of using a corded mouse on he MBP, so I broke down and bought a <a href="http://www.logitech.com/index.cfm/notebook_products/mice/devices/143">Logitech V450</a>. It's not a bad little mouse. Not too small. Small dongle.</p>

<p><a href="http://today.icantfocus.com/blog/blog/images/2188.1.0.jpg"><img src="http://today.icantfocus.com/blog/blog/images/2188.1.0-thumb-250x166.jpg" width="250" height="166" alt="LogiechV450.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></p>

<p>I really wanted a Bluetooth mouse, but nobody carries them. Not Best Buy. Not Circuit City. Go figure.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Castle Conquered. Sickness Surprise.</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/offtopic/castle-conquered-sickness-surprise/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.872</id>

    <published>2008-02-20T01:36:04Z</published>
    <updated>2008-02-20T01:38:34Z</updated>

    <summary>We managed to get to the castle and back safely, and had a great time in the process. Of course,...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="OffTopic" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>We managed to get to the castle and back safely, and had a great time in the process. Of course, I woke up the next morning at 4am, with a heavy fever and the usual hot/cold flashes.</p>

<p>How fun. Two days off work. Might go back tomorrow. Sigh.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Weekend at the Castle</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/offtopic/weekend-at-the-castle/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.871</id>

    <published>2008-02-15T01:43:56Z</published>
    <updated>2008-02-15T01:43:56Z</updated>

    <summary>Margeaux and I are headed to Ravenwood Castle tomorrow for the weekend. Great place for a getaway weekend. Castle rooms....</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="OffTopic" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="castle" label="castle" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ravenwood" label="ravenwood" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>Margeaux and I are headed to <a href="http://www.ravenwoodcastle.com/">Ravenwood Castle</a> tomorrow for the weekend.</p>

<p><img src="/blog/castle-dining.jpg" alt="castle-dining.jpg" border="0" width="452" height="301" /></p>

<p>Great place for a getaway weekend. Castle rooms. Cottages. Out in the middle of nowhere. Great food without being too cheesy. :-)</p>]]>
        
    </content>
</entry>

<entry>
    <title>Sites I Read: Part 1536</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/www/sites-i-read-part-1536/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.870</id>

    <published>2008-02-15T01:36:43Z</published>
    <updated>2008-02-15T01:36:43Z</updated>

    <summary>The older I get, the more fed up I get with our current government. This also means my urge to...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="Politics" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="WWW" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="links" label="links" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>The older I get, the more fed up I get with our current government. This also means my urge to vote has changed and the sites I read are more or less political-action centric.</p>

<p>Here's what I read now a days in between tech sites:</p>

<ul>
<li><a href="http://www.speaker.gov/blog/">The Gavel</a></li>
<li><a href="http://crooksandliars.com/">Crooks &amp; Liars</a></li>
<li><a href="http://dailykos.com/">Daily Kos</a></li>
<li><a href="http://tpmmuckraker.talkingpointsmemo.com/">TPM Muckraker</a></li>
<li><a href="http://reddit.com/">Reddit</a></li>
<li><a href="http://boingboing.net/">Boing Boing</a></li>
</ul>

<p>The first four are what I think are some of the best sources or real news, now that shit that FOX molests and twists and claims is news.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>This Just In: House BalzUp to George</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/politics/this-just-in-house-balzup-to-george/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.869</id>

    <published>2008-02-15T01:08:50Z</published>
    <updated>2008-02-15T01:13:53Z</updated>

    <summary>From The Gavel Today, the House has just approved H.Res. 982 by a vote of 223-32-1, which provides for the...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="Politics" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="contempt" label="contempt" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="fisa" label="fisa" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="house" label="house" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>From <a href="http://www.speaker.gov/blog/?p=1138">The Gavel</a></p>

<blockquote>Today, the House has just approved H.Res. 982 by a vote of 223-32-1, which provides for the adoption of H.Res. 979, recommending that the House of Representatives find Harriet Miers, former White House Counsel, and Joshua Bolten, the White House Chief of Staff, in contempt of Congress for refusal to comply with subpoenas issued by the Judiciary Committee. These subpoenas were issued as part of the Committee's investigation into the firings of a number of United States Attorneys and matters concerning the politicization of the Justice Department. This resolution also provides for adoption of H.Res. 980 - Authorizing the Committee on the Judiciary to initiate or intervene in judicial proceedings to enforce certain subpoenas.</blockquote>

<p>Now that the Democratic Senate has proved itself spineless, the House steps up. Finally, some contempt charges for people who don't testify. They also declinde doing anything with FISA, read Condi the riot act on WMD reports. Finally, that's what we want to see. Them not taking any more shit from this administration.</p>]]>
        
    </content>
</entry>

<entry>
    <title>The Senate Sellout</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/wtf/the-senate-sellout/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.868</id>

    <published>2008-02-13T01:58:49Z</published>
    <updated>2008-02-13T01:58:49Z</updated>

    <summary>Today the Senate sold us out and approved a new FISA bill with immunity for the telcos. Apparently, giving the...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="WTF?" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>Today the Senate sold us out and approved a new FISA bill with immunity for the telcos. Apparently, giving the telecom industry immunity for breaking the law, at the request of the government, is more important than our rights to not be spied on. Let's be clear here. FISA worked. The President chose to ignore the law and the like of people like ATT chose to break the law. At least some people understood not breaking the law was a smart thing, like Qwest, who told the government to go pound salt. Let's not forget that the minute the government stopped paying its bills, ATT dropped their taps without nary a hint of hesitation.</p>

<h2>An Endless List</h2>

<p>Now, we have telco immunity. Illegal wiretapping, on US citizens, not just foreign connections. Water-boarding. A new Attorneys General who refuses to even acknowledge that it's torture. Refuses to investigate water-boarding and wiretapping. Refuse to investigate and lay down the law on just about everything. We have Gitmo. Holding anyone we call a terrorist forever, without trial. Secret trials. CIA erasing tapes. Electronic voting machines that clearly don't work. Medial decisions being made by the insurance companies and not the doctors. The TSA/Borders copying peoples hard drives and hone lists. And that's all just the tip of the iceberg.</p>

<h2>When does it end?</h2>

<p>This is country is going to shit, and it's apparently in a hurry from the looks of things. It's depressing at best. And to make things worse, not matter who we vote in, nothing changes. I personally think we're in for a future with one of three possibilities.</p>

<ol>
<li><p>People rebel. Mass protests the likes of which we've never seen, to the point that entire industries shut down.</p></li>
<li><p>People revolt. The electronic way. The tech generation, the blog generation make like so difficult for old time news media that they have to put these issues on the front page day after day.</p></li>
<li><p>People vote. Early indications are that the youth vote is off the charts this year. This may end up with someone in office who is finally tired of all of the bullshit, and becomes a great leader, and a sever pain in the ass to Congress and Big Business.</p></li>
</ol>

<h2>When I am King</h2>

<p>Thus quoth Adam Carolla: When I am king:</p>

<ol>
<li><p>Congress will no longer get free health care. Let them also feel the joys of rising premiums, denials for pre-existing conditions, and paperwork hell when the insurance company thinks it knows better than your doctor. Sure I'd prefer government guaranteed health care because, if it works for Congress, it can work for everyone, esp. children. But the spineless bastards won't even fund children, so that will never happen.</p></li>
<li><p>Paper ballots are mandatory. I take a pen, and mark a checkbox. That system worked or centuries and still works now. No dangling chads, no crashing voting machines. Every vote needs to count.</p></li>
<li><p>Everything that a public servant does on our time and our dime, needs to be open. No secrets. If you work for the taxpayer, you need to answer to the taxpayer. No sealed records. No executive privilege. No closed door hearings.</p></li>
<li><p>No more pork and hidden bills. Every bill is separate. No tying funding for one thing to approval for another. Every person in Congress must read what the are voting on. <em>EVERY</em> member must attend votes, and must vote yes or no.</p></li>
<li><p>Congress shall not be allowed to receive ANY money or gifts from any person other than their direct family (like xmas, bday), nor shall they be allowed to accept or earn any income other than what we the people, pay them to do their jobs. Yes, no stock options either.</p></li>
<li><p>No person, US citizen or otherwise, shall be held indefinitely by our government, without charges, without lawyers or without trials. Water-boarding IS torture and shall not be used. Ever. No exceptions. If it was good enough to convict a Japanese officer for using it on our troops, it's good enough for us not to be able to use it on anyone else now.</p></li>
<li><p>The US shall remove troops from foreign countries and mind our own fucking business for a change. No one is trying to bomb Norway are they? No. Because they mind their own fucking business. People want to bomb us now because we keep picking a side, sending weapons, abandoning that side, choosing another, sending weapons, then invading eventually leaving nothing but ruin while we sit back and suck down McDicks and Cokes and watch the Simpsons.. Rinse. Lather. Repeat.</p></li>
<li><p>The government shall hence forth stop being the copyright police and making laws to protect [failing] industries business models. I'm looking at you RIAA and the BSA. File lawsuits if you want. Take people to court. But stop buying our Congress just so you can get special treatment and laws. The FBI has more important things to do than execute your raids on someone selling bootleg CDs or someone reported to have unlicensed software. Other industries don't get to use the FBI as their personal police force and neither shall you. The government shall also stay the fuck out of sports investigations. It's sports. If someone's doping, it's the leagues problem. Get back to work.</p></li>
<li><p>The government shall put up or shut on nuclear issues. With all the money wasted on the Iraq war and all the rhetoric on Iran, we could've easily went into Iran and built them a nuclear power infrastructure, negating and worries and excuses of them making weapons just because they're researching enrichment. Be part of the solution, not the problem. If no one else should have WMDs, then neither should we. If we must have them for defense purpose, then so should everyone else. We weren't responsible when we invented them, so let's not inspect other fledgling countries to be that way either. IF you're worried about them using them to attack us, see rule #7.</p></li>
<li><p>Revoke the DMCA. No longer shall any industry be able to tell people what they can and can't do with products they've purchased as long as they are in their own homes.</p></li>
<li><p>Repeal <em>all</em> tax breaks for businesses. I can't get a 5 year no-tax break for moving into a city and neither should they. No longer shall the individual have to pay increasing taxes to cover the tax breaks of corporations.</p></li>
<li><p>Place a cap on severance, salary and options packages that CEOs receive. No longer shall corporate fat-cats get $35 million to leave a company that they just drove into the ground after firing 10,000 employees.</p></li>
<li><p>There is no such thing as executive privilege. You do what the law says. Period. See rule #3.</p></li>
<li><p>No government contracts shall be given on a no-bid basis, nor shall they be given to any company that the President, Vice President or any member of congress owns, used to own, or is on the board. Non of said contractors overseas shall be immune from prosecution, nor shall those case be dismissed as 'state secrets'.</p></li>
</ol>

<p>That should do it for starters. :-)</p>

<h2>P.S.</h2>

<p>Yes, I have ATT DSL. Like we actually have a choice. Thank you telco dereg act of 96; also worthless.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Failed Celebrity Merchandising Products</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/humor/failed-celebrity-merchandising-products/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.867</id>

    <published>2008-02-12T04:36:36Z</published>
    <updated>2008-02-12T04:36:36Z</updated>

    <summary> Keith Ledger Alarm Clock Anna Nicole Smith Blow-up Doll O.J. Simpson Kitchen Set Phil Spector Gun Cleaning Kit John...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="Humor" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<ul>
<li>Keith Ledger Alarm Clock</li>
<li>Anna Nicole Smith Blow-up Doll</li>
<li>O.J. Simpson Kitchen Set</li>
<li>Phil Spector Gun Cleaning Kit</li>
<li>John Bobbit Athletic Cups</li>
<li>Elvis Presley Bathroom Mat Set</li>
</ul>

<p>You get the idea. Add your own. :-)</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Network In a VM, In a Network, In a VM</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/networking/network-in-a-vm-in-a-network-in-a-vm/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.866</id>

    <published>2008-02-09T18:08:19Z</published>
    <updated>2008-02-09T18:08:19Z</updated>

    <summary>Things that make my brain hurt. I can&apos;t actually believe this works. I have my MacBook Pro running on my...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="Networking" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        Things that make my brain hurt. I can&apos;t actually believe this works.

I have my MacBook Pro running on my internal network, which is NATed being my router, which also NATs my internet connection (That&apos;s another story). I tried the OSX Cisco VPN client, and it was less than stable so I deleted it.

Now, I have Parallels running XP. Within that XP install, I installed the Windows Cisco VPN client...and it actually works. Even more fun, while XP is VPNed into work, my OSX network is unaffected and still local. :-)
        
    </content>
</entry>

<entry>
    <title>Stop. Hammer Time.</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/humor/stop-hammer-time/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.865</id>

    <published>2008-02-09T03:49:42Z</published>
    <updated>2008-02-09T03:49:42Z</updated>

    <summary> I love the internet. :-)...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="Humor" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<div style="text-align:center;"><img src="http://today.icantfocus.com/blog/hammerzeit.jpg" alt="hammerzeit.jpg" border="0" width="480" height="387" /></div>

<p><br />
I love the internet. :-)</p>]]>
        
    </content>
</entry>

<entry>
    <title>Visual Studio Express Editions</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/microshaft/visual-studio-express-editions/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.864</id>

    <published>2008-02-05T23:56:31Z</published>
    <updated>2008-02-06T00:08:07Z</updated>

    <summary>I make no attempt to hide the fact that I do .NET by day and Perl by night. I&apos;ll probably...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="MicroShaft" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="aspnet" label="asp.net" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="vbnet" label="vb.net" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="visualstudioexpress" label="visual studio express" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>I make no attempt to hide the fact that I do .NET by day and Perl by night. I'll probably never do home projects in .NET, and I'll probably never do Perl projects at $work. Life is good like that.</p>

<p>At home, I use Catalyst, the best MVC framework for Perl. At work, I loathe ASP.NET and all of the hacking one has to do with its page lifecycle just to get some good combination if events, dynamic controls and control reuse. It's a slow form of torture in my book.</p>

<p>Much to my joy, The new ASP.NET 3.5 Extensions coming out have a nice shiny new ASP.NET MVC Framework, and it actually doesn't suck too bad. As such, I need to tinker with it and the code from work to see if it fits into our plan, breaking m lost fast rule about never working on $work code @ $home.</p>

<p>But I digress. One of the biggest problems Microsoft had in the past was that the development tools were too damn expensive for the home programmer. Lucky for us, they got wise and started release the "Express" editions of VB.NET and ASP.NET IDEs.</p>

<p>Sure, I have to do my core stuff in VB.NET Express, and then switch to ASP/NET Express to work on pages, and testing/source control isn't integrated.</p>

<p>Oh well, Thanks MS either way. Nice free powerful tools. Now you're starting to get it. :-)</p>]]>
        
    </content>
</entry>

<entry>
    <title>SuperBowl Done. Great Game.</title>
    <link rel="alternate" type="text/html" href="http://today.icantfocus.com/blog/tv/superbowl-done-great-game/" />
    <id>tag:today.icantfocus.com,2008:/blog//2.863</id>

    <published>2008-02-04T03:33:05Z</published>
    <updated>2008-02-04T03:36:44Z</updated>

    <summary>I am disappointed that the Patriots lost the perfect record, but this was a good game. and I don&apos;t even...</summary>
    <author>
        <name>Christopher H. Laco</name>
        <uri>http://today.icantfocus.com/blog/</uri>
    </author>
    
        <category term="TV" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="football" label="football" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="superbowl" label="superbowl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://today.icantfocus.com/blog/">
        <![CDATA[<p>I am disappointed that the Patriots lost the perfect record, but this was a good game. and I don't even really care about football. Low Scores. Close spread. Touch defense on both sides.</p>

<p>This was a nail biter right up to the end. Even some of the very last hail mary passes in the last 60 seconds had a really good chance at putting the Patriots back on top. That's a good game in any book.</p>]]>
        
    </content>
</entry>

</feed>
