<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4289933450592899774</id><updated>2011-07-08T00:55:28.795-07:00</updated><category term='fixtures'/><category term='web application development'/><category term='google analytics'/><category term='programming rates'/><category term='php'/><category term='Source Control'/><category term='apptrain'/><category term='kpoz nfl ncaa rankings ruby php rails'/><category term='renaissance programming'/><category term='Automated Deployments'/><category term='google chrome'/><category term='will_paginate'/><category term='Informational Websites'/><category term='installing chrome'/><category term='custom home page'/><category term='Collaborative Documentation'/><category term='recession special'/><category term='MATLAB'/><category term='AppTrain Products'/><category term='rails'/><category term='spam'/><category term='Collaborative Project Management'/><category term='Issue Tracking'/><category term='kpoz sports'/><category term='todo list'/><category term='focus'/><title type='text'>AppTrain</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-4242229881472585843</id><published>2010-02-24T12:53:00.000-08:00</published><updated>2010-04-14T08:55:08.413-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='will_paginate'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><title type='text'>will_paginate gem gets stuck on the first page.</title><content type='html'>&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The latest version of will_paginate ignores the page parameter using Rails &gt; 2.2&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;recs = User.paginate, :page =&gt; 1 , :per_page =&gt; 1&lt;br /&gt;recs2 = User.paginate, :page =&gt; 2 , :per_page =&gt; 1&lt;br /&gt;&lt;br /&gt;assert_not_equal recs.first, recs2.first&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Solution&lt;/span&gt;&lt;br /&gt;Using the 'order' parameter fixes the problem:&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;recs = User.paginate, :page =&gt; 1 , :per_page =&gt; 1 , :order =&gt; 'username'&lt;br /&gt;recs2 = User.paginate, :page =&gt; 2 , :per_page =&gt; 1 , : order =&gt; 'username'&lt;br /&gt;&lt;br /&gt;assert_not_equal recs.first, recs2.first&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-4242229881472585843?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/4242229881472585843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=4242229881472585843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/4242229881472585843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/4242229881472585843'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2010/02/willpaginate-gem-get-stuck-on-first.html' title='will_paginate gem gets stuck on the first page.'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-3819247195677695330</id><published>2009-12-08T11:46:00.000-08:00</published><updated>2009-12-08T12:13:57.520-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='fixtures'/><title type='text'>undefined method `reflect_on_all_associations'</title><content type='html'>Using Rails 2.3.5 , I started recieving this error when running all unit tests on an older application.: &lt;br /&gt;&lt;br /&gt;&lt;code&gt; &lt;br /&gt; 1) Error:&lt;br /&gt;test_truth(CommitmentTest):&lt;br /&gt;NoMethodError: undefined method `reflect_on_all_associations' for Object:Class&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;1 tests, 0 assertions, 0 failures, 1 errors&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The problem was happening when Rails was trying to load fixtures. Removing all the fixures removed the error.  After adding back a few at a time, I narrowed the problem down to the Fixtures for an object called Content :&lt;br /&gt;&lt;br /&gt;The Content object has a field called type, which is reserved for Single Table Inheritance.   renaming that field solved the problem.&lt;br /&gt;&lt;br /&gt;The vague &lt;span style="font-weight:bold;"&gt;undefined method `reflect_on_all_associations'&lt;/span&gt; can have a variety of sources, In general, it means there's a problem with a Model object.&lt;br /&gt;&lt;br /&gt;See Also:&lt;br /&gt;http://iridescenturchin.wordpress.com/page/2/&lt;br /&gt;http://sourceforge.jp/projects/rubycocoa/lists/archive/devel/2008-January/001293.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-3819247195677695330?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/3819247195677695330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=3819247195677695330' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/3819247195677695330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/3819247195677695330'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2009/12/undefined-method-reflectonallassociatio.html' title='undefined method `reflect_on_all_associations&apos;'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-2077996458268577307</id><published>2009-09-16T04:52:00.000-07:00</published><updated>2009-09-16T05:04:53.628-07:00</updated><title type='text'>undefined method `assert_difference'</title><content type='html'>I struggled with this error after upgrading an older application to Rails 2.3 . assert_difference has not left, but it took me a while to find out why I got this error.  The parent class TestCase now lives in the ActiveSupport module.&lt;br /&gt;&lt;br /&gt;Old code:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;div style="text-align: left; color: rgb(51, 51, 255);"&gt;&lt;code&gt;require File.dirname(__FILE__) + '/../test_helper'&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class UserTest &lt; Test::Unit::TestCase&lt;/code&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Solution:&lt;br /&gt;&lt;code style="color: rgb(51, 51, 255);"&gt;&lt;br /&gt;require File.dirname(__FILE__) + '/../test_helper'&lt;br /&gt;&lt;br /&gt;class UserTest &lt; &lt;/code&gt;&lt;code style="color: rgb(51, 51, 255);"&gt;&lt;span style="color: rgb(51, 255, 255);"&gt;ActiveSupport&lt;/span&gt;::TestCase&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-2077996458268577307?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/2077996458268577307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=2077996458268577307' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/2077996458268577307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/2077996458268577307'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2009/09/undefined-method-assertdifference.html' title='undefined method `assert_difference&apos;'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-9023917922621317967</id><published>2009-02-16T07:50:00.000-08:00</published><updated>2009-02-16T09:47:52.683-08:00</updated><title type='text'>Code Generation using Rails, Rake and ERB</title><content type='html'>Two great things about Ruby are it's brevity and it's dynamic nature.  A great way to introduce Ruby to a project written in another language is some simple code generation.&lt;br /&gt;&lt;br /&gt;Say we need some XML files that represent data currently stored in a database.  To make it simple, our desired file will use the table name pluralized as the parent element, and contain nested singular elements, one for each record in the database. Within the record elements, each field name is an element, and the value of that field is the text value of that element.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;div  style="background: rgb(150, 150, 150) none repeat scroll 0% 0%; color: rgb(51, 51, 255); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-size:;line-height: 11px;}"&gt;&lt;span style="font-family:arial;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&amp;lt;bonds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="bonds.xsd"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; &amp;lt;bond&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;issuer&amp;gt;GENERAL MOTORS CORP&amp;lt;/issuer&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;rate&amp;gt;0.072&amp;lt;/rate&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;coupon&amp;gt;Fixed&amp;lt;/coupon&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;maturity&amp;gt;1/15/2011&amp;lt;/maturity&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;type&amp;gt;US Corporate Debentures&amp;lt;/type&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;price&amp;gt;19.5&amp;lt;/price&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;yield&amp;gt;1.29582&amp;lt;/yield&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;callable&amp;gt;true&amp;lt;/callable&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;frequency&amp;gt;Semi-Annual&amp;lt;/frequency&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;first_payment&amp;gt;7/15/2001&amp;lt;/first_payment&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; &amp;lt;/bond&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; &amp;lt;bond&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;issuer&amp;gt;FEDERAL NATL MTG ASSN&amp;lt;/issuer&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;rate&amp;gt;0.045&amp;lt;/rate&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;coupon&amp;gt;Variable&amp;lt;/coupon&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;maturity&amp;gt;2/17/2012&amp;lt;/maturity&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;type&amp;gt;US Agency Retail Note&amp;lt;/type&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;price&amp;gt;&amp;lt;/price&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;yield&amp;gt;&amp;lt;/yield&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;callable&amp;gt;Yes&amp;lt;/callable&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;frequency&amp;gt;Semi-Annual&amp;lt;/frequency&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;    &amp;lt;first_payment&amp;gt;2/17/2005&amp;lt;/first_payment&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; &amp;lt;/bond&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&amp;lt;/bonds&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Let's generate this file from Rake.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. Generate a new Rails application by typing rails &lt;span style="font-style:italic;"&gt;code_generator&lt;/span&gt; (or whatever you wish to call your helper application)&lt;br /&gt;2. Change RAILS_ROOT/config/database.yml to point to your applications DB&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;div style="background: rgb(150, 150, 150) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(51, 51, 255); font-family: arial; font-size: ;line-height: 11px;;"&gt;development:&lt;br /&gt;    adapter: sqlite3&lt;br /&gt;    database: db/development.sqlite3&lt;br /&gt;    timeout: 5000&lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3. Create a file named something like generator.rb in  RAILS_ROOT/lib/tasks&lt;br /&gt;4. Require ERB at the top of this file.&lt;br /&gt;&lt;div style="background: rgb(150, 150, 150) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(51, 51, 255); font-family: arial; font-size: ;line-height: 11px;;"&gt;require 'erb'&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;5. Add a method to send the contents of a &lt;span style="font-weight: bold; font-style: italic;"&gt;table&lt;/span&gt; to an ERB template named table.&lt;span style="font-weight: bold; font-style: italic;"&gt;type&lt;/span&gt;.erb . Notice the second to last line of the method below.  It's where we pass the &lt;span style="font-weight: bold;"&gt;binding&lt;/span&gt; method to ERB.  this will make all our variables and methods available to the ERB template we create later, including the &lt;span style="font-weight: bold;"&gt;dataset&lt;/span&gt; variable and the table &lt;span style="font-weight: bold;"&gt;variable&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;div style="background: rgb(150, 150, 150) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(51, 51, 255); font-family: arial; font-size: ;line-height: 11px;;"&gt;&lt;br /&gt;def process_erb(type,table)&lt;br /&gt;&lt;br /&gt;  # Grab our ERB template&lt;br /&gt;  template = ERB.new(IO.readlines("lib/tasks/table.#{type}.erb").to_s&lt;br /&gt;&lt;br /&gt;  # Use Active Record to get our dataset from the DB&lt;br /&gt;  dataset = ActiveRecord::Base.connection.execute("select * from #{table.underscore}")&lt;br /&gt;&lt;br /&gt;  # Create a new file for the ERB output&lt;br /&gt;  file_name = "#{file_name}.#{type}"&lt;br /&gt;  f = File.new("#{file_name}",'w')&lt;br /&gt;&lt;br /&gt;  # Write the ERB output to the new file:&lt;br /&gt;  f.puts(template.result(binding))&lt;br /&gt;  f.close&lt;br /&gt;end&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;6 . Add a rake task to call our method to create an XML file.&lt;br /&gt;&lt;pre&gt;&lt;div style="background: rgb(150, 150, 150) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(51, 51, 255); font-family: arial; font-size: ;line-height: 11px;;"&gt;TABLE = ENV['TABLE']&lt;br /&gt;&lt;br /&gt;task :create_xml =&gt; [:environment] do&lt;br /&gt;  process_erb("xml",TABLE)&lt;br /&gt;end&lt;/div&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;7. All we need is the ERB template named &lt;span style="font-weight: bold;"&gt;table.xml&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.erb &lt;/span&gt; We write this taking advantage of the &lt;span style="font-weight: bold;"&gt;dataset&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;table&lt;/span&gt; variables available to us from the ruby binding.&lt;br /&gt;&lt;pre&gt;&lt;div style="background: rgb(150, 150, 150) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(51, 51, 255); font-family: arial; font-size: ;line-height: 11px;;"&gt;&lt;br /&gt;&amp;lt;&amp;lt;%=table.underscore.pluralize%&amp;gt;&amp;gt;&lt;br /&gt;  &amp;lt;% dataset.each{|row| %&amp;gt;&lt;br /&gt;      &amp;lt;&amp;lt;%=table.underscore.pluralize%&amp;gt;&amp;gt;&lt;br /&gt;      &amp;lt;% row.each{ |k,v| %&amp;gt;&lt;br /&gt;          &amp;lt;&amp;lt;%=k%&amp;gt;&amp;gt;&amp;lt;%=v%&amp;gt;&amp;lt;/&amp;lt;%=k%&amp;gt;&amp;gt;&lt;br /&gt;      &amp;lt;% } %&amp;gt;&lt;br /&gt;      &amp;lt;/&amp;lt;%=table%&amp;gt;&amp;gt;&lt;br /&gt;  &amp;lt;% } %&amp;gt;&lt;br /&gt;&amp;lt;/&amp;lt;%= table.underscore.pluralize %&amp;gt;&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;8.  Our method expects a table name at the command line , so we'll call it with&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;rake create_xml TABLE=bond&lt;br /&gt;&lt;br /&gt;The result is a bonds.xml file with our desired data!&lt;br /&gt;&lt;br /&gt;9. Notice how our template name contains our desired file type, xml, then our method takes this as a parameter.  How easy will it be now to create a table.&lt;span style="font-weight: bold;"&gt;java&lt;/span&gt;.erb template, and call it?  How about a template called table.php.erb ?&lt;br /&gt;&lt;br /&gt;10.  How about running this generator from jRuby to access an Oracle database?&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;div style="background: rgb(187, 187, 187) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(51, 51, 255); font-family: arial; font-size: ;line-height: 11px;;"&gt;development:&lt;br /&gt;    adapter: jdbc&lt;br /&gt;    driver: oracle.jdbc.driver.OracleDriver&lt;br /&gt;    url: jdbc:oracle:thin:@oracle.apptrain.com:1521:xe&lt;br /&gt;    username: test&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-9023917922621317967?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/9023917922621317967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=9023917922621317967' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/9023917922621317967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/9023917922621317967'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2009/02/code-generation-using-rails-rake-and.html' title='Code Generation using Rails, Rake and ERB'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-2765476219057165070</id><published>2009-02-06T06:56:00.000-08:00</published><updated>2009-02-12T06:27:59.585-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Informational Websites'/><category scheme='http://www.blogger.com/atom/ns#' term='AppTrain Products'/><title type='text'>Informational Websites</title><content type='html'>&lt;div align="left"&gt;&lt;br /&gt;An Informational Website is a collection of web pages, images, text and other digital assets that are all hosted on web servers. The pages of a website can be accessed from a URL called the homepage. The URL organizes them into a hierarchy. The hyperlinks between them control how viewers perceive the image and how the traffic flows between the different parts of the site. &lt;/div&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;Home Page&lt;/strong&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;| &lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;Main Section&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;^&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;Sub Sections&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;^ ^&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;More Sub Sections&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Examples of basic Informational Sites created by AppTrain Software are &lt;a href="http://www.allenlock.com/"&gt;Allenlock.com&lt;/a&gt; and &lt;a href="http://apptrain.com"&gt;AppTrain.com&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;&lt;div style="font-weight: bold;" align="left"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;Be seen on the internet!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Informational Websites are an effective and exciting way to promote your business. AppTrain designs all websites so they can easily grow and change along with your company. &lt;a href="http://apptrain.com"&gt;Contact AppTrain&lt;/a&gt; to be seen on the internet.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-2765476219057165070?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/2765476219057165070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=2765476219057165070' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/2765476219057165070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/2765476219057165070'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2009/02/informational-websites.html' title='Informational Websites'/><author><name>Jenn</name><uri>http://www.blogger.com/profile/07433080915751328807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-2843129432984617307</id><published>2009-01-21T11:37:00.000-08:00</published><updated>2009-01-22T05:53:57.438-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='todo list'/><title type='text'>The To-do List</title><content type='html'>&lt;div&gt;I find myself taking a lot of hand written notes to organize my thoughts. Making a To-do List is a simple solution to staying organized. Writing the list by hand makes it concrete and more real.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Listing Agendas, Assignments, and other needs is a great technique to better organize tasks by staying efficient. Everyday I can overview what I have done and what needs to be done. I never imagine something so simple like making a written list could have such a tremendous impact on my efficiency throughout the day. This posting started as a plan on my To-do list.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href=""&gt;&lt;img id="BLOGGER_PHOTO_ID_5291236300069735058" style="width: 289px; height: 206px;" alt="" src="http://1.bp.blogspot.com/_KlFXN0-gJzc/SW4_YXhPCpI/AAAAAAAAACU/0wWK1bWVuxw/s400/To-Do.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;To-do List Tips:&lt;br /&gt;· Name the category or topic something clear and short (1 or 2 words)&lt;br /&gt;· Rank or write in the order of importance (color code or numbering)&lt;br /&gt;· List smaller sub-categories (assign pages to that specific task)&lt;br /&gt;· Establish due dates or time frames&lt;br /&gt;· Cross out executed jobs ( Fold pages of previous list &amp;amp; rewrite)&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-2843129432984617307?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/2843129432984617307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=2843129432984617307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/2843129432984617307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/2843129432984617307'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2009/01/to-do-list.html' title='The To-do List'/><author><name>Jenn</name><uri>http://www.blogger.com/profile/07433080915751328807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_KlFXN0-gJzc/SW4_YXhPCpI/AAAAAAAAACU/0wWK1bWVuxw/s72-c/To-Do.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-4342964784431910420</id><published>2009-01-07T13:02:00.000-08:00</published><updated>2009-01-09T07:01:30.830-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MATLAB'/><category scheme='http://www.blogger.com/atom/ns#' term='renaissance programming'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='kpoz sports'/><title type='text'>Renaissance Programming</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;Integrating Ruby Rails, PHP, MATLAB and The Google Docs API for KpozSports.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;i&gt;The Renaissance Programmer is productive in multiple programming languages and platforms.  Like the Renaissance Architect, He understands  what's important when building software; the symmetry and simplicity of the end product.&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div id="eipa" style="padding: 1em 0pt; text-align: center;"&gt;&lt;img src="http://martinicity.net/files/Coliseum.jpg" style="width: 640px; height: 480px;" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The initial challenge when first working for &lt;a href="http://kpozsports.com/" id="zxeq" title="KPozSports"&gt;KPozSports&lt;/a&gt; was that the existing site was written in &lt;a href="http://php.meetup.com/101/" id="erog" title="PHP"&gt;PHP&lt;/a&gt; .  I've been working mostly with &lt;a href="http://www.orug.org/"&gt;Ruby&lt;/a&gt; and &lt;a href="http://www.actsasconference.com/"&gt;Rails&lt;/a&gt; for the past few years.  And &lt;a title="Jim" href="http://jimpoz.com/" id="uqt9"&gt;Jim&lt;/a&gt; on our team is a talented PHP developer. &lt;b&gt;So how can Ruby and PHP developers work together on the same site?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;1) Have a Clear Division of Responsibilities.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On any project, each developer needs to work toward specific functional goals.  The language or tools they use to meet these goals is ancillary.  Although KPoz is a small company, we don't mind working with multiple languages to get our jobs done.  &lt;a title="Rob" href="http://books.global-investor.com/books/16279/Robert-Kissell-and-Morton-Glantz/Optimal-Trading-Strategies/" id="ge93"&gt;Rob&lt;/a&gt; is an expert with the &lt;a title="MATLAB" href="http://www.mathworks.com/products/matlab/" id="k835"&gt;MATLAB&lt;/a&gt;  programming language.  All of our computationally intensive work is done in MATLAB. The PHP code is primarily there for the Web interface.  &lt;a title="Jim" href="http://jimpoz.com/" id="g42h"&gt;Jim&lt;/a&gt;'s been building web sites for years, and it's his tool of choice. Adding some Ruby code to the project didn't bother anyone because they were more interested in the resulting functionality.  My primarily responsibility was to gather data from several sources, organize it, and integrate the PHP site with the MATLAB background processes.  &lt;a title="Ruby" href="http://www.ruby-lang.org/en/" id="lfqm"&gt;Ruby&lt;/a&gt;, known as &lt;a title="The Enterprise Glue" href="http://www.pragprog.com/titles/fr_eir/enterprise-integration-with-ruby" id="h63z"&gt;The Enterprise Glue&lt;/a&gt;, was a natural choice.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;2) Group Similar Goals and Tasks together.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Software developers call this &lt;a title="cohesion" href="http://blog.handbuiltsoftware.com/2008/12/18/i-hate-ruby/" id="xucs"&gt;cohesion&lt;/a&gt;.   KPoz gets it's game data from &lt;a title="Rake" href="http://www.railsenvy.com/2007/6/11/ruby-on-rails-rake-tutorial" id="cphf"&gt;Rake&lt;/a&gt; tasks I've written that do screen scrapes from public data sources on the web.  When the task came along to screen scrape current point spread estimates for those same games, it was assigned to me.  My mind had recently been absorbed in the problem, and I was able to reuse some existing code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;3) Keep Components Independent.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We built a complete internal site in &lt;a title="Rails" href="http://rubyonrails.org/" id="v9f0"&gt;Rails&lt;/a&gt; to manage data flow for KPoz.  The site runs independent of the External PHP site, and the MATLAB components. Conversely, The PHP and MATLAB components don't require the existence of the other components.  They barely know about each other.  Software developers call this &lt;a title="Low Coupling" href="http://www.archivehive.com/2008/11/grasp-low-coupling/" id="ynds"&gt;Low Coupling&lt;/a&gt;.  This makes it easy to work on and run a component without worrying about breaking the other components.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;4) Design Together.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Building a single usable software application requires constant design.  Everyone at KPoz participates in the design process. We keep important concepts defined in an online &lt;a title="Domain Dictionary" href="http://www.sei.cmu.edu/domain-engineering/domain_dict.html" id="mb_7"&gt;Domain Dictionary&lt;/a&gt; that continuously gets revised.  This ensures that developers talking about the same concepts are using the same terms.  Keeping a harmonious Domain Dictionary will ultimately resonate into the code, and out to the end user.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;5) Don't Repeat Yourself!&lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt; The full DRY rule, from &lt;b&gt;&lt;a title="The Pragmatic Programmer" href="http://pragprog.com/the-pragmatic-programmer" id="v8oa"&gt;The Pragmatic Programmer&lt;/a&gt; &lt;/b&gt; is&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;When data is shared across databases, it needs to flow correctly, from the authoritative representation to the replica.  In our system, the authoritative representation of our object model is the Rails database.  Updates to that database automatically replicate throughout our system.  This unambiguous flow of data keeps things from getting complicated.  In addition to keeping our own code DRY, it's important to make sure that the system as a whole is DRY, particularly when integrating multiple sub systems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;6) Constant Communication.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Developers working on disparate platforms from different physical locations need to proactively engage each other.  At KPoz we have two weekly calls.  At the beginning of the week we thoroughly discuss plans, strategy (or is it tactics?) , tasks, and issues.  The end of the week call is a quick stand-up meeting.  By having two weekly calls, even if someone is travelling or busy , we all speak at least once a week. We also frequently contact each other informally , for anything from discussing a fascinating programming problem, getting a remedial lesson in Statistics, or celebrating a favorite Football Teams victory.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;7)  Expand Your Mind.&lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt; In &lt;a title="Pragmatic Thinking and Learning" href="http://www.pragprog.com/titles/ahptl/pragmatic-thinking-and-learning" id="gie."&gt;Pragmatic Thinking and Learning&lt;/a&gt;, &lt;a title="Andy Hunt" href="http://blog.toolshed.com/" id="u3s5"&gt;Andy Hunt&lt;/a&gt; discusses the concept of &lt;a title="Neurogenesis" href="http://neurogenesis.iord.org/" id="bn5w"&gt;Neurogenesis&lt;/a&gt; .  Contrary to popular belief,  we continue to create brain cells throughout adulthood.  By forcing ourselves to work on unfamiliar platforms at KPoz, we were opening our minds.  When Rob wanted several &lt;a title="football statistics downloads" href="http://kpozsports.com/downloads.php" id="qh05"&gt;football statistics downloads&lt;/a&gt; available on the Web site, we wrote a rake task to load the relevant data into the &lt;a title="Google Spreadsheets API" href="http://code.google.com/apis/spreadsheets/overview.html" id="ezga"&gt;Google Spreadsheets API&lt;/a&gt;.   An additional Rake task then updates a PHP page on the main sites with links to the new Spreadsheets.  Since our system already contains multiple integrated platforms, adding another platform was simple.  And notice how I say "we wrote".  By including multiple development platforms on our site, we all learned more than we would have if it was a single platform solution.&lt;br /&gt;&lt;br /&gt;At times while working on the site, I wondered if things would have been easier or more ideal if it was all written in Rails, or all PHP for that matter.  However I've concluded that integrating multiple solutions is in many ways more ideal.  This lead me to the concept of a Renaissance Programmer, a programmer that is versed in multiple platforms.  I've also experienced yet another personal Programming Renaissance, in which I'm reminded that it's only the resulting product that matters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-4342964784431910420?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/4342964784431910420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=4342964784431910420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/4342964784431910420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/4342964784431910420'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2009/01/renaissance-programming.html' title='Renaissance Programming'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-1028099877337828186</id><published>2009-01-06T06:18:00.000-08:00</published><updated>2009-01-06T06:54:25.529-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web application development'/><category scheme='http://www.blogger.com/atom/ns#' term='recession special'/><category scheme='http://www.blogger.com/atom/ns#' term='programming rates'/><title type='text'>The Recession Special</title><content type='html'>Yesterday we posted a &lt;a href="http://orlando.craigslist.org/cps/980765345.html"&gt;Recession Special &lt;/a&gt;to Craigslist. The concept is, we have some talented developers who are looking for more work right now, and opportunities like this don't come along often.   The last time there was a excess programming talent available was mid 2002.   At the time , &lt;a href="http://dice.com/"&gt;dice.com&lt;/a&gt; dropped from around 200,000 tech jobs to about 30,000. Work shortages for software developers usually don't last long.  By 2003 the phone was ringing off the hook again.  Just over a year ago , The number of tech jobs on Dice was well over 100,000.  Today it says  "&lt;a href="http://dice.com/"&gt;Search 55,024 tech jobs&lt;/a&gt;", so it's clear there is a bit of a slowdown, though not like in 2002.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.martinicity.net/pics/Austin//index.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 262px;" src="http://www.martinicity.net/pics/Austin/dayLabor.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;Dot com professionals from Austin's once thriving industry are gathered here at a Day Labor Assembly Point.&lt;/span&gt; Circa 2002.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;In the Middle of Difficulty ...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;... lies opportunity , as Einstein says. At AppTrain  we're going to take on a couple projects at great rates right now, just to keep everyone busy.  It will be interesting to see what types of companies are able to plan ahead financially. Last time the surprise was that more traditional conservative companies hired up talent at bargain rates.&lt;span style="font-weight: bold;"&gt;   &lt;/span&gt;This time we're  also hearing from Non-Profits that support the Arts who need technical help, but normally can't afford it.  And it's always a pleasure to work on projects that support a worthy cause.  So If you thought building a custom web application would be unaffordable, this could be your chance.  For information, &lt;a href="http://orlando.craigslist.org/cps/980765345.html"&gt;Contact AppTrain&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And as we say in the Craigslist ad:&lt;br /&gt;&lt;br /&gt;*Offer only valid while the current quarterly US Gross Domestic Product (GDP) is lower than the previous quarter :)  Act now while smart labor is still affordable!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-1028099877337828186?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/1028099877337828186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=1028099877337828186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/1028099877337828186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/1028099877337828186'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2009/01/recession-special.html' title='The Recession Special'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-5856385328218176736</id><published>2009-01-05T09:35:00.000-08:00</published><updated>2009-01-05T09:43:47.472-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='focus'/><category scheme='http://www.blogger.com/atom/ns#' term='apptrain'/><title type='text'>Focus 2009</title><content type='html'>&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Focus&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My latest personal blog entry &lt;a href="http://martinicity.net/articles/2009/01/02/focus-2009"&gt;Focus 2009&lt;/a&gt; is a concise summary of several of my personal new Years Resolutions.  So concise that my resolutions boil down to one word: Focus.  I'm hoping to carry this Focus over to AppTrain Software and our clients.  The simple concept will help us achieve our goals and give us sort of a team mantra.&lt;br /&gt;&lt;br /&gt; Looking forward to a fun filled 2009!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-5856385328218176736?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/5856385328218176736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=5856385328218176736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/5856385328218176736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/5856385328218176736'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2009/01/focus-2009.html' title='Focus 2009'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-5110283473383488724</id><published>2008-12-18T13:30:00.000-08:00</published><updated>2008-12-21T06:25:13.340-08:00</updated><title type='text'>Test from the West</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wXu4H87yLqE/SUrJNCIrTOI/AAAAAAAAAAM/F3YadItZ9rE/s1600-h/bruce_on_rails.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 296px;" src="http://4.bp.blogspot.com/_wXu4H87yLqE/SUrJNCIrTOI/AAAAAAAAAAM/F3YadItZ9rE/s400/bruce_on_rails.jpg" alt="" id="BLOGGER_PHOTO_ID_5281254738794073314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Greetings AppTrain!&lt;br /&gt;&lt;br /&gt;This is my first Blog post and I just wanted to kinda introduce myself.&lt;br /&gt;&lt;br /&gt;My name is Sean Williams and I am standing on "a Ruby launch pad" spear-headed by our very Mike Blake. I am on the beginning stages of my Ruby trek and so far so good.&lt;br /&gt;&lt;br /&gt;Currently I am going through multiple tutorials and kinda wingin' it on my own for now while I'm over here in Texas on vacation. I can't exactly make the time for it that I'd like, (because of all the holiday family madness going on)... but what I have accomplished so far I am proud of! :)&lt;br /&gt;&lt;br /&gt;Gotta run for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-5110283473383488724?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/5110283473383488724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=5110283473383488724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/5110283473383488724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/5110283473383488724'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2008/12/test-from-west.html' title='Test from the West'/><author><name>Sean W</name><uri>http://www.blogger.com/profile/09800875379892335128</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wXu4H87yLqE/SUrJNCIrTOI/AAAAAAAAAAM/F3YadItZ9rE/s72-c/bruce_on_rails.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-2404694373335129382</id><published>2008-12-11T11:28:00.000-08:00</published><updated>2008-12-13T08:50:00.866-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google analytics'/><category scheme='http://www.blogger.com/atom/ns#' term='spam'/><title type='text'>Spamming the Spammers</title><content type='html'>&lt;span style="font-weight: bold; width: 100px; text-align: left; float: left;"&gt;UPDATE:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: left; float: left;"&gt;&lt;span style="font-style: italic; color: rgb(0, 0, 0);background-color: white;"&gt;Christoph points out in the comments that I may not be reaching exclusively spammers by emailing the "reply to" from the vacation response.  In fact, I'm missing the worst of the spammers, the ones who use fake addresses in the reply to.  So I've ended my little spamming vacation on my spam email accounts.  Well it was fun thinking I had avenged some evil spammers somewhere for a couple days.  For now I'm retiring from the spam business.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;_______________________________________________________________________&lt;br /&gt;&lt;br /&gt;Recently I've been working on &lt;a href="http://kpozsports.com/"&gt;KPoz Sports&lt;/a&gt;  with some friends in New York.  We have a simple site up and want some people to check it out and provide feedback.  I have a couple of old email accounts that receive mostly spam, so I thought, why not spam the spammers?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I simply turned on the vacation response on these accounts, and turned off the spam filter.  My vacation response is the standard nonsensical message with a link to KPoz.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Yy2HxtiGsHU/SUFvEzVegwI/AAAAAAAAAEM/uWcistA3j9Q/s1600-h/spam.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 500px; height: 228px;" src="http://1.bp.blogspot.com/_Yy2HxtiGsHU/SUFvEzVegwI/AAAAAAAAAEM/uWcistA3j9Q/s320/spam.jpg" alt="" id="BLOGGER_PHOTO_ID_5278622366545380098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sure enough, in &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt;, I'm now getting hits from some fascinating places. An by viewing my traffic by Network Location, I can tell which companies are the prime spammers.&lt;br /&gt;&lt;br /&gt;The Spammers have become The Spammed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-2404694373335129382?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/2404694373335129382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=2404694373335129382' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/2404694373335129382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/2404694373335129382'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2008/12/spamming-spammers.html' title='Spamming the Spammers'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Yy2HxtiGsHU/SUFvEzVegwI/AAAAAAAAAEM/uWcistA3j9Q/s72-c/spam.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-5287738980914854058</id><published>2008-11-29T09:09:00.000-08:00</published><updated>2008-11-29T09:55:38.015-08:00</updated><title type='text'>It's Just a Flesh Wound!</title><content type='html'>In this &lt;a href="http://mailblog.aol.com/2008/10/31/an-open-letter-to-gmail-happy-halloween-we-love-your-costume/"&gt;Google Envy&lt;/a&gt; posting , some people at AOL seem to think that in 2008, they are still a prominent internet company.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Yy2HxtiGsHU/STF40tcxQ8I/AAAAAAAAAEE/sQPdUec4NGs/s1600-h/black_knight.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 249px;" src="http://3.bp.blogspot.com/_Yy2HxtiGsHU/STF40tcxQ8I/AAAAAAAAAEE/sQPdUec4NGs/s320/black_knight.jpg" alt="" id="BLOGGER_PHOTO_ID_5274129485576356802" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;Perspective&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;AOL is the company that tried to trick internet newcomers into thinking their pay service was required to search the web and send email.  AOL is also the company that completely missed the concept of a web based application, and sent hundreds of millions of compact discs  all around the country. The discs were filled with useless and &lt;a href="http://www.accessmylibrary.com/coms2/summary_0286-10156822_ITM"&gt;sometimes malicious&lt;/a&gt; desktop software.  AOL is also infamous for using the "&lt;a href="http://nl.newsbank.com/nl-search/we/Archives?p_product=AD&amp;amp;p_theme=ad&amp;amp;p_action=search&amp;amp;p_maxdocs=200&amp;amp;p_topdoc=1&amp;amp;p_text_direct-0=11A5A654808EC6C8&amp;amp;p_field_direct-0=document_id&amp;amp;p_perpage=10&amp;amp;p_sort=YMD_date:D"&gt;impossible to cancel our servic&lt;/a&gt;&lt;a href="http://nl.newsbank.com/nl-search/we/Archives?p_product=AD&amp;amp;p_theme=ad&amp;amp;p_action=search&amp;amp;p_maxdocs=200&amp;amp;p_topdoc=1&amp;amp;p_text_direct-0=11A5A654808EC6C8&amp;amp;p_field_direct-0=document_id&amp;amp;p_perpage=10&amp;amp;p_sort=YMD_date:D"&gt;e&lt;/a&gt;" revenue generation model.  (Apparently &lt;a href="http://www.consumeraffairs.com/internet/aol_cancel.html"&gt;AOL still employs this technique&lt;/a&gt; .)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Casting Aspersions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;AOL mocking Google reminds me Monty Python's Black Knight with no arms and legs left taunting King Arthur  ""I'll bite your legs off!" .   Yeah, good luck with that.  AOL's still trying to guard a bridge that Google crossed 10 years ago.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-5287738980914854058?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/5287738980914854058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=5287738980914854058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/5287738980914854058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/5287738980914854058'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2008/11/its-just-flesh-wound.html' title='It&apos;s Just a Flesh Wound!'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Yy2HxtiGsHU/STF40tcxQ8I/AAAAAAAAAEE/sQPdUec4NGs/s72-c/black_knight.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-4147390566803277436</id><published>2008-11-26T14:10:00.000-08:00</published><updated>2008-11-26T15:21:16.082-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kpoz nfl ncaa rankings ruby php rails'/><title type='text'>KPoz Sports Model: Thanksgiving Debut!</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://kpozsports.com/"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;KPoz Sports &lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Here's your chance to amaze your friends and family while watching football this week. (or maybe even win a few bucks off your Uncle Fred.)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Yy2HxtiGsHU/SS2_VlYzykI/AAAAAAAAAD8/mVdh3h7lKUw/s1600-h/turkey.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 296px;" src="http://1.bp.blogspot.com/_Yy2HxtiGsHU/SS2_VlYzykI/AAAAAAAAAD8/mVdh3h7lKUw/s320/turkey.jpg" alt="" id="BLOGGER_PHOTO_ID_5273081116255046210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Check out the &lt;span style="font-weight: bold;"&gt;KPoz Sports Model&lt;/span&gt; at &lt;a href="http://kpozsports.com/"&gt;kpozsports.com&lt;/a&gt; .  My good friends in New York, Rob Kissell and Jim Poserina have done amazing work creating a new Sports Ranking system.   The KPoz site contains Point Spreads for both NFL and NCAA games, as well as complete Rankings. All yours for free if you act now !!!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NFL Office Pool&lt;/span&gt;&lt;br /&gt;&lt;a href="http://kpozsports.com/officepool.php?league=NFL"&gt;http://kpozsports.com/officepool.php?league=NFL&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NFL Rankings&lt;/span&gt;&lt;br /&gt;&lt;a href="http://kpozsports.com/officepool.php?league=NFL"&gt;http://kpozsports.com/rankings.php?league=NFL&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NCAA Office Pool&lt;/span&gt;&lt;br /&gt;&lt;a href="http://kpozsports.com/officepool.php?league=NFL"&gt;http://kpozsports.com/officepool.php?league=NCAAFB&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NCAA Rankings&lt;/span&gt;&lt;br /&gt;&lt;a href="http://kpozsports.com/officepool.php?league=NFL"&gt;http://kpozsports.com/rankings.php?league=NCAAFB&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This has been the most fun project I've worked on in a long time.  Rob's prowess with modern Mathematics is well known.  He's already published the now legendary "Optimal Trading Strategies".  One of the best written reviews I've ever seen on Amazon sums it up nicely:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/review/R3O474T82ZP2JT/ref=cm_cr_rdp_perm"&gt;http://www.amazon.com/review/R3O474T82ZP2JT/ref=cm_cr_rdp_perm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anyway,  Rob, Jim and I all hope you love our new site and check back every week for the inside scoop on Lines and point spreads.&lt;br /&gt;&lt;br /&gt;Have a great Thanksgiving!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-4147390566803277436?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/4147390566803277436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=4147390566803277436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/4147390566803277436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/4147390566803277436'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2008/11/kpoz-sports-model-thanksgiving-debut.html' title='KPoz Sports Model: Thanksgiving Debut!'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Yy2HxtiGsHU/SS2_VlYzykI/AAAAAAAAAD8/mVdh3h7lKUw/s72-c/turkey.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-9121456865834989945</id><published>2008-11-17T18:20:00.000-08:00</published><updated>2009-01-07T08:05:50.105-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='installing chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='google chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='custom home page'/><title type='text'>Google Chrome</title><content type='html'>&lt;p&gt;Google Chrome is a browser that is making the web faster, safer, and easier to use!&lt;/p&gt;&lt;p&gt;A customized home page pops up by default every time you launch the browser or open a new tab. Snap shot images of your frequently visited sites and inputs boxes for the search engines appear. &lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5268582630585075410" style="WIDTH: 400px; CURSOR: pointer; HEIGHT: 240px" alt="" src="http://2.bp.blogspot.com/_KlFXN0-gJzc/SR3D_QXRBtI/AAAAAAAAACM/UqXXh1_Zc3E/s400/home.jpg" border="0" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This can be a little confusing at first because things are moved around. The browser has no menu bar instead both the address and the search bar are combined. The changes are fairly simple to get used to. The search history box located on the right is different from the normal search bar at the top. It does not search the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Internet&lt;/span&gt;, but displays results from previous searches. The results show not only google, but aol and other searches done. If you use a few different search engines at once Chrome remembers them all. Keep in mind that your page history and downloads appear as web pages not as separate windows. Another interesting feature is that there is no status bar Instead the Chrome logo appears giving you necessary information. &lt;span style="font-size:0;"&gt;&lt;/span&gt;I like to keep things simple and Chrome helps me do that by minimizing the clutter on the screen. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Installing Chrome&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:0;"&gt;(Chrome is only available for Windows so far.)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Step 1:&lt;/span&gt; Visit &lt;a href="http://www.google.com/chrome"&gt;http://www.google.com/chrome&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5268568682691449362" style="WIDTH: 400px; CURSOR: pointer; HEIGHT: 259px" alt="" src="http://3.bp.blogspot.com/_KlFXN0-gJzc/SR23TYaSUhI/AAAAAAAAACE/eDya0l-HxyE/s400/chrome.jpg" border="0" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Step 2:&lt;/span&gt; Click the "Download Google Chrome" blue box on right.&lt;/p&gt;&lt;p&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Step 3:&lt;/span&gt; Check the Box "Help make Google Chrome better by automatically sending usage statistics and crash reports to Google"&lt;/p&gt;&lt;p&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Step 4:&lt;/span&gt; Click "Accept and Install"&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-9121456865834989945?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/9121456865834989945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=9121456865834989945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/9121456865834989945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/9121456865834989945'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2008/10/google-chrome.html' title='Google Chrome'/><author><name>Jenn</name><uri>http://www.blogger.com/profile/07433080915751328807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_KlFXN0-gJzc/SR3D_QXRBtI/AAAAAAAAACM/UqXXh1_Zc3E/s72-c/home.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-6816684533745968394</id><published>2008-10-21T14:29:00.000-07:00</published><updated>2008-10-29T16:00:02.741-07:00</updated><title type='text'>Building Simple Sites in Google Apps.</title><content type='html'>Google Apps is an economical way to design and publish your company web site. The site is hosted on Google's servers, providing an audience that never stops with access world wide. No hardware or software necessary!&lt;br /&gt;&lt;br /&gt;I am not a programmer and was able to build a site using Google Apps in just a few hours. The time I spent brainstorming and thinking about my site content and design was the hardest part. Making alterations to your site is just as easy as the following step by step procedure. One great advantage of using Google Apps is the ability to change content at your own leisure.&lt;br /&gt;&lt;br /&gt;Welcome to Google Apps &lt;a href="http://www.google.com/apps/intl/en/business/index.html"&gt;http://www.google.com/apps/intl/en/business/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold;font-family:verdana;"&gt;Getting Started&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Click 'See details and sign up' (Blue box white text) then Click 'Get Started'&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Under I want to use an existing domain name -&gt; Admininstrator -&gt; Enter your domain name and get started &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sign up for Google Apps standard edition (fill out information about 3-5 min depending on size of company)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Click "Add more servcies" then add "Web Pages" to your site.&lt;br /&gt;&lt;/li&gt;&lt;a href="http://3.bp.blogspot.com/_KlFXN0-gJzc/SO4lc7kn7DI/AAAAAAAAAB8/YYtq6B62lAg/s1600-h/web+pages.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5255178994145815602" alt="" src="http://3.bp.blogspot.com/_KlFXN0-gJzc/SO4lc7kn7DI/AAAAAAAAAB8/YYtq6B62lAg/s800/web+pages.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Click "Web Pages" Edit your web pages&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sign in, I have read and agree to term and conditions -&gt; ready &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Customizing Site&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Change look (top right) Total of 41 different looks to choose from.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_KlFXN0-gJzc/SO4kjG-G9bI/AAAAAAAAABs/vfu1rnoWakE/s1600-h/change+look.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5255178000773084594" alt="" src="http://3.bp.blogspot.com/_KlFXN0-gJzc/SO4kjG-G9bI/AAAAAAAAABs/vfu1rnoWakE/s800/change+look.jpg" border="0" /&gt;&lt;/a&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Change layout (top right) Total of 4 different looks to choose from.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Design page – Input page info. This is where your brainstorming comes to play.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Back to site manager to add links and other pages -&gt;creating a new page -&gt; label pages to keep organized -&gt; select page (check box) -&gt; more actions (drop box)&lt;/li&gt;&lt;a href="http://4.bp.blogspot.com/_KlFXN0-gJzc/SO4lAY1eADI/AAAAAAAAAB0/AVeUKltcrEc/s1600-h/duplicate.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5255178503784890418" alt="" src="http://4.bp.blogspot.com/_KlFXN0-gJzc/SO4lAY1eADI/AAAAAAAAAB0/AVeUKltcrEc/s400/duplicate.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;-&gt;or highlight -&gt; link -&gt; add page -&gt; ok&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The dashboard is where you will find Domain settings that you can set general preferences. The easiest way to verify your domain is to create a generated .html file and upload it into your domain.&lt;br /&gt;&lt;br /&gt;Good luck and have fun!! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-6816684533745968394?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/6816684533745968394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=6816684533745968394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/6816684533745968394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/6816684533745968394'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2008/09/bulding-simple-sites-in-google-apps.html' title='Building Simple Sites in Google Apps.'/><author><name>Jenn</name><uri>http://www.blogger.com/profile/07433080915751328807</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_KlFXN0-gJzc/SO4lc7kn7DI/AAAAAAAAAB8/YYtq6B62lAg/s72-c/web+pages.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-4444713531007816508</id><published>2008-09-17T17:00:00.000-07:00</published><updated>2008-12-10T12:06:01.364-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Collaborative Documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='Issue Tracking'/><category scheme='http://www.blogger.com/atom/ns#' term='Automated Deployments'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Control'/><category scheme='http://www.blogger.com/atom/ns#' term='Collaborative Project Management'/><title type='text'>Creating a Web Application Development Team</title><content type='html'>&lt;h3 style="color: rgb(0, 0, 153);"&gt;What a tangled web we weave&lt;/h3&gt;Web Application Development is becoming ubiquitous. Every company, every department, nearly every person is seconds away from creating web content. In addition many of these companies, departments and people are getting into the business of Web Application development. With tools like &lt;a href="https://www.google.com/a/"&gt;Google Apps&lt;/a&gt; and &lt;a href="http://blogger.com/"&gt;Blogger&lt;/a&gt; users are driving not just the look and feel of site, but their functionality. More sophisticated users are even creating complex content sites using tools like &lt;a href="http://www.joomla.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Joomla&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; or &lt;a href="http://typo3.com/"&gt;Typo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Many of our clients have Web Application Developers integrated throughout the company. A custom Rails site was built in Accounting for internal use, A blog for high profile clients is hosted on &lt;a href="http://drupal.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Drupal&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;. Meanwhile a few cubes away, The Marketing department has &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;legacy&lt;/span&gt; asp code getting data from a Microsoft Access DB file that was written by a remote developer in Orlando. How can a company manage all these capricious efforts?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style="color: rgb(0, 0, 153);"&gt;Finding Harmony&lt;/h3&gt;In the past companies tried to organize Web Application Development as part of the Information Technology department. This rigid structure fails to capitalize on individual efforts and abilities. Recently companies are adapting the &lt;a href="http://www.amazon.com/Becoming-Technical-Leader-Problem-Solving-Approach/dp/0932633021"&gt;organic problem solving&lt;/a&gt; approach. Rather than a hierarchical structure, employee's can belong to many organizations in the company, one being the Web Team.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style="color: rgb(0, 0, 153);"&gt;The Web Application Development Team&lt;/h3&gt;The modern web team is tied together not by an org chart, but an agreed upon a set of tools and procedures. The web team spans departmental and geographical boundaries using modern collaborative tools. The benefits to standards include quicker start up time for new developers, and minimal knowledge loss from departing developers. Additionally as a company grows these tools and procedures are scalable, and provide additional benefits including better communication within the Web Application Development Teams. Once a web site grows and projects get larger progress is notably slower without good tools and procedures.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style="color: rgb(0, 0, 153);"&gt;The Tools&lt;/h3&gt;Key tools we use at &lt;a href="http://apptrain.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;AppTrain&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; are&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) Source Control&lt;br /&gt;2) Collaborative Documentation&lt;br /&gt;3) Automated Deployments&lt;br /&gt;4) Issue Tracking&lt;br /&gt;5) Collaborative Project Management&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://http//msdn.microsoft.com/en-us/library/ms173539.aspx"&gt;benefits of Source Control&lt;/a&gt; are well documented. Source Control encourages the idea of teamwork. Each line of code is now visible across the Web Team. In addition, redundant efforts are now minimized. The nightmare of supporting three blogging engine's or having five different authentication strategies is finally over.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Collaborative Documentation&lt;/span&gt; means getting developers to document things like internal procedures and asset locations (Database &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;Addresses&lt;/span&gt;, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;log ins&lt;/span&gt;) in a single shared place such as a Wiki, or even a shared Google Doc called "Procedures" .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Automated Deployments&lt;/span&gt; became possible once the Version Control is in place. Not only the deployments can be automated, but any common task in the Version control system. Automation ensures that frequent processes such as test scripts/deployments are run in the same way and under the same conditions every time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Issue Tracking&lt;/span&gt; is simply a shared location for all maintenance and enhancements to be done on a system. The benefits becomes apparent immediately after using, and include quicker issue resolution and the ability to instantly monitor progress.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Collaborative Project Management&lt;/span&gt; allows all team members to create goals and report progress and issues. The whole team continuously updates the project plan. Each member has the ability to create and update to milestones, tasks, and shared documentation. As a result, the project plan more accurately represents reality then it would if it were maintained by a single project manager using a desktop tool.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The quickest way to get familiar with the first four of these tools and their benefits is to create free account at &lt;a href="http://unfuddle.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Unfuddle&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;. And it's hard to talk about Collaborative Project Management without mentioning the company &lt;a href="http://www.37signals.com/"&gt;37Signals&lt;/a&gt;. Their products including &lt;a href="http://www.basecamphq.com/?source=37s+home"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;BaseCamp&lt;/span&gt;&lt;/a&gt; have changed the way we think about creating software and working as a team. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;AppTrain&lt;/span&gt;&lt;/span&gt; uses a combination of these tools for every project.&lt;br /&gt;&lt;br /&gt;Now the exact vendor that a team uses is unimportant. What matters is agreeing on common set tools and solutions that will make the Web Application Team function as a cohesive unit, and improve a company's overall web strategy. Whether your have a small team working together on site, or loosely structured team that traverses several departments and geographic locations, Source Control, Collaborative Documentation, Automated Deployments, Issue Tracking and Collaborative Project Management can drastically improve communication, morale, and overall productivity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-4444713531007816508?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/4444713531007816508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=4444713531007816508' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/4444713531007816508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/4444713531007816508'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2008/09/creating-web-application-development.html' title='Creating a Web Application Development Team'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4289933450592899774.post-7201750741676381737</id><published>2008-09-12T05:47:00.000-07:00</published><updated>2008-09-12T06:28:43.542-07:00</updated><title type='text'>Orlando RubyConf</title><content type='html'>&lt;a href="http://www.rubyconf.org/"&gt;RubyConf 2008 &lt;/a&gt;is right here in Orlando this year.  It will be great to see so many of the people who make the Ruby community fun right here in town.  &lt;a href="http://www.regonline.com/Checkin.asp?EventId=636795"&gt;Registration is open&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One reason Orlando may have been chosen is the thriving Ruby community here, thanks in part to &lt;a href="http://railsenvy.com"&gt;Gregg Pollack&lt;/a&gt; and the &lt;a href="http://orug.org"&gt;Orlando Ruby Users Group&lt;/a&gt;.  So I'm excited to say, Gregg will be speaking at RubyConf, doing a talk on &lt;a href="http://www.rubyconf.org/talks/2"&gt;Scaling Ruby&lt;/a&gt;.  You may know Gregg from his legendary Mac Ad spoofs:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/PQbuyKUaKFo&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/PQbuyKUaKFo&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Looking forward to seeing everyone at RubyConf!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4289933450592899774-7201750741676381737?l=apptrain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apptrain.blogspot.com/feeds/7201750741676381737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4289933450592899774&amp;postID=7201750741676381737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/7201750741676381737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4289933450592899774/posts/default/7201750741676381737'/><link rel='alternate' type='text/html' href='http://apptrain.blogspot.com/2008/09/orlando-rubyconf.html' title='Orlando RubyConf'/><author><name>Mike</name><uri>http://www.blogger.com/profile/08894306978547010227</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='16' src='http://3.bp.blogspot.com/_Yy2HxtiGsHU/SMfrCeSEdPI/AAAAAAAAAAM/c4An207AZaE/S220/at_mini.png'/></author><thr:total>0</thr:total></entry></feed>
