E HTML PUBLIC "-4.0 Transitional@ r����������������ETA CONTENT="Wor����������� ���@="ProgId"> <MET���������� ���� soft Word 9" NAM�����������@����<META CONTENT="M���������������� NAME="Originato�������������� �File-List" HREF=����������������t.xml"> <!-- [i���������� ����� <!-- [endif][i���������� ����� <!-- [endif] -����������������- /* Font Defi����������������t-face {font-f����������������panose-1:2 11 6 ����������� ��� mso-font-charse�������A @����ic-font-family:s������������� `-pitch:variable;����������������ature:1627421319��������� ������ 66047 0;} @fon�������� @`��ly:"ArialUnicode������������ ���64222224;mso-fon����������������o-generic-font-f��������@�������font-pitch:varia����������������nature:-1-369098������������ ���@font-face{font-����������������nicodeMS";panose����������������so-font-charset:����������������font-family:swis����������������:variable;mso-fo����������� ��3690987536304129�������������@��initions*/p.MsoN�������������@��al,div.MsoNormal��������������@�t:"";margin:0in;����������������001pt;mso-pagina����������������yout-grid-align:��������������@ ace:none;font-si����������������amily:Tahoma;mso����������������mily:"ArialUnico��������������ion,li.MsoCaptio����������������{margin-top:6.0p����������������in;margin-bottom����������������ft:0in;mso-pagin����������������ayout-grid-align����������������pace:none;font-s����������������family:Tahoma;ms����������������amily:"ArialUnic����������������-font-family:"Ti����������������t-style:italic;}����������������List,div.MsoList����������������t:"BodyText";mar�������� ��� ���in-right:0in;mar����������������;margin-left:0in����������������none;mso-layout-����������������text-autospace:n����������������.0pt;font-family����������������ast-font-family: ���������������;mso-hansi-font-����������������Roman";}p.MsoBod����������������Text,div.MsoBody����������������0in;margin-right��������� ��� ��om:6.0pt;margin-����������������ination:none;mso����������������gn:none;text-aut������������`(� -size:12.0pt;fon��������������@�mso-fareast-font������������@���icodeMS";mso-han������������ ���TimesNewRoman";}�������� ��@ ���,div.Index{mso-s�������� ���@���margin:0in;margi����������������;mso-pagination:�������� � �� ��grid-align:none;������������ ���one;font-size:12����������������:Tahoma;mso-fare���������`�����"ArialUnicodeMS"��������@�������family:"TimesNew����������������tion,li.WW-capti������������ ���n{mso-style-name������������a���in-top:6.0pt;mar����������������rgin-bottom:6.0p��������� �@ �n;mso-pagination�����������@���-grid-align:none����������������none;font-size:1����������������y:Tahoma;mso-far����������������:"ArialUnicodeMS����������������-family:"TimesNe������������� �le:italic;}p.WW-������������@���aption1,div.WW-c������������ ���e-name:WW-captio����������������0pt;margin-right��������������� om:6.0pt;margin-����������������ination:none;mso����������������gn:none;text-aut����������������-size:10.0pt;fon����������������mso-fareast-font����������������icodeMS";mso-han�������������@ TimesNewRoman";f������@��������;}/*PageDefiniti����������������age-border-surro����������������o-page-border-su������������ ���;}@pageSection1{�������� �������;margin:56.7pt56����������������;mso-header-marg����������������er-margin:.5in;m����������������0;}div.Section1{����������������-></STYLE> <S����������������nction F_loadRol����������������on F_roll(){} /��������SCRIPT> <SCRIPT LANGUAGE="JavaScript1.2" SRC="../rollover.js"></SCRIPT> </HEAD> <BODY NOF="(MB=(DefaultMasterBorder, 73, 3, 157, 0), L=(RubyandRailsLayout, 545, 941))" BGCOLOR="#FFFFFF" BACKGROUND="../assets/images/background.gif" TEXT="#000000" LINK="#0033CC" VLINK="#990099" ALINK="#FF0000" STYLE="tab-interval:35.45pt;text-justify-trim:punctuation" LANG="EN-US" TOPMARGIN=0 LEFTMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0> <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=702 NOF=LY> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=6 HEIGHT=33><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=6 HEIGHT=1 BORDER=0></TD> <TD WIDTH=1><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=1 HEIGHT=1 BORDER=0></TD> <TD WIDTH=1><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=1 HEIGHT=1 BORDER=0></TD> <TD WIDTH=1><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=1 HEIGHT=1 BORDER=0></TD> <TD WIDTH=2><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=2 HEIGHT=1 BORDER=0></TD> <TD WIDTH=5><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=5 HEIGHT=1 BORDER=0></TD> <TD WIDTH=94><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=94 HEIGHT=1 BORDER=0></TD> <TD WIDTH=19><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=19 HEIGHT=1 BORDER=0></TD> <TD WIDTH=1><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=1 HEIGHT=1 BORDER=0></TD> <TD WIDTH=5><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=5 HEIGHT=1 BORDER=0></TD> <TD WIDTH=2><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=2 HEIGHT=1 BORDER=0></TD> <TD WIDTH=3><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=3 HEIGHT=1 BORDER=0></TD> <TD WIDTH=17><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=17 HEIGHT=1 BORDER=0></TD> <TD WIDTH=40><IMG SRC="../assets/images/autogen/clearpixel.gif" WIDTH=40 HEIGHT=1 BORDER=0></TD> <TD ROWSPAN=5 ALIGN=CENTER VALIGN=MIDDLE WIDTH=505><IMG ID="Picture1" HEIGHT=72 WIDTH=505 SRC="../assets/images/autogen/a_nysbanner.gif" BORDER=0></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=6></TD> <TD WIDTH=94> <P><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT><FONT SIZE="-1"><B>Issue #43</B></FONT><B></B></P> </TD> <TD COLSPAN=7></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=14 HEIGHT=1></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=12 WIDTH=140> <P><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT><FONT SIZE="-2"><B>Last Update December 24, 2005</B></FONT><B></B></P> </TD> <TD COLSPAN=2></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=14 HEIGHT=11></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=15 HEIGHT=1></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=13 HEIGHT=13></TD> <TD COLSPAN=2 ROWSPAN=10 WIDTH=545><!-- [if !supportEmptyParas] --> <!-- [endif] --> <!-- [if !supportEmptyParas] --> <!-- [endif] --> <!-- [if !supportEmptyParas] --> <!-- [endif] --> <!-- [if !supportEmptyParas] --> <!-- [endif] --> <!-- [if !supportEmptyParas] --> <!-- [endif] --> <!-- [if !supportEmptyParas] --> <!-- [endif] --> <!-- [if !supportEmptyParas] --> <!-- [endif] --> <P ALIGN=JUSTIFY><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT><FONT SIZE="+2"><B><I><U>Technology</U></I></B> <B>Agile Web Development</B></FONT> <B><FONT SIZE="-2" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif">by Sten Grynir</FONT></B><FONT SIZE="-2" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"> December 18, 2005   </FONT><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif">Web development used to be the province of professionals and power users. Today, a large number of ordinary computer users have websites, and many of these users are inexperienced in the art of web design and website building. There are many tools available to make the process easier, which accounts for the explosion in personal websites, blogs, wikis, retail vendor sites and small corporation informational sites. Along with the tools come the books that teach web design and the use of specific design tools. Books for popular packages like DreamWeaver are considered after-market books, supplementing and expanding upon the packaged manual. For some professional tools, the books fill a vital purpose, providing documentation and instruction where the original manuals are non-existent or skimpy. Where several packages are used in combination to produce the desired result, these books show how the tools fit together, and provide examples of their joint use. <I>Agile Web Development with Rails</I>, by  Dave Thomas and David H. Hansson (The Programmatic Programmers LLC, 2005) is an excellent example of this last category. </FONT></P> <P ALIGN=JUSTIFY><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"><B>Ruby is an object-oriented scripting language</B>, developed in Japan, which has become quite popular recently. It is platform independent, and is comparable to other scripting languages such as Perl, Python, PHP or Java. While <I>Agile Web Development</I> is not a Ruby text, it has an appendix that serves as a brief but clear introduction to the language. The bulk of the book is taken up with describing and using Rails, a Model/View/Controller architecture written in Ruby, to build web pages, forms, and reports, and communicate with back-end database packages such as MySQL, Oracle, PostGRES, DB2, SQL-Server and many others. The authors claim that Ruby has the advantages of agility (more on this later), maintainability, instant feedback, and the ability to create professional-looking web sites, complete with “wow” factor, with minimal effort. In fact, it is the speed and ease of development that makes Ruby and Rails the ideal tool for both prototyping and final development. </FONT></P> <P ALIGN=JUSTIFY><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif">Rails is an application builder whose default settings permit the programmer to shape the application without reaching down to a level of detail that requires time-consuming coding. The defaults give you a reasonable approximation of your objective; since the modules that result are Ruby code, however, the quick and easy default-driven application can easily be prettied up and made more sophisticated. </FONT></P> <P ALIGN=JUSTIFY><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"><I>Agile Web Development with Rails</I> takes the reader through the application development process, using a realistic web shopping cart example to ease you into Rails coding. At each stage, the sophistication of the application is ratcheted up, until, by the end of the book, you should be able to build a professional web-based application with database back-end, data entry forms, queries and reports. While spending most of the book on server-side tools, a portion of the text is devoted to Ajax, the client-side tool that improves application throughput and reduces bandwidth demand. </FONT></P> <P ALIGN=JUSTIFY><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif">In addition to the programming instruction, the book also covers such useful topics as testing, security, and deployment. Ruby, Rails and Ajax are all available for free downloads on a variety of platforms. Anyone interested in quickly creating sophisticated web database applications should get these tools, and use this well-written and well-organized book as a guide. </FONT></P> <P ALIGN=JUSTIFY><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"><I>Agile Web Development with Rails, by Dave Thomas and David Heinemeier Hannson. </I>The Pragmatic Programmers LLC. 2005. ISBN 0-9766940-0-X</FONT></P> <P><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT><FONT FACE="Tahoma,Verdana,Arial,Helvetica,sans-serif"> </FONT></P> </TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=5 HEIGHT=252></TD> <TD COLSPAN=7 WIDTH=129> <TABLE ID="NavigationBar1" BORDER=0 CELLSPACING=0 CELLPADDING=0 NOF=NB_FYVP WIDTH=129> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../index.html" onMouseOver="F_roll('NavigationButton1',1)" onMouseOut="F_roll('NavigationButton1',0)"><IMG ID="NavigationButton1" NAME="NavigationButton1" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/Home_Np1.gif" onLoad="F_loadRollover(this,'Home_NRp2.gif')" BORDER=0 ALT="Home"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/commen_113.HTM" onMouseOver="F_roll('NavigationButton2',1)" onMouseOut="F_roll('NavigationButton2',0)"><IMG ID="NavigationButton2" NAME="NavigationButton2" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/COMMEN_1_Np1_1.gif" onLoad="F_loadRollover(this,'COMMEN_1_NRp2_1.gif')" BORDER=0 ALT="Commentary"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/strict.htm" onMouseOver="F_roll('NavigationButton3',1)" onMouseOut="F_roll('NavigationButton3',0)"><IMG ID="NavigationButton3" NAME="NavigationButton3" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/strict_Np1.gif" onLoad="F_loadRollover(this,'strict_NRp2.gif')" BORDER=0 ALT="Strict Construction"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/inteldes.htm" onMouseOver="F_roll('NavigationButton4',1)" onMouseOut="F_roll('NavigationButton4',0)"><IMG ID="NavigationButton4" NAME="NavigationButton4" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/inteldes_Np1.gif" onLoad="F_loadRollover(this,'inteldes_NRp2.gif')" BORDER=0 ALT="Intelligent Design"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/agile.htm" onMouseOver="F_roll('NavigationButton5',1)" onMouseOut="F_roll('NavigationButton5',0)"><IMG ID="NavigationButton5" NAME="NavigationButton5" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/agile_Np1.gif" onLoad="F_loadRollover(this,'agile_NRp2.gif')" BORDER=0 ALT="Ruby and Rails"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/awards.htm" onMouseOver="F_roll('NavigationButton6',1)" onMouseOut="F_roll('NavigationButton6',0)"><IMG ID="NavigationButton6" NAME="NavigationButton6" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/awards_Np1.gif" onLoad="F_loadRollover(this,'awards_NRp2.gif')" BORDER=0 ALT="Stringer Awards"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/taking_cheney_s_advice.htm" onMouseOver="F_roll('NavigationButton7',1)" onMouseOut="F_roll('NavigationButton7',0)"><IMG ID="NavigationButton7" NAME="NavigationButton7" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/Taking_Cheney_s_Advice_Np1.gif" onLoad="F_loadRollover(this,'Taking_Cheney_s_Advice_NRp2.gif')" BORDER=0 ALT="Taking Cheney's Advice"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/danceex2.htm" onMouseOver="F_roll('NavigationButton8',1)" onMouseOut="F_roll('NavigationButton8',0)"><IMG ID="NavigationButton8" NAME="NavigationButton8" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/danceex2_Np1.gif" onLoad="F_loadRollover(this,'danceex2_NRp2.gif')" BORDER=0 ALT="Nuremberg Dance"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/hccompet.HTM" onMouseOver="F_roll('NavigationButton9',1)" onMouseOut="F_roll('NavigationButton9',0)"><IMG ID="NavigationButton9" NAME="NavigationButton9" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/HCCOMPET_Np1.gif" onLoad="F_loadRollover(this,'HCCOMPET_NRp2.gif')" BORDER=0 ALT="Health Care Competition"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/tangle_11.HTM" onMouseOver="F_roll('NavigationButton10',1)" onMouseOut="F_roll('NavigationButton10',0)"><IMG ID="NavigationButton10" NAME="NavigationButton10" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/TANGLE_1_Np1.gif" onLoad="F_loadRollover(this,'TANGLE_1_NRp2.gif')" BORDER=0 ALT="Tanglewood 2005"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/archive.html" onMouseOver="F_roll('NavigationButton11',1)" onMouseOut="F_roll('NavigationButton11',0)"><IMG ID="NavigationButton11" NAME="NavigationButton11" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/Archive_Np1.gif" onLoad="F_loadRollover(this,'Archive_NRp2.gif')" BORDER=0 ALT="Archive"></A></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD WIDTH=129 HEIGHT=21><A HREF="../html/links_and_classifieds.html" onMouseOver="F_roll('NavigationButton12',1)" onMouseOut="F_roll('NavigationButton12',0)"><IMG ID="NavigationButton12" NAME="NavigationButton12" HEIGHT=21 WIDTH=129 SRC="../assets/images/autogen/Links_and_Classifieds_Np1.gif" onLoad="F_loadRollover(this,'Links_and_Classifieds_NRp2.gif')" BORDER=0 ALT="Links and Classifieds"></A></TD> </TR> </TABLE> </TD> <TD></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=13 HEIGHT=94></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=2></TD> <TD COLSPAN=8 WIDTH=128> <P><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT><FONT SIZE="-2" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"><B>New York Stringer is published by NYStringer.com. For all communications, contact David Katz, Editor and Publisher, at </B></FONT><A HREF="mailto:david@nystringer.com,"><FONT SIZE="-1">david@nystringer.com</FONT></A></P> <P><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT><FONT SIZE="-2" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"><B>All content copyright 2005 by nystringer.com</B></FONT><B></B></P> </TD> <TD COLSPAN=3></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=4></TD> <TD COLSPAN=5 WIDTH=121> <P><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT><FONT SIZE="-2" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif">Click on underlined bylines for the author’s home page.</FONT></P> </TD> <TD COLSPAN=4></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=13 HEIGHT=1></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=3></TD> <TD COLSPAN=5 WIDTH=121> <P><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT><A HREF="http://events@nystringer.com"><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif">Click here to send Events Listings</FONT></A><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT></P> </TD> <TD COLSPAN=5></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=13 HEIGHT=1></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD></TD> <TD COLSPAN=10 WIDTH=131> <P><FONT SIZE="-1" FACE="Verdana,Tahoma,Arial,Helvetica,sans-serif"></FONT><A HREF="mailto:letters@nystringer.com"><B><FONT SIZE="-1">Click here to send us email.</FONT></B></A></P> </TD> <TD COLSPAN=2></TD> </TR> <TR VALIGN=TOP ALIGN=LEFT> <TD COLSPAN=13 HEIGHT=324></TD> </TR> </TABLE> </BODY> </HTML>