<?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-5208774</id><updated>2012-01-30T18:51:47.577-05:00</updated><category term='Struts'/><category term='Wave'/><category term='Google'/><category term='Cloud'/><title type='text'>ted.husted.com</title><subtitle type='html'>Business Analysis + Project Management + Software Development + Quality Assurance</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default?start-index=101&amp;max-results=100'/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>165</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5208774.post-7217797046057736883</id><published>2012-01-04T09:01:00.001-05:00</published><updated>2012-01-04T09:01:20.654-05:00</updated><title type='text'>Keeping Salesforce Implementations on Track with Milestones PM and ChangeIT</title><content type='html'>A secret to the success of Salesforce CRM is how easy it is to customize and extend. Out of the box, Salesforce provides new users with a world-class framework for enabling collaboration between staff members and customers, or between staff and staff, or even between customers and customers (if you dare!). If that wasn't enough, Salesforce provides a variety of ways to tailor your instance of the framework, so that it fits your own processes like a glove. &lt;br /&gt;&lt;br /&gt;When folks first implement Salesforce, it's easy to get carried away. Salesforce CRM can do so much, it's tempting (but not practical) to try and do everything at once. In fact, Salesforce.com recommends that people spread out customization plans, so that refinement becomes an ongoing process. &lt;br /&gt;&lt;br /&gt;Happily, two of the many Salesforce extensions include a project tracking app called "&lt;a href="http://appexchange.salesforce.com/listingDetail?listingId=a0N30000005tvt6EAA"&gt;Milestones PM&lt;/a&gt;" and a change tracking app called "&lt;a href="http://appexchange.salesforce.com/listingDetail?listingId=a0N300000016ct3EAA"&gt;ChangeIt&lt;/a&gt;". You can use Milestones PM to organize implementation projects, and ChangeIt to gather and prioritize new change requests. Both can be installed into your environment from the &lt;a href="http://appexchange.salesforce.com/home"&gt;Salesforce AppExchange&lt;/a&gt;, free of additional charge.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Milestones PM&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Milestones PM is an elegant approach to project tracking that makes it easy to capture and follow a classic work breakdown structure. It's a great fit for IT projects, but the app would work just as well for any type of task-based project, such as organizing a retreat, publishing a newsletter, or planning an office move. &lt;br /&gt;&lt;br /&gt;The application uses six objects to track progress: Project, Log, Milestone, Task, Time, and Expense, as shown in the illustration.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-XeNs934Mmfg/TwRZkeb9QzI/AAAAAAAAAjM/NdL8mBbHddU/s1600/6a00d8341cded353ef014e5f4794a0970c-pi.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="210" src="http://2.bp.blogspot.com/-XeNs934Mmfg/TwRZkeb9QzI/AAAAAAAAAjM/NdL8mBbHddU/s320/6a00d8341cded353ef014e5f4794a0970c-pi.png" width="320" /&gt;&lt;/a&gt;&lt;b&gt;Project&lt;/b&gt; is the top-level container for the other five objects. Aside from tracking key details -- like a Kick-Off Date, Deadline, and Description -- a Project contains a set of Milestones, along with an optional Log records.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Logs&lt;/b&gt; are generic memo records that you can attach to a Project, Task, Time, or Expense record. Logs can be used to capture any miscellaneous detail that doesn't fit neatly into the other fields. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Milestones&lt;/b&gt; are the key organizing object within a project. To be useful, a Project must contain at least one Milestone record, which in turn can contain Task, Time, or Expense records. Milestones can have their own Kickoff and Deadline Dates, and be linked to Parent, Predecessor, or Successor Milestones. While not as featureful as Microsoft Project dependencies, good use of the Parent, Predecessor, and Successor Milestone groupings can make complex projects easier to understand and navigate. &lt;br /&gt;&lt;br /&gt;The backbone of any project are the &lt;b&gt;Tasks&lt;/b&gt;. Every Task must have a Name and be assigned to a Milestone, and can also track an Assignee, Start and Due Dates, statuses like Priority (0-4), Stage (In progress, Resolved, Closed) and Class (Ad Hoc, Defect, Rework), Estimates, and other properties. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Time&lt;/b&gt; and &lt;b&gt;Expense&lt;/b&gt; records can be attached to Tasks, which are tallied as part of the Project's overall metrics. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-CKmcLWtLNJU/TwRZPm8tFJI/AAAAAAAAAjA/2JQxW--I5CI/s1600/mpm-dashboard.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="91" src="http://4.bp.blogspot.com/-CKmcLWtLNJU/TwRZPm8tFJI/AAAAAAAAAjA/2JQxW--I5CI/s320/mpm-dashboard.png" width="320" /&gt;&lt;/a&gt;As shown in the screen shot, Milestones PM makes excellent use of native Salesforce metrics, and integrates with other native features like Chatter and Calendar It also supports batch operations based on views and comes bundled with two dozen ready-to-run Reports.&lt;br /&gt;&lt;br /&gt;Even better, Milestones PM is an &lt;a href="http://appexchange.salesforce.com/results?filter=9&amp;amp;sort=6&amp;amp;type=Apps"&gt;Aloha App&lt;/a&gt;, so it doesn't count against the number of tabs or objects your Salesforce instance consumes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ChangeIT&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Like housework, a good Salesforce implementation is never done. The platform is so flexible and so deep, there will always be ways to make it work even better for your users. The ChangeIT application provides a vehicle for tracking new features and fixes (which you could then turn into Milestone PM tasks).&lt;br /&gt;&lt;br /&gt;In a nutshell, ChangeIT provides a simple way to manage changes to your Salesforce instance, and to notify team members when changes are scheduled or implemented. It also helps coordinate change requests, so developers and administrators are not stepping on each other.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-s61nef9G8sA/TwRZ8o9Nl4I/AAAAAAAAAjY/9qw53zMNMdw/s1600/ChangeIT.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="221" src="http://4.bp.blogspot.com/-s61nef9G8sA/TwRZ8o9Nl4I/AAAAAAAAAjY/9qw53zMNMdw/s320/ChangeIT.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;The application provides a single, simple tab with a form for making change requests, as shown in the illustration.&lt;br /&gt;&lt;br /&gt;Saving the initial request triggers an approval workflow to the individuals that you set up. Once the initial request is approved or denied, the request can be worked on by developers or administrators (and/or transferred to Milestones PM). The application also includes a dashboard and supporting reports to view the pipeline of request changes. &lt;br /&gt;&lt;br /&gt;Since the applications are independent, you can use either or both -- your instance, your choice!&lt;br /&gt;&lt;br /&gt;We're always exploring better approaches to project tracking, with applications like Basecamp, Tom's Planner, JIRA, and OnTime. Do you have a favorite tool? What features do you love? What features do you miss?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7217797046057736883?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7217797046057736883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7217797046057736883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7217797046057736883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7217797046057736883'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2012/01/keeping-salesforce-implementations-on.html' title='Keeping Salesforce Implementations on Track with Milestones PM and ChangeIT'/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-XeNs934Mmfg/TwRZkeb9QzI/AAAAAAAAAjM/NdL8mBbHddU/s72-c/6a00d8341cded353ef014e5f4794a0970c-pi.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1917153700391378907</id><published>2011-11-04T16:22:00.001-04:00</published><updated>2011-11-04T16:49:45.016-04:00</updated><title type='text'></title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.apachecon.com/" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://na11.apachecon.com/attachments/0002/0346/speaker-125x125.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: x-large;"&gt;Ted @ ApacheCon&lt;/span&gt; &lt;br /&gt;&amp;nbsp;Ted Husted of NimbleUser will be speaking at &lt;a href="http://www.blogger.com/www.apachecon.com/"&gt;ApacheCon in Vancouver BC CA&lt;/a&gt; on November 10 and 11 on "The Secret Life of Open Source" and ".NET @ Apache.org". &lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Secret Life of Open Source&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Apache, GNU, Mozilla, Ubuntu, PHP, LibreOffice, Wikipedia -- Today, there are hundreds of open source groups, each with its own culture, methodology, and governance model.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How are these groups alike?&lt;/li&gt;&lt;li&gt;How are they different?&lt;/li&gt;&lt;li&gt;Is there one true path to open source enlightenment, or do many paths converge around a common singularity?&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;.NET at Apache.org&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Like it or not, many open source developers are moving to the Microsoft .NET platform, and we're bringing our favorite tools with us! This session looks inside ASF projects that are creating software for .NET and Mono -- like ActiveMQ, Chemistry, Logging, Lucene, QPid, and Thrift -- and show how to create leading-edge ASP.NET applications with ASF open source libraries. We'll also look at integrating other .NET open source projects, like Spring.NET, NVelocity, and JayRock, into your C# application to create a complete open source .NET stack.&lt;br /&gt;&lt;br /&gt;Before joining NimbleUser, Ted consulted with teams throughout the United States, including CitiGroup, Nationwide Insurance, and Pepsi Bottling Group, and he is a regular speaker at ApacheCon and the Ajax Experience. Ted is also a former member of the Apache Struts project and co-founder of the Apache (Jakarta) Commons. His books include Google Wave (Preview) Explained, JUnit in Action, Struts in Action, and Professional JSP Site Design. &lt;br /&gt;&lt;br /&gt;As a Business Analyst for NimbleUser, Ted concentrates on identifying business needs and crafting solutions that meet an organization's goals, objectives, and budget. Locally, he also serves as VP of Finance for the Rochester Chapter of the International Institute for Business Analysis (IIBA).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1917153700391378907?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1917153700391378907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1917153700391378907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1917153700391378907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1917153700391378907'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2011/11/ted-husted-of-nimbleuser-will-be.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8921260422039627155</id><published>2011-06-10T07:33:00.001-04:00</published><updated>2011-06-10T07:43:58.708-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Salesforce User Group - Speed Demoing ...&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://www.linkedin.com/groups?mostPopular=&amp;amp;gid=2875209&amp;amp;trk=myg_ugrp_ovr" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://media03.linkedin.com/media/p/1/000/060/182/06c6a38.png" /&gt;&lt;/a&gt;&lt;/div&gt;Ten minutes doesn't sound like much, but a handful of presenters cut to the chase and delivered some great Salesforce tech in 600 seconds each Thursday afternoon at a Speed Demo session of the &lt;a href="http://www.linkedin.com/groups?mostPopular=&amp;amp;gid=2875209&amp;amp;trk=myg_ugrp_ovr"&gt;Rochester Salesforce User Group&lt;/a&gt;, hosted by Mark Cook of the Rochester Group at 600 Park Avenue.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Create and update fields en masse (Tom Patros)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Using the supremely helpful &lt;a href="http://wiki.developerforce.com/index.php/Force.com_IDE"&gt;Force IDE&lt;/a&gt; (an Eclipse plugin), Tom showed how easy it can be to mass edit fields properties via XML metadata. Developers already use the IDE to create and text Apex classes and triggers. Tom walked through how admins can use the IDE to quickly add or update custom fields by editing the XML metadata definitions the Force IDE generates. While easy to use, the Salesforce graphical user interface can become tedious when mass editing a set of fields, making editing via XML seem like a breath of fresh air. You can even manage picklist definitions by editing the metadata. For extra credit, Tom also demoed a Google spreadsheet that can be used to craft and document the schema, and then generate the definition to use with the IDE.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Connecting with SFDC API's from Access (Bob Scott)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of the most popular Salesforce admin tools is the &lt;a href="http://www.nimbleuser.com/blog.aspx?id=3712&amp;amp;blogid=236&amp;amp;terms=excel+connector"&gt;Excel connector&lt;/a&gt; that makes it easy to manage Salesforce data directly from Excel. Bob Scott walked through how Access can be used to, well, access Salesforce data in much the same way. With a bit of elbow grease, you can update SFDC from an Access application, or update SFDC from Access.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Approval process simplified (Theresa Mason)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Often, an Opportunity or Quote needs to go through an approval process, and to make it through the gauntlet, certain fields must be completed. Getting users to remember which fields to fill out first can be a challenge, especially in the excitement of taking an opportunity to the next level. Theresa showed us how to add a validation to a checkbox, to trigger an automatic review of a record submitting it to an approval workflow. Great way to reduce many rules to one: Check the box and follow the instructions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Synchronizer data mover (Rich Bilsback)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;Synchronizer is a Microsoft Access database that helps you automate data tasks in Salesforce. Rich walked us through how he uses the Syncronizer to keep local application data updated, and how to use a local application to update your Salesforce data in the cloud. To get started, &lt;a href="http://appexchange.salesforce.com/listingDetail?listingId=a0N300000024ahkEAA"&gt;grab the Synchronizer from the Sales Force AppExchange&lt;/a&gt;. It's a free "Aloha" application distributed by the Force.com Labs. &lt;br /&gt;&lt;br /&gt;Stayed turned to the &lt;a href="http://www.linkedin.com/groups?mostPopular=&amp;amp;gid=2875209&amp;amp;trk=myg_ugrp_ovr"&gt;Rochester Salesforce User Group on Linked In&lt;/a&gt; for more Salesforce Thursdays coming this summer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8921260422039627155?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8921260422039627155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8921260422039627155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8921260422039627155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8921260422039627155'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2011/06/salesforce-user-group-speed-demo.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4588146236731330362</id><published>2011-06-01T07:47:00.001-04:00</published><updated>2011-06-01T07:52:20.563-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;The Facilitative Business Analyst and IIBA Rochester NY Chapter General Meeting ...&lt;/span&gt;&lt;br /&gt;Business  Analysts develop requirements as process experts – not as content  experts.  Business analysis is the same regardless of the industry.   Facilitators guide groups as process experts – not as content experts.   Facilitation is the same regardless of the business.  So, a Business  Analyst should be a Facilitator.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Time: Wednesday, June 8 · &lt;span class="dtstart"&gt;&lt;span class="value-title" title="2011-06-08T17:30:00"&gt; &lt;/span&gt;5:30pm&lt;/span&gt; - &lt;span class="dtend"&gt;&lt;span class="value-title" title="2011-06-08T20:30:00"&gt; &lt;/span&gt;8:30pm&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Location: &lt;span class="fn org"&gt;Valicia's Ristorante, &lt;/span&gt;2155 Long Pond Road, Greece NY&lt;/li&gt;&lt;/ul&gt;When the session is completed, the attendees will be able to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Understand and describe why Facilitators and Business Analysts have the same skills.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Incorporate facilitation into their role as Business Analyst.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use Facilitation skills to help develop requirements. &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://mgrconsulting.com/images/stories/NewImages/gfx-dsc_140.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://mgrconsulting.com/images/stories/NewImages/gfx-dsc_140.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Gary  Rush, IAF CPF, Founder and President of MGR Consulting  (mgrconsulting.com), attended the U.S. Naval Academy, has written  numerous “how to” books and continues to be the leader in the field of  facilitation and Facilitator training.  He was Chair of the  International Association of Facilitators (IAF) from 2008 through 2010.    &lt;br /&gt;Gary created FoCuSeDTM – the next revolution in structured  facilitation.  The FoCuSeDTM Facilitator Academy is the most complete,  most comprehensive, and most effective facilitation class providing  detailed training on the concepts of Holistic Facilitation.  His  facilitation technique is used widely around the world and his alumni  are amongst the most successful.   &lt;br /&gt;&lt;a href="http://june82011generalmeeting.eventbrite.com/"&gt;Register via Eventbrite&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4588146236731330362?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4588146236731330362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4588146236731330362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4588146236731330362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4588146236731330362'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2011/06/facilitative-business-analyst-and-iiba.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6679327119029256607</id><published>2011-05-01T06:00:00.001-04:00</published><updated>2011-05-01T06:00:06.420-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Remembering the Habits ...&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.principalspage.com/theblog/archives/do-you-need-a-good-memory-to-work-at-a-school-i-hope-not" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://www.principalspage.com/theblog/wp-content/uploads//2008/04/memory.jpg" width="152" /&gt;&lt;/a&gt;&lt;/div&gt;I'm a longtime fan of Covey's Habits of  Highly Effective People. What I like most about the habits is that they  are a system. The habits are not a simple set of best practices, but a  rich network of interrelated behaviors that reinforce one another. &lt;br /&gt;&lt;br /&gt;Here's the habits, which I like to remember in the form of a litany:&lt;br /&gt;&lt;br /&gt;"Be  proactive, begin with the end in mind, and put first things first. Seek  first to understand then to be understood, think win-win, and  synergize. Sharpen the saw, teach the habits, and introspect."&lt;br /&gt;&lt;br /&gt;There  are three sets of behaviors within the habits: public, private, and  renewal, which I express in the three sentences of the litany. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Personal: Be proactive, begin with the end in mind, and put first things first. &lt;/li&gt;&lt;li&gt;Public: Seek first to understand then to be understood, think win-win, and synergize. &lt;/li&gt;&lt;li&gt;Renewal: Sharpen the saw, teach the habits, and introspect. &lt;/li&gt;&lt;/ul&gt;Originally,  there were seven habits, but after a while, Covey realized that there  was a eighth habit, always implied, but not called out separately:  "Teach the habits." &lt;br /&gt;&lt;br /&gt;Ironically, Covey himself practiced "Teach  the habits" by writing the original seven habits book, but had to go  back and practice it once again in an "eighth habit" book. &lt;br /&gt;&lt;br /&gt;Likewise, in the litany, there is added a ninth habit: &lt;i&gt;Introspect&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;In the Seven Habits, there is a key question that Covey asks us to consider:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"What is one thing you could do, that, if you did it on a regular  basis, would make a tremendous positive difference in your personal or  professional life?"&lt;/li&gt;&lt;/ul&gt;(Or: What am I not doing that I should be doing in order to be more effective?)&lt;br /&gt;&lt;br /&gt;In  my mind, asking this question goes beyond a background process. The  question helps us choose which jungles to harvest. I see "Introspection"  as a separate habit, a final link in the chain. A thoughtful answer to  the "regular-basis" question closes the loop and brings us back to Habit  1: &lt;i&gt;Be proactive&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;Brother Covey also numbers the public habits  slightly differently than the order found in the litany. The canonical  order for the public habits is "win-win", "seek-first", and "synergize"  (4, 5, and 6). But, from a systems perspective, that order seems  sideways to me. &lt;br /&gt;&lt;br /&gt;The order of the personal habits (1, 2, 3) lead  us from bootstrapping, into goal setting, and onto prioritization.  Likewise, the public habits should lead us from empathy, into  collaboration, and onto teamwork. &lt;br /&gt;&lt;br /&gt;With the litany, I'm never  stuck when someone asks me: Can you name the seven habits? The litany  walks through the internal creation of an idea and its external manifestation, step by step.&lt;br /&gt;&lt;br /&gt;Just don't get me started on remembering the NATO AlphaBravo alphabet. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6679327119029256607?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6679327119029256607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6679327119029256607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6679327119029256607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6679327119029256607'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2011/05/remembering-habits.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6773680379851595197</id><published>2011-01-10T13:00:00.000-05:00</published><updated>2011-01-10T13:00:00.739-05:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;&amp;nbsp;Dreamforce Recap / 2011 Salesforce Roadmap ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_LCoIt82CYdA/TSsyMRHERMI/AAAAAAAAAhg/uQSS1zxcja0/s1600/Salesforce-Logo-2009.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_LCoIt82CYdA/TSsyMRHERMI/AAAAAAAAAhg/uQSS1zxcja0/s1600/Salesforce-Logo-2009.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;A key takeaway from Dreamforce 2010 is that the Saleforce cloud is expanding beyond sales and that 2011 will see the launch of several exciting tools for enterprise development. When the current roadmap runs its course, there will be five ways to build Salesforce applications. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.salesforce.com/platform/appforce/"&gt;Appforce&lt;/a&gt; (classic Force.com) - &lt;b&gt;Today &lt;/b&gt;- Appforce is the tried and true platform we use today, which combines Salesforce CRM, the force.com platform, and the VisualForce user interface library. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.salesforce.com/platform/siteforce/"&gt;Siteforce&lt;/a&gt; (web sites) - &lt;b&gt;GA Summer 2010&lt;/b&gt; - Siteforce combines content managmement with database management to create compelling web sites, for internal or external use.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vmforce.com/"&gt;VMForce&lt;/a&gt; (enterprise Java apps) - &lt;b&gt;GA in 2011&lt;/b&gt; - VMForce is SFDC's partnership with VMWare to deliver an enterprise Java cloud. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt; (Ruby apps) - &lt;b&gt;Today &lt;/b&gt;- Heroku is an established, cloud-based Ruby web application platform, available through its own website.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.salesforce.com/platform/isvforce/"&gt;ISVForce&lt;/a&gt; (AppExchange) - &lt;b&gt;Today &lt;/b&gt;- ISVForce provides the tools and technologies partners need to package applications for distribution.&lt;/li&gt;&lt;/ol&gt;Supporting the five development streams are two other products &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://www.salesforce.com/company/news-press/press-releases/2010/12/101208-2.jsp"&gt;RemedyForce&lt;/a&gt; - &lt;b&gt;Today &lt;/b&gt;- IT help desk. &lt;/li&gt;&lt;li&gt;&lt;a href="http://database.com/"&gt;Database.com&lt;/a&gt; - &lt;b&gt;Summer 2011&lt;/b&gt; - By providing a trusted database platform for any language and any device, Salesforce hopes to help more customers move enterprise applications to the cloud.&lt;/li&gt;&lt;/ul&gt;A key point is that Salesforce is providing a separate application platform and a separate database platform. Developers can use the platforms together, or mix-and-match with other platforms and services. You might host an ASP.NET application on your own server, or on Azure, but reach out to database.com for storage. Or you might host an application on Siteforce and reach out to your own web service for crucial data. &lt;br /&gt;&lt;br /&gt;Mobile applications are a great fit for cloud based development tools. There is no app server running on your mobile device, but by reaching out to a cloud database, you can connect the mobile app to other people in your enterprise. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;More about Siteforce&lt;/span&gt;&lt;br /&gt;The Siteforce mission to make the building and management of web sites dramatically easier. Technically, Salesforce is combining a cloud version of dreamweaver with a cloud web CMS with 24x7 hosting technology and an easy point-and-click, drag-and -drop design interface that non-techical people can use to build applications.&lt;br /&gt;&lt;br /&gt;Developers can drag existing applications into the CMS and build templates that people can use to build websites. The Siteforce architecture will also provide different views for different devices, simplifying mobile support. Since people do not want their web sites subject to scheduled mainenance, Siteforce will use a different infrastructure that will sites to stay online 24x7x365. &lt;br /&gt;&lt;br /&gt;Initially, the primary focus for SiteForce will be on marketing web sites, but the platform will be expanded to make building collaborative sites easier too. An open component architecture allows developers to build connections to the SFDC database and develop functionality like forums and wikis. Using the component architecture, Salesforce is expecting that the development community will provide a&amp;nbsp; wide array of custom Siteforce extensions and components through the AppExchange. &lt;br /&gt;&lt;br /&gt;Siteforce also includes full support for VisualForce pages and integrated authentification with the customer service and platform portals. Salesforce is extending its offering to appeal to both code-driven and visual developers. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;More about VMForce &lt;/span&gt;&lt;br /&gt;The Saleforce vision for VMForce is simple: Give Java developers a path to the cloud so that they can run their enterprise applications on our services. Java developers can use their existing tools, using the SpringSource tools suite, based on Eclipse. Developers can deploy to our cloud service simply by dragging a WAR file onto a Salesforce server. Developers can also use Java JPA code and Java objects to connect to database.com. The focus is on the Spring Framework and standard Java (rather than the full J2EE stack). Apex and VisualForce are not going away -- Salesforce is extending its offerings to appeal to a wider range of developers. &lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;Getting Started &lt;/span&gt;&lt;br /&gt;While some of the new SFDC development offerings are a work in progress, you can get up and running with a free Force.com site today. Just vist free.force.com and dive in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6773680379851595197?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6773680379851595197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6773680379851595197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6773680379851595197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6773680379851595197'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2011/01/recap-2011-salesforce-roadmap.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LCoIt82CYdA/TSsyMRHERMI/AAAAAAAAAhg/uQSS1zxcja0/s72-c/Salesforce-Logo-2009.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-5799301079301141119</id><published>2011-01-07T10:00:00.013-05:00</published><updated>2011-01-07T10:00:02.405-05:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Creating a Facebook Site with Google Apps ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_LCoIt82CYdA/TSce48dDx1I/AAAAAAAAAhc/-oCmKqpKM6E/s1600/gook.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="151" src="http://2.bp.blogspot.com/_LCoIt82CYdA/TSce48dDx1I/AAAAAAAAAhc/-oCmKqpKM6E/s320/gook.png" width="320" /&gt;&lt;/a&gt;This holiday season saw a landmark event. High profile companies,&lt;a href="http://www.facebook.com/barbie"&gt; like Mattel&lt;/a&gt;, posting a Facebook site URL in prime-time advertising. As it turns out, you don’t need to be a big name company to have your own Facebook site. Anyone can do it, it’s free, and it’s simple as pie.&lt;br /&gt;&lt;br /&gt;The reason it’s free and easy is that Facebook doesn’t actually host the site. Facebook provides a namepace and an iframe that points to a site you control. The pages are loaded from your server, wrapped in a Facebook pane.&lt;br /&gt;&lt;br /&gt;There is a &lt;a href="http://developers.facebook.com/docs/reference/javascript/"&gt;Facebook JavaScript API&lt;/a&gt; that you can use from any site. With the API, you can like pages, authenticate against Facebook, write to your wall, and such. But with a Facebook site, you can do anything that your own website can do.&lt;br /&gt;&lt;br /&gt;If you don’t already have a website of your own, you can create a static site using &lt;a href="http://docs.google.com/demo/%20"&gt;published Google Docs&lt;/a&gt;. Just create a document, and share it with the world, and you can wrap a Facebook site around it.&lt;br /&gt;&lt;br /&gt;Here’s how to get started.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If you don’t have a Google Docs account, you can sign up at &lt;a href="http://docs.google.com/demo/%20"&gt;http://docs.google.com/demo/ &lt;/a&gt;and create a page to share.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Select &lt;b&gt;Share &lt;/b&gt;and change the visibility to public&lt;/li&gt;&lt;li&gt;Then &lt;b&gt;Share &lt;/b&gt;and &lt;b&gt;Publish &lt;/b&gt;to the Web&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Login to Facebook. (As if you ever logout!)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.facebook.com/developers/createapp.php"&gt;Register an App Name with Facebook&lt;/a&gt;. (It’s free!)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Your Facebook account name might be a good one for starters. &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Under&lt;b&gt; Facebook Integration&lt;/b&gt;, enter your App Name as the as the &lt;b&gt;Canvas Page&lt;/b&gt;, and your public, published Google Doc page as the &lt;b&gt;Canvas URL&lt;/b&gt;. . Under &lt;b&gt;IFrame Size&lt;/b&gt;, select &lt;b&gt;Auto-Resiz&lt;/b&gt;e.&lt;/li&gt;&lt;li&gt;Open &lt;u&gt;apps.facebook.com/{Your-Canvas-URL}&lt;/u&gt;&lt;/li&gt;&lt;li&gt;Voila!&lt;/li&gt;&lt;ul&gt;&lt;li&gt;If the apps isn’t found right away, check the URL, and wait a few minutes for it to propagate.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;If t still doesn’t show, open &lt;b&gt;Advanced &lt;/b&gt;in your &lt;a href="http://www.facebook.com/developers/apps.php"&gt;&lt;b&gt;Apps Settings&lt;/b&gt;&lt;/a&gt;, and &lt;b&gt;Disable&lt;/b&gt; all the options.&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;For more tips about using Google Docs as a Facebook Canvas, see this Metaprime blog - &lt;a href="http://blog.metaprime.at/how-to-build-a-facebook-landing-page-with-google-docs/"&gt;http://blog.metaprime.at/how-to-build-a-facebook-landing-page-with-google-docs/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can also use a &lt;a href="http://apps.facebook.com/ted-husted/"&gt;Google Site as a Facebook Canvas&lt;/a&gt;. Just keep the site layout within a 870px width or a 740px page with a 130px sidebar. (Though, to appease the API, you might have to add an extra “?” at the end of the URL. )&lt;br /&gt;&lt;br /&gt;Google Docs and Google Sites are a great way to maintain a static site within Facebook. For some ideas about what you can do with a full web server, visit the  &lt;a href="http://apps.facebook.com/wwfgiftcenter/"&gt;World Wildlife Fund Gift Center&lt;/a&gt; and the &lt;a href="http://developers.facebook.com/showcase/"&gt;Facebook Platform Showcase&lt;/a&gt;. Common Knowlege also has a great webinar on &lt;a href="http://www.commonknow.com/html/rsrcs/webinarrecordings/101117_FacebookApplications/index.htm"&gt;Facebook Sites and Pages&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Facebook integration is a great example of how difficult problems can be solved with simple interfaces. Fire up your Facebook account, and give it a try!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-5799301079301141119?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/5799301079301141119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=5799301079301141119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5799301079301141119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5799301079301141119'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2011/01/creating-facebook-site-with-google-apps.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LCoIt82CYdA/TSce48dDx1I/AAAAAAAAAhc/-oCmKqpKM6E/s72-c/gook.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-834670128496178166</id><published>2010-09-25T23:55:00.015-04:00</published><updated>2010-09-26T17:15:18.733-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Put your ears on ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Non-profits come in all shapes and sizes. Two organizations that touch my own life almost daily are LibriVox and WBER. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://librivox.org/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://creativecommons.org/images/public/norights-a.png" /&gt;&lt;/a&gt;Simply put, &lt;a href="http://librivox.org/"&gt;LibriVox&lt;/a&gt; provides free audiobooks from the public domain. Now entering its sixth year, LibriVox volunteers have completed almost 4,000 reading projects. Laid end to end, it would take two and a half years to play to every LibriVox recording.&lt;br /&gt;&lt;br /&gt;While you won't find the latest James Patterson in the LibriVox catalog, you will find immortal classics like Dr Jekyll and Mr Hyde, Das Kapital, Don Quixote, Sherlock Holmes, and my new BFF, The Autobiography of Ben Franklin. &lt;br /&gt;&lt;br /&gt;LibriVox offers several ways to search for books, including title, author, and genre. If you're just getting started, &lt;a href="http://librivox.org/newcatalog/genres.php"&gt;genre is a great way to browse the catalog&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;All of the books can be downloaded in MP3 and other formats, making it easy to enjoy the book on any device. I listen to mine on a simple Coby MP3 player that I can use when walking the dog or plug into the auxilliary jack while driving. &lt;br /&gt;&lt;br /&gt;Though, I hear that life is more than audio books ... there is also music!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://wber.org/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://wber.monroe.edu/site/html/themes/BEST/images/logo.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Technically, &lt;a href="http://www.wber.org/"&gt;WBER&lt;/a&gt; is closer to an .EDU than an .ORG, but as a community-supported radio station, it looks and feels like a non-profit. &lt;br /&gt;&lt;br /&gt;Every day, WBER brings its listeners to an eclectic mix of the latest alternative rock, on the Internet as wber.org.and via the Rochester NY airwaves as 90.5. &lt;br /&gt;&lt;br /&gt;As part of its educational mission, on weekdays during the school year, WBER turns its broadcast venues over to local high school clubs. While, the school day afternoons can be choppy, the rest of the broadcast day is a smooth, professional experience. &lt;br /&gt;&lt;br /&gt;Fun fact: WBER was the first radio station in Rochester NY to offer Internet streaming. I know this since at the time I was working with WXXI, and, with my help, we were second. :(&lt;br /&gt;&lt;br /&gt;After a long day of peering over requirements, it's great to kick back with a great book from &lt;a href="http://librivox.org/"&gt;LibriVox&lt;/a&gt; or a great tune on &lt;a href="http://www.wber.org/"&gt;WBER&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-834670128496178166?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/834670128496178166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=834670128496178166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/834670128496178166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/834670128496178166'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/hearing-is-believing.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4022573083055616758</id><published>2010-09-22T07:55:00.003-04:00</published><updated>2010-09-22T07:55:00.540-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;ASF Commits 1,000,000 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://na.apachecon.com/c/acna2010/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://na.apachecon.com/page_attachments/0000/0361/Register_for_ApacheCon.gif" /&gt;&lt;/a&gt;&lt;/div&gt;The Apache Software Foundation (ASF), makers of Apache HTTPD, Apache Solr, and more than fifty other open source products, will today post its one millionth update to the Subversion software repository shared by all its products. &lt;a href="http://subversion.apache.org/"&gt;Apache Subversion&lt;/a&gt; is a leading open source SCM repository, available for both Windows and Linux platforms. &lt;br /&gt;&lt;br /&gt;Software projects use repositories to provide for version control and group communications. Whenever a developer makes a change to a local copy of the software source code, he or she "commits" the change to the repository when its is ready to be shared with the group. Developers can also "roll back" a change if a problem is found later. &lt;br /&gt;&lt;br /&gt;The ASF provides technical and legal infrastructure for Subversion, Apache HTTPD, and other open source products who have adopted the &lt;a href="http://www.apache.org/foundation/how-it-works.html"&gt;ASF's meritocratic development model&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Apache HTTPD has been the number one web server on the Internet since April 1996. Apache is also the "A" in the popular &lt;a href="http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29"&gt;LAMP stack&lt;/a&gt; that powers other products, like the Drupal content management system.&lt;br /&gt;&lt;br /&gt;The annual ASF convention, ApacheCon, is being held Nov 1-5 in Atlanta GA. Join me there for my talk on &lt;a href="http://na.apachecon.com/c/acna2010/sessions/561"&gt;The Open Source Secret Sauce&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4022573083055616758?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4022573083055616758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4022573083055616758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4022573083055616758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4022573083055616758'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/asf-commits-1000000-apache-software.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6338564901932085504</id><published>2010-09-21T11:55:00.000-04:00</published><updated>2010-09-21T11:55:00.112-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Social networking for membership organizations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.podcastingnews.com/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" src="http://www.podcastingnews.com/content/wp-content/uploads/2009/12/social-media-bandwagon.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Long before Facebook, LinkedIn, and Twitter hit the scene, membership organizations hosted mailing lists, where members could reach out for help and help each other. Today, many nonprofits and associations are recasting their venerable "listservs" as social networking sites. &lt;br /&gt;&lt;br /&gt;While public sites like LinkedIn provide free forums, larger organizations with broader constituencies often need more capabilities than a free public site can provide out of the box. &lt;br /&gt;&lt;br /&gt;Happily, there are some great options available, both hosted ("in the cloud") and on-premises ("on your network"). &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Hosted Solutions &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Four great alternatives for non-profits, especially organizations already using iMIS or Salesforce, are GoLightly, Higher Logic, The Port, and Socious. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;GoLightly &lt;/b&gt;[&lt;a href="http://www.golightly.com/"&gt;www.golightly.com&lt;/a&gt;] is a solid "one stop shop" solution that works standalone or with iMIS and other membership management systems. My professional organization, the &lt;a href="http://www.theiiba.org/"&gt;IIBA&lt;/a&gt;, uses GoLightly. It lacks the "pizzaz" of some other solutions, but GoLightly gets the job done, without getting in the way. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Higher Logic&lt;/b&gt; [&lt;a href="http://www.higherlogic.com/"&gt;www.higherlogic.com&lt;/a&gt;] is a forward-looking offering, that stirs the social networking pot with add-ons like Member Ad, an advertising service for community sites. Many features, like microsites and calendars, can be delivered "stand alone", so you don't have to buy the whole gorilla if all you want is a banana.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;ThePort &lt;/b&gt;[&lt;a href="http://www.theport.com/"&gt;www.theport.com&lt;/a&gt;] is a comprehensive solution that rivals systems like Facebook in the look-and-feel department. Not just a pretty face, ThePort offers deep extensibility through its App Portal and Data Exchange platforms. If you're ready to take the deep dive, check out ThePort.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Socious &lt;/b&gt;[&lt;a href="http://www.socious.com/%5D"&gt;www.socious.com]&lt;/a&gt; offers a broad and deep set of social management tools that revolve around four spokes: Social Networking, Online Communities, Knowledge Repositories and Event Management. Socious released a mobile community app in August 2010, optmized for iPhone, Blackberry Storm, Palm Pre/Pixi, and Android 1.5+. &lt;br /&gt;&lt;br /&gt;Each of the hosted solutions have their own "flavor" (and price point). The best fit can depend more on your organization's culture than on a simple feature matrix.&lt;br /&gt;&lt;br /&gt;While hosted solutions offer great capabilities with low startup costs, many organizations still look to on premises solutons for tighter integration with an existing site.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;On Premises Solutions &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Both Ektron and Drupal provide flexible social networking capabilities that can be woven into an existing site, or setup as an independent site. Key advantages of an on premise solution include a consistent approach to administration and a full-site search that can include all resources. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Ekron CMS400.NET&lt;/b&gt; [&lt;a href="http://www.ektron.com/"&gt;www.ektron.com&lt;/a&gt;] is a general purpose content management system (CMS) with strong social networking capabilities. An Ektron website can be extended to include community groups, where each group has its own set of collaboration tools, including a Calendar, Forum, and Document Library. Using our Ektron/iMIS provider, we can automatically create Ektron groups based on a user's iMIS profile.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Drupal Organic Groups&lt;/b&gt; [&lt;a href="http://drupal.org/handbook/modules/og"&gt;drupal.org/handbook/modules/og&lt;/a&gt;] is a popular extension to a leading free open source CMS. Drupal OG is an elegant, flexible solution that is often used as part of a larger enterprise site, such as www.imiscommunities.com and . There are also Drupal offerings that provide full workgroup capabilities, like Drupal Commons and Open Atrium.&lt;br /&gt;&lt;br /&gt;The hardest part of today's social media landscape is that it's become an "embarrassment of riches". A good starting point is to study the &lt;a href="http://tedhusted.blogspot.com/2010/09/idealware-nonprofit-social-media.html"&gt;Social Media Technology Guide&lt;/a&gt; by Idealware, and follow its advice to be sure you are getting the most from public offerings. Then, fill any gaps with one the solutions outlined here. Before long, your perfect solution can be "out there", helping members help themselves.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6338564901932085504?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6338564901932085504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6338564901932085504' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6338564901932085504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6338564901932085504'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/social-networking-for-membership.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6803315613844048332</id><published>2010-09-18T11:55:00.012-04:00</published><updated>2010-09-18T11:55:00.516-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Workgroup Sites - Part 3 -Windows Live Office Groups&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="ttp://en.wikipedia.org/wiki/Windows_Live_Group" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://upload.wikimedia.org/wikipedia/en/f/f5/Windows_Live_Groups_logo.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In June 2010, Microsoft revamped its Microsoft Live offerings to make better use of its SkyDrive online file storage system and Microsoft Web Apps platform, and to align Web Apps with the &lt;a href="http://www.docs.com/"&gt;docs.com website&lt;/a&gt;, targeted squarely at Facebook users. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://groups.live.com/"&gt;Windows Live Office Groups&lt;/a&gt; is a free service for the personal use of groups of up to a thousand of your closest peeps. The only catch is that everyone needs a (free) Windows Live ID. Although Groups is free for personal use, every page on the site does includes a sidebar advertisement (annoying, animated advertisements). One other current restriction is that there is a limit on the number of groups one Windows Live account can create or join. You can create up to 20 groups (using one account), and join up to a total of 40.&lt;br /&gt;&lt;br /&gt;Meanwhile, the browser list is longer than you might expect. (A clear signal that MS is ready to complete with Google in the online office space.) &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Linux&lt;/b&gt;: Firefox 3.5 or later versions, Chrome 3 or later versions&lt;/li&gt;&lt;li&gt;               &lt;b&gt;Mac&lt;/b&gt;: Safari 4 or later versions, Firefox 3.5 or later versions, Chrome 3 or later versions&lt;/li&gt;&lt;li&gt;               &lt;b&gt;Windows:&lt;/b&gt; Internet Explorer versions 7 and 8, Firefox 3.5 or later versions,  and Chrome 3  or later versions.&lt;/li&gt;&lt;/ul&gt;Each group has its own set of areas for Discussions, Documents, Photos, Calendar, Membership, and SkyDrive. The navigation is clean and simple. Anyone who understands breadcrumbs should have no trouble bouncing between area. There is also a modest selection of alternative styles dress up the navigation bar.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Discussions&lt;/b&gt; - A simple but effective online forum, making it easy for members to post messages without CC'ing the world. Administrative features including editing and deleting posts, and deleting entire discussions. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Documents&lt;/b&gt; - Any type of file can be uploaded, and you can edit the permission to restrict usage. Office documents can be viewed or edited online, or downloaded and edited locally (if you have the corresponding Office application installed). Editing or uploading a document creates a new version automatically. It's even easy to flip between versions and restore an older one, if need be.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Photos&lt;/b&gt; - Create albums and upload images to share with the group. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Calendar&lt;/b&gt; - Track key dates on the group's calendar and integrate with your own calendar and with calendars for other groups. There is also an option for a daily email alert of upcoming events.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Membership &lt;/b&gt;- Each participant can be in one of three security roles: Owner, Co-Owner, and Member. The Owner can be changed, and only the owner can delete a group. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Group Landing Page&lt;/b&gt; - The main page for the group summarizes activity from the other areas, making it easy to see what's happening. &lt;br /&gt;&lt;br /&gt;The group may also have an "Email group" feature which works like a mailing list. The confusing bit is that some messages will end up in the Discussion area and some will end up in email, diluting the effectiveness of both.&amp;nbsp; A third endpoint for discussions is group chat. If enabled, up to  forty people in your group members can pile on via Windows Messenger.&lt;br /&gt;&lt;br /&gt;The group email feature can be turned off, and individual members can opt out of group email. The missing option is email alerts for discussions. Also missing is a RSS feed of the group's activities. &lt;br /&gt;&lt;br /&gt;For extra credit, &lt;a href="http://smallbusiness.officelive.com/en-us/"&gt;you can also create a free website&lt;/a&gt; for your group (or other purpose) -- but that would be yet another series.&lt;br /&gt;&lt;br /&gt;Like Google Apps and Google Sites, Windows Live and Office Live Groups offer a broad platform that can be targeted for specific projects. Next week, we will close up the Workgroup Site series with a look at Open Atrium, another example of narrowing a broad platform.&lt;br /&gt;&lt;br /&gt;-Ted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6803315613844048332?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6803315613844048332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6803315613844048332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6803315613844048332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6803315613844048332'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/workgroup-sites-part-3-windows-live.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-473850904591801016</id><published>2010-09-16T23:55:00.005-04:00</published><updated>2010-09-16T23:55:00.631-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Idealware: The Nonprofit Social Media Technology Decision Guide&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.idealware.org/reports/nonprofit-social-media-decision-guide" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://www.idealware.org/sites/idealware.org/files/images/sm_decision_guide_cover.gif" width="158" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Another great technology resource for non-profits is Idealware (&lt;a href="http://www.idealware.org/"&gt;www.idealware.org&lt;/a&gt;). The site provides "thoroughly researched, impartial and accessible resources about software to help nonprofits make smart software decisions." &lt;br /&gt;&lt;br /&gt;There are a number of Idealware reports available, including the &lt;a href="http://www.idealware.org/homepage-features/field-guide-feature2"&gt;Field guide to Software for Nonprofits&lt;/a&gt;, and most recently, the&lt;a href="http://www.idealware.org/reports/nonprofit-social-media-decision-guide"&gt; Nonprofit Social Media Decision Guide&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;The Decision Guide is an exquisite 70-page whitepaper crammed with practical advice that any nonprofit can put to work today. The guide covers Facebook, Twitter, Blogs, Photo Sharing, Video Sharing, and additional social media channels.&lt;br /&gt;&lt;br /&gt;The material is based directly on original research conducted by Idealware. For each media, Idealware provides solid guidelines on getting the most for your time and effort. &lt;br /&gt;&lt;br /&gt;The guide also highlights interesting and entertaining comments taken from the survey. And Idealware is not shy about providing their own analysis, such as "As a rule of thumb, set aside at least two hours each week for each social media channel." &lt;br /&gt;&lt;br /&gt;If you're wondering whether to focus on Twitter or Blogs, or Facebook versus Flickr, this &lt;a href="http://www.idealware.org/reports/nonprofit-social-media-decision-guide"&gt;whitepaper &lt;/a&gt;is for you. &lt;br /&gt;&lt;br /&gt;My only raised eyebrow is that the guide marginalized LinkedIn. My viewpoint may be skewed from involvement in professional organizations, but LinkedIn and LinkedIn forums are my preferred social networks. &lt;br /&gt;&lt;br /&gt;According to the guide, for most nonprofits, a Facebook page will yield the best bang for the buck, if you have the time to maintain it, but the key is to integrate your communication strategy into a "cohesive whole". For details, see the guide :)&lt;br /&gt;&lt;br /&gt;I do have to say that the writing is simply excellent. Everything about the guide screams quality and attention to detail. If you only read one Social Media resource this year, let it be &lt;a href="http://www.idealware.org/reports/nonprofit-social-media-decision-guide"&gt;Idealware's Decision Guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;-Ted. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-473850904591801016?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/473850904591801016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=473850904591801016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/473850904591801016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/473850904591801016'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/idealware-nonprofit-social-media.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-7082246238947232719</id><published>2010-09-15T21:55:00.009-04:00</published><updated>2010-09-15T21:55:00.650-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Nonprofit Technology Conference 2011: Session Proposal Voting is Now Open!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.cafepress.com/nten" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="75" src="http://logo.cafepress.com/nocache/8/1943708.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.nten.org/"&gt;NTEN &lt;/a&gt;(the Nonprofit Technology Network) is the membership organization of nonprofit technology professionals.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.nten.org/ntc"&gt;Nonprofit Technology Conference (NTC) 2011&lt;/a&gt; is scheduled for March 17, 2011, to be held in Washington DC. The organization has received over 400 proposals this year -- a 75% increase over 2010! &lt;br /&gt;&lt;br /&gt;NTC is looking for your help in narrowing the proposals down to the top 100 or so. Please visit the website and &lt;a href="http://www.nten.org/blog/2010/09/13/help-shape-2011-ntc-agenda-session-proposal-voting-now-open"&gt;vote for your favorite proposals&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Voting is open through September 30th, so be sure to &lt;a href="http://www.nten.org/blog/2010/09/13/help-shape-2011-ntc-agenda-session-proposal-voting-now-open"&gt;click through&lt;/a&gt; and help shape the NTC 2011 agenda!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7082246238947232719?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7082246238947232719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7082246238947232719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7082246238947232719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7082246238947232719'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/nonprofit-technology-conference-2011.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4822762219018368363</id><published>2010-09-14T23:55:00.037-04:00</published><updated>2010-09-15T05:45:38.378-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;iCustomizations &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://nimbleuser.com/contactform.aspx" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_LCoIt82CYdA/TJCUUQV2NlI/AAAAAAAAAgw/s9AZdHO1So0/s320/lightbulb.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;While products like SalesForce and iMIS Public Views provide great functionality out of the box, there are a number of&amp;nbsp; PV customizations that NimbleUser customers often request. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Calendar Location Maps with Get Directions.&lt;/b&gt; By tieing in with  Google Maps, we can extend the standard iMIS calendar to provide a  location map, and then pop-off to Google Maps for directions. A great,  low-cost way to enhance the standard iMIS event calendar. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Custom Members Directory.&lt;/b&gt; The standard iMIS Public View  Directory pulls from the members database, and it's easy to configure,  but PV Directories comes with several constraints. Everything has to fit  on one row, there's no detail view, and it's public. With a custom  directory, we can add a detail page, link email or website addresses,  restrict access, and more. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Member Join.&lt;/b&gt; With standard Public Views, people can create free web accounts. We can extend the join process to include paying members, and collect whatever additional demographics your organization needs. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Join during event registration.&lt;/b&gt; Often, member pricing for an  event is a great inducement to join some organizations. We can make applying for membership a seamless extension to event registration, so that  your newest members can join without a second thought. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Bypass email confirmation during account create.&lt;/b&gt; The standard account create process includes an email confirmation step that confuses many new users and generates support calls. With a simple change, we can bypass the email confirmation, to reduce support costs and increase user satisfaction. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Support duplicate email address.&lt;/b&gt; Out of the box, Public Views has trouble coping with members who share an email address, especially when a password needs to be reset. We can extend the base workflow so that members can share email addresses, without resetting each other's password. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Ajax login notification for event registration.&lt;/b&gt; When accessing  an event, the standard iMIS login prompt is buried on the screen and  often missed. With our Ajax notification solution, it becomes easy for  users to login and complete registration, without confusion or support  calls. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Limited number of complementary sponsor registrations.&lt;/b&gt; If your organization offers sponsors a set number of complementary registrations, we can extend Public Views to cap the number of free registrations per sponsor. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Readonly profile fields.&lt;/b&gt; If there are some profile fields that members should see but not touch, we can make selected fields read-only. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Extend profile with custom pages.&lt;/b&gt; iMIS has great demographics, but sometimes an organization needs a more comprehensive profile. We can extend the profile with custom pages, to make it easier for members to maintain their own configuration. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Downloadable documents &lt;/b&gt;(after purchase). In this virtual world, many digital publications have value to your members. With Download Documents, users can purchase the right to a copy of a document, spreadsheet, PDF, presentation, or image, and then download it from a personal portal page.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Flexible payments.&lt;/b&gt; We also have solutions for discount coupons and installment dues, to provide members more flexibility. &lt;br /&gt;&lt;br /&gt;We often integate iMIS with Ektron websites, which creates some other great opportunities. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Ektron/iMIS provider.&lt;/b&gt; Our Ektron SSO solution authenticates web site users against iMIS and lets us create web site authentication groups based on iMIS critera. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Community Workgroups&lt;/b&gt; with your choice of Calendar, Forum, and/or Documents pages. Most organizations have working groups that need to collaborate. By combining Ektron communities with iMIS demographics, we can automate the creation and maintenance of collaborative groups, with access to their own Calendar, Forum, and Document library.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Dues Alerts at Login.&lt;/b&gt; Keeping up with dues is an easy thing for members to let slip. With a Dues Alerts, we post a dynamic reminder on the website that displays when members log in and have outstanding dues. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Ektron Blog Aggregator.&lt;/b&gt; If you'd like to post blogs on your website, but don't have the internal staff to keep it up, consider gathering together (or aggregating) your member blogs. Other members can visit your site, take in all the summaries of peer blogs at a glance, and click through to view the detail on the original site. An aggregator is a great way to build synergy between your member's and your organization's web sites. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;MyPage. &lt;/b&gt;With the Ektron/iMIS provider, we can create individual profile pages that combine the best of iMIS demographics and Ektron social media controls. Members can choose among a selection of widgets to create their own custom dashboard. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Conference Page.&lt;/b&gt; We have several approaches to creating microsites around your organizations conference, increasing usability and reducing maintenance. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Multiple Location Maps.&lt;/b&gt; If your organization has several locations, we can help you create a map of all your offices and allow users to drill down on any location for more detail and directions.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Flush web cache&lt;/b&gt; to show latest updates. High performance site are often aggressively cached. We can provide a simple for flushing the cache on demand, so that your members get the latest updates as soon as they are redy.&lt;br /&gt;&lt;br /&gt;Even if we haven't done your customization -- yet -- be sure to give us a call, and we can discuss doing iMIS or Ektron *&lt;b&gt;your&lt;/b&gt;* way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4822762219018368363?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4822762219018368363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4822762219018368363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4822762219018368363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4822762219018368363'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/icustomizations-while-products-like.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LCoIt82CYdA/TJCUUQV2NlI/AAAAAAAAAgw/s9AZdHO1So0/s72-c/lightbulb.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6187349316236851543</id><published>2010-09-13T11:55:00.004-04:00</published><updated>2010-09-14T21:43:49.310-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Coming Up 13 Sep 2010&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here's a run down of three events coming up soon.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Rochester Java Users Group, Tue 14 Sep&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A career focused meeting with a panel of three recruiters discussing how the job market has changed. People go about searching for new opportunities in a different way, hiring companies look for new talent differently, and the recruiter's role has changed as well - compared to the 80-ies/90-ies way of browsing the local newspaper and sending letters.&lt;br /&gt;&lt;br /&gt;This is an opportunity to update yourself on how the (job) world now works, to participate in an interactive evening featuring open discussion between developers and the panelists. The panelists are David Calus of E-R Associates, David Sable of TEKSystems and Eric Derby, The Software Scout.&lt;br /&gt;&lt;br /&gt;Meetings start at 6:00 pm and end around 8:00 pm, and take place on the Second floor of the Golisano building, at RIT, room GOL-2400. Directions to RIT can be found at &lt;a href="http://www.rjug.org/"&gt;www.rjug.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Digital Rochester "Get Connected!", Tue 5 Oct&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On Tuesday evening, October 5th, 2010, Digital Rochester is hosting its eighth annual Get Connected! networking event (http://digitalrochester.com/events/previous-events/networking/). The evening showcases select organizations in the Greater Rochester area that provide professional networking and service opportunities for their members.&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;The annual event is DR's biggest networking gathering of the year, welcoming a remarkable mix of Rochester’s best. There will be tech groups, professional associations and service organizations – altogether a great way to find opportunities for you to plug into good things happening in the greater Rochester region!&lt;br /&gt;&lt;br /&gt;Get Connected! will be in the very cool &lt;a href="http://rocwiki.org/Village_Gate"&gt;second floor atrium of Village Gate&lt;/a&gt;, right in the heart of Rochester’s Neighborhood of the Arts. Check out the sculptures, two story mobiles and artwork hanging from the ceiling! It’s an intriguing space and a one-of-a-kind opportunity to connect with all of these great organizations in one place at one time!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;IIBA Rochester NY "User Stores", Wed 6 Oct &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rochesterny.theiiba.org/"&gt;IIBA Rochester NY&lt;/a&gt; will host a live webinar with  Susan Burk on Wed Oct 6 at NimbleUser, 656 Kreag Road, Pittsford NY 14534. Susan  will speak on the subject of user stories and use cases.&lt;br /&gt;&lt;br /&gt;Use cases, user stories, and scenarios are key  techniques for eliciting, analyzing and specifying behavioral requirements. In  this pragmatic, experience-based presentation, Sue Burk, Sr. Associate at EBG  Consulting, explains the differences between these techniques, and some of their  challenges. Sue shares tips on how to "right-size" use cases and user stories  and test them with scenarios. Whether you use agile or traditional requirements  methods, you'll find practical ideas to make sure the time you invest in  behavioral requirements is good for your project.&lt;br /&gt;&lt;br /&gt;Susan Burk, Sr. Associate with EBG Consulting, has  over 25 years' experience as an analyst, facilitator, mentor, coach and trainer  at companies in the US and around the world. She helps technical and business  teams become more effective in delivering business value. Her presentations on  analysis, modeling, and facilitation topics have been featured for more than 17  years at diverse local, regional and national user group meetings.&lt;br /&gt;&lt;h2&gt;Rochester Security Summit, 20-21 Oct&lt;/h2&gt;The Rochester Chapter of the Information Systems  Security Association (ISSA), in association with ISACA® Western New York Chapter  and Rochester Chapter of the Open Web Application Security Project (OWASP), is  pleased to announce that the 5th Annual Security Summit will be held Wednesday  October 20 and Thursday October 21, 2010 at the Strathallan Hotel, Rochester NY.  The conference will be held 8:00a to 5:00 each day.&lt;br /&gt;&lt;br /&gt;For the presentation  schedule, visit &lt;a href="http://www.rochestersecurity.org/events/"&gt;http://www.rochestersecurity.org/events/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6187349316236851543?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6187349316236851543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6187349316236851543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6187349316236851543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6187349316236851543'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/coming-up-13-sep-2010-heres-run-down-of.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8047907983964956352</id><published>2010-09-11T11:55:00.036-04:00</published><updated>2010-09-11T11:55:00.395-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Workgroup project sites - Part 2 - Basecamp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://basecamphq.com/images/logo-black-basecamp.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://basecamphq.com/images/logo-black-basecamp.png" /&gt;&lt;/a&gt;&lt;a href="http://basecamphq.com/images/logo-black-basecamp.png"&gt;Basecamp&lt;/a&gt; is easily the "gold standard" of workgroup sites -- the yardstick by which competitors are measured. In fact, one site lists &lt;a href="http://pm-sherpa.com/features/basecamp-alternatives/"&gt;45 Basecamp alternatives&lt;/a&gt;, from 24SevenOffice to Zoho Projects. &lt;br /&gt;&lt;br /&gt;Launched in 2004, the proprietary, hosted web application is now available in 15 languages, and serves millions of teams worldwide. A free version is available that supports one project, though without the Time or Files features. Pricing for multi-project accounts range from $24 to $149 a month. &lt;br /&gt;&lt;br /&gt;Basecamp is one of a suite of products offered by 37signals, including Highrise, Campfire, and Backpack, that can be used together or independently. For example, Basecamp offers a Chat feature that requires a Campfire account.&lt;br /&gt;&lt;br /&gt;The full version offers a project-wide Dashboard view that rolls up work on all your projects across three core features: To-Dos, Milestones, and Time. On the individual project level, Basecamp adds Messages, Writeboards, Chat, and Files, for a total of 7 features, plus a project Overview.&lt;br /&gt;&lt;br /&gt;To create a Basecamp project, the application prompts for a project name and offers the option to create an internal project or to share the project with another company or client. If you choose to share the project, Basecamp adds options to select an existing company or create a new company. The workflow then lets you choose which people within a company to add to the project. &lt;br /&gt;&lt;br /&gt;"If you choose" is a Basecamp hallmark. The application makes full use of the interactive Ajax programming model. As you select options within the application, Basecamp updates the page, making for a slick user experience that "doesn't make you think." (Geek note: Basecamp is the progenitor of the popular Ruby on Rails web application framework.)&lt;br /&gt;&lt;br /&gt;Once a project is created, participants can add Messages, To-Dos, Milestones, Writeboards, Time records, or Files to a project.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Messages&lt;/b&gt;. Over the course of a project, a great deal of information is exchanged by email, and then trapped in everyone's individual inbox. When you post a message through Basecamp, the system sends a copy to project participants, while creating an archive of project-related messages. The result looks and feels much a Facebook wall, and provides a running record of decisions made via messages. Participants can reply to Basecamp message posts via email, saving a trip to the site.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;To-Dos.&lt;/b&gt; I'm usually not a fan of casual To-Do lists, since tracking and checking off the items can be more trouble than they are worth. In the case of Basecamp, the To-Do list UI is so simple and effective, I actually enjoy using it. Any number of lists can be created, and To-Do's can be assigned to any participant or just Anyone, and optionally given a due date and notify the responsible participant by email. &lt;br /&gt;&lt;br /&gt;*&lt;b&gt; Milestones.&lt;/b&gt; On their own Milestones seem to be little more than a high-level project "To-Do". The system previews upcoming Milestones, and calls out late Milestones if the date passes without marking it complete. You can also reference Messages to Milestones, making them slightly more useful. Oddly, To-Dos, Time records, and Files cannot be related to Milestones (which would make the feature much more useful), just Messages. As it stands, Milestones are a weak tickler with a simple calendar grid index. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Writeboards.&lt;/b&gt; Not quite a wiki, Writeboards provide a handy place to create simple online documents. The document can be edited using a simple wiki-like syntaxes, but it doesn't offer quick linking between pages. Writeboards do offer commenting, subscriptions, and a great version comparison tool, making them a good choice for (very) light documentation and requirements. &lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Time&lt;/b&gt;. The full Basecamp version offers a rudimentary time log, provide a quick and easy place to record time spent on a project. There no reporting, though you can export the log to CSV for use in Excel or other applications. Time looks like a throw-away feature that might have been a practice project for an intern, though it may become more useful as a bridge to &lt;a href="http://basecamphq.com/extras"&gt;a Time Tracking add-in&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;* &lt;b&gt;Files.&lt;/b&gt; Most project generate a number of documents that are routinely updated, and the Basecamp Files area is an ideal place to keep them all together. You have an option of versioning a new upload, or just uploading it again. The files can be viewed by Category, Date, Name, or Uploader. While the 15GB limit will keep you from uploading a library of full length videos, Files is an excellent implementation of a much needed tool.&lt;br /&gt;&lt;br /&gt;And if the core feature set is not enough, there are &lt;a href="http://basecamphq.com/extras"&gt;85 extras and addin to Basecamp&lt;/a&gt; that work with mobile devices and other online applications. &lt;br /&gt;&lt;br /&gt;Basecamp is an attractive application that people like to use. But some of the features fall short in odd ways. For example, Milestones leave you wanting a real calendar, and while the Files feature is great, there's no obvious place to add URLs to online resources. Although people need to create an account with 37Signals to join the project, compared to using Google Accounts, we are having far fewer problems getting people logged in (fewer as in "zero"). &lt;br /&gt;&lt;br /&gt;Next week, in part 3, we will look at OfficeLive workspaces, Microsoft's ironically free alternative to Basecamp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8047907983964956352?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8047907983964956352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8047907983964956352' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8047907983964956352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8047907983964956352'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/workgroup-project-sites-part-2-basecamp.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-5456967959164783112</id><published>2010-09-09T11:55:00.003-04:00</published><updated>2010-09-09T11:55:00.146-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Workgroup project sites - Part 1 - Google Sites &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's been said that an army marches on its stomach. Likewise, an IT project runs on communication. The best indicator of project success is team members that communicate with each other. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.google.com/apps/intl/en/business/sites.html" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://www.google.com/apps/intl/en/images/ss_sites_1_sm.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;While attitude is always the first, best ingredient in team communications, an effective infrastructure greases the wheels. The rising star of team communications are workgroup project sites, hosted on platforms like SharePoint, Google Apps, BaseCamp, Office Online, and Open Atrium. A workgroup site acts as a digital binder for a project, keeping shared files and messages together in one place.&lt;br /&gt;&lt;br /&gt;In part one of this series of blogs, we look at using Google Apps to host a workgroup project site. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/apps/intl/en/business/sites.html"&gt;Google Apps&lt;/a&gt; is a collection of workgroup tools, including Gmail, Google Calendar, Google Docs, and Google Sites. &lt;br /&gt;&lt;br /&gt;Google Sites is a simple, entry-level content management system, on par with 1999 "build it yourself" web site technology. When creating a site, you can select from a library of preformed templates, or start from scratch. Different types of pages can be created with the site, including web pages, announcements, file cabinets, lists, or a start page. &lt;br /&gt;&lt;br /&gt;Once created, a site can be made public or shared with anyone in your Google Apps domain. You can also share the site on a one-by-one basis with any Google Account.&lt;br /&gt;&lt;br /&gt;A very handy Google Sites feature is that existing sites can be copied to new sites. Copying sites makes it easy to create boilerplate sites that have both a design and starter content.&lt;br /&gt;&lt;br /&gt;You can also subscribe to alerts for the entire site, or just for individual pages. Once you subscribe, the site sends you an email alert whenever there is a change. With alerts, people don't have to post something to the site, and then turn around and tell everyone they posted it.&lt;br /&gt;&lt;br /&gt;For workgroup project sites, I usually start with four core pages: Announcements, Calendar, Contact List, and File Cabinet, along with a Starter Page.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Announcements &lt;/b&gt;- I usually rename the Announcement page to "Messages" to encourage using it for project communications. You can create a "New Post" that is linked into the page, much like a simple forum or wall. The page can accept attachments, and participants can also comment on the page, or edit it directly. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Calendar &lt;/b&gt;- Linking a Google Calendar to the site is a great way to keep track of project milestones. If you are already using Google Calendar for other things, the site calendar can be linked in with your other calendars. Though, since you can't change it directly from the site, new participants always have trouble editing the calendar the first time. You have to pull up your own Google Calendar and change it there. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Contact List&lt;/b&gt; - Google sites comes with a general purpose list applet. Each list item can have multiple fields of different types, like Text, Date, Dropdown, Checkbox, or URL. You can select a common layout or select your own column layout. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;File Cabinet&lt;/b&gt; - The file upload/download feature is very handy. Any type of binary or text file can be uploaded. It versions each upload of the same name, and you can easily go back and grab a prior version. The cabinet also accepts URLs, making it easy to link out to Google Docs and other online resources. &lt;br /&gt;&lt;br /&gt;For some projects, we might also add ToDo lists and such, but for most projects, Announcements, Calendar, Contact List, and File Cabinet, are the assets you need to keep communications flowing. &lt;br /&gt;&lt;br /&gt;While useful, the Google Sites UI and feature set is lacking in several ways. A key problem is that participants need to Google Accounts to join the site. While that sounds simple, in practice we have a lot of trouble getting new participants from other companies logged into a site for the first time. &lt;br /&gt;&lt;br /&gt;An alternative to Google Sites, BaseCamp, provides a fresh and friendly UI and a streamlined login process. Stay tuned for Part 2!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-5456967959164783112?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/5456967959164783112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=5456967959164783112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5456967959164783112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5456967959164783112'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/workgroup-project-sites-part-1-google.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3259698789344377556</id><published>2010-09-08T08:33:00.016-04:00</published><updated>2010-09-09T06:09:29.247-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Nimble Analysis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://en.wikipedia.org/wiki/The_Children%27s_Encyclop%C3%A6dia" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/55/The_Procession_of_the_Worlds.png/220px-The_Procession_of_the_Worlds.png" width="129" /&gt;&lt;/a&gt;&lt;/div&gt;The &lt;a href="http://books.google.com/books?id=CFHw8jSEWwkC&amp;amp;lpg=PP1&amp;amp;dq=A%20guide%20to%20business%20analysis%20body%20of%20knowledge&amp;amp;pg=PP1#v=onepage&amp;amp;q&amp;amp;f=true"&gt;Business Analysis Body of Knowledge&lt;/a&gt; (BABOK) lays out great strategies for eliciting and documenting requirements. To keep our own software projects on track, at NimbleUser we work toward five core milestones: Charter, Survey, Plan, Specify, and Correct.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Charter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"For which of you, desiring to build a tower, does not first sit down and count the cost, whether he has enough to complete it?" &lt;br /&gt;&lt;br /&gt;Before beginning any project, the first step should be to pull together a proposed budget and adopt a project charter. The budget doesn't have to be accurate, but it does need to indicate the magnitude of what we are setting out to do. What are the key objectives? How much might achieving each of those objectives cost? What is the total project investment, from requirements to implementation through deployment? The initial budget only needs to be a ballpark estimate that we can refine through analysis.&lt;br /&gt;&lt;br /&gt;The project charter lays out the decision making process, and the overall analysis and implementation workflow. It calls out the participant roles and responsibilities, and clarifies expectations, so that we can keep the project on track and on budget.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Survey&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"The only stupid question is the one you don't ask". &lt;br /&gt;&lt;br /&gt;A simple stakeholder survey is a great way to kickoff a project. Depending on the circumstances, participants can work on the survey independently, or you can step through the questions at a meeting. Ideally, do we both. We provide the survey to participants in advance of a review meeting, and then we walk through the responses, to elicit any missing detail, and to discuss any "interesting" points. A survey document is also a great place to capture any unexpected material. If one question leads to another, we edit the survey (then and there) to capture new details.&lt;br /&gt;&lt;br /&gt;If meeting remotely, we use a service like GotoMeeting to collaborate on the document in real time, or use a realtime sharing environment like Google Docs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Plan&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sage advice is to never hold a meeting without an agenda, and to never kick-off a project without a plan. &lt;br /&gt;&lt;br /&gt;Based on the preliminary proposal and detail elicited in the survey, a great next step is to outline the project, mapping business goals to the actual materials and services to be delivered. Then, using the preliminary proposal as a baseline, we separate the original items from any that were added or subtracted during the survey talks, or other discussions, so everyone can see how the scope is changing. &lt;br /&gt;&lt;br /&gt;As with the survey, we like to present and review the outline using GotoMeeting or another collaboration environment, making realtime updates to the document during the review. The take away is to stay nimble by avoiding intermediary forms. To keep the outline clean, leave the gritty details in the survey document. It's a good idea to reference the survey from the outline, so everyone knows it exists, but it's not a good idea to dump minutia into the outline.&lt;br /&gt;&lt;br /&gt;The outline should be a high-level treatment without implementation detail. A good analogy is a book proposal. Before chapter one is ever written, a publisher will want to see an outline of the entire book. Later, when the book is approved, and all the chapters in the outline are written, proofed, and typeset, then we know the book is done!&lt;br /&gt;&lt;br /&gt;Following common practice, it's a good idea to embed the outline in a high-level business plan document. (We call ours the "Discovery" document.) Since the plan lays out the key deliverables, we can use it to better estimate the size and cost of the project. Later, the items in the outline become tasks in a project plan, or stories in a scrum backlog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Specify&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Depending on the nature of the project, the next step is to develop a technical specification, or to work directly on the client's system or development system.&lt;br /&gt;&lt;br /&gt;If we are building a conventional web site, a low-level specification is needed to be sure we understand how all the pages work, and how they work together. A great way to keep a web site specification more interesting and collaborative is to use one of the new cloud-based wireframing tools, like ProtoShare or MockFlow. &lt;br /&gt;&lt;br /&gt;If we are working with a turnkey system, like iMIS Public Views, we may walk through configuring the software interactively, rather than create a (mostly redundant) formal specification. Likewise, for a complete but customizable platform, like Salesforce, we may setup a project "jumpstart" and collaborate on the system configuration and customizations, live and direct.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Correct&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's been said that "change is the only constant". No matter how well we plan and specify a project, changes will occur during the implementation and even after the initial launch. When changes occur, we update the system specification. If we documented a feature in one way, but after testing, implemented it another way, then we correct the specification to reflect what happened. If a document is worth creating, we find it's worth maintaining.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Collaborate &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While not a milestone, a first, best practice is to setup an extranet site where stakeholders can collaborate on the project. Popular platforms for collaborative sites include ShareProint, Google Apps, BaseCamp, Office Online, and Open Atrium. All of these platforms make it easy to share and exchange documents and messages throughout the course of a project. &lt;br /&gt;&lt;br /&gt;Regardless of what other BABOK techniques we use in a requirements project, we find that if we include these five milestones -- Charter, Survey, Plan, Specify, and Correct -- we're well on the way to a successful launch.&lt;br /&gt;&lt;br /&gt;-Ted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3259698789344377556?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3259698789344377556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3259698789344377556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3259698789344377556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3259698789344377556'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/nimble-analysis-business-analysis-body.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1450323332418473423</id><published>2010-09-07T11:55:00.003-04:00</published><updated>2010-09-09T08:14:21.462-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Keep UI discussions on target with FireShot &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the beginning, we programmed computers with toggle switches and punched cards. Next came the command line interface (CLI) and today's graphical user interace (GUI). Before long, there will be &lt;a href="http://en.wikipedia.org/wiki/Brain%E2%80%93computer_interface"&gt;brain computer interaces&lt;/a&gt; (BCI), but for today, we're faced with GUIs. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://screenshot-program.com/fireshot/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="137" src="http://screenshot-program.com/images/fireshot_thumb.gif" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Anyone involved in software development, training, or support spends a great deal of time discussing what is on, or what will go on, a computer screen. A well-designed set of screens expose not only the application's features, they steer users toward using the right feature at the right time. A very well designed application will even display screens with error messages that actually pinpoint the problem. &lt;br /&gt;&lt;br /&gt;Many UI discussions take place remotely or asynchronously. The other end of the discussion is either not in the room or not available while the display is on your screen. If someone is not looking over your shoulder, an actual screen shot can be the best way to get your point across.&lt;br /&gt;&lt;br /&gt;On the Windows platform, Ctrl+PrntScrn and Paint is still a screen-capture option, but adding comments to a screen in Paint is too much like work. A number of screen capture utilities have rushed in to fill the gap, including &lt;a href="http://www.blogger.com/post-create.g?blogID=5208774"&gt;SnagIt&lt;/a&gt; and &lt;a href="http://screenshot-program.com/fireshot/"&gt;FireShot&lt;/a&gt;, &lt;a href="http://alternativeto.net/software/fireshot/"&gt;among many others&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I like FireShot for it's simplicity. It's available for FireFox and Internet Explorer. The easiest way to get started is to snag the free FireFox plugin at &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5648/"&gt;https://addons.mozilla.org/en-US/firefox/addon/5648/&lt;/a&gt;. (I've never been able to get IE versions to work myself.)&lt;br /&gt;&lt;br /&gt;Once installed, FireShot puts a friendly [S] icon at the end of the address bar. Select the icon (or pressing the hotkey Ctrl+Alt+Z) and FireShot will capture the contents of your browser's screen, either the current view or full page. With any capture, you have the options of saving, editing, copying, printing, or emailing. You can even open up the capture in an external editor. &lt;br /&gt;&lt;br /&gt;I find the internal FireShot editor intuitive to use. It's easy to overlay the screen capture with arrows and boxes with your own comments, and save the result. &lt;br /&gt;&lt;br /&gt;One key feature lacking in the free version is the ability to save files for future editing. A project file format, and much more is part of &lt;a href="http://screenshot-program.com/features.php"&gt;the professional version, Screenshot Studio&lt;/a&gt; ($60). &lt;br /&gt;&lt;br /&gt;Screen shots are indispensable when submitting bug reports or creating training manuals for any browser-based application. If you don't have a screen capture utility on board now, fire up Mozilla and &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5648/"&gt;snag yourself a copy of FireShot&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1450323332418473423?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1450323332418473423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1450323332418473423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1450323332418473423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1450323332418473423'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/keep-ui-discussions-on-target-with.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1272292585922009098</id><published>2010-09-06T11:55:00.005-04:00</published><updated>2010-09-06T11:55:00.101-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;ApacheCon NA 2010 - depth meets breadth&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://na.apachecon.com/page_attachments/0000/0361/Register_for_ApacheCon.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://na.apachecon.com/page_attachments/0000/0361/Register_for_ApacheCon.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://en.wikipedia.org/wiki/Apache_httpd"&gt;Apache HTTPD&lt;/a&gt; has been the Internet's most popular web server since 1996, and the worldwide &lt;a href="http://www.apache.org/"&gt;Apache Software Foundation&lt;/a&gt; conferences are well known for providing hardcore technical data around Apache HTTPD and some of the other fifty-odd ASF projects. Along with the usual bits and bytes, &lt;a href="http://na.apachecon.com/c/acna2010/schedule/grid"&gt;ApacheCon NA 2010&lt;/a&gt; (Nov 1-5, Atlanta GA) is broadening its scope with Content Technology, Business, and Community tracks. Other tracks Tomcat, Lucene, NoSQL, Tuscany, OSGi, Enterprise Java, Commons, Mahout, and Hadoop, and, of course, HTTPD.  &lt;br /&gt;&lt;br /&gt;I'll be presenting an updated version of my &lt;a href="http://www.slideshare.net/ted.husted"&gt;Open Source Secret Sauce presentation&lt;/a&gt; on Thu, Nov 4, 2010, at 4p, as part of the Community track. OSSS discusses how volunteer open-source  projects create and maintain so many compelling, competitive products, and asks "What is the Open Source Secret Sauce?" &lt;br /&gt;&lt;br /&gt;The presentation covers &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Why open source matters, &lt;/li&gt;&lt;li&gt;How open source development works at the ASF, and&lt;/li&gt;&lt;li&gt;What makes open source projects successful.&lt;/li&gt;&lt;/ul&gt;If you caught the OSSS presentation at BlueTie or &lt;a href="http://fosscon.org/"&gt;FOSSCon 2010&lt;/a&gt;, and have any suggestions, drop me a line. &lt;br /&gt;&lt;br /&gt;This will be my fifth ApacheCon, and I'm looking forward to another whirlwind of war stories, brain dumps, and social goodness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1272292585922009098?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1272292585922009098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1272292585922009098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1272292585922009098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1272292585922009098'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/apachecon-na-2010-depth-meets-breadth.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-7967819635273735136</id><published>2010-09-03T11:55:00.003-04:00</published><updated>2010-09-03T11:55:00.204-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Is your site ready for the next wave of mobile surfers?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A growing twist in web application requirements is a request for compatibility with mobile phones, especially iPhones. Of course, Apple's latest touchscreen device, the iPad, is #2 on everyone's list, with a bullet.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.dailystoke.com/surfing/intel-shows-off-a-web-surfing-surfboard/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.dailystoke.com/wp-content/uploads/2008/08/surf-the-web-while-on-surfboard-150x150.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;The good news is that modern mobile devices are also using modern browsers. Supporting the iPad is not much different than supporting Safari on a Mac. But here are some gotchas to keep in mind if mobile support comes up in your next web requirements meeting.&lt;br /&gt;&lt;br /&gt;* No Flash support - Many sites sprinkle in Flash a little sizzle and some others can't function without it. Most mobile devices, like the iPad, don't support Flash. If mobile support is important, don't require Flash to access key features.&lt;br /&gt;&lt;br /&gt;* Sketchy online office support - Many online office environments, like Google Docs and Zoho, use controls that are not being supported with the iPad out of the box. If an online office is part of your web site mix, be sure to call out restrictions for iPad users.&lt;br /&gt;&lt;br /&gt;* Smaller screens at standard resolution - Today, most web site are designing around a 1024x768 resolution, which is supported by netbooks and many mobile devices. But, don't push the resolution envelope, or you will start to lose the bleeding edge. Also be sure that visual elements and typefaces are not so small as to be inscrutible on a smaller screen.&lt;br /&gt;&lt;br /&gt;Otherwise, most web applications should be good to go with the latest and greatest in mobile technologies.&lt;br /&gt;&lt;br /&gt;Who knows, before long, users may be &lt;a href="http://www.dailystoke.com/surfing/intel-shows-off-a-web-surfing-surfboard/"&gt;surfing your site from an actual surfboard&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7967819635273735136?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7967819635273735136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7967819635273735136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7967819635273735136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7967819635273735136'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/is-your-site-ready-for-next-wave-of.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8690025438768362573</id><published>2010-09-02T11:55:00.006-04:00</published><updated>2010-09-02T11:55:00.311-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size: x-large;"&gt;Open Source iBO&lt;/span&gt;&lt;span style="font-size: x-large;"&gt;: The Great Experiment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ASI watchers may have noticed an uptick in patches lately. That's no fluke says Mark Breland of ASI. It's all part of an initiative to shorten development cycles and put code improvements into the field sooner.&lt;br /&gt;&lt;br /&gt;One offshoot of that development initiative is ASI's plans to open source its IBO product. iBO (iMIS Business Objects) is the standard way to integrate iMIS with other products or one-off customizations. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://opensource.org/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://opensource.org/files/garland_logo.png" /&gt;&lt;/a&gt;&lt;/div&gt;ASI is working with its partners community version of iBO. Following up on a recent webinar, ASI has invited several interested volunteers to form a steering committee to manage an open source community product spun off from the current iBO code base. Five volunteers were on the kickoff call -- Bruce Wilson (McGladrey), Randy Richter (Association Technology Solutions), Jason Voccia (Computer System Innovations), Ted Husted (NimbleUser), and Troy Stenback (ASI Consulting) -- along with Mark Breland of ASI.&lt;br /&gt;&lt;br /&gt;The working plan is that ASI will donate the code and host a repository and case management system, and provide a collaborative space for the project. ASI will continue to maintain its own "enterprise" version separately, and the ASI version will be the only code base supported by ASI itself. Meanwhile, the steering committee will have full control over the "community" version, leaving us free to apply whatever patches or improvements to the "community" version as we deem fit. &lt;br /&gt;&lt;br /&gt;While some of the volunteers (including myself) are concerned about creating a "fork" of the iBO code base, we came to see it as a stepping stone toward a more complete open source model. Our hope is that ASI will adopt our fixes and improvements into the "enterprise" version, and also supply patches to the "community" version, to help the code bases remain in sync. Initially, =each code base would be maintained separately, and ASI will remain in complete control of the official "enterprise" version. &lt;br /&gt;&lt;br /&gt;The committee's hope is that once we prove ourselves, we might be able to reunite the codebases in the future. But, in the meantime, we are eager to make the best use of the enterprise/community model. &lt;br /&gt;&lt;br /&gt;Our next steps are to draft our "Rules of Engagement", setup a mailing list, and look to ASI to setup the repository and case tracking tools, and settle some of the loose ends with Legal. I caught the short straw for drafting the Rules, but I can draw on experience with open source projects like Apache Struts and the Jakarta Commons, to help give us a solid starting point. &lt;br /&gt;&lt;br /&gt;As a note, there are similarities between the Open iBO initiatve and the origin of Apache Tomcat. Sun originally donated a Java plugin to the Apache Software Foundation. Under the name "Tomcat", the ASF&amp;nbsp; extended and rewrote the codebase, and over the years, the ASF grew the product into a full-featured web server. A recent market survey indicates that today Tomcat has a 64% market share (&lt;a href="http://ztrek.blogspot.com/2007/10/bea-oracle-market-share.html"&gt;http://ztrek.blogspot.com/2007/10/bea-oracle-market-share.html&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Keep watch here for further news about Open Source iBO. I'm looking forward to living through some "interesting times" with ASI.&lt;br /&gt;-Ted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8690025438768362573?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8690025438768362573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8690025438768362573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8690025438768362573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8690025438768362573'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/open-source-ibo-great-experiment-asi.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-7095236640582069980</id><published>2010-09-02T01:20:00.000-04:00</published><updated>2010-09-02T01:20:43.488-04:00</updated><title type='text'></title><content type='html'>&lt;p&gt;The International Institute of Business Analysis is an  independent non-profit professional association serving the growing  field of Business Analysis and is for individuals working in a broad  range of roles – business analysis, systems analysis, requirements  analysis or management, project management, consulting, process  improvement, and more.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The  2010/2011 kickoff meeting for the Rochester NY chapter will be held on  Wednesday, September 8, from 5:30p to 7p, at &amp;nbsp;NimbleUser, 656 Kreag  Road, Pittsford NY 14534&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Refreshments will be provided with a $5 to $10 suggested donation. Assorted sandwiches, soda and dessert will be served.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The meeting will include a Study Group Orientation along with a review of the application process for the CBAP® professional certification.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;For more, or to register, visit the &lt;a href="http://rochesterny.theiiba.org/"&gt;chapter web site&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you are interested in what the IIBA® Rochester Chapter has to  offer or becoming CBAP® certified, please check us out on line at: &lt;a href="http://rochesterny.theiiba.org/index.php/professionaldevelopment"&gt;Professional Development&lt;/a&gt;. We  are accepting membership to the Rochester Chapter as well.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Membership  benefits and advantages are outlined online. For more information,  please visit our membership page: &lt;a href="http://rochesterny.theiiba.org/index.php/membership"&gt;Membership&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you have any questions about the chapter or the IIBA please contact us at&lt;a href="mailto:info@rochesterny.theiiba.org"&gt;info@rochesterny.theiiba.org&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7095236640582069980?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7095236640582069980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7095236640582069980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7095236640582069980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7095236640582069980'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/09/international-institute-of-business.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-932106225618935197</id><published>2010-07-06T06:00:00.001-04:00</published><updated>2010-07-06T06:00:02.591-04:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs436.ash1/24081_319297615981_299401805981_3533596_2494925_n.jpg" align="right" /&gt;&lt;span style="font-size:180%;"&gt;FOSSCon Recap&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The first &lt;a href="http://www.fosscon.org/"&gt;FOSScon Northeast&lt;/a&gt; was attended by a dedicated group of fifty enthusiasts this Saturday at the Rochester Institute of Technology in Henrietta NY, some coming from as far as Detroit to be immersed in a day of open source brouhaha. The Free Open Source Software (FOSS) convention included three tracks -- Education, Business, and Home -- along with two workshop tracks. The day also included Birds of a Feature sessions (special interest groups), and a round of lightening talks, where people gave a five-minute presentation on some FOSS topic.&lt;/p&gt;&lt;p&gt;My colleague Tom Patros and I lead a Drupal Kickstart workshop. We ran into projector problems, but the group was small enough that we were able to run the workshop up close and personal. I lead another talk later in the day entitled Open Source Secret Sauce. The decks for both talks are &lt;a href="http://www.slideshare.net/ted.husted"&gt;up on SlideShare&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In preparing for the Kickstart, we came across a couple of interesting\ cloud-based Drupal hosts. The DrupalCafe offers a free stock Drupal 6 site that is easy to setup and administer. The site does not allow you to install your own themes or modules, but certain extensions can be added on request. Another great starter site is the DreamHostApp. At this site, you can automatically setup a Drupal site, as well as Wordpress, PHPBBS, Zen, and Google Apps site, all in one click. If you ever wanted to take any or all of these "best of breed" products for a test-drive, &lt;a href="http://www.dreamhostapps.com/"&gt;DreamHost is your ticket to ride&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Meanwhile, FOSSCon One did suffer from the usual number of issues for a first-time conference. The website lacked detail. An overabundance of tracks and workshops lead to holding sessions in separate buildings. The lunch sponsor fell through, so attendees were left to fend for themselves. The tracks lacked a proctor to distribute and collect evaluations or to prompt speakers at the end of their sessions. But we all made the best of it, and many talks turned into intimate dialogs between people with a deep commitment to open source products.&lt;/p&gt;&lt;p&gt;One great takeaway for me was the notion of using Drupal for professional certification exams. The session leader had started with Moodle and then added Drupal. Since then the Drupal polls and rules modules came out, which together could make Drupal an excellent platform for certification exams.&lt;/p&gt;&lt;p&gt;In another session, my friend Chaz Profit highlighted the trend for open courseware.  The prime example is &lt;a href="http://ocw.mit.edu/"&gt;MIT's OCW site&lt;/a&gt;, which now has the materials for over 1900 courses online. The courseware includes lecture notes, sample exams and solutions, and even video lectures. Following MIT's lead, more and more professors are developing an open and collaborative attitude toward sharing syllabi.&lt;/p&gt;&lt;p&gt;I also ran into Onno Kluyt, former lead of Sun's Java Community Process (JCP). Onno is now living here in Webster NY, with his own &lt;a href="http://onno-consulting.com/"&gt;software consulting practice&lt;/a&gt;. Afterwards, we caught up at Quinby's, recounting stories of the dynamics between Sun and the Apache Software Foundation. The ASF hosts about fifty headstrong Java projects, which created some "interesting times" for Sun. (And now Oracle.)&lt;/p&gt;&lt;p&gt;Already plans are underway for FOSSCon 2011, and you can count me in. If you'd like to help out or stay in touch, &lt;a href="http://www.facebook.com/home.php#%21/pages/FOSSCON/299401805981"&gt;like the Facebook&lt;/a&gt;. Whether you made it out this year or not, there is also an &lt;a href="http://bit.ly/cc9Zim"&gt;exit survey online&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-932106225618935197?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/932106225618935197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=932106225618935197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/932106225618935197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/932106225618935197'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/07/fosscon-recap-first-fosscon-northeast.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-842423104113049832</id><published>2010-05-04T06:19:00.005-04:00</published><updated>2010-05-04T06:37:07.553-04:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Rochester Security Summit 2010 - Call for Presentations&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Rochester Security Summit October 20-21st, 2010, Rochester NY, &lt;a href="http://rochestersecurity.org/"&gt;http://RochesterSecurity.org/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The fifth annual Rochester Security Summit is being planned for October 20-21 in Rochester, NY and is looking for top speakers. This year there will be three tracks: Business Professional, Technical Professional, and Software Professional.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you believe you have a significant research or technical presentation that the security community would value and enjoy hearing, we invite you to submit your presentation topic for consideration.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;All three tracks will consist of presentations in 50-minute blocks, including Q&amp;amp;A. Presentations may be allowed to span two blocks to accommodate topic exploration to different depths if the committee sees the merit in the longer time allotment.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt; Please submit your proposal submissions before July 27, 2010.&lt;/li&gt;&lt;li&gt; We will respond to proposals by August 17th.&lt;/li&gt;&lt;li&gt; Draft copy of the slides for the papers must be submitted by September 14, 2010.&lt;/li&gt;&lt;li&gt; Final submissions are due by October 5th.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please review the speaker guidelines on the web site, &lt;a href="http://rochestersecurity.org/guidelines.html"&gt;http://rochestersecurity.org/guidelines.html&lt;/a&gt; before submitting a proposal.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Proposals may be submitted via e-mail to (present2010 at rochestersecurity.org) or by using the on-line submission form at &lt;a href="http://rochestersecurity.org/presentation.html"&gt;http://rochestersecurity.org/presentation.html&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Summit attendees are a mix of technical security professionals, vendors, programmers, web application developers, security testers, students, network administrators and IT executives. Preference will be given to speakers who can present innovative technical content to a broad technical audience. Of course, all presentations are expected to challenge the brightest and quickest of attendees.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The Rochester Security Summit is not a vendor fest.  There is zero tolerance for heavy commercial content in presentations. Presenters are expected to avoid any marketing that is not immediately backed up with rationale for its inclusion.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Proposals should consist of the following information:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;  Presenter and contact info (country of origin and residence-mail, postal address, phone, fax).&lt;/li&gt;&lt;li&gt;  Employer and/or affiliations.&lt;/li&gt;&lt;li&gt;  Brief biography, list of publications and papers.&lt;/li&gt;&lt;li&gt;  Any significant presentation and educational experience/background.&lt;/li&gt;&lt;li&gt;  Topic synopsis, proposed paper title, and a one paragraph description.&lt;/li&gt;&lt;li&gt;  Reason why this material is innovative or significant or an important tutorial.&lt;/li&gt;&lt;li&gt;  Optionally, any samples of prepared material or outlines ready.&lt;/li&gt;&lt;li&gt;  Will you have full text available or only slides?&lt;/li&gt;&lt;li&gt;  Please list any other publications or conferences where this material has been or will be published or submitted.&lt;/li&gt;&lt;li&gt; If you think a second 50-minute block will be required to do your topic justice, please let us know and give a rationale for the longer format.&lt;/li&gt;&lt;/ol&gt;Please include the plain text version of this information in your email as well as any file, pdf, sxw, ppt, or html attachments.&lt;br /&gt;&lt;p&gt;Please forward the above information to&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;(present2010 at rochestersecurity.org) or via&lt;/li&gt;&lt;li&gt;&lt;a href="http://rochestersecurity.org/presentation.html"&gt;http://rochestersecurity.org/presentation.html&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;For more event information, or to register, visit us online at &lt;a href="http://rochestersecurity.org/"&gt;http://rochestersecurity.org/&lt;/a&gt;.&lt;p&gt;Thank you,&lt;br /&gt;Rochester Security Summit Organizing Committee&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-842423104113049832?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/842423104113049832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=842423104113049832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/842423104113049832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/842423104113049832'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2010/05/rochester-security-summit-2010-call-for.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-7004755443901583476</id><published>2009-11-30T19:05:00.005-05:00</published><updated>2009-12-01T08:14:05.764-05:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;Free eBook - Google Wave (Preview) Explained&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;An abridged version of Google Wave (Preview) Explained by Ted Husted is available  for immediate download from &lt;&lt;a target="_blank" rel="nofollow" href="http://www.google.com/url?sa=D&amp;amp;q=http://wave.husted.com/&amp;amp;usg=AFQjCNEgyQJUaFx-Elcgkx0Wt7rPzH3MJQ"&gt;http://wave.husted.com/&lt;/a&gt;&gt;.&lt;br /&gt;&lt;p&gt;A printed version of the unabridged version is available for &lt;a href="https://www.createspace.com/3397265"&gt;purchase online&lt;/a&gt; from CreateSpace (an Amazon company). If you  are struggling with Wave, or wondering what all the hoopla is about:  Here's your help.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The abridged version contains five chapters designed to get you up and  running with Google Wave.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Riding&lt;/span&gt; - What did we do before Wave? What is it like to use Wave today? Tomorrow?&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Learning&lt;/span&gt; - How do we create a wave? Who can participate? Can we publish waves?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Touring&lt;/span&gt; - How do we work the interface? What are the authoring features? Any shortcuts?&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Flipping&lt;/span&gt; - Is there a list of keyboard shortcuts? Search commands? Useful searches?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The unabridged printed version includes eight additional chapters, designed to provide a broader and deeper view of Google Wave.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Grasping&lt;/span&gt; - What does Wave do? Why is it important? Where would it fit in my organization?&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Wading&lt;/span&gt; - How do we insert robots and extensions? Can we work with other systems? Other Google properties?&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Diving&lt;/span&gt; - How do we setup Wave? How do we store searches? Manage folders?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Surfing&lt;/span&gt; - What are some typical uses of a wave? Can it help us at work, home, and school?&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Blending&lt;/span&gt; - What are the best ways to collaborate with others on a wave?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Coping&lt;/span&gt; - What are some things that Wave doesn't do well?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Asking&lt;/span&gt; - What problems do people run into at first? Where can we get more help with Wave?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Tripping&lt;/span&gt; - Is Wave truly unique, or are there similar applications we could use instead?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;But, wait, there's more!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Two other Google Wave ebooks are also available, making for a total of three:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;    * &lt;span style="font-weight: bold;"&gt;Complete Guide to Google Wave&lt;/span&gt; (ebook) - &lt;&lt;a href="http://completewaveguide.com/"&gt;http://completewaveguide.com/&lt;/a&gt;&gt;.&lt;br /&gt;  * &lt;span style="font-weight: bold;"&gt;Getting Started with Google Wave&lt;/span&gt; (ebook) - &lt;&lt;a target="_blank" rel="nofollow" href="http://oreilly.com/catalog/0636920000426"&gt;http://oreilly.com/&lt;/a&gt;&lt;a href="http://oreilly.com/catalog/0636920000426"&gt;catalog/0636920000426&lt;/a&gt;&gt;.&lt;br /&gt;  * &lt;span style="font-weight: bold;"&gt;Google Wave (Preview) Explained&lt;/span&gt; (ebook and printed) - &lt;&lt;a href="http://wave.husted.com/"&gt;http:// wave.husted.com/&lt;/a&gt;&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Our waves runneth over!   &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7004755443901583476?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7004755443901583476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7004755443901583476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7004755443901583476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7004755443901583476'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2009/11/free-ebook-google-wave-preview.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-621992934331540784</id><published>2009-08-07T07:00:00.003-04:00</published><updated>2009-08-08T05:23:38.304-04:00</updated><title type='text'></title><content type='html'>&lt;div&gt;&lt;span style="font-size:180%;"&gt;Google Wave Preview: Seven things to improve about you ...&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While Google deserves credit for bringing out an early preview of their new Wave technology, there are several lessons to be learned from the experience. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;1 No help link&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If there is one thing wrong with the Wave Preview, it's that there's no Help link in the menu bar. Even a popup window telling us how to search for the (self-hosted) "Welcome Waves" documentation would make a huge difference. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;2 Ambiguous bug reporting &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The user interface has a "Create Bug" link (sic), but it's broken. Outside of that, there is a Known Issues wave, and a Release Notes wave, and also a Google Code issue tracker. Not all of the issues listed elseswhere are reflected in the public issue tracker. While Team Wave must have their own comprehensive issue tracker, there is no one outward-facing place where we can see if a bug has been reported or not.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;3 No roadmap to indicate planned features&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While there unimplemented controls in the user interface, and scattered references to planned features, there does not seem to be an outward-facing roadmap that indicates which features are planned to be implemented and when. Not knowing what is already planned leads to a lot of general agnst, fear, uncertainty, and doubt. Also, since there is no list of Google Team Members, we can't discern between a pundit's guess and a team member's assurance. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;4 No undo or revert&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When you are testing alpha-quality editing software, it hurts not to have an undo. Worse, if something is deleted, by yourself or someone else, there's is no revert. One recourse is to use the the Playback feature and copy and paste a prior version to the head. If a Wave has had many changes (some are in the 100s), it can take five or ten minutes for the Preview to "fast forward" to the latest version.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;5 No editing restrictions&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While Team Google can "hack" sometimes a wave to prevent editing, no type of access control feature has been implemented. Everyone can edit anything, which, without undo or revert, is leading to lost content. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;6 No external documentation &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The only documentation for the client application is spread out over half-a-dozen waves. It's great that Team Wave is eager to be self-hosting, but, honestly, it's way too early to present the documentation as a waves. As it is, we're being giving a DVD player which ships with 100% of the setup instructions on a DVD. The Sandbox is hosted as a Google App, so it would be easy to provide documentation as a Google Doc. While that may not be eating your own dog foot, we'd at least be eating cat food by the same vendor. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;7 No internal announcement mechanism &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When improvements are made to the environment, the word trickles out. An announcement might be posted, or the release notes might be updated, but there is no central page where all changes are guaranteed to be posted. The sandbox inbox is chaotic, and it's hard to discern between important updates from Team Wave and the general sandbox chatter.  Again, a help page that indicated important changes would make a world of difference.&lt;br /&gt;&lt;br /&gt;These points have been added to the &lt;a href="http://code.google.com/p/google-wave-resources/issues/list"&gt;Google API issue tracker&lt;/a&gt;. If you have a Preview account, and agree, drop by and star a few.&lt;br /&gt;&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/5208774-621992934331540784?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/621992934331540784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=621992934331540784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/621992934331540784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/621992934331540784'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2009/08/google-wave-preview-seven-things-to.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3943879670067941789</id><published>2009-07-23T07:00:00.002-04:00</published><updated>2009-07-24T19:45:26.196-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Wave'/><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;Google Wave: Not everyone is human ....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(Google has made a limited number of development accounts available for a preview of its forthcoming "Wave" product. &lt;a href="https://services.google.com/fb/forms/wavesignup/"&gt;If you get yours&lt;/a&gt;, look me up. I'm ted.husted@wavesandbox.com.)&lt;br /&gt;&lt;br /&gt;A few years back, when I first tried &lt;a href="http://www.jetbrains.com/"&gt;IntelliJ IDEA&lt;/a&gt;'s refactoring tools, I felt like I was pair programming with Commander Data. In the background, IDEA would compile my code, correct my syntax, and suggest fixes when my programming got sloppy. IDEA helped me write better code in less time.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog-wave.appspot.com/jaaron"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 125px; height: 200px;" src="http://2.bp.blogspot.com/_LCoIt82CYdA/SmVC9fhtrJI/AAAAAAAAAXY/-uuJzGaqaBU/s200/Waveiquette.png" alt="" id="BLOGGER_PHOTO_ID_5360764555656801426" border="0" /&gt;&lt;/a&gt;Being a Camelot of good ideas, &lt;a href="http://tedhusted.blogspot.com/2009/07/fifth-wave-googles-real-time.html"&gt;Google Wave&lt;/a&gt;, in the guise of robots, includes its own twist on intelligent background agents. Spelly scans input to a wave and corrects spelling errors on the fly (&lt;a href="http://sheenonline.biz/2009/06/12-reasons-why-google-wave-will-change-the-web/"&gt;using the web as its dictionary&lt;/a&gt;). Likewise, Linky scans the wave for text that looks like a hyperlink. If the reference leads to YouTube, Linky will even offer to embed a player into the wave. If language is a barrier to collaboration, Rosy the robot (no joke) will translate a wave into your native language.&lt;br /&gt;&lt;br /&gt;To a wave, a robot is just another participant on the wave. A wave is often described as a conversation between participants. (In fact, to use a robot with a wave, you add the robot as a participant.) Just like any other participant, a robot can make real-time changes to the content.&lt;br /&gt;&lt;br /&gt;Also like a human participant, a robot can interact with an external system. For example, &lt;a href="http://wavety.com/tweety-google-wave-robot/"&gt;Tweety &lt;/a&gt;&lt;http: com="" robot=""&gt;&lt;a href="http://wavety.com/tweety-google-wave-robot/"&gt; &lt;/a&gt;can post from a wave to a Twitter account, and &lt;a href="http://wavety.com/bloggy-robot/"&gt;Bloggy&lt;/a&gt; &lt;http: com="" robot=""&gt; can post a wave to a blog. If any changes are made to the wave, Bloggy will update the blog entry.&lt;br /&gt;&lt;br /&gt;Aside from blogs, there are many other systems that a wavebot could update. While Wave has its own version control, a robot could also update an external Subversion repository with all changes made to a wave. Likewise, a robot could create a static HTML page from a wave, so we could edit a wave and automatically update a high-performance website.&lt;br /&gt;&lt;br /&gt;Even though Wave is only in developer preview, there are already dozens of robots available, and more are being written every day. (A new website, &lt;a href="http://wavety.com/"&gt;Wavety.com&lt;/a&gt;, is already creating a directory of Robots and Gadgets.)&lt;br /&gt;&lt;br /&gt;An "interesting" new robot is &lt;a href="http://wavety.com/eliza-robot/"&gt;Eliza the Robot therapist&lt;/a&gt;&lt;http: com="" robot=""&gt;. Eliza scans the wave input looking for chances to reflect. "How do you feel about that?" (Some people are calling Eliza the first spambot!) If you are unsure whether to chat with Eliza, decide with a quick round of &lt;a href="http://wavety.com/roshambo-robot/"&gt;rock/paper/scissors&lt;/a&gt;&lt;http: com="" robot=""&gt;&lt;a href="http://wavety.com/roshambo-robot/"&gt;.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Already, I am feeling a need for a reverse Turing Test for wave participants -- is it live or is it cybernext?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Press the Button&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If robots are the workhorses of Wave, gadgets are the showdogs. Gadgets add interactive forms and animations to a wave, imposing focus and structure over participant input.  Several gadgets are already available, including Polly, for polls, and Checky, for checklists. The gadget API is compatible with OpenSocial, making a host of existing gizmos available to wave developers.&lt;br /&gt;&lt;br /&gt;Of course, the real test of any gadget platform is games. Already, we are seeing several multiplayer games bobbing into waves, including &lt;a href="http://wavety.com/play-chess-gadget/"&gt;chess &lt;/a&gt;and &lt;a href="http://wavety.com/sudoku-gadget/"&gt;soduko&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Although the full power of Wave is still rising to the surface, it's easy to see that it will be a powerful platform for project management, content management, intranets, team communication, customer support, and just plain fun.&lt;br /&gt;&lt;br /&gt;While we may not be able to use wave as a &lt;a href="http://snltranscripts.jt.org/75/75ishimmer.phtml"&gt;desert topping or floor wax&lt;/a&gt;, with the right robots and gadgets in play, we may be able to use it for everything else.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Resources &lt;/span&gt;&lt;br /&gt;&lt;/http:&gt;&lt;/http:&gt;&lt;/http:&gt;&lt;/http:&gt;&lt;ul&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.google.com/url?sa=D&amp;amp;q=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DMS9AbePnE08"&gt;Google Wave Made Simple&lt;/a&gt;&lt;span contenteditable="false"&gt;&lt;/span&gt; (video)&lt;/li&gt;&lt;li&gt;&lt;a href="http://sheenonline.biz/2009/06/12-reasons-why-google-wave-will-change-the-web/"&gt;12 Reasons Why Google Wave Will Change the Web&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://news.cnet.com/8301-27076_3-10291968-248.html"&gt;100,000 users to get Google Wave this fall&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tedhusted.blogspot.com/2009/07/fifth-wave-googles-real-time.html"&gt;The Fifth Wave: Google's Realtime Collaboration Tool&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3943879670067941789?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3943879670067941789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3943879670067941789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3943879670067941789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3943879670067941789'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2009/07/google-wave-not-everyone-is-human.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LCoIt82CYdA/SmVC9fhtrJI/AAAAAAAAAXY/-uuJzGaqaBU/s72-c/Waveiquette.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1451940228458771957</id><published>2009-07-07T07:00:00.008-04:00</published><updated>2009-07-22T03:07:48.614-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Wave'/><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;The Fifth Wave: Google's Real-Time Collaboration Tool ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At VanDamme Associates (soon to be &lt;a href="http://www.youtube.com/VanDammeAssociates#play/all/uploads-all/2/kBuhQsVhEU8"&gt;fka VA&lt;/a&gt;), we like our social media. Besides being blogging and Twitter fanatics, we integrate websites and Association Management Systems with various social media platforms, including ThePort, Go Lightly, and our own Ektron Group Application.&lt;br /&gt;&lt;br /&gt;An up and coming player on the social media horizon is Google Wave. Although it is not available to the public now, Google announced a developers version at Google IO on May 28. Google Wave is presented as an open-source, real-time communication platform, combining elements of email, instant messaging, wikis, web chat, social networking, and project management. Google Wave looks to be an elegant, in-browser communication client that anyone can use to bring together a group of friends or business partners. The group following the wave can discuss topics and share files -- in real time, character by character.&lt;br /&gt;&lt;br /&gt;Along with the real-time dimensions, Wave is bringing extensibility, embeddability, and sharability to the table. We will be able to embed a Wave in any blog or website, and we can also build widgets or gadgets that utilize Waves. Like today's wikis and Google Docs, anything written within a Wave can be edited by anyone else.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://wave.google.com/help/wave/images/ss1.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 600px; height: 391px;" src="http://wave.google.com/help/wave/images/ss1.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Visually, a Wave resembles a rich, web forum. Appearances aside, there are key differences.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Everything is shared.&lt;/span&gt; While some web forms allow for editing of posts, being able to edit everything, wiki-style, is part of the Wave DNA.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Not everyone is human.&lt;/span&gt; The environment includes helper robots that access the Wave as if they were collabators. Some of the robots already in service include Debuggy (an in-wave debugger), Stocky (which pulls stock prices based on stock quote mentions), Tweety (the Twave robot, which displays tweets inside of a wave), and Spelly (a natural language spell checker).&lt;span style="font-weight: bold;"&gt;Files are first class citizens.&lt;/span&gt; While forms and email system often support attachments, we will be able to drag and drop documents and images into a Wave. Within a web, images are presented in albums, sound files can be played, and documents are shared.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Plugins are seamless.&lt;/span&gt; Gadget and widgets can be designed to work within a Wave -- including rich applications like issue trackers -- and other platforms can embed a Wave into a page, much the same way we embed YouTube today, to create, for example, a instant chat room or talk-back channel.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Playback's a breeze. &lt;/span&gt;Wave’s playback feature walks-through how the entire conversation developed from the start, player-piano style, making it to figure out "how we got there from here". For someone joining a Wave-in-progress, Playback is a great catch-up on the thought process.&lt;/li&gt;&lt;/ul&gt;But, the strangest bit about Wave is that Google is not only enabling collaboration but &lt;span style="font-style: italic;"&gt;competition. &lt;/span&gt;The "lion's share" of the product will be available as open source, and there are already basic, non-Google hosted implementations of Wave. Once Wave becomes generally available, companies will be able to install third-party Wave implementations on their own servers and retain control of their own collaborative assets. If a discussion takes place inside a intranet firewall, it can stay within the firewall. (Or, alternatively, just let it ride on the Google cloud.)&lt;br /&gt;&lt;br /&gt;At the moment, there's no published schedule indicating when Google Wave will be made available to the public. But, it is real and already available to bleeding edge developers. For more, check the resources section.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Resources&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://mashable.com/2009/05/28/google-wave-guide"&gt;Google Wave: A  Complete Guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wave.google.com/"&gt;Official Wave Site&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://googlewavedev.blogspot.com/"&gt;Developers Blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/wave/"&gt;Wave Google code site&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://googlecode.blogspot.com/"&gt;Google Code Blog&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://mashable.com/2009/06/11/google-wave-extensions/"&gt;Google Web  Extensions&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1451940228458771957?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1451940228458771957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1451940228458771957' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1451940228458771957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1451940228458771957'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2009/07/fifth-wave-googles-real-time.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3027097515644026838</id><published>2009-04-02T22:30:00.007-04:00</published><updated>2009-04-03T00:58:07.071-04:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;To Tweet or Not to Tweet ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the third in a series of "talks for smart people", &lt;a href="http://bluetie.com/"&gt;BlueTie&lt;/a&gt; tonight hosted "To Tweet or Not to Tweet" to an engaged and inquisitive group in Pittsford NY. In fact, if the audience had its way, the talk would have been a hour-long question and answer session.&lt;br /&gt;&lt;br /&gt;Some hot-button queries were&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Why would someone follow over a thousand people?&lt;/li&gt;&lt;li&gt; How do you find people to follow, or people to follow you?&lt;/li&gt;&lt;li&gt; When should I follow, and when should I friend?&lt;/li&gt;&lt;li&gt; Are the social networks converging? &lt;/li&gt;&lt;li&gt; Is privacy an issue? Or a non-issue?&lt;/li&gt;&lt;li&gt; Can Twitter be used a guerrilla marketing tool?&lt;/li&gt;&lt;li&gt; How else can I use Twitter in my business?&lt;/li&gt;&lt;/ul&gt; &lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ping.fm/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 123px; height: 200px;" src="http://1.bp.blogspot.com/_LCoIt82CYdA/SdVxXB2tw8I/AAAAAAAAAS8/gALwrro37Uw/s200/ping_fm.png" alt="" id="BLOGGER_PHOTO_ID_5320283175256966082" border="0" /&gt;&lt;/a&gt;In between a battery of of questions, local Twitter guru &lt;a style="font-weight: bold;" href="http://twitter.com/EmilyCarpenter"&gt;Emily Carpenter&lt;/a&gt; walked us through the basics of &lt;a href="http://www.linkedin.com/in/husted"&gt;LinkedIn&lt;/a&gt;, &lt;a href="http://www.facebook.com/profile.php?id=705537703"&gt;FaceBook&lt;/a&gt;, and, especially, &lt;a href="http://twitter.com/tedhusted"&gt;Twitter&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The Twitter portion of the talk focused on the dizzying number of third-party add-ins. One that caught my eye is &lt;a href="http://ping.fm/dashboard/"&gt;Ping.fm&lt;/a&gt;. A point of convergence between the social networks is a status message or  micro-blog. Ping makes it easy to update your status on one or more networks from a single dashboard. Of course, like most social network applications today, there are missing features, like post-dating messages, but it is still a sweet dashboard. I'll be trying this one again.&lt;br /&gt;&lt;br /&gt;As to the Twitter questions, I won't try to speak for Emily, but here are my own answers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Why would someone follow over a thousand people? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mainly to get more followers of your own. People often reciprocate: if you follow someone on Twitter, they follow you back. To compensate, Peopleuse third-party Twitter applications to filter out the important feeds or likely tweets.&lt;br /&gt;&lt;br /&gt;Personally, I only follow people that I actually want to read regularly. But, I have noticed that following someone usually leads to more follows, even if it's someone like &lt;a href="http://twitter.com/tonyrobbins"&gt;@TonyRobbins&lt;/a&gt; or &lt;a href="http://twitter.com/johntesh"&gt;@JohnTesh&lt;/a&gt;. If you want to be followed, follow someone else.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;How do you find people to follow, or people to follow you?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Start by using Twitter's&lt;a href="http://twitter.com/invitations/find_on_twitter"&gt; Find People&lt;/a&gt; feature to lookup your friends and colleagues. Look at who they are following for other interesting feeds. Then goto to a site like &lt;a href="http://www.celebritytweet.com/"&gt;CelebrityTweet&lt;/a&gt; and look for other people that interest you. Also try looking up your favorite authors. (I found &lt;a href="http://twitter.com/StephenRCovey"&gt;@StevenRCovey&lt;/a&gt; that way.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;When should I follow, and when should I friend?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On Twitter, we follow. On FaceBook, we friend. On LinkedIn, we connect. On Twitter, you can follow anyone who is tweeting things you want to read. On FaceBook, it's better to  friend only people you actually know and trust, especially personal friends that you might join for dinner or drinks. On Linked In, it's best to connect with professional colleagues that are connected to your career in some way.  People that  you might interview for or against.&lt;br /&gt;&lt;br /&gt;The nice thing about Twitter is that it crosses the line between personal and professional. People expect Twitter  to be a mix. Twitter's a place where you can be a whole person, and not just the work-you or the home-you.&lt;br /&gt;&lt;br /&gt;Still, the Internet is forever, so don't tweet anything you don't want the grand kids to read, even if they aren't born yet&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Are the social networks converging?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, the network are adopting similar feature sets, and integrators, like Ping.FM, make it easier to reuse content between networks. Someday, there may one be one. But, for now, people tend to use LinkedIn to manage their resume, and FaceBook to manage their social calendar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Is privacy an issue? Or a non-issue?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To older folks (like me), the amount of information teenagers are sharing on social networks is frightening. But, privacy is relative. The key thing to remember is that nothing you share on a social network is private, so don't say anything you don't want your mother, kids, or spouse to know. Personally, I hesitate to mention when I will be traveling, or where my kids might be at a certain time. Burglars and stalkers are no strangers to technology.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Can Twitter be used a guerrilla marketing tool?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Absolutely! Just today, SlideShare sent me this email: "We've noticed that your slideshow on SlideShare has been getting a LOT of views in the last 24 hours. Great job ... you must be doing something right. ;-) Why don't you tweet or blog this? Use the hashtag #bestofslideshare so we can track the conversation."&lt;br /&gt;&lt;br /&gt;There's no reason why my SlideShare views should have spiked on Apr 1st. Even though I think it's a marketing prank, still, I wrote  about it. (And, fool me twice, I'm doing it again!)&lt;br /&gt;&lt;br /&gt;Another instance is that we have a meeting coming up for the still-forming local chapter of the &lt;a href="http://rochesterny.theiiba.org/"&gt;International Institute of Business Analysts&lt;/a&gt; &lt;http: org=""&gt;. To get the word our for our next meeting, one thing we are considering is asking the members to blog and tweet about it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;How else can I use Twitter in my business?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Many people and businesses have Google Alerts in place to search for items of interest. There are Twitter applications that let you do the same thing with Twitter feeds. For example, I mentioned "bikinis" the other day, and suddenly Bikini Beat is a follower. (Don't ask!)&lt;br /&gt;&lt;br /&gt;By proactively searching Twitter for keywords, companies can target consumers or head-off consumer complaints. But, seller beware, in this age of transparency, be upfront and honest. On the Internet, we can Google, but we can't hide.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Oh, and should you Tweet?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you have to ask, then you should :)&lt;br /&gt;&lt;br /&gt;But, only when you have something to say!&lt;br /&gt;&lt;/http:&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3027097515644026838?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3027097515644026838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3027097515644026838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3027097515644026838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3027097515644026838'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2009/04/to-tweet-or-not-to-tweet.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LCoIt82CYdA/SdVxXB2tw8I/AAAAAAAAAS8/gALwrro37Uw/s72-c/ping_fm.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4246549961294328018</id><published>2009-04-01T07:00:00.015-04:00</published><updated>2009-04-01T07:27:14.539-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'></title><content type='html'>&lt;div&gt;&lt;span style="font-size:180%;"&gt;@Twitter: Too Much and Not Enough ...&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://twitter.com/tedhusted"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 160px; height: 124px;" src="http://1.bp.blogspot.com/_LCoIt82CYdA/Sc7v42Ix-VI/AAAAAAAAASE/stxWS4drkEg/s200/twitter-com.png" alt="" id="BLOGGER_PHOTO_ID_5318451969855191378" border="0" /&gt;&lt;/a&gt;Once upon a time, Douglas Adams observed that, in an apparent attempt to keep our brains from working, humans have a habit of continually stating and repeating the very, very obvious, as in "It's a nice day", or "You're very tall", or "Oh dear, you seem to have fallen down a 30-foot well, are you all right?".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Today, the echo in that 30-foot well rings "Twitter-itter-itter-itter". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aptly named, &lt;a title="Twitter" href="http://www.youtube.com/watch?v=PN2HAroA12w&amp;amp;feature=related" id="e-i7"&gt;Twitter is a network for twits&lt;/a&gt; that have little to say about less than nothing. The free service makes it easy for people to post a micro-blog in 140 characters or less that can be read by anyone who cares to follow along. The Twitter cachet went over the top on 24 Feb 2009 when &lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2009/02/24/AR2009022403424.html"&gt;Congress posted back-channel tweets during President Obama's speech&lt;/a&gt;. Twitter has been careening toward the populist gutter ever since, until today, the coolness of tweeting rivals sweater vests and baseball caps.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Twitter is the most ironic, moronic waste of time since &lt;a title="Trivial Pursuit" href="http://en.wikipedia.org/wiki/Trivial_Pursuit" id="u7gs"&gt;Trivial Pursuit&lt;/a&gt;. Twitter not only pursues trivia, it runs it over, backs up, and runs over it again. Even at 140 characters or less, Twitter is the biggest bandwidth boondoggle since &lt;a title="Sarah Palin's stump speeches" href="http://newsbusters.org/blogs/tim-graham/2008/09/23/rolling-stone-throbs-hate-palin-american-people" id="ikdc"&gt;Sarah Palin's stump speeches&lt;/a&gt;. Twitter exposes a new depth of gibber-jabber that should bore to tears even the people gibbering the jabber.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My favorite irony is O'Reilly's plans for a &lt;a title="Twitter book" href="http://oreilly.com/catalog/9780596802813/" id="g4w1"&gt;Twitter book&lt;/a&gt;. Besides the incongruity of a 280+ page book about 140- character micro blogging system, Publisher &lt;a title="Tim O'Reilly" href="http://twitter.com/timoreilly" id="s1.2"&gt;Tim O'Reilly&lt;/a&gt; is one of the world's worst Twitterer. O'Reilly approaches Twitter like James Joyce approached Ulysses -- Stream of conciseness. (Sic.) No filter. No ID. On my screen, out the door. Hour by harrowing hour. All trees, no forest. Hint@Tim: More is not more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;My favorite feed used to be &lt;a title="Chris Walken" href="http://twitter.com/cwalken" id="ll:2"&gt;Chris Walken&lt;/a&gt;. Sadly, the person writing it was &lt;a href="http://jezebel.com/5186944/say-it-aint-so-fiddy-celebs-let-non+celebs-ghost+write-their-twitters"&gt;not actually the actor&lt;/a&gt; Christopher Walken, and Twitter censored the feed ... weeding orchids and fertilizing dandelions.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, Twitter doesn't have to be mindless. It could be a cool technology again ... if more people would stop tweeting like they were talking to the family parakeet. ("That's a pretty girl. Polly wanna cracker?")&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Truth be told, I've enjoyed tweets from friends doing even mildly interesting things. (I'm looking at you, @Schwebbie!) But, bandwidth is bandwidth, and people with nothing to say, shouldn't say it over Twitter. Reporting from the back of the Emperor's closet, here's some easy tweeting guidelines:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What to tweet: &lt;/div&gt;&lt;ul&gt;&lt;li&gt; Accepted a proposal. &lt;/li&gt;&lt;li&gt; Finished a book.&lt;/li&gt;&lt;li&gt; Bought a car.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;What not to tweet: &lt;/div&gt;&lt;ul&gt;&lt;li&gt; Good meeting!  &lt;/li&gt;&lt;li&gt; Yummy lunch!&lt;/li&gt;&lt;li&gt; Huge dump!&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Or, for the ADD enabled, the micro-version:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;What to tweet: Milestones.&lt;/li&gt;&lt;li&gt;What not to tweet: Minutia.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;To be fair, it's not just the people using Twitter. As a web application, Twitter sucks eggs. It does one thing, and does it poorly. Given a robust and featureful platform, we might attract a better class of twit.&lt;br /&gt;&lt;br /&gt;Happily, third parties are busily writing &lt;a title="improved Twitter clients" href="http://twitter.com/downloads" id="knz7"&gt;improved Twitter clients&lt;/a&gt; and &lt;a title="applications" href="http://www.squidoo.com/twitterapps" id="p13u"&gt;applications&lt;/a&gt;, but that doesn't excuse Twitter's own lack of innovation. (Or &lt;a title="inability to pick a business model" href="http://news.cnet.com/8301-17939_109-10084487-2.html?tag=mncol;txt" id="uu1s"&gt;inability to pick a business model&lt;/a&gt;  to fund innovation.)&lt;br /&gt;&lt;br /&gt;Here's the ten most obvious features that a competent micro-blogging network should offer out-of-the-box (most of which have already been invented):&lt;br /&gt;&lt;br /&gt;9. Twits often use tweets as polls, but we have to tabulate the votes by hand (&lt;a title="StrawPollNow" href="http://strawpollnow.com/"&gt;StrawPollNow&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;8. Twitter is a micro-blog, and people also have regular blogs, but we have to post our own tweet when we post a blog (&lt;a title="PingTwitter" href="http://www.pingtwitter.com/"&gt;PingTwitter&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;7. People post URLs in tweets, but what are the most popular URLs being posted? (&lt;a title="TwittURLs" href="http://www.twitturls.com/"&gt;TwittURLs&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;6. Twits have followers, which follow other twits, but Twitter doesn't recommend which twits we should be following (&lt;a title="Twubble" href="http://www.crazybob.org/twubble/"&gt;Twubble&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;5. Twits like to follow their own followers, but Twitter doesn't have an autofollow feature (&lt;a href="http://tweetbots.com/"&gt;TweetBots&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;4. People like to re-tweet, but there's no re-tweet feature, and no handy list of tweets most re-tweeted. (Can you dig it?) (&lt;a href="http://www.retweetrank.com/"&gt;&lt;span style="text-decoration: underline;"&gt;ReTweetRank&lt;/span&gt;&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;3. We can mark tweets as favorites, but where's the list of the most favored tweets on the network?&lt;br /&gt;&lt;br /&gt;2. The tweet feed is an generic chronology. Where are the categories? The personas? The tags? The Web 2.0? (&lt;a title="Twemes" href="http://twemes.com/"&gt;Twemes&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;1. The platform is so *&lt;span style="font-weight: bold;"&gt;not&lt;/span&gt;* scalable that people have time to get a "&lt;a title="Twitter is Busy" href="http://mashable.com/2009/02/26/twitter-fail-whale-tattoo/" id="nj9e"&gt;Twitter is Busy&lt;/a&gt;" tattoo waiting for it come back online.&lt;br /&gt;&lt;br /&gt;My prediction for 2010? Twitter becomes MySpace so-yesterday, and a new site with a reasonable feature set becomes the next socially transmitted dementia.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;(PS - &lt;a title="Enjoy this special day" href="http://en.wikipedia.org/wiki/April_Fools%27_Day" id="czk4"&gt;Enjoy this special day&lt;/a&gt;!)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4246549961294328018?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4246549961294328018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4246549961294328018' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4246549961294328018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4246549961294328018'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2009/04/twitter-too-much-and-not-enough.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LCoIt82CYdA/Sc7v42Ix-VI/AAAAAAAAASE/stxWS4drkEg/s72-c/twitter-com.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1111776539483219223</id><published>2009-03-28T20:00:00.003-04:00</published><updated>2009-03-31T08:09:35.563-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;Wireframing with Gliffy ...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gliffy.com/examples/wireframes/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 111px; height: 200px;" src="http://2.bp.blogspot.com/_LCoIt82CYdA/Sc6Jo9iGQBI/AAAAAAAAAR4/OPvEHVsOnw4/s200/gliffy-com.png" alt="" id="BLOGGER_PHOTO_ID_5318339546776485906" border="0" /&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;Lame but true: Gliffy is my new best friend.&lt;/div&gt;&lt;br /&gt;As a &lt;a href="http://theiiba.org/"&gt;business analyst&lt;/a&gt;, I spend my work days crafting requirements for web applications, which include wireframes that illustrate the page layouts. Web site wireframes are blue prints that define a page's content and functionality, without conveying design elements, like colors, graphics, or fonts.&lt;/div&gt;&lt;div&gt;Since wireframes are one of my key deliverables, I've tried a number of different tools, including &lt;a href="http://office.microsoft.com/en-us/visio/default.aspx"&gt;Visio&lt;/a&gt;, &lt;a href="http://www.smartdraw.com/"&gt;SmartDraw&lt;/a&gt;, &lt;a href="http://www.balsamiq.com/"&gt;Balsmiq&lt;/a&gt;, and &lt;a href="http://googledocs.blogspot.com/2009/03/drawing-on-your-creativity-in-docs.html"&gt;Google Docs Drawings&lt;/a&gt;. For web site wireframes, my hands-down, indispensable, favorite tool-of-choice is &lt;a href="http://www.gliffy.com/"&gt;Gliffy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's why: &lt;/div&gt;&lt;ol&gt;&lt;li&gt;Gliffy is a visual tool fluent in pixels. I can drag and drop shapes in Gliffy to my heart's content, but I can also specify the precise pixel dimensions, and position shapes at exact positions on the page. Most other tools force you to drag everything into place by hand -- which is like flying an airplane without an altimeter! &lt;/li&gt;&lt;li&gt;Gliffy exports drawings to standard formats, like JPEG, PNG, and SVG (Visio). It's easy to paste Gliffy images into Word docs or insert them into Google Docs.&lt;/li&gt;&lt;li&gt;Gliffy is cloud-based. I can use Gliffy anywhere there's an Internet connection and a browser. It also works great with Chrome!&lt;/li&gt;&lt;li&gt;Gliffy is reliable and well-supported. After several weeks of hard use, I've had exactly one functional issue with Gliffy. I filed a ticket, and an hour later my problem was solved. &lt;/li&gt;&lt;li&gt;Gliffy stores drawings in easy to manage folders, and files that are quick to load, and easy to share. &lt;/li&gt;&lt;li&gt;Gliffy is inexpensive ... starting with free. A free account has the same utility as a paid account, but imprints your drawings with a "Powered by Gliffy" advertisement. The paid accounts start a $5 a month for one user, or $25 a month for ten users. &lt;/li&gt;&lt;/ol&gt;&lt;div&gt;(Did I mention that Gliffy lets you specify shapes in pixels?) &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next time you need to whip up a wireframe or UI mockup, do yourself a favor and take &lt;a href="http://www.gliffy.com/"&gt;Gliffy&lt;/a&gt; for a spin. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(Did I mention it was free?)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See Also: &lt;a href="http://thinkvitamin.com/features/20-steps-to-better-wireframing/"&gt;20 Steps to Better Wireframing&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1111776539483219223?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1111776539483219223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1111776539483219223' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1111776539483219223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1111776539483219223'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2009/03/wireframing-with-gliffy-as-business.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LCoIt82CYdA/Sc6Jo9iGQBI/AAAAAAAAAR4/OPvEHVsOnw4/s72-c/gliffy-com.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1901508554501862957</id><published>2009-02-06T06:00:00.006-05:00</published><updated>2009-03-29T11:01:19.557-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;CheckVist Alpha - Plus-Size Your TODOs&lt;/span&gt; ...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LCoIt82CYdA/SYs74-5Fi-I/AAAAAAAAARI/h4N7-jNnZJM/s1600-h/checkvist.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 121px;" src="http://2.bp.blogspot.com/_LCoIt82CYdA/SYs74-5Fi-I/AAAAAAAAARI/h4N7-jNnZJM/s200/checkvist.png" alt="" id="BLOGGER_PHOTO_ID_5299395236672670690" border="0" /&gt;&lt;/a&gt;There's no shortage of online TODO list managers: &lt;a href="http://www.rememberthemilk.com/"&gt;Remember the Milk&lt;/a&gt;, &lt;a href="http://todoist.com/"&gt;Todoist&lt;/a&gt;, &lt;a href="http://www.toodledo.com/"&gt;Toodled&lt;/a&gt;, just to name a few. A new offering, &lt;a href="http://checkvist.com/"&gt;CheckVist&lt;/a&gt;, brings a second dimension to TODOology: keyboard-friendly outlining.&lt;br /&gt;&lt;br /&gt;CheckVist bills itself as an "online collaborative outliner and task list manager".  The bullet points include&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Jot it down fast with keyboard shortcuts to speed data-entry&lt;/li&gt;&lt;li&gt;Exchange data with other applications through import and export&lt;/li&gt;&lt;li&gt;Refine tasks with unlimited outline levels and multiple checklists&lt;/li&gt;&lt;li&gt;Work with others by sharing checklists and enabling change notification&lt;/li&gt;&lt;/ul&gt;CheckVist is not as feature-rich as similar products, but for brainstorming and outlining, there's something to be said for a clutter-free interface. While CheckVist supports the notion of "todo"s, it's really about organizing chunks of information in to a hierarchical list, often with a group of collaborators, not about personal time and deadline management. As a result, CheckVist a great complement to other, more complicated products.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;How fast is data entry?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My favorite CheckVist feature is that it's intuitive (err, "familiar") to use. Common outlining keyboard shortcuts, like tab and shift-tab work as expected. Items can be moved up and down with the Ctrl+Arrow keys. The UI is geared to multiple lists, making it easy to get in and out of different lists that you may maintain for different project.&lt;br /&gt;&lt;br /&gt;The CheckVist UI doesn't make you think, making it a great product for brainstorming.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Does CheckVist work with other applications?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My second favorite feature is the easy and elegant way CheckVist imports and exports data. Several convenient formats are supported, including plain test (tabs), Atlassian Confluence format (wiki), OPML format (Mac), and HTML format. When exporting, you can include or exclude notes, status, and change details.&lt;br /&gt;&lt;br /&gt;For super-fast data-entry, my favorite approach is to whip up a tab-based outline in a programmer's editor, and then import it to CheckVist for refinement. If you need to include an outline in a Word document, it's very easy to export it as plain text, paste it into Word, and convert your outline to a bulleted list with just a click or three.&lt;br /&gt;&lt;br /&gt;It's also easy to copy checklists, either by using the built-in copy feature, or by exporting a checklist and importing it again later. If you have large project checklists that you use over and over again: here's your sign!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Are large checklists easy to manage?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CheckVist seems geared for larger projects. I've several outlines working (in my free account), some of which with well over a hundred items, and it hasn't skipped a beat. Since, it's a snap to open and close the outline items, it's easy to get the big picture, and then drill down to the fine detail.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Can multiple authors edit a checklist?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since CheckVist is primarily a brainstorming product, collaboration is a key use case. It's easy to add additional authors to any of your CheckVists. As the original owner, you can always unshare the list with any of the other authors.&lt;br /&gt;&lt;br /&gt;To help grease the rails of collaboration, CheckVist tracks of who edited a task, and can alert you whenever an update occurs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Is "alpha" software safe to use?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right now, CheckVist is labelled "alpha" software by its authors, and it's only been in public use since August 2008. CheckVist has a very solid, professional feel to it, and I have no qualms about using it myself. Though, your mileage may vary.&lt;br /&gt;&lt;br /&gt;There are some glitches, mainly around latency when editing. Sometimes when I'm rewriting a task, the changes won't display correctly while I'm making the change. But, as soon as it is saved, the task displays correctly.&lt;br /&gt;&lt;br /&gt;The biggest problem I've had is with trying use the "undo" feature. Bluntly, CheckVist  undo (as of this writing) is not ready for primetime. The feature tends to undo more than you would expect, and if you use it, you'll probably regret it. Of course, if you're used to using ctrl-z in other products, undo can be a hard habit to unlearn :(&lt;br /&gt;&lt;br /&gt;Overall, I've been using it hard, and the only data I've lost was due to undo. Everyone has to decide for his or herself how scary is an "alpha" tag.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;Who makes CheckVist?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you are use of any of the fine JetBrains products, like IDEA or Resharper, you would take comfort in the knowledge that CheckVist is brought to us by two TeamCity developers, . According to the website, "".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Is CheckVist right for me?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you are looking for a decent online outlining tool, to use for checklists or brainstorming, then definitely take CheckVist for a spin. It may not replace your TODO list manager, but you might also get more done. :)&lt;br /&gt;&lt;br /&gt;HTH, Ted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1901508554501862957?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1901508554501862957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1901508554501862957' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1901508554501862957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1901508554501862957'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2009/02/checkvist-alpha-plus-size-your-todos.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LCoIt82CYdA/SYs74-5Fi-I/AAAAAAAAARI/h4N7-jNnZJM/s72-c/checkvist.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-5190410920749778611</id><published>2009-01-06T06:25:00.002-05:00</published><updated>2009-03-29T11:01:37.180-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;All I want for Christmas is Offsite Backup&lt;/span&gt; ...&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.jungledisk.com/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 155px; height: 200px;" src="http://1.bp.blogspot.com/_LCoIt82CYdA/SWM7fKybshI/AAAAAAAAAQ8/hxZV-yWuVDc/s200/junglebook.png" alt="" id="BLOGGER_PHOTO_ID_5288135794120962578" border="0" /&gt;&lt;/a&gt;My wife's most precious Christmas gift was also the least expensive: the $4 a year we're paying Amazon to backup two gigabytpes of digitial memories of Christmas past.&lt;/p&gt;Despite the backup CDs, and backup USB drive, she still worried that our digital photos would one day turn up missing. A few days before Christmas, a friend turned me onto Jungle Disk, an Amazon S3 application.&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.jungledisk.com/"&gt;Jungle Disk&lt;/a&gt; makes using the Amazon cloud as easy as using a local disk drive. Simply install the client software (for Windows, Mac, or Linux) on your computer, like any other application. Sign up for an Amazon S3 account, and suddenly, you can backup up anything you like to the Amazon cloud.&lt;/p&gt;What's the cloud? &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing"&gt;Technically&lt;/a&gt;, cloud computing is “An emerging computing paradigm where data and services reside in massively scalable data centers and can be ubiquitously accessed from any connected devices over the internet.” Colloquially, it's using the web like a computer peripheral.&lt;br /&gt;&lt;p&gt;Raw storage on the Amazon cloud starts at $0.15 a gigabtye a month ($1.80 a year). The rate compares well to applications like Google Picasa. A free Picasa account comes with 1 GB of storage. For $20 a year, Google gives you 10 GB more. If we did need 10 GB of A3 storage, we'd be paying $18 a year. Meanwhile, Yahoo's Flckr gives .1 GB (100 MB) to free accounts, and offers unlimited storage for $25 a year. &lt;/p&gt;Of course, Jungle Disk and Flckr are very different applications. JD lets you backup or store any kind of file, just like it was a remote network drive. Flckr is restricted to photos, but lets you share those photos with anyone you like (in strange and marvelous ways).&lt;br /&gt;&lt;p&gt;There are two primary ways of using the Jungle Disk Desktop Edition– you can choose to use one or both of these options.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The first option is to access your online storage as network drive (mapped drive on Windows or volume on Mac/Linux). When connected as a mapped drive your Jungle Disk shows up on your desktop just like a local drive. You can copy files to it in Explorer or Finder with drag &amp;amp; drop, edit files directly on the mapped drive, and copy files back to your machine just as easily. When used as a mapped drive you can easily move, rename, and delete files just like you were working with them on your local computer; however any change you make is actually occurring on the remote Amazon S3 storage.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The second option for using Jungle Disk is the automatic backup feature. The Automatic Backup feature allows you to keep files and folders on your local machine backed up automatically off-site to your Jungle Disk. If you mainly want to use your online storage space for backup, the Automatic Backup feature makes it easy and eliminates the need to copy files to your mapped drive manually on a regular basis or use 3rd party backup software. Once backed up with Automatic Backup, your files will also be available via the mapped drive.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You can easily open or copy backed up files from your mapped drive back to your local machine. If you need to restore a large number of files to your machine you can also use the built-in Restore feature that allows you to select a large number of files and directories and restore them in a single operation. The restore feature also allows you to restore previous versions of files, which are stored in a special directory on your Jungle Disk.&lt;/p&gt;&lt;p&gt;JD does come with some startup costs. In addition to the storage costs, a small charge applies to every data transfer. Usually, the transfer fee is lost in the rounding, but if you upload several gig, it could add up to folding money. In my case, the first month's bill from Amazon totaled a whopping thirty-two cents for uploading and storing 1.5 GB. Even better, I setup S3 to use my existing Amazon.com account, leaving me one less login to manage.&lt;/p&gt;The only bump so far is that the Windows backup doesn't run if the user is logged out. One  workaround is to set the backup to try again as soon as it can.  Then, the next time that login is used, the backup will launch.  If you're using incremental backup, it won't be a noticeable performance  hit.&lt;br /&gt;&lt;br /&gt;Note that there's a one time $20 charge for the JD client software. But, it's a double saw buck well spent. Jungle Disk is quick and easy to use. The user interface is clean, and it's very easy to indicate what files to backup, and how often to refresh the backup.&lt;br /&gt;&lt;br /&gt;Welcome to the Jungle!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-5190410920749778611?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/5190410920749778611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=5190410920749778611' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5190410920749778611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5190410920749778611'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2009/01/all-i-want-for-christmas-is-offsite.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LCoIt82CYdA/SWM7fKybshI/AAAAAAAAAQ8/hxZV-yWuVDc/s72-c/junglebook.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-5891473142710951341</id><published>2008-12-30T06:00:00.004-05:00</published><updated>2009-01-15T10:27:13.431-05:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://google.com/a/"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 96px; height: 96px;" src="http://3.bp.blogspot.com/_LCoIt82CYdA/SU__sXEAzYI/AAAAAAAAAPs/EUl-ts31fT4/s320/GoogleyEyes.png" alt="" id="BLOGGER_PHOTO_ID_5282722025499053442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Google Apps - The Good, the Bad, and the Odd&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In a prior blog, I overview moving a personal site to Google Apps. Before taking the leap yourself, here's a grab bag of gotcha's and pleasant surprises.&lt;br /&gt;&lt;br /&gt;Googley gotcha's:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Yes, you do need a domain. :)&lt;/li&gt;&lt;li&gt;During the initial setup, I inadverently closed my Google Apps window while entering the CNAME changes. Eventually, I went back to &lt;google.com a="" com=""&gt;, I was able to pickup where I left off. (The "a" is for "apps" -- Google likes to use one-letter IDs when it can.)&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;The Mail and Chat services weren't enabled by default. To enable additional services, look for the "Add more services" link hidden next to the Service Center heading.&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;Transferring the MX registration can take 24-48 hours, depending on your timing and your registrar.&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;The Google App accounts have their own login area &lt;google.com a="" com=""&gt;. Trying to login using your domain at the standard account prompt won't work.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;Along the same vein, the Google Apps Account is separate from a regular Google Account. To access all that Google has to offer, you need both. (Happily, the cookies don't conflict, and you can be logged into both accounts at once.)&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;The applications are useful and usable, but not truly ready for prime time, when compared to conventional suites, like OpenOffice, or Microsoft Office. The Sites can be especially frustrating. (Can you say "GeoCities"?)&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;While GA "Starter Pages", iGoogle, and Blogger, all seem to utilize the same "Gadget" plugins, they seem to be using different code bases. It would be great if there were all shared between the three platforms.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;The starter pages can be configured by anonymous users. Once a user has configured a start page, the administrator can't push start page changes. (So, an anonymous start page isn't a good fit as the domain welcome page.)&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;If you delete a page in a Google site, you can't reuse the name. The site will stubbornly append a numeral to the end, so instead of having a new "Welcome" page, you end up with "Welcome2". &lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;* Google Documents (which is different than a Google Site) don't expose a shared folder structure. You can setup your own folders to organize documents, but no one else will see those folders.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;Google Calendar's "Find Next Available Time" feature can be set to search only "Working Hours", but you can't configure the working hour span (it's 8a to 6p, M-F, like it or not!).&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;Not all Google assets play well together. For example, I tend to draft blogs in Google Notebook first. Pasting directly from Notebook to Blogger generates some ugly HTML. I have sanitize the copy first by pasting from Notebook to Notepad to Blogger.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;/ul&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;And some pleasant surprises:&lt;br /&gt;&lt;/google.com&gt;&lt;/google.com&gt;&lt;ul&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;While some application features are missing, and performance can be choppy, the collaboration features help pick up the slack.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;If you source a new domain through a Google Apps vendor, the domain setup is pre-configured.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;The Standard Version starts out with 200 user ceiling, and you can ask for more.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;Any user can be deputised as an Administrator.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;You can create additional CNAME records for quick access to different services, like calendar.yourdomain.com.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;You can map Sites to addresses under your domain, so that the clumsy Google Apps link is not shown.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;Gmail now lets you import mail (new or old) from other GMail accounts using POP (in case you already got one).&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;The Apps allow some quick-and-easy color and logo customiizations.&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;Individual assets can be shared with Google Accounts outside your domain (if the administrator doesn't disable external sharing).&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;li&gt;GMail handles rich text quite well, so you can paste a table from Word into an email.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Calendar is easy to share with people outside your domain, like contractors.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;The Premium Accounts ($50/user/year) also have access to free video conferencing!&lt;/google.com&gt;&lt;/google.com&gt;&lt;/li&gt;&lt;/ul&gt;&lt;google.com a="" com=""&gt;&lt;google.com a="" com=""&gt;And, of course, everyone in your domain still has access to all the other Google goodies, like Notebook, Blogger, Knol, and more &lt;http: com="" intl="" en="" options=""&gt;.&lt;br /&gt;&lt;br /&gt;HTH, Ted.&lt;/http:&gt;&lt;/google.com&gt;&lt;/google.com&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-5891473142710951341?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/5891473142710951341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=5891473142710951341' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5891473142710951341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5891473142710951341'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/12/google-apps-good-bad-and-ugly-in-prior.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_LCoIt82CYdA/SU__sXEAzYI/AAAAAAAAAPs/EUl-ts31fT4/s72-c/GoogleyEyes.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6119488494294027332</id><published>2008-12-23T06:00:00.003-05:00</published><updated>2008-12-23T06:00:00.093-05:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;Stepping Up to Google Apps&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://google.com/a/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_LCoIt82CYdA/SU_8pc57iUI/AAAAAAAAAPk/J9yzTQYcAYI/s320/google-apps.jpg" alt="" id="BLOGGER_PHOTO_ID_5282718676992887106" border="0" /&gt;&lt;/a&gt;Over the Thanksgiving weekend, I moved my personal website (&lt;a href="http://www.husted.com/"&gt;husted.com&lt;/a&gt;) to &lt;a href="http://google.com/a/"&gt;Google Apps&lt;/a&gt;. The GA move will save me website hosting fees (the Standard Edition is free), while providing me new services my plain old HTML site didn't have. Since we also use GA at &lt;a href="http://www.vandamme.com/"&gt;VanDamme&lt;/a&gt;, I'll also have a familiar, seamless environment, whether at work or at home. The trade-off is that my website's look and feel is harder to customize, but, after ten years without an overhaul, I'm ready for a change.&lt;br /&gt;&lt;br /&gt;Google Apps refers to a set of Google "point" applications, which, when used together, can create a virtual workplace. In practice, Google Apps is the equivalent of Microsoft Office and Outlook. Google Apps is free and delivered over the web. There is nothing to install, and you can access your assets from a web browser anywhere on the Internet.&lt;br /&gt;&lt;br /&gt;The applications in the Google Apps suite are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mail&lt;/li&gt;&lt;li&gt;Talk&lt;/li&gt;&lt;li&gt;Calendar &lt;/li&gt;&lt;li&gt;Docs (word processing, spreadsheets, presentations) &lt;/li&gt;&lt;li&gt;Start Page&lt;/li&gt;&lt;li&gt;Sites &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Mail &lt;/span&gt;(aka GMail) is a popular email client, that many people may already use. Mail is the core of Google Apps and shares resources with Talk and Calendar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Chat &lt;/span&gt;(aka GTalk, aka Talk) is featureful instant messaging application, and includes handy voice mail and file transfer utilities. Talk is exposed through Mail, and stores chat transcripts as Mail messages.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Calendar &lt;/span&gt;shares its contact list with Mail, making it easy to schedule appointments with other people in your organization. It's also easy to overlay any other Google Calendars that might be part of your busy modern life. Mail will also scan messages, looking for items that you might want to add to Calendar. I can display my personal Husted dot Com calendar alongside my VanDamme calendar, without commingling appointments.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Docs &lt;/span&gt;provides online editing of word processing documents, spreadsheets, and presentations. While not as powerful as offline equivalents, Google Docs offers powerful collaborative features that you won't find elsewhere.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Start Page &lt;/span&gt;(aka iGoogle) is an personalized portal lending instant access to other applications in the Google Apps suite.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sites &lt;/span&gt;is a web page builder that can be used to create special-purpose project portals. You can create a basic web page with a WYSIWYG editor, or add special page types, like a filing cabinet or message center.&lt;br /&gt;&lt;br /&gt;But, wait, there's more: Apps can also integrate with applications hosted by the Google Apps Engine, among others.&lt;br /&gt;&lt;br /&gt;Finally, the services are a la carte, and you can disable any you don't want to use with your domain (including mail).&lt;br /&gt;&lt;br /&gt;Moving a site over is relatively painless. To use Google Apps, you do need a domain -- either one you already own or a new one (that Google will help you purchase at a discount). To move an existing domain to GA, you need access to the CNAME and MX records. (The Help center has articles with specific instructions for most domain registrars.) The CNAME record will route request for addresses like "www.your-domain.com" to the Google servers. The MX record will route your domain email&lt;br /&gt;&lt;br /&gt;If you're looking for a way to use a web site as a collaborative tool, either for home or a small office, give Google Apps a gander. As a suite, it's far from perfect, but Google Apps is still solid and useful platform.&lt;br /&gt;&lt;br /&gt;Ready to get started? See these quick-start videos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=E-o0QmS5TzM&amp;amp;NR=1"&gt;http://www.youtube.com/watch?v=E-o0QmS5TzM&amp;amp;NR=1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=QJncFirhjPg&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=QJncFirhjPg&amp;amp;feature=related&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=QJncFirhjPg&amp;amp;feature=related"&gt;http://www.youtube.com/watch?v=QJncFirhjPg&amp;amp;feature=related&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/a/help/intl/en/admins/resources/setup/setup_video.html"&gt;http://www.google.com/a/help/intl/en/admins/resources/setup/setup_video.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6119488494294027332?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6119488494294027332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6119488494294027332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6119488494294027332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6119488494294027332'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/12/stepping-up-to-google-apps-over.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_LCoIt82CYdA/SU_8pc57iUI/AAAAAAAAAPk/J9yzTQYcAYI/s72-c/google-apps.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8308855456520397394</id><published>2008-11-25T06:00:00.007-05:00</published><updated>2008-12-14T08:57:49.767-05:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;Profiling the Four Quadrants of Highly Effective Toltecs&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_LCoIt82CYdA/SUUQY1iNebI/AAAAAAAAAPM/lZ1piQ6dECs/s1600-h/unlimitedcoaching.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 171px; height: 234px;" src="http://4.bp.blogspot.com/_LCoIt82CYdA/SUUQY1iNebI/AAAAAAAAAPM/lZ1piQ6dECs/s320/unlimitedcoaching.jpg" alt="" id="BLOGGER_PHOTO_ID_5279644157035248050" border="0" /&gt;&lt;/a&gt;As is our habit, VanDamme Associates introduced its latest bundle of newbies to a team building workshop provided by &lt;a title="Unlmited Coaching Solutions" href="http://www.unlimitedcoaching.com/"&gt;Unlmited Coaching Solutions&lt;/a&gt;. In preparation for the training, we were asked to answer a long (and annoying) series of questions in an online survey, which all took the format. &lt;/p&gt;&lt;p&gt;Select the one phase that best describes you at work.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;I like challenges.&lt;/li&gt;&lt;li&gt;I like interacting with people.&lt;/li&gt;&lt;li&gt;I tend to be relaxed and easy going.&lt;/li&gt;&lt;li&gt;I tend to have high standards.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;When training day came around, the delightful woman leading the session presented us with the result of our surveys. The training had headlined a self-actualization model called "&lt;a title="The Four Agreements" href="http://en.wikipedia.org/wiki/Four_Agreements"&gt;The Four Agreements&lt;/a&gt;", but, as it turns out, the training also covered our Dominance, Influence, Steadiness, and Conscientiousness, or DiSC, behaviorial dimensions. The notion is that each of us have the four DiSC qualities in varying degrees. Team communication goes awry when someone with a high Dominance dimension interacts with someone with a high Conscientiousness dimension. One person is focussed on function, and another is focussed on form. Reasoning that would convince one person, fails to convince the other, and people end up taking past one another. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;D&lt;/b&gt;ominance - relating to control, power and assertiveness&lt;/li&gt;&lt;li&gt;&lt;b&gt;I&lt;/b&gt;nfluence - relating to social situations and communication&lt;/li&gt;&lt;li&gt;&lt;b&gt;S&lt;/b&gt;teadiness - relating to patience, persistence, and thoughtfulness&lt;/li&gt;&lt;li&gt;&lt;b&gt;C&lt;/b&gt;onscientiousness - relating to structure and organization&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The &lt;a title="DiSC behavioral model" href="http://en.wikipedia.org/wiki/DISC_assessment"&gt;DiSC behavioral model&lt;/a&gt; was pioneered by William Moulton Marston in 1928 (who also created the polygraph and the &lt;a title="Wonder Woman" href="http://en.wikipedia.org/wiki/Wonder_woman"&gt;Wonder Woman&lt;/a&gt; comic book), and refined by other researchers over the years. The Unlimited Coaching package includes a bar chart showing each of our four DiSC qualities in relation to one another, and pages of predictive advice based on the how those qualities interact. I can't speak for anyone else, but the result of my own DiSC assessment is just plain spooky. I'd love to have a set of these for the wife and kids :)&lt;/p&gt;&lt;p&gt;Meanwhile, to keep things even more interesting, the training included a run down of the Four Agreements, as promised. Coined by a Mexican surgeon, Miguel Ruiz, who returned to his family's Toltec roots after a near-death experience, the Four Agreements  are designed to help us live happier, more productive lives.&lt;/p&gt;&lt;p&gt;1. Be impeccable with your word.&lt;br /&gt;2. Don't take it personally.&lt;br /&gt;3. Don't make assumptions.&lt;br /&gt;4. Always do your best.&lt;/p&gt;&lt;p&gt;As principles go, the 4As are quite nice, and even strangely complementary to the DISC assessment.&lt;/p&gt;&lt;p&gt;As a longtime dabbler in self-improvement texts, I'm a huge fan of Stephen Covey's the &lt;a title="Seven Habits of Highly Successful People" href="http://www.jroller.com/TedHusted/entry/habits"&gt;Seven Habits of Highly Successful People&lt;/a&gt;. Covey mentions that many behavioral models have four key focal points, such as the biblical qualities of Heart, Mind, Soul and Strength. Since we have four DiSC dimension and four habits, let's try mapping the two together.&lt;/p&gt;&lt;table border="1" cellspacing="4"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;strong&gt;&lt;em&gt;Marston&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;&lt;strong&gt;&lt;em&gt;Ruiz&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Dominance&lt;/td&gt; &lt;td&gt;Don't take it personally,&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Influence&lt;/td&gt; &lt;td&gt;Be impeccable with your word.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Steadiness&lt;/td&gt; &lt;td&gt;Always do your best.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Conscientiousness&lt;/td&gt; &lt;td&gt;Don't make assumptions.&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Hmmm. Covey recently added an 8th habit ("Teach the habits."). Each of the habits is considered to be either a public habit or a private habit. If we combine the public and private habits into one, we are left with, waddyaknow, Four Habits. Let's map all four systems together. &lt;/p&gt;&lt;table border="1" cellspacing="4"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;strong&gt;&lt;em&gt;Bible&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;&lt;strong&gt;&lt;em&gt;Marston&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;&lt;strong&gt;&lt;em&gt;Covey&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;&lt;strong&gt;&lt;em&gt;Ruiz&lt;/em&gt;&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Heart&lt;/td&gt; &lt;td&gt;Influence&lt;/td&gt; &lt;td&gt;Be Proactive. Think win/win.&lt;/td&gt; &lt;td&gt;Be impeccable with your word.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Mind&lt;/td&gt; &lt;td&gt;Conscientiousness&lt;/td&gt; &lt;td&gt;Begin with the end in mind. Seek first to understand and then to be understood.&lt;/td&gt; &lt;td&gt;Don't make assumptions. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Strength&lt;/td&gt; &lt;td&gt;Dominance&lt;/td&gt; &lt;td&gt;Put first things first. Synergize!&lt;/td&gt; &lt;td&gt;Don't take it personally.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Soul&lt;/td&gt; &lt;td&gt;Steadiness&lt;/td&gt; &lt;td&gt;Sharpen the saw. Teach the habits.&lt;/td&gt; &lt;td&gt;Always do your best.&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;Going back to my DiSC assessment, from a Biblical perspective, I now see that I'm a high Strength, with nearly equal measures of Heart and Mind, followed by a healthy dose of Soul. Somehow, that's comforting. &lt;/p&gt;&lt;p&gt;PS: For extra credit, try adding your own mappings for the four physical dimensions: Width, Height, Length, and Time :) &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8308855456520397394?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8308855456520397394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8308855456520397394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8308855456520397394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8308855456520397394'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/11/as-is-our-habit-vandamme-associates.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LCoIt82CYdA/SUUQY1iNebI/AAAAAAAAAPM/lZ1piQ6dECs/s72-c/unlimitedcoaching.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-2307518258807882678</id><published>2008-11-10T06:00:00.003-05:00</published><updated>2008-12-14T08:54:43.269-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Google Notebook: My Documents meets Notepad&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Back in the 20th century, I tried every PIM (&lt;a href="http://www.blogger.com/"&gt;Personal Information Manager&lt;/a&gt;) that I could beg, buy, or borrow: Sidekick, Outlook, Time and Chaos, Goldmine, the list goes on. On my technology memorabilia shelf, I still have a copy of Ecco (right next to a copy of Clarion). Eventually, I gave up the the search for a PIM El Dorado, and devolved to use a series of plain-old Notepad text files, organized by week. The Notepad advantage being I could just jot things down without worrying about pigeon holes.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://en.wikipedia.org/wiki/Google_Notebook"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 155px;" src="http://1.bp.blogspot.com/_LCoIt82CYdA/SUUQC69qC5I/AAAAAAAAAPE/04FzcbsLKN8/s320/google-notebook.jpg" alt="" id="BLOGGER_PHOTO_ID_5279643780535421842" border="0" /&gt;&lt;/a&gt;Lately, instead of my trusty Notepads, I find myself turning toward&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Google_Notebook"&gt;Google Notebook&lt;/a&gt; . I remember trying it some time ago, and it failed to satisfy. I don't remember why, but trying it again this year, it's been working well for me. Maybe because I'm using it as a PIM, rather than a surfing tool.&lt;/p&gt;&lt;p&gt;The Notebook paradigm is a hearty step up from a plain-old text file. We can create any number of "Notebooks", each of which contains one or more Notes. Each note is essentially a simple text file, but with some simple formatting options, like bullets, links, and fonts (oh my!). A Notebook can have zero or more Sections that contain zero or more Notes. A Google Notebook account can contain any number of Notebooks, and we drag Notes or Sections between Notebooks. &lt;/p&gt;&lt;p&gt;Like most Google critters, Notebook lives on the cloud. (Meaning the good news is that I don't have to back it up myself, and the bad news is that I don't have my own backups.) Being on the cloud, Notebook offers sharing options, much like Google Sites or Google Documents. I haven't tried to share a notebook with anyone yet (but knowing VanDamme Associates, and our penchant for sharing, eventually I will!).&lt;/p&gt;&lt;p&gt;Two other organizational features (that I literally just noticed) are comments are labels. The comment feature provides a secondary tab where a collaborator can add a remark without editing the main Note text. Essentially, the label feature is a persistent search. We can list arbitrary labels to apply to any given note. As soon as we do, the labels panel is updated with the name of the label and the number of notes that use it. Selecting a label from the panel open a search result, listing the approptiate notes. &lt;/p&gt;&lt;p&gt;Whenever some bit of data comes along, and I need a place to tuck it away, I can pull up my Google Notebook and bang it in. Later, if I want to transfer the data to another artifact, up comes the Notebook, and out goes the Note.&lt;/p&gt;&lt;p&gt;Plain-old weekly text files do provide one great feature: Auto-archiving. Each week, I opened up a new text file and started with a clean slate. With the Notebook, I may need to do some occasional housekeeping to keep my data stream tidy. Film at 11 ...&lt;/p&gt;&lt;p&gt;If you have any Google Notebook experiences, or PIM stories to share, feel free to post a comment!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-2307518258807882678?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/2307518258807882678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=2307518258807882678' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2307518258807882678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2307518258807882678'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/11/google-notebook-my-documents-meets.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LCoIt82CYdA/SUUQC69qC5I/AAAAAAAAAPE/04FzcbsLKN8/s72-c/google-notebook.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-277071268552315698</id><published>2008-11-06T06:00:00.003-05:00</published><updated>2008-12-14T08:53:29.367-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Forget Lesko, bookmark usa.gov&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If you have a hankering for quick access to US government services, surf on by &lt;a title="usa.gov" href="http://www.usa.gov/"&gt;usa.gov&lt;/a&gt;. Originally, FirstGov.gov, the nation's portal has evolved from a special project to a regular appropriation of the US Congress.  Positioned as the US government's answer to Google, the mission of &lt;a title="usa.gov" href="http://www.usa.gov/"&gt;usa.gov&lt;/a&gt; is to help find existing resources. Other US government sites create content, and &lt;a title="usa.gov" href="http://www.usa.gov/"&gt;usa.gov&lt;/a&gt; exposes it.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://usa.gov/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_LCoIt82CYdA/SUUPtsW3dtI/AAAAAAAAAO8/J6_2_cXY9j8/s320/usa-gov.jpg" alt="" id="BLOGGER_PHOTO_ID_5279643415837374162" border="0" /&gt;&lt;/a&gt;Ironically, a great way that &lt;a title="usa.gov" href="http://usa.gov/"&gt;usa.gov&lt;/a&gt; exposes content is by creating it. The site features a daily blog called "&lt;a title="Gov Gab" href="http://blog.usa.gov/roller/govgab/"&gt;Gov Gab&lt;/a&gt; " that is the handiwork of a handful of federal employees who work the Office of Citizen Services and Communications at the U.S. General Services Administration. The blogs mix a health dose of links with personal and professional anecdotes.&lt;/p&gt;&lt;p&gt;For those of us who surf to edit, other sites of note include the &lt;a title="FTC's Computers and The Internet section" href="http://ftc.gov/bcp/menus/consumer/tech.shtm"&gt;FTC's Computers and The Internet section&lt;/a&gt; and the &lt;a title="Usabilty.gov" href="http://usabilty.gov/"&gt;Usabilty.gov&lt;/a&gt; site. The former hosts vital advice on Internet security and privacy, and the later catalogs essential tips on creating easy to use sites.&lt;/p&gt;&lt;p&gt;For more about of award-winning and best-of-breed constituent portals, visit the &lt;a title="Center for Digital Government" href="http://www.govtech.com/dc/surveys/cities/89/2007"&gt;Center for Digital Government&lt;/a&gt; and &lt;a title="ComputerWorld's Best E-Government Sites" href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9005371"&gt;ComputerWorld's Best E-Government Sites&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;em&gt;"What a country!"&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-277071268552315698?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/277071268552315698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=277071268552315698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/277071268552315698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/277071268552315698'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/11/forget-lesko-bookmark-usa.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_LCoIt82CYdA/SUUPtsW3dtI/AAAAAAAAAO8/J6_2_cXY9j8/s72-c/usa-gov.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-5956645396410118973</id><published>2008-11-05T06:00:00.002-05:00</published><updated>2008-12-14T08:48:27.078-05:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;Testing: Ajax Applications&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;On October 7, about two dozen RIT Computer Science students came for Salvatore's famous Buffalo Wing Pizza, but stayed for the scintillating tales of Ajax testing derring do. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://csc.masterpi.org/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 250px; height: 40px;" src="http://3.bp.blogspot.com/_LCoIt82CYdA/SUUOSS_KiaI/AAAAAAAAAO0/WbvH0qIH5To/s320/RIT-CSC.jpg" alt="" id="BLOGGER_PHOTO_ID_5279641845658978722" border="0" /&gt;&lt;/a&gt;Of those present only a few had Ajax experience. (Not surprising, since Ajax is not part of the formal curriculium!) Happily, Ajax 101 was included in the talk (just for that eventuality). The presentation is available through&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://www.slideshare.net/ted.husted"&gt;SlideShare&lt;/a&gt;. The presentation covers several of my favorite testing tools, including:&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Selenium - &lt;a href="http://selenium.openqa.org/"&gt;http://selenium.openqa.org/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Hudson - &lt;a href="https://hudson.dev.java.net/"&gt;https://hudson.dev.java.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Tomcat - &lt;a href="http://tomcat.apache.org/"&gt;http://tomcat.apache.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;YUI Test - &lt;a href="http://developer.yahoo.com/yui/yuitest/"&gt;http://developer.yahoo.com/yui/yuitest/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://www.youtube.com/watch?v=iJ2R-03clK4"&gt;lively crowd&lt;/a&gt; raised a number of good questions, including:&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Is YUI Unit better than JsUnit?&lt;/li&gt;&lt;li&gt;Does social networking require Ajax?&lt;/li&gt;&lt;li&gt;Are shoes required at VanDamme Associates?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Answers: &lt;em&gt;Yes,  No, Sometimes&lt;/em&gt;&lt;/div&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/5208774-5956645396410118973?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/5956645396410118973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=5956645396410118973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5956645396410118973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5956645396410118973'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/11/testing-ajax-applications-on-october-7.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_LCoIt82CYdA/SUUOSS_KiaI/AAAAAAAAAO0/WbvH0qIH5To/s72-c/RIT-CSC.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-97455498678928275</id><published>2008-10-02T20:30:00.000-04:00</published><updated>2008-12-13T23:12:25.944-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Ajax Experience 2008, Day 3, At Your Service&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The highlight of my &lt;a title="testing tools talk" href="http://www.slideshare.net/ted.husted/testing-tools-presentation"&gt;testing tools talk&lt;/a&gt; turned out to be my new-best-friend, &lt;a title="Hudson" href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt;, an extensible &lt;a title="continuous integration server" href="https://hudson.dev.java.net/"&gt;continuous integration server&lt;/a&gt;. The talk was in one of the 90-minute slots, so I split the agenda between reviewing some of the available tools and demoing a simple-but-complete continuous integration workflow. (By complete, I mean that on every checkin, we build the distribution and run a suite of both unit and integration tests.) Originally, the demo was to include &lt;a title="YUI Test" href="http://developer.yahoo.com/yui/yuitest/"&gt;YUI Test&lt;/a&gt;, &lt;a title="Selenium" href="http://selenium.openqa.org/"&gt;Selenium&lt;/a&gt;, and &lt;a title="Cruise Control" href="http://cruisecontrol.sourceforge.net/"&gt;Cruise Control&lt;/a&gt;. At the last minute I switched in Hudson for Cruise Control.&lt;/p&gt;&lt;p&gt;Setting up Hudson has to be the easiest/hardest thing I've ever done. (The previous runner-up being using iBATIS for Query-By-Example database searches.) Most CI servers are designed to run as standalone critters. Hudson runs as a standard Java web application, and it is configured using a web UI. (A clean and elegant UI, I might add.) The totally cool part is that the server can be installed by dropping the hudson.war into our favorite Java container ... or running it standalone from the command line!&lt;/p&gt;&lt;p&gt;&lt;a title="Download the WAR" href="http://hudson.gotdns.com/latest/hudson.war"&gt;Download the WAR&lt;/a&gt;, run&lt;/p&gt;&lt;p&gt;&lt;span class="quote"&gt;&amp;gt; java -jar hudson.war&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;and &lt;a title="up pops Hudson" href="http://hudson.gotdns.com/wiki/download/thumbnails/753667/1.png"&gt;up pops Hudson&lt;/a&gt;, at your service, ready for configuration. (The one prerequesite being a recent Java executable on your system path.)&lt;/p&gt;&lt;p&gt;By default, Hudson stores its jobs in your home directory (even on Windows), so once it's running, you can just have at it. Tell Hudson where to checkout your project from SVN or CVS, check a box or two, and you are good to go. (&lt;a title="Other SCMs" href="http://hudson.gotdns.com/wiki/display/HUDSON/Plugins#Plugins-Sourcecodemanagement"&gt;Other SCMs&lt;/a&gt; also supported) For extra credit, you can indicate an Ant file to run along with Hudson's default build. (&lt;a title="Other build systems" href="http://hudson.gotdns.com/wiki/display/HUDSON/Plugins#Plugins-Buildtools"&gt;Other build systems&lt;/a&gt; also supported.) Fill out a few more fields in the web UI, and you'll be getting an email nag whenever the build or test suite fails.&lt;/p&gt;&lt;p&gt;With a continuous integration server in place, the remaining trick is to export Selenium tests to JUnit (or C#, or Ruby, or Python) to run both acceptance tests and any JavaScript unit tests. While running YUI Unit won't trigger a JUnit failure out-of-the-box, we can use Selenium to watch for the outcome of the tests on the test logger. If &lt;a title="'Failed:0' doesn't materialize" href="http://developer.yahoo.com/yui/examples/yuitest/yt-simple-example.html"&gt;"Failed:0" doesn't materialize&lt;/a&gt;, then we know the YUI test failed.&lt;/p&gt;&lt;p&gt;Summing up: If you have a chance to go to Ajax Experience 2009, I'd say: "take it". The organizers always manage to come up with a nice mix of introductory and advanced presentations, many by the people who are creating the technologies we use -- people like Brendan Eich, Nicholas C. Zakas, and John Resig, to name a few. Even better, it's a great chance to mingle with other real-live developers all trying to do the very same things you are trying to do. (And then discovering your organization isn't so backward, after all!)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-97455498678928275?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/97455498678928275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=97455498678928275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/97455498678928275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/97455498678928275'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/10/ajax-experience-2008-day-3-at-your.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6036988334646461145</id><published>2008-09-30T18:30:00.000-04:00</published><updated>2008-12-13T23:12:59.813-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Ajax Experience 2008, Day 2, Return of the YUI&lt;/span&gt;&lt;/p&gt;&lt;p&gt;My &lt;a title="AM presentation" href="http://www.slideshare.net/ted.husted/retrofitting-presentation"&gt;AM presentation&lt;/a&gt; turned out to be a lively event. The audience of twenty-odd souls was a mix of Struts 1 and Struts 2 users, and several had already started using Ajax in their applications. The balance of the audience seem pleasantly surprised at how easy it can be to use Ajax with "conventional" framework. The talk centered on a Ajax JSP tag library called "Ajax TagParts". The creator, Frank Zammetti, a friend of mine, and he was kind enough to join me on the stage for a special bonus demonstration of &lt;a title="JSONP" href="http://en.wikipedia.org/wiki/JSON#JSONP"&gt;JSONP&lt;/a&gt; (or "JSON with padding"). In only a few lines of code, Frank hooked up with Yahoo maps and popped up any given ZIP code. Another special guest was Bill Scott of NetFlicks, who has been busily moving some of their assets to Struts 2 this year. After the talk, Bill, Frank, and some others stuck around to exchange war stores.&lt;/p&gt;&lt;p&gt;The highlight of my afternoon was "Test Driven Development with YUI Test" with &lt;a title="Nicholas Zakas" href="http://ajaxexperience.techtarget.com/east/html/quality.html#NZakasYUI"&gt;Nicholas Zakas&lt;/a&gt;, who created the library. My first talk tomorrow also covers YUI Test, so this talk was a must-see for me. At one point, the &lt;a title="presentation" href="http://ajaxexperience.techtarget.com/resources/html/presentations.html"&gt;presentation&lt;/a&gt; mentioned the Selenium testing tool, which prompted a question about how to automate unit testing with JavaScript (thanks Mike!). Nicholas remarked "That's a good question!", and mentioned that there was another testing presentation tomorrow. Not one to miss an opportunity, I jumped in with a quick overview. Hopefully, that bit of marketing might draw a few more folk away from Crockford's "Good Parts" talk!&lt;/p&gt;&lt;p&gt;Everything has been running smoothly, though one snag is that I managed to lose a dental cap this afternoon. On the plus side, the loss might encourage me to speak more slowly, to avoid scratching my lip on the rough edges. Happily, &lt;a title="Adobe TV" href="http://tv.adobe.com/#"&gt;Adobe TV&lt;/a&gt; is only capturing the slides, and not my newly gapful grin!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6036988334646461145?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6036988334646461145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6036988334646461145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6036988334646461145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6036988334646461145'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/09/ajax-experience-2008-day-2-return-of.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3870062755386039630</id><published>2008-09-29T16:30:00.001-04:00</published><updated>2008-12-13T23:05:08.354-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Ajax Experience 2008, Day 1, Microsoft to ship jQuery with Visual Studio&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I'm attending the &lt;a title="Ajax Experience in Boston" href="http://ajaxexperience.techtarget.com/html/index.html"&gt;Ajax Experience in Boston&lt;/a&gt; this week. The big news here is that Microsoft will be shipping &lt;a title="jQuery with Visual Studio" href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx"&gt;jQuery with Visual Studio&lt;/a&gt;, promising that it will be a stock version, and not yet-another fork of infamy. At AE 2008, John Resig, jQuery creator (and RIT alumnus), mentioned that Microsoft "would not be getting a free pass". Any patches submitted by a Microsoft engineer will receive the same scrutiny as any other. (Historical footnote: back in the day, when IBM first started to use the Apache HTTP server, the very first patch submitted by an IBM engineer was  in fact rejected. OSS developers are a tough bunch!)&lt;/p&gt;&lt;p&gt;Elsewhere, people are hailing the m$(jQuery) announcement as a sign that "&lt;a title="The war between business models is over. Open source has won." href="http://blogs.zdnet.com/open-source/?p=2939"&gt;The war between business models is over. Open source has won.&lt;/a&gt;" Microsoft has been warming up to open source for some time now. The Ajax libraries in ASP.NET are already open source, Microsoft is now aplatinum sponsor of the &lt;a title="Apache Software Foundation" href="http://www.apache.org/foundation/thanks.html"&gt;Apache Software Foundation&lt;/a&gt;, and here at the Ajax Experience, where open source rules, Microsoft is spreading the love by hosting a cocktail party for 300 hardcore JavaScript enthusiasts.   &lt;/p&gt;Techno-politics aside, the jQuery news bodes well for &lt;a title="Ektron" href="http://www.ektron.com/"&gt;Ektron&lt;/a&gt; and &lt;a title="VanDamme Associates" href="http://www.blogger.com/"&gt;VanDamme Associates&lt;/a&gt;. Ektron already bundles a customized version of jQuery, and we are coming to rely on jQuery for added value features, like streaming media. Of course, there are "interesting times" ahead, as we all try to stay on the same jQuery page.&lt;br /&gt;&lt;p&gt;Meanwhile, Day One at the conference has been a series of lively tutorials and scintillating keynotes. (Seriously, Ajax folks are a fun crowd!) The smorgasbord of presentations starts tomorrow, with &lt;a title="one of mine" href="http://ajaxexperience.techtarget.com/east/html/server.html#THustedTaglibs"&gt;one of mine&lt;/a&gt; launching at the crack of 9am. (Meaning: I have to keep a clear head despite the Microsoft party tonight!)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3870062755386039630?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3870062755386039630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3870062755386039630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3870062755386039630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3870062755386039630'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/09/im-attending-ajax-experience-in-boston.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4821777072574890649</id><published>2008-09-23T06:00:00.002-04:00</published><updated>2008-12-14T08:51:04.969-05:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size:180%;"&gt;YUI Test - The New Kid on Block&lt;/span&gt;&lt;p dir="ltr" xmlns="http://www.w3.org/1999/xhtml"&gt;One of the great features of the &lt;a title="Ektron" href="http://ektron.com/"&gt;Ektron&lt;/a&gt; content management system platform is that it plays well with other technologies. At &lt;a href="http://www.vandamme.com/content.aspx?id=362"&gt;VanDamme Associates&lt;/a&gt;, we often mix custom JavaScript and AJAX elements into our Ektron solutions.&lt;/p&gt;&lt;p dir="ltr" xmlns="http://www.w3.org/1999/xhtml"&gt;Ektron itself is no stranger to AJAX, and it even bundles a tweaked version of JQuery in the standard distribution. One good tool for testing JavaScript, that &lt;a href="http://dev.ektron.com/blogs.aspx?id=13568"&gt;Ektron has blogged about&lt;/a&gt;, is the venerable &lt;a href="http://jsunit.org/"&gt;JsUnit&lt;/a&gt; framework. While JsUnit is a solid tool, there are drawbacks.&lt;br /&gt;&lt;/p&gt;&lt;ul dir="ltr"&gt;&lt;li&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;Although JsUnit has been available since 2001, it's still the love child of a sole developer.&lt;br /&gt;JsUnit's release schedule is irregular. (Release 2.2 has been in "beta" for over two years now.)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4 dir="ltr" xmlns="http://www.w3.org/1999/xhtml"&gt;Look Ahead&lt;/h4&gt;&lt;p dir="ltr" xmlns="http://www.w3.org/1999/xhtml"&gt;Happily, there's a new kid on the block: &lt;a href="http://developer.yahoo.com/yui/yuitest/"&gt;YUI Test&lt;/a&gt;. YT is bundled with the Yahoo! User Interface Library (YUI). To quote the YUI site:&lt;/p&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;p dir="ltr" xmlns="http://www.w3.org/1999/xhtml"&gt; "&lt;i&gt;YUI Test is a testing framework for browser-based JavaScript solutions. Using YUI Test, you can easily add unit testing to your JavaScript solutions. While not a direct port from any specific xUnit framework,YUI Test does derive some characteristics from nUnit and JUnit.&lt;/i&gt;"&lt;/p&gt;&lt;/blockquote&gt;&lt;p dir="ltr" xmlns="http://www.w3.org/1999/xhtml"&gt;Key features of YUI Test include:&lt;br /&gt;&lt;/p&gt;&lt;ol dir="ltr"&gt;&lt;li&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;Rapid creation of test cases through simple syntax.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;Advanced failure detection for methods that throw errors.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;Grouping of related test cases using test suites.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;Asynchronous tests for testing events and Ajax communication.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;DOM Event simulation in all A-grade browsers.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;YUI Test has been available since July 2007 (YUI 2.3.0), and made "GA" grade in February 2008 (YUI 2.5.0). The YT framework was created by Yahoo! engineer &lt;a href="http://www.nczonline.net/"&gt;Nicholas C. Zakas&lt;/a&gt;. It's regularly released and maintained with the rest of the library, and its distributed under the library's BSD license. (All together, there seem to be about sixteen developers on the YUI team, maintaining about thirty components).&lt;/p&gt;&lt;p&gt;(!) Note that YUI Test can be used to test &lt;b&gt;any&lt;/b&gt; JavaScript code -- the application doesn't need to be based on YUI to use YUI Test.&lt;/p&gt;&lt;p&gt;One of the pleasures of YUI Test is that it can use the YUI TestLogger as a test harness.&lt;/p&gt;&lt;p style="display: block; text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://developer.yahoo.com/yui/logger/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 314px;" src="http://4.bp.blogspot.com/_LCoIt82CYdA/SUUNxqaub5I/AAAAAAAAAOs/K4n_YphIcWo/s320/yui-test.png" alt="" id="BLOGGER_PHOTO_ID_5279641285012909970" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;TestLogger is a subclass of &lt;a href="http://developer.yahoo.com/yui/logger/"&gt;YUI Logger&lt;/a&gt;, which can be used for general-purpose JavaScript logging and debugging, giving us two great capabilities in one flexible component. YUI Test can also be used in collaboration with the new YUI Profiler (another Zakas creation) to create performance-based tests.&lt;/p&gt;&lt;h4&gt;Trip the Rift&lt;/h4&gt;&lt;p&gt;Unit testing conventional, classical code often relies on exercising the "API Contract". If we pass certain parameters to method, the method should return a certain result, or raise a certain exception.  Since, JavaScript is event-driven, in order to determine the outcome of a method, we often need to know what events it raises. Meanwhile, in an Ajax application, there can be a disconnect between when a method is called and when the event is ultimately reaised. YUI Test helps us bridge the gap with a "wait/resume" feature. A test can subscribe to an event, and call "resume" in the event handler. When the test reaches the point where an action might take an indeterminate amount of time, we can call "wait", and the test continues when the event fires.&lt;/p&gt;&lt;p&gt;For example, here's a test that calls a time-consuming animiation routine. The test registers an event handler, starts the animation, and waits for the event to fire. When the animation completes, the test confirms that the routine accomplished the expected result.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new,monospace;"&gt;&amp;lt;div id="testLogger"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;&amp;lt;div id="testDiv" style="position:absolute;width:10px;height:10px"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;    YAHOO.namespace("example.yuitest");&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;    YAHOO.example.yuitest.AsyncTestCase = new YAHOO.tool.TestCase({&lt;/span&gt;  &lt;span style="font-family:courier new,monospace;"&gt;        name : "Animation Tests",       &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;       &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;        testAnimation : function (){&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;            var Assert = YAHOO.util.Assert;&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;            var YUD = YAHOO.util.Dom;&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;           &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;            var myAnim = new YAHOO.util.Anim('testDiv',&lt;br /&gt;&lt;br /&gt;       { width: { to: 400 } }, 3, YAHOO.util.Easing.easeOut);&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;           &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;            myAnim.onComplete.subscribe(function(){&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;           &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;                this.resume(function(){               &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;                    Assert.areEqual(YUD.get("testDiv").offsetWidth,&lt;br /&gt;&lt;br /&gt;               400, "Width of the DIV should be 400.");&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;                });&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;           &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;            }, this, true);&lt;/span&gt;  &lt;span style="font-family:courier new,monospace;"&gt;            // Start the animation and wait for the resume function&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;            myAnim.animate();&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;            this.wait();       &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;        }&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;                   &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;    });&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;    &lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;    YAHOO.util.Event.onDOMReady(function (){&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;        var logger = new YAHOO.tool.TestLogger("testLogger");&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;        YAHOO.tool.TestRunner.add(YAHOO.example.yuitest.AsyncTestCase);&lt;/span&gt;  &lt;span style="font-family:courier new,monospace;"&gt;        // Run the tests when DOM is ready&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;        YAHOO.tool.TestRunner.run();&lt;/span&gt; &lt;span style="font-family:courier new,monospace;"&gt;    });&lt;/span&gt;  &lt;span style="font-family:courier new,monospace;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not every test needs to use wait/resume, but, when we do, it's an indispensible feature.&lt;/p&gt;&lt;h4&gt;Be Assertive&lt;/h4&gt;&lt;p&gt;Asynchronous or not, essentially, unit testing is about making assertions. We unit test by invoking a method and passing in known parameters and observing the outcome. We might expect the method to return a simple value, or another object, like a Date Type, with certain attributes set to certain values. Or, we might expect the method to fail and raise an exception, or to succeed and raise and event.&lt;/p&gt;&lt;p&gt;Since we're talking JavaScript, YUI not only supports all the usual assertions, but type cohersion to boot.&lt;/p&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;p&gt;&lt;span style="font-family:courier new,monospace;"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;var oTestCase = new YAHOO.tool.TestCase({&lt;br /&gt;&lt;br /&gt; name: "TestCase Name",&lt;br /&gt;&lt;br /&gt; testEqualityAsserts : function () {&lt;br /&gt;&lt;br /&gt;     var Assert = YAHOO.util.Assert;&lt;br /&gt;&lt;br /&gt;     Assert.areEqual(5, 5);     //passes&lt;br /&gt;&lt;br /&gt;     Assert.areEqual(5, "5");     //passes&lt;br /&gt;&lt;br /&gt;     Assert.areNotEqual(5, 6);  //passes&lt;br /&gt;&lt;br /&gt;     Assert.areEqual(5, 6, "Five was expected."); //fails&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;For more precise testing, YUI Test provides for Sameness Assertions.&lt;/p&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;p&gt;&lt;span style="font-family:courier new,monospace;"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;var oTestCase = new YAHOO.tool.TestCase({&lt;br /&gt;&lt;br /&gt; name: "TestCase Name",&lt;br /&gt;&lt;br /&gt; testSamenessAsserts : function () {&lt;br /&gt;&lt;br /&gt;     var Assert = YAHOO.util.Assert;&lt;br /&gt;&lt;br /&gt;     Assert.areSame(5, 5);      //passes&lt;br /&gt;&lt;br /&gt;     Assert.areSame(5, "5");    //fails&lt;br /&gt;&lt;br /&gt;     Assert.areNotSame(5, 6);   //passes&lt;br /&gt;&lt;br /&gt;     Assert.areNotSame(5, "5"); //passes&lt;br /&gt;&lt;br /&gt;     Assert.areSame(5, 6, "Five was expected."); //fails&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Since JavaScript is loosely typed, asserting data types is a common need. YUI Test provides assertions for all the usual suspects; Array, Boolean, Function, Number, Object, String. To close the loop, an &lt;span style="font-family:courier new,monospace;"&gt;isTypeOf&lt;/span&gt; assertion interprets the data type as string.&lt;/p&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;p&gt;&lt;span style="font-family:courier new,monospace;"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;var oTestCase = new YAHOO.tool.TestCase({ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new,monospace;"&gt;        name: "TestCase Name",&lt;br /&gt;&lt;br /&gt;   testTypeOf : function () {&lt;br /&gt;&lt;br /&gt;     var Assert = YAHOO.util.Assert;&lt;br /&gt;&lt;br /&gt;     Assert.isTypeOf("string", "Hello world");   //passes&lt;br /&gt;&lt;br /&gt;     Assert.isTypeOf("number", 1);               //passes&lt;br /&gt;&lt;br /&gt;     Assert.isTypeOf("boolean", true);           //passes&lt;br /&gt;&lt;br /&gt;     Assert.isTypeOf("number", 1.5);             //passes&lt;br /&gt;&lt;br /&gt;     Assert.isTypeOf("function", function(){});  //passes&lt;br /&gt;&lt;br /&gt;     Assert.isTypeOf("object", {});              //passes&lt;br /&gt;&lt;br /&gt;     Assert.isTypeOf("undefined", this.blah);    //passes&lt;br /&gt;&lt;br /&gt;Assert.isTypeOf("number", "Hello world", "Value should be a number."); //fails&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;A companion assertion, &lt;span style="font-family:courier new,monospace;"&gt;isInstanceOf&lt;/span&gt;, can be used to evaluate object types (Array, Function, Object).  Other assertions are available for evaluating JavaScript-isms like NaN, Undefined, and truthiness.&lt;/p&gt;&lt;p&gt;Finally, YUI Test also supports date and time assertions, forced failures, skipping tests, and test suites.&lt;/p&gt;&lt;h4&gt;Push the Envelope&lt;/h4&gt;&lt;p&gt;Aside from exposing the usual xUnit API, YUI Test goes a step further, and provides support for &lt;i&gt;UserActions&lt;/i&gt; and &lt;i&gt;Asyncronous Tests&lt;/i&gt;.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;User Actions&lt;/b&gt; are simulated user-initiated events that can be used to test how scripts react to mouse or keyboard events.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Asyncronous Tests&lt;/b&gt; can be programmed to pause for a certain amount of time (while an out of process action occurs), or to pause until an event handler in the test script calls a "resume" method.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Whether you've outgrown JsUnit, or whether you're finally ready to start unit testing JavaScript for the first time, be sure to give YUI Test a try.&lt;/p&gt;&lt;h4&gt;More about YUI Test&lt;br /&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.insideria.com/2008/05/writing-your-first-yui-applica.html" rel="nofollow"&gt;Writing Your First YUI Application&lt;/a&gt;, &lt;a href="http://www.oreillynet.com/pub/au/3447" rel="nofollow"&gt;&lt;span style="color: rgb(0, 102, 204);"&gt;Eric Miraglia&lt;/span&gt;&lt;/a&gt; (2008 May).&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;More about JsUnit&lt;br /&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a title="Permanent Link: AJAX and Unit Testing - it's time to mingle" href="http://www.litfuel.net/plush/?postid=117" rel="bookmark"&gt;&lt;span style="color: rgb(0, 102, 204);"&gt;AJAX and Unit Testing - it's time to mingle&lt;/span&gt;&lt;/a&gt;, Jim Plush (2006 Feb),&lt;/li&gt;&lt;li&gt;&lt;a title="Permanent Link: Ajax and Unit Testing Part Two, The Wrath of Mock" href="http://www.litfuel.net/plush/?postid=154" rel="bookmark"&gt;&lt;span style="color: rgb(0, 102, 204);"&gt;Ajax and Unit Testing Part Two, The Wrath of Mock&lt;/span&gt;&lt;/a&gt;, Jim Plush (2006 Nov).&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;More about Open Source Testing Tools&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.opensourcetesting.org/"&gt;Open Source Testing Tools Site&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://junit.sourceforge.net/doc/testinfected/testing.htm"&gt;Test Infected - The Seminal Tutorial by Beck and Gamma&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4821777072574890649?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4821777072574890649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4821777072574890649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4821777072574890649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4821777072574890649'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/09/yui-test-new-kid-on-block-one-of-great.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_LCoIt82CYdA/SUUNxqaub5I/AAAAAAAAAOs/K4n_YphIcWo/s72-c/yui-test.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6804533197622770268</id><published>2008-09-16T06:00:00.000-04:00</published><updated>2008-12-13T16:23:31.427-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Haromonizing the Good Parts&lt;/span&gt;&lt;/p&gt;&lt;bq&gt;&lt;i&gt;"Sometimes a step backward is a step in the right direction ..."&lt;/i&gt;&lt;/bq&gt; &lt;p&gt; Over the summer, there have been two loosely related events on the JavaScript landscript:&lt;i&gt; ECMAScript Harmony &lt;/i&gt;and &lt;i&gt;JavaScript: The Good Parts&lt;/i&gt;. &lt;/p&gt; &lt;h3&gt;ECMAScript Harmony&lt;/h3&gt; &lt;p&gt; In the land of JavaScript, the "tyranny of the installed base" rules supreme. A key frustration of JavaScript developers is that platform innovations are metered by the glacial rate at which the marketplace upgrades browser clients. &lt;/p&gt; &lt;p&gt; Ironically, JavaScript pundits have been equally concerned about there being too much innovation in the ECAMScript 4 specification. The new specification includes ambitious notions like packages, namespaces and early binding. &lt;/p&gt; &lt;p&gt; In August, the working group met in Oslo and arrived at a new focus for the future of JavaScript, dubbed the &lt;i&gt;ECMAScript Harmony&lt;/i&gt; project. The core of ES Harmony can be expressed in a set of four goals. &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Focus work on ECMAScript 3.1 with full collaboration of all parties, and target two interoperable implementations by early next year.&lt;/li&gt; &lt;li&gt;Collaborate on the next step beyond ECMAScript 3.1, which will include syntactic extensions but which will be more modest than ECMAScript 4 in both semantic and syntactic innovation.&lt;/li&gt; &lt;li&gt;Some ECMAScript 4 proposals have been deemed unsound for the Web, and are off the table for good: packages, namespaces and early binding. This conclusion is key to Harmony.&lt;/li&gt; &lt;li&gt;Other goals and ideas from ECMAScript 4 are being rephrased to keep consensus in the committee; these include a notion of classes based on existing ES3 concepts combined with proposed ECMAScript 3.1 extensi&lt;/li&gt; &lt;/ol&gt; &lt;p&gt; For more about ECMAScript Harmony, visit &lt;a href="http://ejohn.org/blog/ecmascript-harmony/"&gt;John Resig's blog&lt;/a&gt;. &lt;/p&gt; &lt;h3&gt;JavaScript: The Good Parts&lt;/h3&gt; &lt;p&gt; Admist the ES4 turmoil, workers at both Mozilla and Yahoo! have advocated moderation. John Resig, of Mozilla, went on a &lt;a href="http://ejohn.org/blog/ecmascript-4-speaking-tour/"&gt;ES4 speaking tour&lt;/a&gt;  to raise awareness, and Douglas Crockford, of Yahoo!, brought out &lt;a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/"&gt;JavaScript: The Good Parts&lt;/a&gt;, a testament to the doctine of "less is more". &lt;/p&gt; &lt;p&gt; In "The Good Parts", Crockford walks through both the good and the bad of JavaScript, pointing out best practices to embrace and design flaws to avoid. While Crockford tries to "accentuate the positive", one can't help but notice that many best practices are driven by design flaws. &lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;h3&gt;Some Design Flaws&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Reliance on global variables weakens the resiliency of programs [p25]. &lt;/li&gt; &lt;li&gt;Inner variables set to functions are bound to the global object (not the "this" of the outer function) [p28].&lt;/li&gt; &lt;li&gt;Arguments are not really an array [p31].&lt;/li&gt; &lt;li&gt;Support for block syntax implies a block scope, but there is no block scope [p36]. &lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Some Best Practices &lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Reduce your global footprint to a single name (like YUI's YAHOO namespace) [p26].&lt;/li&gt; &lt;li&gt;Throw exceptions when a mishap is detected [p32].&lt;/li&gt; &lt;li&gt;Declare all variables used in a function at the top of the function body [p36].&lt;/li&gt; &lt;li&gt;Use the module pattern to eliminate the use of global variable [p41].&lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Crockford is presenting a talk on the Good Parts at the &lt;a href="http://ajaxexperience.techtarget.com/html/index.html"&gt;Ajax Experience 2008&lt;/a&gt; in Boston on September 29th. Sadly, his talk is up against my own talk "Ajax Testing Tool Review". I just hope someone shows up for mine ... &lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;h2&gt;Preaching to the Choir&lt;/h2&gt; &lt;p&gt; At &lt;a href="http://www.vandamme.com/blog.aspx?id=1940&amp;amp;blogid=238"&gt;VanDamme Associates&lt;/a&gt;, we make good use of John Resig's JQuery library and Yahoo's YUI library in our Ektron-based web applications. Together, these packages already deliver the same utility that an overly-ambitous ES4 might provide. A kinder, gentler ES4 means a more stable and robust development environment for us and our clients. To quote a famous, if fictional, engineer: "The more they fancy up the plumbing, the easier it is to gum up the works." &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6804533197622770268?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6804533197622770268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6804533197622770268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6804533197622770268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6804533197622770268'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/09/haromonizing-good-parts-sometimes-step.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3319271219245565092</id><published>2008-07-22T06:00:00.000-04:00</published><updated>2008-12-13T16:12:32.701-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Ajax Experience 2008 - More Ted, 'nuff said &lt;/span&gt;&lt;/p&gt;&lt;p&gt; I'll be giving three -- count 'em three -- presentations at the Ajax Experience at the end of September. Two talks are Struts-related reprisals form last year, and the third talk, new this year!, dives into popular tools for testing Ajax applications. &lt;/p&gt; &lt;p&gt;&lt;a href="http://ajaxexperience.techtarget.com/html/index.html"&gt;Hope to see you there!&lt;/a&gt;&lt;/p&gt; &lt;h3&gt; Ajax Testing Tool Review &lt;/h3&gt; &lt;p&gt; Not long ago, testing Ajax components meant play-testing a page by hand. Today, there are a growing number of tools we can use to simplify and automate Ajax testing. &lt;/p&gt; &lt;p&gt; In this session we will cover when to test, what to test and how to test Ajax components. You learn how to create automatic tests with various tools, including YUI Test, OpenQA Selenium and TIBCO Test Automation Kit, and how to use Ajax testing tools with IDEs and Continuous Integration systems. &lt;/p&gt; &lt;p&gt; In this session, you will learn: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;When, where and how to test Ajax components;&lt;/li&gt; &lt;li&gt;How to create automatic tests with various tools;&lt;/li&gt; &lt;li&gt;How to use Ajax testing tools with IDEs and Continuous Integration systems.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;/p&gt; &lt;h3&gt;Struts on Ajax: Retrofitting Struts with Ajax Taglibs&lt;/h3&gt; &lt;p&gt; Struts is Java's most popular web framework. Ajax is the web's hottest user interface. What happens when we put Struts on Ajax? &lt;/p&gt;&lt;p&gt; In this session, we stir some Ajax wizardry into a conventional Struts application, without all the sweat and bother of writing our own JavaScript. Struts 1 and Struts 2 both support Ajax taglibs that look and feel just like ordinary JSP tags. If it's just a little bit of Ajax that you want, these tags will get you around the learning curve in record time. &lt;/p&gt;&lt;p&gt; During the session, we will cover &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Using the Java Web Parts taglib with Struts 1&lt;/li&gt; &lt;li&gt;Using the Ajax YUI plugin with Struts 2&lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Who should attend: Struts developers who would like to utilize Ajax with existing applications, and Ajax developers who would like to utilize Struts as a backend. &lt;/p&gt;&lt;p&gt; To get the most from this session, some familiarity with Struts or a similar framework is helpful. &lt;/p&gt;&lt;p&gt; To register, visit &lt;a href="http://ajaxexperience.techtarget.com/index.html"&gt;Ajax Experience site&lt;/a&gt;. &lt;/p&gt; &lt;h3&gt;Ajax on Struts: Coding an Ajax Application with Struts 2&lt;/h3&gt; &lt;p&gt; Ajax is the web's hottest user interface. Struts is Java's most popular web framework. What happens when we put Ajax on Struts? &lt;/p&gt;&lt;p&gt; In this session, , we look at writing a new Struts 2 application from square one, using the Yahoo User Interface (YUI) Library on the front end, and Struts 2 on the backend. YUI provides the glitz and the glamour, and Struts 2 provides the dreary business logic, input validation, and text formatting. &lt;/p&gt;&lt;p&gt; During the session, we will cover &lt;/p&gt;&lt;ul&gt; &lt;li&gt;How to integrate an Ajax UI with Struts 2&lt;/li&gt; &lt;li&gt;Basics of the Yahoo User Interface (YUI) Library&lt;/li&gt; &lt;li&gt;Business services Struts can provide to an Ajax UI&lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Who should attend: Ajax developers who would like to utilize Struts as a back-end, and Struts developers who would like to utilize Ajax as a front-end. &lt;/p&gt;&lt;p&gt; To get the most from this session, some familiarity with an Ajax library, like YUI or Dojo, is helpful. &lt;/p&gt;&lt;p&gt; Visit the &lt;a href="http://ajaxexperience.techtarget.com/index.html"&gt;Ajax Experience site&lt;/a&gt; to register. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3319271219245565092?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3319271219245565092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3319271219245565092' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3319271219245565092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3319271219245565092'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/07/ajax-experience-2008-more-ted-nuff-said.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8572996485724112592</id><published>2008-06-19T06:00:00.000-04:00</published><updated>2008-12-13T16:08:53.387-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;"The Dark Side of the Internet" Lecture, Tuesday, June 24th at 6PM in Rochester NY&lt;/span&gt;&lt;/p&gt;&lt;p&gt; On Tuesday, June 24, at 6:00 pm, the BlueTie Unlimited Bandwidth Lecture Series will host Mr. Scott Forbes as our guest lecturer. This lecture will deal with the prevention of the dangers found on the Internet including topics such as; SPAM/Chain Letters,Virus/hackers, Hoax/Urban Legends, Identity theft, cyber-terrorism, cyber-bullies,  and ebay/internet scams.  Mr. Forbes has over 30 years experience in the Information Technology field and currently teaches IT at Nazareth College where he includes Internet security as part of his curriculum. &lt;/p&gt;&lt;p&gt; Please join us at the BlueTie Campus, 1050 Pittsford-Palymra Road, Pittsford NY on June 24th. Refreshments will be served and seating is limited.  Please RSVP 585-586-2000 if you plan on attending. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8572996485724112592?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8572996485724112592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8572996485724112592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8572996485724112592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8572996485724112592'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/06/dark-side-of-internet-lecture-tuesday.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1760640995085546315</id><published>2008-01-25T06:00:00.000-05:00</published><updated>2008-12-13T16:06:44.349-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Apache Struts Tops OpenLogic's Open Source Leaders List with a 71% Share&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt; "Hibernate and Struts topped the list with more than 71 % of customers using each. JasperReports is the only newcomer to the list this year ..."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://press-releases.techwhack.com/15764/openlogic-5/"&gt;FULL STORY ...&lt;/a&gt;&lt;/p&gt; &lt;p&gt;More marketing than statistical science, but it's nice to hear that Struts is still on top. :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1760640995085546315?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1760640995085546315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1760640995085546315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1760640995085546315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1760640995085546315'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/01/apache-struts-tops-openlogics-open.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-2347936122230822435</id><published>2008-01-17T06:00:00.000-05:00</published><updated>2008-12-13T16:04:30.514-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Sun Snaps Up Database Firm, MySQL&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt; &lt;p&gt; "Sun Microsystems elbowed into the enterprise database market Wednesday with the announcement of a proposed $1 billion acquisition of MySQL, an open-source database software company." &lt;/p&gt; &lt;p&gt; For more see, the &lt;a href="http://www.forbes.com/home/technology/2008/01/16/sun-mysql-linux-tech-enter-cx_ag_0116sun.html"&gt;Forbes article&lt;/a&gt;. &lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt; You know, one thing that MySQL buys Sun is experience in making money from GPL software. Now that Java is Sun's ticker symbol, perhaps they are ready to create more Java revenue. Maybe it's not about becoming a "database" company, but about becoming a "GPL" company. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-2347936122230822435?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/2347936122230822435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=2347936122230822435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2347936122230822435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2347936122230822435'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/01/sun-snaps-up-database-firm-mysql-sun.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6856670868272672530</id><published>2008-01-08T06:00:00.000-05:00</published><updated>2008-12-13T16:02:23.540-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Building Struts 2 Apps without XML GlueCode&lt;/span&gt;&lt;/p&gt;&lt;p&gt;TheServerSide has kindly published an article I wrote a while back about the SmartURLs plugin.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=SmartURLs"&gt;Building Struts 2 Apps without XML GlueCode&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;I'll be updating this piece for the new Conventions plugin, now in the Apache Struts Sandbox, which merges ZeroConfig and CodeBehind with SmartURLs. Film at 11 ...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6856670868272672530?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6856670868272672530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6856670868272672530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6856670868272672530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6856670868272672530'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/01/building-struts-2-apps-without-xml.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4162518313593756007</id><published>2007-12-24T06:00:00.000-05:00</published><updated>2008-12-13T15:59:42.522-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Happy Holidays from our friends at TheServerSide.com&lt;/span&gt;&lt;/p&gt;&lt;p&gt; Back in October, I was invited to present a couple of talks on Struts at the Ajax Experience in Boston. Now available through TheServerSide.com is the recording from one of the two, "&lt;a href="http://w.on24.com/r.htm?e=98875&amp;amp;s=1&amp;amp;k=1866520B3A2C334E7169D424A04B2F2D"&gt;Struts on Ajax: Retrofitting Struts with Ajax Taglibs".&lt;/a&gt; &lt;/p&gt;&lt;p&gt; The slides for both Ajax Experience presentations are also available at &lt;a href="http://www.strutsuniversity.org/"&gt;Struts University&lt;/a&gt;. &lt;/p&gt;&lt;p&gt; Lately, I placed a couple of other Struts 2 articles with TheServerSide. The first was a general introduction to Struts 2 that is part of the AboutObject Struts and JSF eguide. Coming sometime soon is a second piece about the SmartURLS plugin for Struts 2.0. (SmartUrls is being merged with the CodeBehind plugin for Struts 2.1). Film at 11 :) &lt;/p&gt;&lt;p&gt; In related news, my second Agitar article finally saw the light of day on the &lt;a href="http://virtualization.sys-con.com/read/478335.htm"&gt;Sys-Con Media site&lt;/a&gt;. If you are maintaining code that you didn't write, or didn't write recently, Agitar is the quickest way to generate enough tests to "turn fear to boredom". &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4162518313593756007?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4162518313593756007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4162518313593756007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4162518313593756007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4162518313593756007'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/12/happy-holidays-from-our-friends-at.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-7973187668782503015</id><published>2007-09-10T06:00:00.001-04:00</published><updated>2008-12-13T15:57:00.342-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Ajax on Struts or Struts on Ajax?&lt;/span&gt;&lt;/p&gt;&lt;p&gt; I'll be giving two presentations at the Ajax Experience in Boston next month. Both talks are Struts-related. The first is about coding an Ajax application with Struts 2 using a plain-vanilla Ajax library. The other is about using Ajax-enabled taglibs with Struts 1 and Struts 2. &lt;/p&gt;&lt;p&gt; Here's the official skinny: &lt;/p&gt; &lt;h3&gt;Ajax on Struts: Coding an Ajax Application with Struts 2&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Thursday, October 25, 2007, 6:00pm - 7:00pm&lt;/strong&gt;&lt;/p&gt; &lt;p&gt; Ajax is the web's hottest user interface. Struts is Java's most popular web framework. What happens when we put Ajax on Struts? &lt;/p&gt;&lt;p&gt; In this session, , we look at writing a new Struts 2 application from square one, using the Yahoo User Interface (YUI) Library on the front end, and Struts 2 on the backend. YUI provides the glitz and the glamour, and Struts 2 provides the dreary business logic, input validation, and text formatting. &lt;/p&gt;&lt;p&gt; During the session, we will cover &lt;/p&gt;&lt;ul&gt; &lt;li&gt;How to integrate an Ajax UI with Struts 2&lt;/li&gt; &lt;li&gt;Basics of the Yahoo User Interface (YUI) Library&lt;/li&gt; &lt;li&gt;Business services Struts can provide to an Ajax UI&lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Who should attend: Ajax developers who would like to utilize Struts as a back-end, and Struts developers who would like to utilize Ajax as a front-end. &lt;/p&gt;&lt;p&gt; To get the most from this session, some familiarity with an Ajax library, like YUI or Dojo, is helpful. &lt;/p&gt;&lt;p&gt; Visit the &lt;a href="http://ajaxexperience.techtarget.com/east/index.html"&gt;Ajax Experience site&lt;/a&gt; to register. &lt;/p&gt; &lt;h3&gt;Struts on Ajax: Retrofitting Struts with Ajax Taglibs&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Friday, October 26, 2007&lt;/strong&gt;&lt;/p&gt; &lt;p&gt; Struts is Java's most popular web framework. Ajax is the web's hottest user interface. What happens when we put Struts on Ajax? &lt;/p&gt;&lt;p&gt; In this session, we stir some Ajax wizardry into a conventional Struts application, without all the sweat and bother of writing our own JavaScript. Struts 1 and Struts 2 both support Ajax taglibs that look and feel just like ordinary JSP tags. If it's just a little bit of Ajax that you want, these tags will get you around the learning curve in record time. &lt;/p&gt;&lt;p&gt; During the session, we will cover &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Using the Java Web Parts taglib with Struts 1&lt;/li&gt; &lt;li&gt;Using the Ajax YUI plugin with Struts 2&lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Who should attend: Struts developers who would like to utilize Ajax with existing applications, and Ajax developers who would like to utilize Struts as a backend. &lt;/p&gt;&lt;p&gt; To get the most from this session, some familiarity with Struts or a similar framework is helpful. &lt;/p&gt;&lt;p&gt; To register, visit &lt;a href="http://ajaxexperience.techtarget.com/east/index.html"&gt;Ajax Experience site&lt;/a&gt;. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7973187668782503015?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7973187668782503015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7973187668782503015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7973187668782503015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7973187668782503015'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/09/ajax-on-struts-or-struts-on-ajax-ill-be.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-7878885767914623404</id><published>2007-09-06T06:00:00.001-04:00</published><updated>2008-12-13T15:54:31.195-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;ApacheCon US 2007 Early Bird Price Extended!&lt;/span&gt;&lt;/p&gt;&lt;p&gt; If you haven't registered for &lt;a href="http://www.us.apachecon.com/"&gt;ApacheCon US 2007&lt;/a&gt; yet, good news: The Early Bird discount has been extended! You now have until 22 September to get the very best price! &lt;/p&gt; &lt;p&gt; Three Struts events are scheduled this year: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://us.apachecon.com/us2007/program/talk/1883"&gt;Migrating to Ajax&lt;/a&gt; (Ted Husted), 12 Nov @10a (five-hour training course)&lt;/li&gt; &lt;li&gt;&lt;a href="http://us.apachecon.com/us2007/program/talk/1880"&gt;Using Groovy with Struts 2&lt;/a&gt; (Mark Menard), 13 Nov @10a (five-hour training course)&lt;/li&gt; &lt;li&gt;&lt;a href="http://us.apachecon.com/us2007/program/talk/2058"&gt;Go Light with Apache Struts 2 and REST&lt;/a&gt; (Don Brown), 15 Nov @5:30p (one-hour presentation)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Also of interest (among many others!):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://us.apachecon.com/us2007/program/talk/2023"&gt;Apache Roller and Blogs as a Web Development Platform&lt;/a&gt; (Dave Johnson), 14 Nov @10:30a (one hour presentation)&lt;/li&gt; &lt;li&gt;&lt;a href="http://us.apachecon.com/us2007/program/talk/1903"&gt;Apache Harmony - Building Java SE in Open source&lt;/a&gt; (Geir Magnusson Jr.), 14 Nov @4:30p (one hour presentation)&lt;/li&gt; &lt;li&gt;&lt;a href="http://us.apachecon.com/us2007/program/talk/1994"&gt;Comparing Java Web Frameworks&lt;/a&gt; (Matt Raible), 15 Nov @9a (one hour presentation)&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;            Hope to see you there! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7878885767914623404?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7878885767914623404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7878885767914623404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7878885767914623404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7878885767914623404'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/09/apachecon-us-2007-early-bird-price.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-726625711391239708</id><published>2007-09-05T06:01:00.000-04:00</published><updated>2008-12-13T15:49:57.431-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;FrSIRT Alert does NOT apply to Struts 1.x !!!&lt;/span&gt;&lt;/p&gt;&lt;p&gt; In July, the Apache Struts group issued a security fix to Struts 2 to eliminate a remote code exploit. The exploit was based on a problem with a Struts 2 dependency (XWork). Since Struts 1 does not use XWork, Struts 1 is not vulnerable to the exploit. &lt;/p&gt;&lt;p&gt; Unfortunately, a &lt;a href="http://www.frsirt.com/english/advisories/2007/3042%20"&gt;recent security alert&lt;/a&gt; mis-described the problem as affecting all versions of Apache Struts prior to 2.0.9. This is NOT accurate. No version of Struts 1 is affected by this security issue. The only affected versions of Apache Struts are 2.0.0 through 2.0.8. Period. &lt;/p&gt;&lt;p&gt; We've updated the &lt;a href="http://struts.apache.org/"&gt;Apache Struts website&lt;/a&gt; to clarify the scope of the exploit and asked FrSIRT to correct their alert to exclude Struts 1.x. &lt;/p&gt;&lt;p&gt; There are many reasons why someone might want to migrate from Struts 1 to Struts 2, but this security alert is not one of them! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-726625711391239708?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/726625711391239708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=726625711391239708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/726625711391239708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/726625711391239708'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/09/frsirt-alert-does-not-apply-to-struts-1.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3608544428664207766</id><published>2007-09-05T06:00:00.000-04:00</published><updated>2008-12-13T15:50:57.240-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Three new Struts 2 books available for pre-order&lt;/span&gt; &lt;/p&gt;&lt;p&gt; Ian Roughley's mini-book, "Starting with Struts 2", available in print and as a free PDF since May, is about to be joined by three new books about Struts 2. &lt;/p&gt; &lt;p&gt; Coming in October is "Struts 2 Design and Programming: A Tutorial" by Budi Kurniawan. Budi's Struts 1 book is rated "four stars" based on reader reviews at Amazon. &lt;/p&gt; &lt;p&gt; Coming in November is "Practical Apache Struts 2 Web 2.0 Projects" by Ian Roughley, an Apress book. As mentioned, Ian is also the author of "Starting with Struts 2" (&lt;a href="http://opensource.atlassian.com/confluence/oss/display/BOOKS/ISBN-978-1-4303-2033-3"&gt;available now!&lt;/a&gt;). &lt;/p&gt; &lt;p&gt; Looking down the road a bit, "Struts 2: The Complete Reference" by James Holmes is scheduled for release in June 2008. James is also the author of "Struts 1: The Complete Refererence", which may be the most up to date Struts 1 book. &lt;/p&gt; &lt;p&gt; To order any of these books, please visit the &lt;a href="http://opensource.atlassian.com/confluence/oss/display/BOOKS/Books+about+Struts"&gt;Apache Bookstore site&lt;/a&gt;. All commissions for books ordered through the Apache Bookstore site are donated back to the Apache Software Foundation. &lt;/p&gt; &lt;p&gt; If you do plan on ordering any of these books, please consider pre-ordering today. Pre-orders do affect a book's ranking, which will help us get the Struts 2 word out! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3608544428664207766?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3608544428664207766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3608544428664207766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3608544428664207766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3608544428664207766'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/09/three-new-struts-2-books-available-for.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-2438798346715007299</id><published>2007-08-13T06:00:00.000-04:00</published><updated>2008-12-13T15:42:12.699-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Eight Habits of Highly Effective Programmers (5-8)&lt;/span&gt;&lt;/p&gt;&lt;p&gt; &lt;a href="http://www.jroller.com/TedHusted/entry/habits"&gt;Last time&lt;/a&gt;, we covered habits 1-4: &lt;strong&gt;Estimate&lt;/strong&gt; (Be Proactive), &lt;strong&gt;Test-First&lt;/strong&gt; (Begin with the End in Mind), &lt;strong&gt;Iterate&lt;/strong&gt; (Put First Things First), and &lt;strong&gt;Narrate&lt;/strong&gt; (Seek first to understand, and then to be understood). &lt;/p&gt;&lt;ul&gt;&lt;li&gt; Refine (Think Win/Win) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; Stable requirements are the holy grail of software development. If we do pursue the myth of stable requirements, clients and developers both lose. We may ship what the requirements describe, but we probably won't ship what the client really wants and needs. &lt;/p&gt;&lt;p&gt; When building business applications, a better approach is successive refinement. Rather than try to define in detail the application all at once, we first define and implement a key workflow. Through a series of iterations, we continue to extend and refine the workflows that comprise the application. The goal of each iteration is to provide client with functioning application that does useful work. &lt;/p&gt;&lt;p&gt; Successive refinement encourages clients and developers to act as collaborators, rather than adversaries, wrangling over requirements. &lt;/p&gt; &lt;ul&gt;&lt;li&gt; Reuse (Synergize) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; A worker is only as good as his or her tools. As we create software that works, we look for ways to reuse that code in other projects. Few applications have totally unique requirements. Every application overlaps with the next. If arrange a codebase so that reusable components are separated from unique components, we usually increase cohesion and decrease coupling, creating software that is easier to change, extend, and reuse. By writing software so that it is easy to use more than once, we often create software that is easier to use even once. &lt;/p&gt; &lt;ul&gt;&lt;li&gt; Refactor (Sharpen the Saw) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; Techniques like Test-First and Iterate help us write good code quickly, but great code still takes time and effort. As we verify that code is effective and relative, we can use our tests to help us refactor, or improve the design of existing code. &lt;/p&gt;&lt;p&gt; Well-designed code is easy to test and easy to change. Because we know new features will be easy to add, well-designed code doesn't need "hooks" for future development. Code becomes an asset that pays dividends today and tomorrow. Refactoring is another win/win, since it helps us create better code today and happier clients tomorrow. &lt;/p&gt; &lt;ul&gt;&lt;li&gt; Mentor &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; It's said that we never truly understand a task until we teach it to someone else. Teaching creates a dialog between instructor and student. When the dialog is healthy, both student and instructor benefit. Teaching forces us to organize and prioritize our own knowledge, clarifying the task in our own minds. Clever students often ask questions we never thought to ask, and in finding the answers, we ourselves come to learn more. For me, writing this article is a case in point! &lt;/p&gt; &lt;hr /&gt; &lt;p&gt; To learn more about programming best practices, see &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/020161622X/husteddotcom-20"&gt; The Pragmatic Programmer&lt;/a&gt; and &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201733862/husteddotcom-20"&gt;Software Craftsmanship&lt;/a&gt;. Be guided by the humble observation of an extreme programmer: "I'm not a great programmer. I'm a good programmer with great habits." &lt;/p&gt; &lt;p&gt;For a similar treatment of the "12 Steps", see "&lt;a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9049262&amp;amp;intsrc=news_ts_head"&gt;12 steps to stellar software (usability) design&lt;/a&gt;".&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-2438798346715007299?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/2438798346715007299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=2438798346715007299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2438798346715007299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2438798346715007299'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/08/eight-habits-of-highly-effective.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-7986229514515589317</id><published>2007-08-01T06:00:00.001-04:00</published><updated>2008-12-13T15:44:49.139-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Eight Habits of Highly Effective Programmers&lt;/span&gt;&lt;/p&gt;&lt;p&gt; Next to the gospel, my favorite self-help book is the &lt;a href="http://www.leaderu.com/cl-institute/habits/habtoc.html"&gt;Seven Habits of Highly Effective People&lt;/a&gt;. The Habits apply to any endeavor, and I like to say that the Seven Habits is the first book any novice programmer should read. To help underscore why, here's my humble homage to brother Steven Covey: The Eight Habits of Highly Effective Programmers. &lt;/p&gt; &lt;ul&gt;&lt;li&gt;Estimate (or Be Proactive)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; Programmers invent the future. It's often hard for us to know how long something will take, because, often, we've never done this exact thing before. In the fictional series Star Trek, engineer &lt;a href="http://en.wikipedia.org/wiki/Montgomery_Scott"&gt;Montgomery Scott&lt;/a&gt; would triple his estimates, so as to seem like a miracle worker. Software engineers often have to triple estimates just to be in the right ballpark! &lt;/p&gt;&lt;p&gt; Educators tell us that feedback is essential for learning. Before starting any programming task, write down an estimate first. After the task is done, compare your estimate with the actual result. Of course, all engineers are optimists, otherwise we couldn't be engineers. But, with practice, we can learn what factor to apply to our internal estimates to match external events. (As implied, my factor is three!) &lt;/p&gt;&lt;p&gt; An easy way to get started with estimates is to keep a standup journal. Every day before starting work, jot down the most important task you did the last working day and the most important thing you hope to do today. Over time, you will develop a basis for comparing estimates with outcomes. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt; Test First (or Begin with the End in Mind) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; Most projects budget at least some time for testing. Many projects schedule this time at the end, after the rest of the work is done. Tests serve two purposes. Run today, tests prove that our code works. Run tomorrow, tests prove that our code still works. Test-last development dilutes the value of tests. The earlier tests are written, the sooner they can tell us that the our code still works. Tests are most valuable when written before we write the implementation. By writing the &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321146530/husteddotcom-20"&gt;test first&lt;/a&gt;, we define what our code needs to do to succeed. As a result, we write only the code we need to write, no more, no less. &lt;/p&gt; &lt;ul&gt;&lt;li&gt; Iterate (or Put First Things First) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; Creating effective software is a learning process. Each release addresses old needs and exposes new needs. Many software products are written for small workgroups, or focus groups of representative users. The sooner we deliver a product that the group can review, the sooner we can verify that established needs are being met, and the sooner we can identify new needs. Early verification is important, since programmers often misinterpret needs and write great code that solves the wrong problem. Writing code is easy. Identifying what code to write is hard. Early iterations help us create a positive feedback loop, so we can deliver better applications. &lt;/p&gt; &lt;ul&gt;&lt;li&gt; Narrate (Seek first to understand, then to be understood) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt; Many teams define an application through a series of &lt;a href="http://strutsuniversity.org/Use+Cases"&gt;use cases&lt;/a&gt;, or plain-language workflows. To "set the stage", a use case might begin with a narrative that describes one common instance of the workflow. The narrative often refers to a prototypical user and includes details of how that user would use the system under specific circumstances. By describing the workflow in plain language, from the user's perspective, we can establish a dialog. Use cases help developers understand what clients want, and also help clients better understand what developers need to know to implement the workflow. &lt;/p&gt;&lt;p&gt; &lt;a href="http://www.jroller.com/TedHusted/entry/habits2"&gt;Next time: Habits 5 thru 8 ...&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7986229514515589317?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7986229514515589317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7986229514515589317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7986229514515589317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7986229514515589317'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/08/next-to-gospel-my-favorite-self-help.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-7489756170993087350</id><published>2007-07-31T15:33:00.001-04:00</published><updated>2008-12-13T15:42:47.075-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;JSF Redux&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The Expert Group for JSF 2.x is &lt;a href="http://www.jcp.org/en/jsr/detail?id=314"&gt;now forming&lt;/a&gt;, and people continue to consider &lt;a href="http://www.nabble.com/Is-Struts-still-a-better-choice-over-JSF-as-on-today---tf4148557.html"&gt;whether JSF is the right choice&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;To recap my own comments ...&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Here's the thing: The vast majority of web applications are intranet application that we build in six to twelve weeks to serve a handful of users.&lt;/p&gt;&lt;p&gt;In a small-group intranet environment, server/bandwidth efficiency is not the limiting factor. The overriding concern is whether the application helps the people using it become more efficient. Do our people get more work done by using the application? Since we may be talking about five or twenty-five people connecting to a server on the next floor in the same building, scalability, in an environment like this, literally doesn't matter. We still need a reasonable response time, but, often, people will forgive a slightly-longer response time for a more helpful user interface.&lt;/p&gt;&lt;p&gt;Of course, not all of us are building small-group intranet applications. If we have thousands of users who hit the application occasionally, from all over the world, our non-functional requirements can be quite different. Or, if we have a small group of users, but those users are working on the space shuttle, again, our requirements are going to be different. Different requirements imply different solutions.&lt;/p&gt;&lt;p&gt;There's an old saw: Do you want it Fast, do you want it Right, or do you want it Soon? Pick any two.&lt;/p&gt;&lt;p&gt;For an intranet application, we might choose Right and Soon. (If it's not right, no one will use it.) For an Internet application, we might pick Fast and Soon. (If it's not fast, no one will use it.) For a space shuttle application, Fast and Right would more important than time to market (and we wouldn't even use web technology!).&lt;/p&gt;&lt;p&gt;For an intranet application, JSF can be an excellent choice -- if you have a group of developers that like working with Swing/VB type technology. For an Internet application, Struts can be an excellent choice -- if you have a group of developers that like working with standard web technology.&lt;/p&gt;&lt;p&gt;But, make no mistake, in final analysis, it's the developers that will make the difference. So, either use the technology that your team likes, or hire developers that like to use your technology. :)&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;In the realm of physics, in order to get any work done, we've had to resort to two separate, and seemingly contradictory, theories. Quantum theory is useful for calculations at an atomic scale, and general relativity is useful for calculations on a planetary scale. Either works fine on their own, and we don't hesitate to put each to good use, but we've yet to find a way to reconcile the two. &lt;/p&gt;&lt;p&gt;In my experience, the same principle applies to web development. Techniques that work well for small intranet applications may not work as well for busy Internet applications, and vice versa. When it comes to the craft of web development, one size does not fit all. &lt;/p&gt;&lt;p&gt;&lt;em&gt;Vive la difference!&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7489756170993087350?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7489756170993087350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7489756170993087350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7489756170993087350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7489756170993087350'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/12/jsf-redux-expert-group-for-jsf-2.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4042544285729599122</id><published>2007-07-27T06:00:00.000-04:00</published><updated>2008-12-13T15:32:19.853-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Husted Tops Thirty&lt;/span&gt;&lt;/p&gt;&lt;p&gt;While in Salt Lake City last week, I dropped by the &lt;a href="http://www.ujug.org/web/"&gt;Utah Java Users Group meeting&lt;/a&gt; and gave my 33rd public presentation, my fourth appearance this year. I usually run about six presentations or courses a year. I'm already on the hook for The Ajax Experience (&lt;a href="http://ajaxexperience.techtarget.com/east/index.html"&gt;Boston&lt;/a&gt;) in October, and ApacheCon (&lt;a href="http://www.us.apachecon.com/"&gt;Atlanta&lt;/a&gt;) in November, so it's shaping up to be a busy year. &lt;/p&gt;&lt;p&gt;The UJUG gig was a last-minute thing. I was already in town to present a three day training course, so we dropped by, and the organizer, Chris Maki, setup up a special event for me during the "Break Out" session at the end. It had already been a busy night covering both SunSPOT robots, Java FX, and Java Scripting, but, even so, several stalwart Strutites hung around for the "special guest appearance". I ran through the better part of my &lt;a href="http://opensource.atlassian.com/confluence/oss/download/attachments/4942/building-s2-applications.pdf?version=2"&gt;Building Struts 2 Applications&lt;/a&gt; session, and answered a number of excellent questions.&lt;/p&gt;&lt;p&gt;I've been doing Struts presentations for six years now. The first, in June 2001, was a one-day "train the trainers" gig for an agency in Atlanta. Struts 1.0 was barely out the door, and before they asked, I had never thought of doing onsite Struts consulting. So, I had no slides, and no projector. We just met in a room with a flipchart, and hovered around my laptop for code demonstration, but at the end of the day, everyone there knew a lot more about Struts (including me!).&lt;/p&gt;&lt;p&gt;That sort of thing went on for several years. People would call and ask me to come out and work with their development team. We'd whip up an agenda, and, along the way, I started to build a library of slides, based on the what each team wanted to cover. Many times, we'd refine the agenda as we went, and I'd be creating or refining sessions in my hotel room the night before.&lt;/p&gt;&lt;p&gt;Eventually, I got tired of doing everything on the fly, and developed an actual training course. Being bloody-minded, my &lt;a href="http://www.strutsuniversity.org/"&gt;Struts University courseware&lt;/a&gt; is open source, just like Struts itsef. Right now, there are two tracts for the MailReader Training Course,  one for teams new to Struts 2 and another for teams that are migrating from Struts 1. The base course is the same, but I change the initial presentation, as well as how the material is presented. &lt;/p&gt;&lt;p&gt;I've given the course several times now, and it seems to be working well. It's a 50/50 mix of lecture and labs. The labs are designed to build the MailReader example application, use case by use case. We follow Agile principles, so each lab is an iteration that leaves us with a functioning application at the end. &lt;/p&gt;&lt;p&gt;I enjoy holding the courses, but I don't actually enjoy traveling. I do it, but I don't like it. Of course, it would be much more convenient if people would come here to Rochester NY. I did do a class here last summer, but it's hard to know when to set a date. If anyone might be interested in coming to Rochester in December or May, or somewhere in between, &lt;a href="http://husted.com/mentor/contact.html"&gt;let me know&lt;/a&gt;. At The Ajax Experience and ApacheCon, I'll be speaking on Migrating to Ajax, so if that might be of interest as a full course, either here or there, let me know that too. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4042544285729599122?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4042544285729599122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4042544285729599122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4042544285729599122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4042544285729599122'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/07/husted-tops-thirty-while-in-salt-lake.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-5185492210314643369</id><published>2007-07-26T06:00:00.002-04:00</published><updated>2008-12-13T15:06:07.376-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:130%;"&gt;The ASF Turns Fifty&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Between July 2006 and June 2007, the Apache Software Foundation (ASF)  created thirteen new projects, bringing the total number of ASF software projects to just over fifty. &lt;/p&gt;&lt;p&gt; In June, the ASF Board of DiThe rectors promoted Jakarta Commons subproject to a top-level Apache Project. Over the past year, three other Jakarta subprojects -- Velocity, Turbine, and POI -- were promoted to top-level projects in 2006/2007. Other newly created projects include Apache Shale, Apache Tiles, Apache Santuario, Apache MINA, Apache Cayenne, Apache Felix, Apache OpenEJB, Apache OpenJPA, Apache Open for Business, and Apache Labs. Seven of the new projects were developed as part of other ASF projects, and then promoted to top-level projects, five projects are new to the foundation, and one was developed internally as a new top-level project. &lt;/p&gt;&lt;p&gt; Apache Velocity (&lt;a href="http://velocity.apache.org/"&gt;velocity.apache.org&lt;/a&gt;) is a Java-based template engine. The Velocity Engine is a mature product, in distribution since 2001. In addition to the core Velocity Engine, the new Apache Velocity project offers five other related products. The latest addition is Velocity DocBook Framework (DBF), a framework for creating high-quality online or print documentation. DBF (&lt;a href="http://velocity.apache.org/docbook"&gt;velocity.apache.org/docbook&lt;/a&gt;) simplifies rendering DocBook files by combining Apache Ant, Java, and the Velocity Engine into a unified toolset. &lt;/p&gt;&lt;p&gt; Apache Turbine (&lt;a href="http://turbine.apache.org/"&gt;turbine.apache.org&lt;/a&gt;) is a servlet-based web application framework. Turbine and Velocity share common roots, and like Apache Velocity, Apache Turbine is a mature product dating back to 2001. Turbine works well with both Velocity templates and JavaServer Pages, and supports a services-oriented architecture. &lt;/p&gt;&lt;p&gt; Apache POI (&lt;a href="http://poi.apache.org/"&gt;poi.apache.org&lt;/a&gt;) provides a set of pure Java APIs for working with Microsoft OLE 2 documents, which includes Microsoft Word and Microsoft Excel. POI is in its third major release series. In addition to Java support, POI also provides bindings for the popular Ruby language. Like Velocity and Turbine, Apache POI is another mature codebase in development since 2001. &lt;/p&gt;&lt;p&gt; Apache Shale and Apache Tiles are spin-offs from the Apache Struts project. Apache Shale (&lt;a href="http://shale.apache.org/"&gt;shale.apache.org&lt;/a&gt;) is a modern web application framework, fundamentally based on JavaServer Faces. The Shale codebase was originally created in 2004 by Craig McClanahan, who also founded Apache Struts. &lt;/p&gt;&lt;p&gt; Apache Tiles (&lt;a href="http://tiles.apache.org/"&gt;tiles.apache.org&lt;/a&gt;) is a templating framework for use with web applications. Originally an Apache Struts feature, Tiles has been broadened into a standalone framework. Both Apache Struts and Apache Shale provide Tiles support as a standard option. &lt;/p&gt;&lt;p&gt; Formerly known as XML Security, Apache Santuario (&lt;a href="http://santuario.apache.org/"&gt;santuario.apache.org&lt;/a&gt;) provides implementations of the W3C standard XML-Signature Syntax and XML Encription Syntax. Libraries are now available for use with Java or C++ applications. Before being promoted to a top-level project, Santuario was part of the Apache XML project. The original Java codebase was a commercial product, donated to the foundation in 2001. &lt;/p&gt;&lt;p&gt; Apache MINA (&lt;a href="http://mina.apache.org/"&gt;mina.apache.org&lt;/a&gt;) provides a unified API for transport types, byte buffers, message objects, and codecs, along with stream-based IO support and a Java Filter interface. The MINA codebase (Multipurpose Infrastructure for Network Applications) began as a merger of the Netty network application framework with a Staged Event Driven Architecture (SEDA). Today, it is a core dependency of the Apache Directory project. Apache MINA also powers point of sale terminals, multiplayer games, and other network systems. &lt;/p&gt;&lt;p&gt; Apache Cayenne (&lt;a href="http://cayenne.apache.org/"&gt;cayenne.apache.org&lt;/a&gt;) is an object relational mapping (ORM) framework for Java that combines many of the best features of Apache iBATIS and Hibernate, and then adds a sophisticated GUI modeling tool. Cayenne was first developed by ObjectStyle, LLC., and donated to the ASF in 2006. The codebase has been actively developed since 2001, and Apache Cayenne is now in its second major release series, with version 3.0 in development. An exciting feature of Apache Cayenne 3.0 will be a Java Persistence API (JPA) provider. &lt;/p&gt;&lt;p&gt; Apache Felix (&lt;a href="http://felix.apache.org/"&gt;felix.apache.org&lt;/a&gt;) is a community effort to implement OSGi-related technologies. OSGi technology targets embedded devices and home services gateways, but it is ideally suited for any project that is interested in principles of modularity, component-oriented, and/or service-orientation. Among other things, OSGi technologies can be used as an alternative to Java Management Extension (JMX). &lt;/p&gt;&lt;p&gt; Apache OpenEJB (&lt;a href="http://openejb.apache.org/"&gt;openejb.apache.org&lt;/a&gt;) is a modular, configurable, and extendable EJB Container System and EJB Server. Over the last seven years, the OpenEJB group worked with two other open source hosts, Exolab and CodeHaus, before coming to the ASF in 2006. The current release of Apache OpenEJB supports the Enterprise JavaBeans 3.0 specification. The product ships with both a EJB container system and its own lightweight EJB server. Apache OpenEJB can also be embedded into Apache Tomcat to create "a no holds-barred EJB server". &lt;/p&gt;&lt;p&gt; Apache OpenJPA (&lt;a href="http://openjpa.apache.org/"&gt;openjpa.apache.org&lt;/a&gt;) is a feature-rich implementation of the persistence part of Enterprise Java Beans 3.0, also known as the Java Persistence API (JPA). OpenJPA can be used as a stand-alone POJO persistence layer, or it can be integrated into any EJB3.0 compliant container and many lightweight frameworks. The OpenJPA codebase was originally developed by BEA and later donated to the foundation in 2006. OpenJPA is already being used by ActiveMQ, BEA, Apache Camel, Apache Geronimo, Apache Ode, Apache OpenEJB, Spring, and IBM WebShere, among others. &lt;/p&gt;&lt;p&gt; Apache Open for Business (&lt;a href="http://ofbiz.apache.org/"&gt;ofbiz.apache.org&lt;/a&gt;) is an enterprise automation package that includes tools for Enterprise Resource Planning (ERP), Customer Relationship Management (CRM), Software Configuration Management (SCM), Materials Resource Planning (MRP), and more. OFBiz was originally created in May 2001 and soon attracted an international base of developers, contributors, and users before joining the foundation in 2006. Today, OfBiz powers a wide variety of ecommerce sites, including 1-800-flowers.com and totes-isotoner.com. &lt;/p&gt;&lt;p&gt; While many ASF projects were created elsewhere, another new project, Apache Labs (&lt;a href="http://labs.apache.org/"&gt;labs.apache.org&lt;/a&gt;), is designed as a place where ASF committers can experiment with new ideas. In the Apache Labs, our committers can innovate and collaborate, without the worry of building a community first. Today's labs -- which may be tomorrow's projects -- range from new approaches to creating virtual communities to experiments in new web protocols. &lt;/p&gt;&lt;p&gt; The Apache Software Foundation (&lt;a href="http://www.apache.org/"&gt;www.apache.org&lt;/a&gt;) is a not-for-profit corporation that supports the Apache community of open-source software projects. While the foundation's infrastructure is funded through a combination of &lt;a href="http://apache.org/foundation/sponsorship.html"&gt; sponsorships&lt;/a&gt; and &lt;a href="http://apache.org/foundation/contributing.html"&gt;donations&lt;/a&gt;, the foundation itself is composed of individual, unpaid volunteers. ASF projects are characterized by a collaborative, consensus-based development process, an open and pragmatic software license, and a desire to create high quality software. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-5185492210314643369?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/5185492210314643369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=5185492210314643369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5185492210314643369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5185492210314643369'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/07/between-july-2006-and-june-2007-apache.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8213971065590634441</id><published>2007-07-24T06:00:00.000-04:00</published><updated>2008-12-13T15:01:06.199-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Struts 2.0.9 General Availability Release with Important Security Fix &lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[Apache Struts Group] Apache Struts 2.0.9 is now available for &lt;a href="http://struts.apache.org/download.cgi#struts209"&gt;download&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This release includes an important security fix regarding a remote&lt;br /&gt;code exploit.  For more information about the exploit, visit the&lt;br /&gt;&lt;a href="http://struts.apache.org/2.x/docs/s2-001.html"&gt;security bulletins page&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ALL DEVELOPERS ARE STRONGLY ADVISED TO UPDATE TO STRUTS 2.0.9 OR&lt;br /&gt;XWORK 2.0.4 IMMEDIATELY!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For other changes included in Struts 2.0.9, see the &lt;a href="http://struts.apache.org/2.0.9/docs/release-notes-209.html"&gt;release notes&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8213971065590634441?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8213971065590634441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8213971065590634441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8213971065590634441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8213971065590634441'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/07/struts-2.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3000478974404046972</id><published>2007-07-07T06:00:00.000-04:00</published><updated>2008-12-13T14:58:17.226-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Struts Downloads Skyrocket in 2007&lt;/span&gt;&lt;/p&gt;&lt;p&gt; [Apache Struts Group] Since its release in June 2001, Apache Struts (struts.apache.org) has become the most popular web framework for Java. Six years later, by any objective measure, Struts is still Java's most popular web framework. &lt;/p&gt; &lt;p&gt; In February and March 2007, the group released both Struts 1.3.8 and Struts 2.0.6 to the general public, and Struts downloads zoomed to over 340,000 a month from the Apache site alone [1]. And this is just the tip of the iceberg. Most copies of Struts are downloaded from an network of mirrors or obtained from Maven repositories. Meanwhile, monthly page Views for the Struts website soared to over 2.1 million, up from levels of about 1.3 million page views in June 2004. Subscriptions to the Struts mailing lists hold steady at about 3,000 accounts, not counting people who use services like Nabble and GMane. &lt;/p&gt; &lt;p&gt; Since the framework's debut, well over twenty books about Apache Struts have been published [2], along with hundreds of online articles, and dozens of third-party extensions [3]. Books and articles devoted to Struts 2 are already appearing. InfoQ has released "Starting with Struts2" both as a free PDF and as a hardcopy book via LuLu.com [4]. Mark Menard has started a Struts 2 cookbook [5], and sites like Rose India and ArcTech are offering extensive Struts 2 tutorials [6]. Many teams are already moving Struts 1 applications to Struts 2, including the popular Apache Roller blogging application [7]. &lt;/p&gt; &lt;p&gt; An exciting feature of Struts 2 is configuration-free plugins. Third-party components can be added to the framework just by putting a JAR on the Java classpath. In fact, many of the framework's advanced features are provided by plugins that ship with Struts 2. A plugin repository site is open to the public [8], and several plugins are already available, including plugins for JSON, WebFlow, Google Web Toolkit, and Guice. &lt;/p&gt;  &lt;p&gt; While there is no lack of choice in the Java framework space, the clear winner with grassroots developers is still Apache Struts. With first-class support for Ajax, JSF, unit testing, and dependency injection, Struts 2 is an excellent choice for teams that want to step forward, without stepping away.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;[1] - &lt;a href="http://people.apache.org/%7Evgritsenko/stats/projects/struts#Downloads-N1008F"&gt;Apache Stats&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[2] - &lt;a href="http://opensource.atlassian.com/confluence/oss/display/BOOKS/Books+about+Struts"&gt;Apache Bookstore&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[3] - &lt;a href="http://husted.com/central/"&gt;Struts Central&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[4] - &lt;a href="http://www.lulu.com/content/813300"&gt;Starting Struts 2&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[5] - &lt;a href="http://www.vitarara.org/cms/struts2cookbook"&gt;Struts 2 Cookbook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;[6] - &lt;a href="http://www.roseindia.net/struts/struts2/index.shtml"&gt;Rose India Struts 2 Tutorial&lt;/a&gt; and&lt;a href="https://www.arctechsoftware.com/tutorial/tutorial.do?subcatId=4"&gt; ArchTech Struts 2 Tutorial&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[7] - &lt;a href="http://cwiki.apache.org/confluence/display/ROLLER/What%27s+New+in+Roller+4.0"&gt;Apache Roller&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;[8] - &lt;a href="http://cwiki.apache.org/S2PLUGINS/home.html"&gt;Struts Plugins&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;hr /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3000478974404046972?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3000478974404046972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3000478974404046972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3000478974404046972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3000478974404046972'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/07/struts-downloads-skyrocket-in-2007.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1456521698297455683</id><published>2007-06-14T06:00:00.001-04:00</published><updated>2008-12-13T14:54:24.724-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Strecks 1.0.1 released&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Phil Zoio has released Strecks 1.0.1 with some small updates to the 1.0 release.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"The main change in this release is it now much simpler to run the samples: simply download the source distrubution, then run "ant download run.samples".&lt;/p&gt;&lt;p&gt;"Strecks contains a range of enhancements aimed to streamline the Struts 1.x programming model using Java 5 language features. These enhancements include annotations for validation, data binding, type conversion and dependency injection, as well as a range of other features including pure POJO actions, interceptors and Spring integration."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;For a more detailed feature list see &lt;a href="http://strecks.sourceforge.net/features.php"&gt;http://strecks.sourceforge.net/features.php&lt;/a&gt;. Strecks can be downloaded from &lt;a href="http://strecks.sourceforge.net/download.php"&gt;http://strecks.sourceforge.net/download.php&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1456521698297455683?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1456521698297455683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1456521698297455683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1456521698297455683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1456521698297455683'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/06/strecks-1.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6414299442324908213</id><published>2007-06-13T06:00:00.002-04:00</published><updated>2008-12-13T14:50:58.431-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Struts 2.0.8 GA release available&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[Apache Struts Group] The Apache Struts group is pleased to announce that Struts 2.0.8 is available as a "General Availability" release. This release has over 60 bug fixes and improvements since 2.0.6! New Features include:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Cookie Interceptor - Inject cookie with a certain configurable name / value into action.&lt;/li&gt;&lt;li&gt;Restful2ActionMapper - Allow automatic id setting from Restful2ActionMapper.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;[&lt;a href="http://struts.apache.org/announce.html#a20070612"&gt;MORE&lt;/a&gt;]&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;em&gt;Kudos to my confrere Rainer Hermanns for cranking out this release!&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6414299442324908213?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6414299442324908213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6414299442324908213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6414299442324908213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6414299442324908213'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/06/apache-struts-group-apache-struts-group.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-756014612165234906</id><published>2007-05-27T06:00:00.002-04:00</published><updated>2008-12-13T14:47:20.280-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Starting with Struts 2 Book Available&lt;/span&gt;&lt;/p&gt;&lt;p&gt;My friend and fellow Struts Committer Ian Roughly has brought out the first Struts 2 book, which is available both as a PDF and as a conventional printed book. Kudos, Ian, kudos!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;"&lt;a href="http://www.infoq.com/minibooks/starting-struts2"&gt;Starting with Struts2&lt;/a&gt;" is aimed at those who are new to Strut2, and those familiar with MVC frameworks but unfamiliar with Struts2. It provides everything you need to know to get up and running using Struts2, and can be used as a starting point to explore the more intricate features of the Struts2 framework. Topics include architecture and configuration, how to implementing actions, and supporting infrastructure such as validation and internationalization. Also included are productivity tips, providing a practical introduction on how best to use the framework.&lt;/p&gt;&lt;p&gt;Right now, I'm working against a hard June 30 deadline, but I made time to at least skim the PDF. The book looks great. At 122 pages, it's a small book that doesn't try to replicate the online Struts 2 documentation. Instead, the book is a perfect complement to the Struts 2 website. It fills in the gaps and should make it much easier for web developers to "hit the ground running" with Struts 2. &lt;/p&gt;&lt;p&gt;You can bet that I'll be ordering a printed copy to add to my collection of Struts books. It's an incomplete collection: I only have twelve. But I'm very glad to make Ian's book lucky #13. &lt;/p&gt;&lt;p&gt;In other Struts 2 news, my compadre Don Brown is busily preparing a release of Struts 2.0.8. The beat goes on ... &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-756014612165234906?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/756014612165234906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=756014612165234906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/756014612165234906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/756014612165234906'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/05/starting-with-struts-2-book-available.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-2116381554227403369</id><published>2007-04-22T06:00:00.000-04:00</published><updated>2008-12-13T14:43:07.877-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;How many techs does a web dev use?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Sofware engineer might be the &lt;a href="http://money.cnn.com/popups/2006/moneymag/bestjobs/frameset.1.exclude.html"&gt;best job in America&lt;/a&gt;, but when you tally them up, most web application developers still need to use, on a regular basis, a stunning array of technologies.&lt;br /&gt; &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Desktop operating system&lt;/li&gt; &lt;li&gt; Telnet or Remote Desktop&lt;/li&gt; &lt;li&gt; Server operating system&lt;/li&gt; &lt;li&gt; Email&lt;/li&gt; &lt;li&gt; Web Browser&lt;/li&gt; &lt;li&gt; Internet Relay Chat or Instant Messenger&lt;/li&gt; &lt;li&gt;An IDE (Eclipse, Visual Studio, Aptana) or programmers editor&lt;/li&gt; &lt;li&gt; Image editor&lt;/li&gt; &lt;li&gt; HTML&lt;/li&gt; &lt;li&gt; CSS&lt;/li&gt; &lt;li&gt; JavaScript&lt;/li&gt; &lt;li&gt;DOM&lt;/li&gt; &lt;li&gt; HTTP&lt;/li&gt; &lt;li&gt; HTTPS&lt;/li&gt; &lt;li&gt;XHR (XMLHttpRequest)&lt;/li&gt; &lt;li&gt;Cookies&lt;/li&gt; &lt;li&gt;POP / SMTP&lt;/li&gt; &lt;li&gt; High-level language (Java, C#, Ruby, ...)&lt;/li&gt; &lt;li&gt; XML&lt;/li&gt; &lt;li&gt;Unit testing framework (xUnit, TestNG)&lt;/li&gt; &lt;li&gt; SQL&lt;/li&gt; &lt;li&gt; DBMS (MySQL, SQL Server)&lt;/li&gt; &lt;li&gt; Data access framework (Hibernate, iBATIS)&lt;/li&gt; &lt;li&gt; Web server&lt;/li&gt; &lt;li&gt; Web container&lt;/li&gt; &lt;li&gt;Web services (SOAP, JSON RPC)&lt;/li&gt; &lt;li&gt; Server pages (JSP, ASP, PHP)&lt;/li&gt; &lt;li&gt; Page testing framework (Selenium, Mercury, WebCanoo)&lt;/li&gt; &lt;li&gt;Ajax Library (Dojo, YUI)&lt;/li&gt; &lt;li&gt; Web framework (Struts, ASP.NET, Rails)&lt;/li&gt; &lt;li&gt; Repository (SVN, CVS)&lt;/li&gt; &lt;li&gt; Wiki&lt;/li&gt; &lt;li&gt; Issue Tracker&lt;/li&gt; &lt;li&gt; Office sofware (Word, Excel, PowerPoint)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;And that's not even counting readng, 'riting, and 'rithmetic!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-2116381554227403369?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/2116381554227403369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=2116381554227403369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2116381554227403369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2116381554227403369'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/how-many-techs-does-web-dev-use-sofware.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-2645406862011308824</id><published>2007-04-21T06:00:00.000-04:00</published><updated>2008-12-13T14:40:22.864-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Is Open Source a Freeforall?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://jroller.com/page/agileindia?entry=open_source_quiz"&gt;Agile programming in India&lt;/a&gt; writes:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;"I hear alot about open source, everything is open source, how people write code on mailing list and Apache and all that... but I ask dear reader, how do they manage to fix BUGS? When many people write code it is hard and you need a methodology, but open source tell us that we don't need methodology, any person can change code? How does this work? I know, they are good, but no methdology? Open source needs a plan. A new plan. It is not agile enough. you want to insert problems in my code, boy?! Go, join open source mailing list! NO good."&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Most people who work on open source projects are professional programmers who use the products at work. The individuals in the Apache HTTPD group contribute to the web server because they each use the server at work. The same goes for most any open source project. &lt;/p&gt;&lt;p&gt;Very few open source projects let any one change the code, in the way that Wikipedia lets any one change an entry. (And even Wikipedia is locking some entries down now.) Anyone can submit a patch, but an established "committer" has to decide whether to apply the patch. &lt;/p&gt;&lt;p&gt;How do you get to be a committer? Easy: &lt;em&gt;Act lke a committer.&lt;/em&gt; File tickets, submit patches, and post to the mailing list. (But most of all, submit patches!) Once the group sees that a developer knows what he or she is doing, usually, someone in the group will offer write access. But you have to prove yourself first. &lt;/p&gt;&lt;p&gt;As to methodology, most projects use tools like mailing lists, commit logs, issue trackers, and wikis to discuss the code and apprise everyone of every change we make. For more about open source infrastructure, see &lt;a href="http://jroller.com/page/TedHusted?entry=prim"&gt;The Open Source Secret Sauce&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-2645406862011308824?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/2645406862011308824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=2645406862011308824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2645406862011308824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2645406862011308824'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/is-open-source-freeforall-agile.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8638536615906121390</id><published>2007-04-20T06:00:00.000-04:00</published><updated>2008-12-13T14:38:26.591-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;S2 Tip - Define base class constants for common Result names&lt;/span&gt;&lt;/p&gt;&lt;p&gt; The framework defines several constants that are used to identify common result use cases, such as, ERROR, INPUT, FAILURE, LOGIN. NONE, and SUCCESS. &lt;/p&gt; &lt;p&gt; When an application has common result cases of its own, such HELP, MENU, or CANCEL, the application should define additional constants to represnt various result types. &lt;/p&gt; &lt;p&gt; The use of constants reduces programming errors, increases cohesion, and also documents an application's common result types. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8638536615906121390?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8638536615906121390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8638536615906121390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8638536615906121390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8638536615906121390'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/s2-tip-define-base-class-constants-for.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-5291739567111126247</id><published>2007-04-19T06:00:00.000-04:00</published><updated>2008-12-13T14:29:57.814-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;YUI Version 2.2.2: Bug-Fix Release&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://yuiblog.com/blog/2007/04/18/yui-2-2-2-released/"&gt;Version 2.2.2 of the Yahoo! User Interface (YUI) Library&lt;/a&gt; is now available.&lt;/p&gt;&lt;p&gt;Usually this kind of update means downloading the new scripts, dropping them into your development folder, and ultimately updating the server. But since YUI is also &lt;a href="http://developer.yahoo.com/yui/articles/hosting/"&gt;serving the minified scripts from Yahoo! servers,&lt;/a&gt; downloading the release is optional, all you may have to do is replace references to "http://yui.yahooapis.com/2.2.0/" with a reference to "http://yui.yahooapis.com/2.2.2/".&lt;/p&gt;&lt;p&gt;Of course, any decent IDE will do the search and replace for you, so it's not any more work. We simply trade updating our local copies of the scripts with touching all the files that use the script. Since my team wasn't checking in the YUI scripts, it's actually less work, since only one of us has to do it once, and we don't have to touch the server at all.&lt;/p&gt;&lt;p&gt;One handy result of the trade-off is the potential for mixing and matching versions. The 2.2.2 release is suppose to be a bug-fix, though the beta (repeat &lt;em&gt;beta&lt;/em&gt;) DataTable saw some significant internal changes. In fact, my &lt;a href="http://www.geocities.com/planetyazaar/examples/dataform/tutorial-tabview.html"&gt;DataForm widget&lt;/a&gt; can't use the new version (yet). But, no worries, I changed that reference back to  2.2.0 and its running, giving me breathing-space to sort out the problem. (Which I'm sure will be yet-another case of me pushing the envelope, and the envelope pushing back!)&lt;/p&gt;&lt;p&gt;Meanwhile ... the YUI release notes are helpful but high-level. That's not a bad thing, but if you are working closely with the library, and perhaps building your own widgets on top of YUI's, then it can also be helpful to have a line-by-line change log. Towards that end, I've checked in the last two YUI releases to the &lt;a href="http://www.geocities.com/planetyazaar/"&gt;Yazaar project&lt;/a&gt;. Having the releases under SVN means that we can obtain DIFFs between versions, and review the line by line changes. To keep the YUI archive out of the way, I tucked it under the &lt;a href="http://yazaar.googlecode.com/svn/branches/yui/build/"&gt;branches&lt;/a&gt; folder.  (Gotta love Subversion!)&lt;/p&gt;&lt;p&gt;Of course, I'll be resolving my DataTable glitch today, and looking to see if &lt;a href="http://yuiblog.com/blog/2007/03/"&gt;Jenny Han Donnelly and company&lt;/a&gt; slipped in any new goodies.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-5291739567111126247?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/5291739567111126247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=5291739567111126247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5291739567111126247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5291739567111126247'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/yui-version-2.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-2968149674195652342</id><published>2007-04-18T06:00:00.000-04:00</published><updated>2008-12-13T14:27:42.669-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;ApacheCon US 2007 CFP Submissions&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I submitted my &lt;a href="http://www.us.apachecon.com/"&gt;ApacheCon 2007 US&lt;/a&gt; proposals in this morning. I often submit multiple proposals, but I've never had more than one accepted at a time.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Migrating to Ajax&lt;/em&gt; - Leverage your hard-earned web development experience and learn how to migrate old-school web applications to Ajax and RPC. This full-day training session covers "Model 2" applications based on frameworks like Struts, as well as "Model 1" applications based on PHP or JSP. Prior Ajax experience is not required.&lt;/p&gt;&lt;p&gt;&lt;em&gt; Ajax Petstore Smackdown&lt;/em&gt; - Let's compare conventional implementations of Petstore using Struts or Tapestry with Web 2.0 implementions using Ajax and RPC. Which is better, faster, cheaper ... or just more fun to write!&lt;/p&gt;&lt;p&gt;&lt;em&gt;.NET @ Apache.org&lt;/em&gt; - Like it or not, many open source developers are moving to the Microsoft .NET platform, and we're bringing our favorite tools with us! In this session, we look inside ASF projects that are creating software for .NET and Mono ... iBATIS, Logging, and Lucene ... and show how to create leading-edge ASP.NET applications with open source libraries.&lt;/p&gt;&lt;p&gt;Whether one of these are accepted or not, I expect I'll wander down to Atlanta this November. It's one of the few places where I can get a direct flight!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-2968149674195652342?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/2968149674195652342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=2968149674195652342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2968149674195652342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2968149674195652342'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/apachecon-us-2007-cfp-submissions-i.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8007701765214414435</id><published>2007-04-17T06:00:00.001-04:00</published><updated>2008-12-13T14:24:59.875-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;Call for Papers Opens for ApacheCon US 2007&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;The CFP announcement was inadvertently delayed, so the deadline is unusually close this year. If you'd like to submit a proposal, et busy!&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The Call for Papers is now open for ApacheCon US, to be held November 12-16 at the Peachtree Westin, Atlanta. The conference will consist of two day of tutorials (November 12-13) and three days of regular conference sessions (November 14-16).&lt;/p&gt;&lt;p&gt;Please log in to the website at &lt;a ref="http://apachecon.com/html/login.html"&gt;http://apachecon.com/html/login.html&lt;/a&gt;&lt;br /&gt;to submit your proposal. Further details about fees and are available on the CFP form.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Topics appropriate for submission to this conference are manifold,&lt;br /&gt;and may include but are not restricted to:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ASF projects&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ASF-Incubated projects&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Scripting languages and dynamic content such as Java, Perl, Python,&lt;br /&gt;Ruby, XSL, and PHP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;New technologies and broader initiatives such as Web Services and&lt;br /&gt;Web 2.0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Security and e-commerce, performance tuning, load balancing, and&lt;br /&gt;high availability&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Business and community issues surrounding the ASF and Open Source&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The paper submission deadline is Monday, 28 April 2007, Midnight GMT.&lt;/p&gt;&lt;p&gt;Thanks, and we hope to hear from you, and to see you in Atlanta.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8007701765214414435?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8007701765214414435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8007701765214414435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8007701765214414435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8007701765214414435'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/call-for-papers-opens-for-apachecon-us.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8132963689906256100</id><published>2007-04-16T06:00:00.000-04:00</published><updated>2008-12-13T14:21:05.390-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;S2 Tip - If you are using JSPs, try to name the JSP folder after the namespace or Java package&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Unlike template systems like FreeMarker and Velocity, JavaServer Pages cannot be served from a JAR or loaded from the classpath. The next best thing is to name the JSP folder after the namespace or Java package for the corresponding Action class. &lt;/p&gt; &lt;p&gt; By creating correlations between the pages and the Actions through a shared set of naming conventions, we increase cohesion within the application. If wildcards are used, consistent, shared naming conventions can reduce the number action elements an application needs.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8132963689906256100?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8132963689906256100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8132963689906256100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8132963689906256100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8132963689906256100'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/s2-tip-if-you-are-using-jsps-try-to.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3896691628802936937</id><published>2007-04-15T06:00:00.000-04:00</published><updated>2008-12-13T14:17:48.156-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;S2 Tip - Use global result handlers for common results&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Often, actions will share a number of comn results. Rather than configure redundant result elements for each action, share common results through a global result handlers.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;struts&gt;&lt;br /&gt;&amp;lt;global-results&gt;&lt;br /&gt; &amp;lt;result name="error"&gt;&lt;br /&gt;   /common/Error.jsp&lt;br /&gt; &amp;lt;/result&gt;&lt;br /&gt; &amp;lt;result name="invalid.token"&gt;&lt;br /&gt;   /common/Error.jsp&lt;br /&gt;&lt;br /&gt; &amp;lt;result name="login" type="redirectAction"&gt;&lt;br /&gt;   Login_input&lt;br /&gt; &amp;lt;/result&gt;&lt;br /&gt;&amp;lt;/global-results&gt;&lt;br /&gt; &amp;lt;!-- ... --&gt;&lt;br /&gt;&amp;lt;/struts&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Using global result handlers ensures that common results will be handled consistently, while reducing redundant code. Global results increase coupling, but any action that needs to handle a result differently can provide a local handler.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3896691628802936937?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3896691628802936937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3896691628802936937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3896691628802936937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3896691628802936937'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/s2-tip-use-global-result-handlers-for.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6647185723658465970</id><published>2007-04-14T06:00:00.000-04:00</published><updated>2008-12-13T14:06:57.562-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;S2 Tip - Use Exception Handlers&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Since Action classes tend to access the same business layer, most Actions often need to catch the same set of exceptions. Rather than sprinkle Actions with  nearly identical try..catch blocks, configure an Exception handler to catch whatever exceptions an Action may throw.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;struts&gt;&lt;br /&gt;&amp;lt;global-results&gt;&lt;br /&gt;   &amp;lt;result name="error"&gt;/Error.jsp&amp;lt;/result&gt;&lt;br /&gt; &amp;lt;/global-results&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;global-exception-mappings&gt;&lt;br /&gt;   &amp;lt;exception-mapping&lt;br /&gt;     result="error"&lt;br /&gt;     exception="java.lang.Throwable"/&gt;&lt;br /&gt; &amp;lt;/global-exception-mappings&gt;&lt;br /&gt; &amp;lt;!-- ... --&gt;&lt;br /&gt;&amp;lt;/struts&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;       &lt;p&gt;&lt;br /&gt;         Exception handlers can be either global or local to an action&lt;br /&gt;         mapping.&lt;br /&gt;       &lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;struts&gt;&lt;br /&gt; &amp;lt;action name="Login"  class="actions.Login"&gt;&lt;br /&gt;   &amp;lt;!-- ... --&gt;&lt;br /&gt;   &amp;lt;result name="expired" type="chain"&gt;&lt;br /&gt;     ChangePassword&lt;br /&gt;   &amp;lt;/result&gt;&lt;br /&gt;   &amp;lt;exception-mapping&lt;br /&gt;     exception="dao.ExpiredPasswordException"&lt;br /&gt;     result="expired"/&gt;&lt;br /&gt; &amp;lt;/action&gt;&lt;br /&gt; &amp;lt;!-- ... --&gt;&lt;br /&gt;&amp;lt;/struts&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use of exception handlers separates concerns and reduces redundant   code. Each Action has fewer lines of code to maintain, and we know   that exceptions are being handled consistently. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6647185723658465970?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6647185723658465970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6647185723658465970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6647185723658465970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6647185723658465970'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/s2-tip-use-exception-handlers-since.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-5635501088201661122</id><published>2007-04-13T06:01:00.000-04:00</published><updated>2008-12-13T14:18:39.100-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Ready to Give Back? Help Sponsor ApacheCon!&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://www.eu.apachecon.com/sponsors/"&gt;Sponsorships for ApacheCon Europe 2007 are still available!&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The conference opens May 1 in Amsterdam, The Netherlands, so time is short, but if your organization might be able to help, please contact Delia Frees at delia@apachecon.com or on +1 707 765 0823. Various sponsorship levels and other custom strategies are available. Our willingness to work with people does extend to convention sponsorship!&lt;/p&gt;&lt;p&gt;ApacheCon Europe 2007 is the official conference of the Apache Software Foundation  (ASF). ApacheCon draws ASF Members, innovators,  programmers, developers, vendors, and users to experience the future of Open Source development. Meet, mingle, and exchange ideas with like-minded participants on groundbreaking technologies and emerging industry trends, through informal networking, peer discussions, birds-of-a-feather sessions, and entertaining social events.&lt;/p&gt;&lt;p&gt;In related news, the US conference will be held in Atlanta GA, November 12-16, 2007. For Atlanta, I'm hoping to snag one of the whole-day training sessions or maybe an "Ajax Smackdown" presention, and then do that meet and mingle thing :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-5635501088201661122?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/5635501088201661122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=5635501088201661122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5635501088201661122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5635501088201661122'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2008/12/ready-to-give-back-help-sponsor.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4887425989554584186</id><published>2007-04-13T06:00:00.000-04:00</published><updated>2008-12-13T08:18:12.027-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;S2 Tip - If you are using templates, bundle the templates with the Actions&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Unlike Java Server Pages, FreeMarker and Velocity templates can be served from a JAR or loaded from the classpath. Rather than store Actions and templates in separate parts of the file system, consider maintaining both in the same Java package. &lt;/p&gt; &lt;p&gt; By storing together interrelated members, we spend less time navigating the file system, and we also increase cohesion within the application. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4887425989554584186?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4887425989554584186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4887425989554584186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4887425989554584186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4887425989554584186'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/s2-tip-if-you-are-using-templates.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1093865727686250910</id><published>2007-04-12T06:00:00.004-04:00</published><updated>2008-12-13T08:16:06.267-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;S2 Tip - Maintain configuration files in a resource folder or Java package&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The default struts.xml file is loaded from the root of the classpath. In a web application, the WEB-INF/classes folder is loaded to the root of the classpath.&lt;/p&gt;&lt;p&gt;To avoid maintaining files directly under WEB-INF, create a resource folder that can be copied to WEB-INF/classes when the appliication is compiled. If subfolders are also copied, then the resource folder can mirror the Java package system. The Struts Showcase application uses this common approach.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;+ java&lt;br /&gt;+ receivables&lt;br /&gt;- Deposit.java&lt;br /&gt;- Menu.java&lt;br /&gt;+ payables&lt;br /&gt;- Menu.java&lt;br /&gt;+ resources&lt;br /&gt;- payables.xml&lt;br /&gt;- receivables.xml&lt;br /&gt;- struts.xml&lt;br /&gt;+ payables&lt;br /&gt;- Menu.properties&lt;br /&gt;+ receivables&lt;br /&gt;- Menu.properties&lt;br /&gt;+ webapp&lt;br /&gt;+ payables&lt;br /&gt;+ receivables&lt;br /&gt;- Deposit-error.jsp&lt;br /&gt;- Deposit-input.jsp&lt;br /&gt;+ WEB-INF&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Alternatively, maintain the configuration files alongside the Java packages, and have the build system copy resource files from the Java source root. The Struts Mailreader uses this alternative approach.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;+ java&lt;br /&gt;+ receivables&lt;br /&gt;- struts.xml&lt;br /&gt;- Deposit.java&lt;br /&gt;- Menu.java&lt;br /&gt;- Menu.properties&lt;br /&gt;+ payables&lt;br /&gt;- struts.xml&lt;br /&gt;- Menu.java&lt;br /&gt;- Menu.properties&lt;br /&gt;- struts.xml&lt;br /&gt;+ webapp&lt;br /&gt;+ receivables&lt;br /&gt;- Deposit-error.jsp&lt;br /&gt;- Deposit-input.jsp&lt;br /&gt;+ payables&lt;br /&gt;+ WEB-INF&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If FreeMarker templates are used in lieu of JSPs, then all the resources for a namespace can be kept in a single folder.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;+ java&lt;br /&gt;+ receivables&lt;br /&gt;- struts.xml&lt;br /&gt;- Deposit.java&lt;br /&gt;- Deposit-input.ftl&lt;br /&gt;- Deposit-error.ftl&lt;br /&gt;- Menu.java&lt;br /&gt;- Menu.properties&lt;br /&gt;+ payables&lt;br /&gt;- struts.xml&lt;br /&gt;- Menu.java&lt;br /&gt;- Menu.properties&lt;br /&gt;- struts.xml&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1093865727686250910?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1093865727686250910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1093865727686250910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1093865727686250910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1093865727686250910'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/s2-tip-maintain-configuration-files-in.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-2246580284782216637</id><published>2007-04-12T06:00:00.001-04:00</published><updated>2008-12-13T08:10:47.669-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;S2 Tip - Try to keep the Action classes for the namespace in a common Java package&lt;/p&gt;&lt;p&gt;&lt;em&gt;As part of the &lt;a href="http://code.google.com/p/sq1-struts2/"&gt;Struts 2 from Square One project&lt;/a&gt;, I've been reducing the Struts 2 tips to a manuscript. One Struts Tip a week isn't keeping up with the manuscript, so I'll be running two a day for the rest of the week.  &lt;/em&gt;&lt;/p&gt;&lt;p&gt;An element of Java style is to place types that are common used together into the same package. If namespaces are being used to organize an application, then the Actions within a namespace should be found in the same Java package.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-2246580284782216637?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/2246580284782216637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=2246580284782216637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2246580284782216637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2246580284782216637'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/s2-tip-try-to-keep-action-classes-for.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6275456647978980943</id><published>2007-04-11T06:00:00.000-04:00</published><updated>2008-12-13T08:08:40.353-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Unobstrusive JavaScript Validation with YUI&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.jc21.com/2007-02-05/yui-unobstrusive-javascript-validation/"&gt;A very cool approach to validation that plugs right into the YUI library.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I'm using this to provide validation to the &lt;a href="http://www.geocities.com/planetyazaar/examples/dataform/tutorial-tabview.html"&gt;DataForm Widget&lt;/a&gt;, which is a stepping stone toward the &lt;a href="http://jroller.com/page/TedHusted?entry=flev_01"&gt;FLEV Widget&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Meanwhile, on the Java front:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://apache.org/index.html#sun_jck_letter"&gt;The ASF's Open Letter to Sun regarding the Harmony Java Compatibility Kit&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6275456647978980943?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6275456647978980943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6275456647978980943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6275456647978980943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6275456647978980943'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/unobstrusive-javascript-validation-with.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-891445664572247772</id><published>2007-04-10T06:00:00.000-04:00</published><updated>2008-12-13T08:06:39.441-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Fortifying Ajax&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Last month, Fortify Software posted a &lt;a href="http://www.fortifysoftware.com/servlet/downloads/public/JavaScript_Hijacking.pdf"&gt;white paper&lt;/a&gt; describing a security exploit dubbed JavaScript Hijacking. Being a slow news month, a number of online journals trotted out "the end is near" headlines.&lt;/p&gt;&lt;p&gt;Of course, Ajax development groups have been quick to post responses to the "advisory". Despite the hyperbole, engines like Dojo, GWT, and YUI are not "vulnerable". Certain applications using Ajax engines may fit a "vulnerability profile", and if so, there are simple and concrete steps that developers can take.&lt;/p&gt;&lt;p&gt;If your Ajax application exposes sensitive data via raw JSON, do this:&lt;br /&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Enclose JSON responses in JavaScript comment characters, and&lt;/li&gt; &lt;li&gt;Strip the comments before parsing the response&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Click. Done.&lt;/p&gt;&lt;p&gt;Like many security issues, the "vulnerability" is mainly a developer education issue.&lt;/p&gt;&lt;p&gt;The Dojo Toolkit is providing patches in version 0.4.3 "to inform developers of the potential risks their server-side components may be exposing them to and making it even easier to do the right thing on the client side".&lt;/p&gt;&lt;p&gt;The Yahoo! User Interface (YUI) Library is now adding a specific header to each request. The server side code looks for the header and refuses to service the request if the header is absent or not valid.&lt;/p&gt;&lt;p&gt;For more about security Ajax applications, see&lt;br /&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dojotoolkit.org/node/619"&gt;A Note on "JavaScript Hijacking&lt;/a&gt;" (Dojo)&lt;/li&gt; &lt;li&gt;&lt;a href="http://tech.groups.yahoo.com/group/ydn-javascript/message/11723"&gt;YUI Security&lt;/a&gt;" and &lt;a href="http://developer.yahoo.com/security/"&gt;Yahoo! Developer Network - Security Best Practices&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://groups.google.com/group/Google-Web-Toolkit/web/security-for-gwt-applications"&gt;Security for GWT Applications&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Since many developers were not aware of this exploit, it is a Good Thing that a White Hat brought it to our attention before the Black Hats did. Though, I hope the next White Hat takes the high road and alerts the development group first. That way, we can have a response out the day the alert is posted, rather than a week or two later.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;But, of course, if you happen to be a security consultant, a blindside brouhaha is not bad for business!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-891445664572247772?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/891445664572247772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=891445664572247772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/891445664572247772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/891445664572247772'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/fortifying-ajax-last-month-fortify.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3768230209713492704</id><published>2007-04-09T06:00:00.000-04:00</published><updated>2008-12-13T08:03:39.345-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Tour de Blog - WordPress&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This week's stop on the Tour de Blog is &lt;a href="http://wordpress.com/"&gt;WordPress.com&lt;/a&gt;, a free blogging service that also offers "completely" optional paid upgrades.&lt;/p&gt;&lt;p&gt;Setting up a blog on WordPress was easily enough, but there doesn't seem to be a way to edit the theme directly. There is a CSS editor, and an impressive set of Sidebar Widgets, but no obvious capability for rolling your own. There is a Custom CSS upgrade, but that's style code only no HTML or JavaScript.&lt;/p&gt;&lt;p&gt;WordPress offers a rich editor and maintains the code in HTML. My initial first impressive is "pretty and featurefull, but sluggish".&lt;/p&gt;&lt;p&gt;At the end of the series, I'll provide a roundup with more indepth remarks, but I'd like to give several systems a try before comment on more than the initial impression.&lt;/p&gt;&lt;p&gt;To access the blog system of the week, follow the &lt;a href="http://husted.com/ted/blog/index.html"&gt;http://husted.com/ted/blog/index.html&lt;/a&gt; link. Feel free to re-up for the feed, so as to give each system a fair test. Of course, if anyone has a preference or other feedback, feel free to comment.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3768230209713492704?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3768230209713492704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3768230209713492704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3768230209713492704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3768230209713492704'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/tour-de-blog-wordpress-this-weeks-stop.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4082780263459253975</id><published>2007-04-07T06:01:00.000-04:00</published><updated>2008-12-13T08:01:05.989-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Getting Born Again at Apache&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;When individuals or communities propose a project to the ASF incubator,  it's not uncommon to see reasons like "recognition" and "exposure to a wider community". &lt;/p&gt;&lt;p&gt;While these are common reasons, they are not particularly good reasons.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sure, the software created by many ASF projects is widely used. But, just as many, or more, are relatively unknown. ASF membership is not a ticket to ride. You still have to do the work. &lt;/p&gt;&lt;p&gt;The best reason for joining the ASF is because the development community supports the foundation's mission. &lt;/p&gt;&lt;p&gt;Once upon a time, the NCSA web server lost its only developer. NCSA was slow to replace the developer, and the project stagnated. Many of the people using the web server needed to make changes in order to improve stability and scalability. People were posting and discussing patches on the mailing list, but there was no one available to make changes. &lt;/p&gt;&lt;p&gt;Finally, some of the mailing list subscribers banded together, setup their own version of the code, and started to apply their own patches. Not wanting to repeat history, the group organized itself in away that would avoid dependencies on a single developer or a single company.&lt;/p&gt;&lt;p&gt;Over time, the group evolved the notion of the Apache Way, which we now like to call ASF culture. We strongly believe that a codebase belongs to the individuals who create and maintain it, and that a codebase should be a collaboration between individuals. When we put these two ideas together, we come up with the term "meritocracy", to describe an organization that is run by the people who do the actual work. &lt;/p&gt;&lt;p&gt;The ASF culture contrasts the model of the benign dictator described in Raymond's The Cathedral and Bazaar. It is also very different that the Linux hierarchy. It's a model that says any number of people can participate in a project, so long as everyone involved is prepared to work well with others ... especially when we disagree.&lt;/p&gt;&lt;p&gt;In a word, our mission is collaboration. &lt;/p&gt;&lt;p&gt;In practice, we fulfill that mission by fostering software development communities. Everything that goes into that, the Apache License, the legal shield, the distribution policies, all speak to the fundamental mission of enabling collaboration. &lt;/p&gt;&lt;p&gt;As to ASF rules, after six years, I've been able to identify &lt;a href="http://jroller.com/page/TedHusted?entry=apache_rules_002"&gt;eleven&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;It's true that working with others is often more work than going it alone. When the kids were young, my wife I would joke that the household chores take longer when the children help. But, nowadays, lo and behold, sometimes, the teens even do their own laundry!&lt;/p&gt;&lt;p&gt;It's hard. But, it's entirely worth it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4082780263459253975?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4082780263459253975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4082780263459253975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4082780263459253975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4082780263459253975'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/getting-born-again-at-apache-when.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3800531698782459049</id><published>2007-04-07T06:00:00.000-04:00</published><updated>2008-12-13T03:52:15.210-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Ajax Smackdown: Dojo versus YUI!&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Note: I was going to blob about the FLEV widget today, but I thought I should mention the smackdown presentation first, since it's on Tuesday. I'll follow up on that with the slides and a written article. In the meantime, &lt;a href="http://www.geocities.com/planetyazaar/examples/dataform/tutorial-tabview.html"&gt;check out the FLEV test page&lt;/a&gt;!&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Here's a description of a presentation scheduled for Tuesday, April 10, here in Rochester NY:&lt;/p&gt;&lt;p&gt;Since Jesse James Garrett coined the term Ajax in February 2005, the development landscape has exploded with Ajax frameworks, toolkits, and libraries. Although there are literally hundreds of libraries available today, two of the top contenders are the Dojo JavaScript Toolkit and the Yahoo! User Interface (YUI) Library.&lt;/p&gt;&lt;p&gt;On a recent Ajax spike, my team created the same example application in both Dojo and YUI.  Let's compare the implementations, and see how the underlying Ajax products differ.  Both Dojo and YUI are excellent products in their own way. But, which is the best fit for you, your application, and your organization?&lt;/p&gt;&lt;p&gt;Bio: Ted Husted is a software engineer and team mentor. His specialty is building agile web applications with open source products like Yahoo! User Interface Library, Struts, Spring, iBATIS, and MySQL, for either Java or Microsoft .NET, and helping others do the same.&lt;/p&gt;&lt;p&gt;Ted is a member of the Apache Software Foundation, an active member of the Apache Struts and Apache iBATIS projects, and co-founder of the Jakarta Commons. His books include JUnit in Action, Struts in Action, and Professional JSP Site Design. Ted has consulted with teams throughout the United States, including CitiGroup, Nationwide Insurance, and Pepsi Bottling Group. He is currently working with the Oklahoma State Department of Environmental Services to improve their permitting system.&lt;/p&gt;&lt;p&gt;* Meetings start at 6:00 pm and end around 8:00 pm&lt;br /&gt;&amp;amp; Meetings are held on the Third floor of the Golisano building, at RIT, room 70-3000 - CS conference room.&lt;br /&gt;* Directions to RIT can be found at [url=http://www.rjug.org]www.rjug.org[/url]&lt;br /&gt;* Members of RJUG are now entitled to discounts on O'Reilly books. Details will be available at the meeting.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3800531698782459049?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3800531698782459049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3800531698782459049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3800531698782459049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3800531698782459049'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/ajax-smackdown-dojo-versus-yui-note-i.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-646333128295683392</id><published>2007-04-06T06:00:00.001-04:00</published><updated>2008-12-13T03:47:55.662-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;S2 Tip - Within a namespace, reuse names for common concepts&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In practice, most applications are composed of a small number of   workflows that repeat within the application. When configuration   elements in different namespaces serve the same role, use the same   identifier for each element. If each namespace includes a "Menu" or   a "Help" action, use those same names with each namespace. &lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;struts&gt;&lt;br /&gt;&amp;lt;package name="receivables" namespace="/receivables"&gt;&lt;br /&gt;&amp;lt;action name="Menu" class="receivables.Menu" &gt;&lt;br /&gt; &amp;lt;result&gt;/receivables/Menu.jsp&amp;lt;/result&gt;&lt;br /&gt;&amp;lt;/action&gt;&lt;br /&gt;&amp;lt;!-- ... --&gt;&lt;br /&gt;&amp;lt;/package&gt;&lt;br /&gt;&amp;lt;package name="payables" namespace="/payables"&gt;&lt;br /&gt;&amp;lt;action name="Menu" class="payables.Menu" &gt;&lt;br /&gt; &amp;lt;result&gt;/payables/Menu.jsp&amp;lt;/result&gt;&lt;br /&gt;&amp;lt;/action&gt;&lt;br /&gt;&amp;lt;!-- ... --&gt;&lt;br /&gt;&amp;lt;/package&gt;&lt;br /&gt;&amp;lt;/struts&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Since the namespace feature avoids collisions between element names, we can increase cohesion within the application by using a consistent naming pattern.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-646333128295683392?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/646333128295683392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=646333128295683392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/646333128295683392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/646333128295683392'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/s2-tip-within-namespace-reuse-names-for.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1986472733117727324</id><published>2007-04-05T06:00:00.000-04:00</published><updated>2008-12-13T03:35:19.196-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Can you spell FLEV?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The most common workflow in any business application I've every written or used is Find / List / Edit / View -- or "FLEV". &lt;/p&gt;&lt;p&gt;At work, our last two point applications used this workflow over and over again, and the third will be no different. Often we start with Finding and Listing one entity, which is then used to Find and List related entities, which have related entities of their own to List and Edit. And, of course, we also need to Edit and View any of these entities along the way. &lt;/p&gt;&lt;p&gt;For example in a mail reader, the software starts by finding the new posts for us and presenting a list. We then view the thread, and maybe call an editor to post another article. When posting, we might want to find and list entries from our address book, and either select or likely suspect, or view his or her details, and maybe make some changes. &lt;/p&gt;&lt;p&gt;So on and so forth. &lt;/p&gt;&lt;p&gt;One would think that a FLEV widget would be standard fare in any widget library. But, strangely not. Looking about, I find several types of tables and grids, many with inline editing and filtering. But, in real life, inline editing and filtering via a grid isn't enough. We do need to rotate the axis and present a single entry on a form, often including fields not expressed on the grid. &lt;/p&gt;&lt;p&gt;Recently, I've been working with spanking-new DataTable from the Yahoo! User Interface (YUI) Library. Under the hood, DataTable use a RecordSet to represent the raw set of entries, and a ColumnSet to describe the schema for an entry (data type, editor, formatter, short label, long label). &lt;/p&gt;&lt;p&gt;All that's needed is a companion widget that can use the same Recordet and ColumnSet to present and edit one entry at a time. &lt;/p&gt;&lt;p&gt;Essentially, we're talking about a widget can present the same data in four different ways. To get started, I created an issue ticket that described the widget in terms of these four views. &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;A FLEV widget would allow us to define a columnset and datasource once and use it to generate four presentations. &lt;/p&gt;&lt;p&gt;Finder - Columnset in vertical layout as a form with multifield dataentry and submit. Submit does not modify state. (Matching entries are presented through a Lister.) Some fields may be selectors with change events that update other selectors. Other fields may be calendars or sliders.&lt;/p&gt;&lt;p&gt;Lister - Columnset in horizontal layout as a grid with double-click single field editing. Command events to edit, view, delete, or add may be associated with selected row. Paging through rows is supported.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Editor - Columnset in vertical layout as a read-only panel. Command events may be available, such as save, save and add another, delete, or cancel.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Viewer - Columnset in vertical layout as a read-only panel. Command events may be available, such as edit, copy, delete, print, add, or cancel.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I got a good start on FLEV this week, and we are about ready to drop it into our application. Of course, the widget will be available as open source under the BSD license as the first installment of the &lt;a href="http://jroller.com/page/TedHusted?entry=cathedral"&gt;Yazaar project&lt;/a&gt;. Tomorrow is Struts 2 tip day, but I'll be blogging more about FLEV over the weekend, including how it uses the &lt;a href="http://jroller.com/page/TedHusted?entry=yui_logreader"&gt;YUI LogReader&lt;/a&gt; as a development tool. Stay turned!&lt;/p&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/5208774-1986472733117727324?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1986472733117727324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1986472733117727324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1986472733117727324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1986472733117727324'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/can-you-spell-flev-most-common-workflow.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3924112337361754748</id><published>2007-04-04T06:00:00.001-04:00</published><updated>2008-12-13T03:05:05.179-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Google Code Successively Refines&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/hosting/%22"&gt;Google Code&lt;/a&gt; doesn't seem to have release per se, or even announce when new features are added. Day by day, it just gets better and better.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Not long ago, the ninjas added &lt;a href="http://jroller.com/page/TedHusted?entry=diff%5DSubversion" change="" logs=""&gt;&lt;/a&gt; to the automatic alerts. Yesterday, I was reviewing some issues and noticed that we can now edit all the issue details. Not long ago, the details were immutable. Now I can fix the issues inadvertently named "Enter one line summary".&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here's a run down of some other changes that I've noticed. Some of these may be older than others.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;We can now feature (or deprecate) wiki pages and downloads&lt;br /&gt;&lt;/li&gt;&lt;li&gt;We can mark an issue "notify me of issue changes".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;We can edit issue details.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There are now search filters for "My Issues", "My Starred Issues", and "Issues to Verify", along with "All Issues" and "Open Issues"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Advanced issues search offers a "without the words" option, along with narrowing the search to labels, statuses, reporters, owners, and such.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The number of people who have starred an issue is tracked and reported (as an indication that they care).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;One search filter that is missing is "Fixed" issues. The workaround for that is to enter the word "Fixed" into an all issues search. Ditto for "WontFix". &lt;/p&gt;&lt;p&gt;Of course, there is still miles to go. Right now, the four features that I miss most on Google Code are&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/support/issues/detail?id=94"&gt;JIRA/SVN style integration to support issue-driven-development&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/support/issues/detail?id=57"&gt;Allow direct linking to issues from the wiki&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/support/issues/detail?id=71"&gt;ViewVC support&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/support/issues/detail?id=96"&gt;Email notifications on changes to project setup&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The "project setup notification" issue has been marked "Won't Fix", but hope springs eternal.&lt;br /&gt;&lt;br /&gt;But, even with these missing features, Google Code is still my favorite host, though admittedly because the tab interface makes everything so quick and easy to use.&lt;br /&gt;&lt;br /&gt;Now, if we could just wrap Confluence, JIRA, Jive Forums, and (of course) Subversion in the same sort of interface, and get someone to set up a free open source hosting service -- then we would really have &lt;a href="http://jroller.com/page/TedHusted?entry=prim"&gt;Team Best of Breed&lt;/a&gt;!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3924112337361754748?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3924112337361754748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3924112337361754748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3924112337361754748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3924112337361754748'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/google-code-doesnt-seem-to-have-release.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6967341222374991750</id><published>2007-04-03T06:00:00.000-04:00</published><updated>2008-12-13T02:44:07.000-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Log Me, Log YUI&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I've never been a logging enthusiast. Many of the frameworks I use put logging to good use, but it not something I've felt compelled to inject into my own applications. &lt;/p&gt;&lt;p&gt;Many coders use logging as a development aid. One of my earliest Turbo Pascal programs wrote a character to the menu bar as a "tell". As the application moved through a workflow, the tell would change. If it hung up, I knew where to start looking. It started as a development aid, but I left it in the production code because, well, it looked cool!&lt;/p&gt;&lt;p&gt;For most developers, our desire to log takes seed with a quick write to standard out, and blossoms as world-class products like Log4J, Log4Net, Log4PHP, and the other flowers in the &lt;a href="http://logging.apache.org/"&gt;Apache Logging&lt;/a&gt; bouquet.&lt;/p&gt;&lt;p&gt;Rather use loggers as a development aid, these days I tend to set a lot of breakpoints as I develop. I like to follow brother Steve McConnell's advice from &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0735619670/husteddotcom-20"&gt;Code Complete&lt;/a&gt;. Every time I write a new swatch of code, first, I set a breakpoint and watch it run. &lt;/p&gt;&lt;p&gt;Unsurprisingly, Joe Hewitt's brilliant &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;FireBug plugin&lt;/a&gt; is one of my new best friends these days. Running a close second is the Yahoo! User Interface (YUI) Library's &lt;a href="http://developer.yahoo.com/yui/logger/"&gt;Logger&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Like other implementations, the YUI Logger works as a singleton, so it's very easy to write a logging message from anywhere in the application.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;// Assigns default category "info" and default source "global"&lt;br /&gt;YAHOO.log("My log message"); &lt;/code&gt;&lt;/pre&gt;As implied by the comment, we can add categories and source parameters to the method call, which are also standard fare for logging systems. &lt;p&gt;&lt;/p&gt;&lt;p&gt;The trick with JavaScript logging is viewing the messages. Most of the Apache Logging bunch rely on logging to console or to a shared file for the application. Some browsers do support a JavaScript console window, but it's not a standard feature. For JavaScript, we need to shift the paradigm. &lt;/p&gt;&lt;p&gt;But it's not such a big shift. Since YUI is a widget library, it would make sense to express the Logger Control (or LogReader) as a widget. To view the messages as they are logged, just add the LogReader widget to an application, again with one whole line of code.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var myLogReader = new YAHOO.widget.LogReader(); &lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;By default, the LogReader widget plants itself in the top right corner of the browser window. If that arrangement doesn't work for you, the widget can also be attached to a div or dragged around the screen. If the window box still feels cluttered, there a builtin "Collapse" button. To be even more unobtrusive, you can add your own button to show or hide the widget. &lt;p&gt;&lt;/p&gt;&lt;p&gt;An especially good use of logging in a JavaScript application is to document when events fire. Widgets raise primitive events like "click". A well-designed application will handle those events and raise an "idiomatic" event of its own. We can rely on the widget to raise its event, the interesting bit is when we raise our own. &lt;/p&gt;&lt;p&gt;Case in point, we're working on a DataForm widget that can share a RecordSet and ColumnSet with a YUI DataTable. The form widget raises "update" and "insert" events for the benefit of a client controller application. In early testing of the widget, we can't see those events happen, because they haven't been wired to a client yet. But, we can use a logger to view the events as they are raised.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;oSelf.fireEvent("updateEvent",context);&lt;br /&gt;oSelf.logRecordEvent("updateEvent", oRecord, oOldRecord); // debug&lt;/code&gt;&lt;/pre&gt;Where logRecordEvent is a helper method that expresses the oRecord and oOldRecord data in human-readable JSON. &lt;p&gt;&lt;/p&gt;&lt;p&gt;We could also set breakpoints to check that the events fire, and the first time around, we still do. But, the logging statements are also a rudimentary unit test. In fact, the next step might be to create Selenium tests that look for logging statements on our example pages.&lt;/p&gt;&lt;p&gt;The YUI library distribution includes *-debug version of all the modules that include this kind of logging statement. The production version has the logging statement extracted. (Leaving a few strange lines of code behind, like empty else statements.)&lt;/p&gt;&lt;p&gt;Of course, there would be a few ways to filter production code for logging statements. &lt;a href="http://tech.groups.yahoo.com/group/ydn-javascript/message/11598"&gt;I don't know what YUI does&lt;/a&gt;, but for my own projects, I might try an &lt;a href="http://jroller.com/page/TedHusted?entry=aptana"&gt;Aptana&lt;/a&gt; action to do the dirty work. &lt;/p&gt;&lt;p&gt;Though, since the LogReader can be flipped on and off, it's not hard to imagine leaving some statements embedded, for the sake of technical support. So, for now, we're marking the logging lines "// debug" in case we decide to leave some in later. &lt;/p&gt;&lt;p&gt;I may never love logging quite as much as Ceki, but the YUI LogReader is at least a friend with benefits!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6967341222374991750?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6967341222374991750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6967341222374991750' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6967341222374991750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6967341222374991750'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/log-me-log-yui-ive-never-been-logging.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-4558589395023121085</id><published>2007-04-02T06:00:00.000-04:00</published><updated>2008-12-13T02:39:53.414-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Tour de Blog&lt;/span&gt;&lt;/p&gt;&lt;p&gt;As much as I enjoy blogging through JRoller, I thought I'd spend the month of April taking other blogging systems for a spin. I'll let each trial run for a week, but to keep it sane, I'll continue to archive each blog to the &lt;a href="http://jroller.com/page/TedHusted"&gt;JRoller page&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;First in line is &lt;a href="http://www.simplephpblog.com/"&gt;Simple PHP Blog&lt;/a&gt;. This isn't a blogging site, like JRoller, Blogger, or 360. It's a PHP script that a can be installed on a conventional server for a single user. &lt;/p&gt;&lt;p&gt;Installing Simple PHP Blog is, well, simple. Upload the script, set the permissions, and run the index.php. With &lt;a href="http://filezilla.sourceforge.net/"&gt;FileZilla&lt;/a&gt;, it can all be done using drag, drop, and click. &lt;/p&gt;&lt;p&gt;Since SPB is intended for people with server access, there isn't an editing feature for the themes. But, if you were able to install SPB, it's not any harder to edit the file and drop it onto the server. In practice, it's no different than editing a Roller theme.&lt;/p&gt;&lt;p&gt;One nice feature is the sidebar text box widget. To get an "About Me" blurb into JRoller, I had to edit the theme. With SPB, I could just add a text box through the configuration menu that comes up in the sidebar. On the website, the developer is testing a new widget feature, to make it easier to add other customizations to the sidebar.&lt;/p&gt;&lt;p&gt;One nice thing for me is that SPB generates arbitrary permalinks IDs.  JRoller used a hash of the name, which induced me to use my own hash for the title, save the entry, and then change the title to be human-friendly. &lt;/p&gt;&lt;p&gt;SPB uses a BBS code markup for the entries and comments. Instead of using HTML tags like &amp;lt;a href=""&gt;&amp;lt;/a&gt;, we use pidgin tags like [url=][/url]. There's a wizard for building the tags, but once you've seen an example, they are just as easy to create by hand.&lt;/p&gt;&lt;p&gt;Eventually, I'll probably do a feature grid. For now, it seems like SPB has rounded up all the "usual suspect" features, at least in the context of a single-user blog installed on your own server. The next question will be whether my server is any more reliable than JRoller's :) &lt;/p&gt;&lt;p&gt;To access the blog system of the week, follow the &lt;a href="http://husted.com/ted/blog/index.html"&gt;http://husted.com/ted/blog/index.html&lt;/a&gt;. Feel free to re-up for the feed, so as to give each system a fair test. Of course, if anyone has a preference or other feedback, feel free to comment. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-4558589395023121085?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/4558589395023121085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=4558589395023121085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4558589395023121085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/4558589395023121085'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/tour-de-blog-as-much-as-i-enjoy.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3303430039326940883</id><published>2007-04-01T06:00:00.000-04:00</published><updated>2008-12-13T02:37:04.697-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;The Geek's Glossary (ASF edition)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Recently, we were been discussing some of the definitions published in &lt;a href="http://apache.org/foundation/glossary.html"&gt;Glossary of Apache-Related Terms&lt;/a&gt; on one of the mailing lists. Based on those discussions, here are some changes and additions that I've been considering.&lt;/p&gt;&lt;p&gt;ASF - Asynchronous Software Fanatics: A cult bent on world collaboration.&lt;/p&gt;&lt;p&gt;ASF Board of Directors - Nerds smoozing nerds (see Community).&lt;/p&gt;&lt;p&gt;ApacheCon - A sausage-fest with almost enough beer.&lt;/p&gt;&lt;p&gt;Bikeshed argument - Discussing "what color to paint a bike shed" is why ASF committers sometimes prefer forgiveness to permission. &lt;/p&gt;&lt;p&gt;Build - Bits tossed into a tarball (see Release).&lt;/p&gt;&lt;p&gt;Commit-Then-Review - See Review-Then-Commit.&lt;/p&gt;&lt;p&gt;Committer - A geek with way too much spare time.&lt;/p&gt;&lt;p&gt;Community - Geeks goosing geeks (see ASF Board).&lt;/p&gt;&lt;p&gt;Darwin - The two-faced icon of Evolution and Revolution.&lt;/p&gt;&lt;p&gt;Dog Food - We ate it, now it's your turn.&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Minnie_Pearl"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/thumb/f/f8/Minniepearl.jpg/180px-Minniepearl.jpg" alt="Minnie Pearl wearing her PMC hat" align="right" border="0" height="216" width="180" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Emeritus - A committer with a life. &lt;/p&gt;&lt;p&gt;Evolution - Darwin meets the tyranny of the installed base.&lt;/p&gt;&lt;p&gt;Freeloader - Someone who downloads and uses open source products but never contributes back by reporting an issue, submitting a patch, testing a beta, or helping another user on the mailing list. Even once.&lt;/p&gt;&lt;p&gt;Hat - Sybil meets Minnie Pearl (see photo: "Minnie wearing her PMC hat").&lt;/p&gt;&lt;p&gt;Incubation - A process designed to frustrate projects into submission. &lt;/p&gt;&lt;p&gt;Irony - See Karma.&lt;/p&gt;&lt;p&gt;Joy - That rare feeling when software actually works! &lt;/p&gt;&lt;p&gt;Karma - By doing more, we let you do more, by granting you karma to do more. See Merit. &lt;/p&gt;&lt;p&gt;Lazy consensus - The best kind.&lt;/p&gt;&lt;p&gt;Merit - Working more, jabbering less, lurking not.&lt;/p&gt;&lt;p&gt;Podling - We are Borg. You are borgling.&lt;/p&gt;&lt;p&gt;PMC Chair - Every project needs a tattletell.&lt;/p&gt;&lt;p&gt;Project Management Committee (PMC) - War is peace. Freedom is slavery. Projects are managed. &lt;/p&gt;&lt;p&gt;Release - A tarball that stuck to the wall (see Build).&lt;/p&gt;&lt;p&gt;Review-Then-Commit - See Commit-Then-Review.&lt;/p&gt;&lt;p&gt;Status File - A hit-and-miss project journal that, when kept, can only be found in the bottom of a locked filing cabinet stuck in a disused lavatory with a sign on the door saying 'Beware of the Mentor'.&lt;/p&gt;&lt;p&gt;Subversion - Never having to mean you're sorry.&lt;/p&gt;&lt;p&gt;Revolution - Stick a fork in it and see who bites.&lt;/p&gt;&lt;p&gt;Veto - Severe change reduction.&lt;/p&gt;&lt;p&gt;+1 - A negative veto.&lt;/p&gt;&lt;p&gt;PS: Be sure to enjoy &lt;a href="http://en.wikipedia.org/wiki/April_Fools%27_Day"&gt;this special day&lt;/a&gt;!&lt;/p&gt;&lt;p&gt;(&lt;a href="http://www.alcyone.com/max/lit/devils/"&gt;Apologies to Ambrose Bierce&lt;/a&gt;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3303430039326940883?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3303430039326940883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3303430039326940883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3303430039326940883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3303430039326940883'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/04/geeks-glossary-asf-edition-recently-we.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-2296040819991569706</id><published>2007-03-31T06:00:00.002-04:00</published><updated>2008-12-13T02:14:28.265-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Aptana: Another brilliant IDEA&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I've always been a die-hard IDEA fan. Jetbrains says "Develop with pleasure," and they mean it! Even with Eclipse and NetBeans nipping at their heels, Jetbrains has managed to stay ahead of the pack. &lt;/p&gt;&lt;p&gt;But, for Ajax applications, &lt;a href="http://www.aptana.com/"&gt;Aptana&lt;/a&gt; is poised to give Jetbrains a run for its money. &lt;/p&gt;&lt;p&gt;Being an Eclipse application, Aptana already has a huge headstart. The JavaScript editor is augmented with all the features you would expect: code assist on CSS, HTML, and JavaScript, FTP support, and a JavaScript debugger to troubleshoot your code. The Aptana IDE also includes features you might not expect, like being extensible via macros ad actions writtnen in (yes!) JavaScript. There's also a very cool outline perspective (which I wished I had found sooner!). (Hint: Dock the Project and Outline perspectives with FastView.) &lt;/p&gt;&lt;p&gt;For a quick tour of key features, scope the &lt;a href="http://aptana.com/screenshots.php"&gt;screenshots&lt;/a&gt; page. &lt;/p&gt;&lt;p&gt;Out of the box, Aptana is all about Ajax. For example, the project wizard will setup the Ajax libraries of your choice (or at least any of the top nine: AFLAX, Dojo, jQuery, MochKit, Prototype, Rico, Scriptaculous, YUI, and/or yui-ext). Being a good open source citizen, Aptana uses other OS products under the covers, including JS Lint and FireBug. A special bonus is that the &lt;a href="http://aptana.com/documentation.php"&gt;project documentation&lt;/a&gt; includes a most excellent CSS/HTML/JavaScript reference useful to anyone developing AJax with any editor on any platform.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Quirks? There are a few. After three days, the debugging still isn't working for me. Just to be a tease, it did work once, and it worked brilliantly, but then stopped as suddenly as it started. With two monitors, Aptana and standalone FireBug work well together. (But standalone FireBug works well with anything!)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There is also an "Open Declaration" feature that works only sometimes for me too. But Aptana is young, and open source, and these things are sure to sort themselves out.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;For straight-up Java/Ajax development, I expect that IDEA still has the edge. But, for anything else, IDEA's predilection for Java shows, and you're developing against the grain. &lt;/p&gt;&lt;p&gt;Although Aptana is based on Eclipse, and uses an embeded Jetty server for native debugging, it shows no favoritism to Java. Developers working in Ruby, PHP, C#, et cetera, are made to feel right at home. &lt;/p&gt;&lt;p&gt;In fact, a Ruby RAD environment seems to be an Aptana endgame. The RadRails IDE is being built over Aptana. Once Rails.net is ready for primetime, I expect that RadRails is going to draw me towards the light :)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I've only been using Aptana for a week. I haven't spent much time in the forum, and I'm still not sure of the project's motivation. The site mentions that Aptana is funded by venture capital, but I don't know what revenue stream is projected. I expect they could turn around and sell it, which is fine with me. People pay me, and I don't mind paying other people. Or, it may all be to promote a consulting business that will put the IDEs to good use. I really don't know yet.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;But for the code I'm developing now, it's saving me time over using Visual Studio with Resharper. The code/test cycle is very quick, and I don't have to worry about running JS Lint. Aptana handles those types of syntax errors as we edit. I filed a ticket about improving the Resharper JavaScript support, but, evidentially, that's not going to happen any time soon. Resharper is focussed on C# 3.0 support, and JavaScript is on the back burner.&lt;/p&gt;&lt;p&gt;A key Aptana edge is that it's based on Eclipse, opening the door to other Eclipse plugins. There is a &lt;a href="http://www.improve-technologies.com/alpha/esharp/#features"&gt;C# plugin for Eclipse&lt;/a&gt;, and between iterations, I'll have to give it a try. If the C# plugin works well enough, or we can make it so, we might be able to sideline Visual Studio all together. &lt;/p&gt;&lt;p&gt;I enjoy using VS with Resharper, but we often code against the Visual Studio grain. If Resharper is not going to improve JavaScript editing, I might finally be lured away from Jetbrains. &lt;/p&gt;&lt;p&gt;In the end, I think Aptana might just become the "Ajax IDE for the rest of us". :&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-2296040819991569706?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/2296040819991569706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=2296040819991569706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2296040819991569706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/2296040819991569706'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/aptana-another-brilliant-idea-ive.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-7040366714797575122</id><published>2007-03-30T06:00:00.000-04:00</published><updated>2008-12-13T02:09:26.745-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;S2 Tip - Place each namespace into its own Struts configuration file&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The framework configuration supports an include element. When using packages and namespaces to organize an application, each namespace can be placed into its own configuration file, and then included by the default struts.xml configuration file.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;struts&gt;&lt;br /&gt;  &amp;lt;constant name="struts.devMode" value="false" /&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;include file="struts-chat.xml" /&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;include file="struts-hangman.xml" /&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- ... -&gt;&lt;br /&gt;&amp;lt;/struts&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;Maintaining a separate configuration file for each module reduces coupling and increases cohesion. If different members of a team are workinmg on different segments of the application (or "module"), each group can maintain the configuration file relating to their segment.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Note that configuration packages can extend one another.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;struts&gt;&lt;br /&gt;  &amp;lt;package name="mailreader-support" namespace="/" extends="mailreader-default"&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- ... --&gt;&lt;br /&gt;&amp;lt;struts&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Common configuration settings can be placed into a default file and shared between packages. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-7040366714797575122?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/7040366714797575122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=7040366714797575122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7040366714797575122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/7040366714797575122'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/s2-tip-place-each-namespace-into-its.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3500239302074243899</id><published>2007-03-29T06:00:00.000-04:00</published><updated>2008-12-13T02:06:07.006-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Hacking the Cathedral&lt;/span&gt;&lt;/p&gt;&lt;p&gt;A key reason we were able to use the &lt;a href="http://developer.yahoo.com/yui/"&gt;Yahoo User Interface (YUI) Library&lt;/a&gt; is that the latest release includes a DataTable widget. Our application design uses lots of grids. Of course, there are grids from other toolkits and libraries that we could have used. But, honestly, we would have standardized on that toolkit instead.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Of course, the &lt;a href="http://developer.yahoo.com/yui/datatable/"&gt;YUI DataTable&lt;/a&gt; is new and beta and not without its shortcomings. But, every time I found a flaw, I also cobbled a patch (and filed a &lt;a href="http://www.blogger.com/post-create.g?blogID=5208774" net="" tracker="" atid="836476&amp;amp;group_id=165715&amp;amp;func=browse&amp;amp;by_submitter=thusted&amp;quot;"&gt;ticket&lt;/a&gt;).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Looking at our design, what we do over and over again is Find, List, Edit, and View. The entity we want to Find/List/Edit/View changes, but the core workflow holds.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;We did the last application module in ASP.NET. Most workflows were represented as pages that exposed one or more composite controls. Much of the page logic involved deciding which controls needed to be exposed.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;For the YUI module, I'd like to have a single "chimera" widget that can reveal itself four or five different ways. As a Finder (QBE Dialog), as a Lister (DataGrid), as an Editor (Data Entry Form), as a Lister (View Only Panel), and as both a Lister and Finder in the same view. Behind the scense, the DataTable (Lister) is powered by &lt;a href="http://developer.yahoo.com/yui/docs/ColumnSet.html"&gt;ColumnSet&lt;/a&gt; and &lt;a href="http://developer.yahoo.com/yui/docs/RecordSet.html"&gt;RecordSet&lt;/a&gt; objects, which could also power a Finder, Editor, and Viewer.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;For now, I'm referring to this as a &lt;a href="http://code.google.com/p/anvil/issues/detail?id=22"&gt;FLEV Widget&lt;/a&gt;, and I've started coding it through the Anvil site.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Meanwhile, another earnest YUI user &lt;a href="http://tech.groups.yahoo.com/group/ydn-javascript/message/11247"&gt;posted a DataTable subclass&lt;/a&gt; that adds filtering on a column and hiding columns. Nice work, and a fine demonstrate of how easy it is to extend YUI widgets.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Since YUI doesn't accept contributions from the user community, I wonder if we should setup a community site on SourceForge or GoogleCode, where we could contribute and jointly maintain extensions like FLEV and RowFilterDataTable.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The idea would be that anyone with code to contribute would be welcome to join the site. Since widgets are granular, we could each retain our own copyrights to the original widgets, and just use the site as a one-stop shop for YUI extensions.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Of course, there is already a &lt;a href="http://www.yui-ext.com/deploy/yui-ext/docs/"&gt;YUI-Ext project&lt;/a&gt;, but that has evolved into a distinct library that supports both YUI and JQuery, and I expect other libraries one day. And YUI Ext was never a full-throttle open source project, it was always Jack Slocum's baby.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The Yahoo! team has built a cathedral. Perhaps it's time to open a companion bazaar -- a yazaar! :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3500239302074243899?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3500239302074243899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3500239302074243899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3500239302074243899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3500239302074243899'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/hacking-cathedral-key-reason-we-were.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6423216969761160312</id><published>2007-03-28T06:00:00.000-04:00</published><updated>2008-12-13T02:03:11.102-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;ASF Rules Redux&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;This is a revision to a prior blog, &lt;a href="http://jroller.com/page/TedHusted?entry=apache_rules"&gt;13 ASF Practices&lt;/a&gt;. Some elements have been condensed, and some new bits added ... and now there are 11.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;People often mention "Apache Rules". We don't actually have a rule book, but if we did, here's what I believe might be the top eleven practices.&lt;/p&gt;&lt;table border="1" cellpadding="8"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;0&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Individuals compose the ASF.&lt;br /&gt;Projects must be managed in a collaborative, meritocratic way, so that new volunteers are encouraged to join the project group, and so that the volunteers doing the work are the individuals who make the decisions.&lt;br /&gt;PMC members are encouraged to nominate qualified contributors as new committers.&lt;br /&gt;ASF Members are encouraged to nominate qualified committers as new members.&lt;br /&gt;Given sufficient time and sustained interest, the set of committers should equal the set of PMC members, and the set of PMC members should equal the set of ASF members.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;1&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Merit never expires.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;2&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;The mailing lists are a project's only venue for the conduct of business.&lt;br /&gt;All development discussions must occur on the project's public mailing lists, or be summarized to the lists, and the lists must be archived.&lt;br /&gt;Development support products, like version control systems, issue trackers, and wikis, should log changes to a public mailing list.&lt;br /&gt;Comments posted to a list through development support products are a normal component of development discussions.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;3&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;The project's private list may only be used to discuss pre-disclosure security problems, pre-agreement discussions with third parties that require confidentiality, nominees for project, project committee or Foundation membership, or personal conflicts among project personnel, and nothing else. Posts to a private list are considered confidential and must not be quoted on public lists without the permission of the author.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;4&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;A project's primary web site and mailing lists must be maintained on ASF hardware.&lt;br /&gt;Resources maintained elsewhere are not ASF resources, even if maintained by individuals who happen to be ASF committers.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;5&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Project source code and documentation must be donated to the ASF under a &lt;a href="http://apache.org/licenses/index.html#clas"&gt;Contributor's License Agreement&lt;/a&gt;.&lt;br /&gt;Donated source code and documentation must carry the ASF copyright and be placed under the Apache License.&lt;br /&gt;Code and documentation donated to the ASF must be maintained on ASF hardware.&lt;br /&gt;Obtaining a non-exclusive ASF copyright on all material in the ASF repository is encouraged.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;6&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;A PMC member can veto a product change with a technical or legal justification.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;7&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;A release must include the ASF source code being released, binaries are optional.&lt;br /&gt;A release vote must be on the actual bits that comprise the release, preferably already digitally signed by a release manager.&lt;br /&gt;An ASF release must be approved by at least three members of the PMC and by a majority of the members voting.&lt;br /&gt;A release cannot be vetoed.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;8&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Other libraries included with a distribution may be under a different license but must be redistributable under the Apache license.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;9&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;The PMC chair/Project VP must submit regular status reports to the ASF board.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;A&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://tinyurl.com/mw7t6"&gt;Author tags&lt;/a&gt; in source code are discouraged but permitted.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Of course, there are other customs of Apache culture, but I believe that most other ASF practices would stem from this initial set. And, as with all things ASF, YMMV! :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6423216969761160312?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6423216969761160312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6423216969761160312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6423216969761160312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6423216969761160312'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/asf-rules-redux-this-is-revision-to.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-3574916203070123700</id><published>2007-03-27T06:00:00.000-04:00</published><updated>2008-12-13T01:59:32.825-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;The Open Source Secret Sauce&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I have no idea why JIRA, Confluence, and Subversion are still separate products. (Well, being a working engineer I do have at least an idea ...)&lt;/p&gt;&lt;p&gt;In practice, most of us use JIRA, Confluence, and Subversion as if they were one product. (A rich man's &lt;a href="http://trac.edgewall.org/"&gt;Trac&lt;/a&gt;.) I'd like to be able to refer to using all three products together as "Convergence", but that would be confusing, since it sounds too much like a real product. There's the hollywood hybrid approach, but terms like "JirFlusion" or "ConVera" or "SuJiCo" seem distracting. Let's just go with a simple acronym, like JCS.&lt;/p&gt;&lt;p&gt;At work, we use JCS for everything. When we are ready to do something, anything, we open a &lt;a href="http://www.atlassian.com/software/jira/"&gt;JIRA&lt;/a&gt; ticket. If it's a coding task, the ticket will relate to a Use Case that we create in &lt;a href="http://www.atlassian.com/software/confluence/"&gt;Confluence&lt;/a&gt;, which will link back to the JIRA ticket. When we commit the bits to &lt;a href="http://www.atlassian.com/software/confluence/"&gt;Subversion&lt;/a&gt;, we reference the JIRA ticket, and the &lt;a href="http://confluence.atlassian.com/display/JIRAEXT/JIRA+Subversion+plugin"&gt;JIRA-Subverson plugin&lt;/a&gt; closes the loop. &lt;/p&gt;&lt;p&gt;In these days of "&lt;a href="http://www.jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt;" and "&lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/default.aspx"&gt;Team System&lt;/a&gt;", we like to think of JCS as "Team Best of Breed", especially when you toss JetBrains IDEA or Resharper into the mix.&lt;/p&gt;&lt;p&gt;But, issue tracking, document management, and version control aren't just for coders. Other workers in the enterprise been using it to draft grant proposals and evaluate accessibility compliance. These are products that any information worker can (and should) use. &lt;/p&gt;&lt;p&gt;At work, one of our more ambitious Confluence applications is the infrastructure documentation. I spent the last week of last year's contract dumping everything I knew about our infrastructure into Confluence. We ended up finding another contract for me after that, and another one after that, but at the time, I wanted to be sure the team had a solid reference. &lt;/p&gt;&lt;p&gt;Of course, a problem with putting software documentation into software is that you need software to use the software that tells you how to install the software. Happily, between the &lt;a href="http://confluence.atlassian.com/display/CONFEXT/AutoExport+for+Confluence"&gt;Confluence autoexport plugin&lt;/a&gt; and SpiderZilla, that's not a problem. The autoexport plugin renders the Confluence wiki as plain text, and the &lt;a href="https://addons.mozilla.org/firefox/1616/"&gt;FireFox SpiderZilla plugin&lt;/a&gt; sucks it down to a local machine. &lt;a href="http://husted.com/archive/WQD-INF/"&gt;Here's the result&lt;/a&gt;, no server required.&lt;/p&gt;&lt;p&gt;The fully-loaded "Team Best of Breed" doesn't stop at JCS. Clever shops will also want to install &lt;a href="http://viewvc.tigris.org/"&gt;ViewVC&lt;/a&gt;, so that prior Confluence revision logs and diffs are only a click away. ViewVC means adding Apache HTTPD to the mix, but it's worth the effort. (And HTTPD makes a good host for exported Confluence spaces!)&lt;/p&gt;&lt;p&gt;A developers mailing list with an archive is the final, but perhaps most important, team member. Each component of JCS can send change alerts to a list, to keep everyone in the loop with no extra effort. JCS doesn't include an actual mailing list, but Confluence can be used as an &lt;a href="http://www.blogger.com/post-create.g?blogID=5208774"&gt;archive&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Taken together, I like to think of these products as creating a PRIM architecture: Portal - Repository - Issue Tracker - Mailing List. Every successful open source project I know uses PRIM. Every closed source project I know, doesn't. (Well, except mine!) Many will use two or three of the four components, but most teams will wobble on the mailing list. In practice, an archived mailing list is essential. A list ties the other components together, creating a coherent communications system.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;It's truly beyond me why more product managers don't insist on an archived development mailing list. It's the best way to keep track of what everyone is doing. You can just sit back, watch the emails come in from JIRA, Confluence, and Subversion, and know exactly who is doing what and what they plan to do next.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;People wonder how open source projects manage to create high-quality products without managers or accountability. The answer: we're accountable to our infrastructure. &lt;/p&gt;&lt;p&gt;PRIM is the open source secret sauce.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-3574916203070123700?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/3574916203070123700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=3574916203070123700' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3574916203070123700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/3574916203070123700'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/open-source-secret-sauce-i-have-no-idea.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8756120507170365011</id><published>2007-03-26T06:00:00.000-04:00</published><updated>2008-12-13T01:56:32.182-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;MVC Convergence: Mr Action meet Ms ASP.NET&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Over the years, there's been a steady trend within Microsoft example applications. The trend has been away from what Java geeks calls Model 1 and toward Model 2 development. It's been a forced, dragged-by-the-hair trend. At every step, the architect seems to be looking for alternatives to MVC/Model 2, and every time, the alternative comes up short, and the next iteration is one step closr to Java-style MVC. &lt;/p&gt;&lt;p&gt;The trend is clear if you spend a day reviewing the various ASP.NET application that were developed for ASP.NET 1.x. The trend is even more evident in ASP.NET 2.X. The platforms now offers an actual business logic component that can also be used to separate the data access code from the rest of the application. The only problem is that the component is still embedded in the web application, and, as far as I can tell, these "business logic" components can't be tested outside of the web application. Though, it is most definitely another baby step in the right direction. &lt;/p&gt;&lt;p&gt;Rumor now has it that Microsoft is ready for another step toward MVC/Model 2. In his CodeBetter blog, Jeffrey Palmero outlines a new feature that Scott Guthrie is supposedly developing for the next generation of ASP.NET. &lt;/p&gt;&lt;p&gt;&lt;a href="http://codebetter.com/blogs/jeffrey.palermo/archive/2007/03/16/Big-News-_2D00_-MVC-framework-for-ASP.NET-in-the-works-_2D00_-level-300.aspx"&gt;According to the blog&lt;/a&gt;:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;hr /&gt;&lt;p&gt;&lt;br /&gt;A url might look like http://localhost/myApp/ShoppingCart.mvc/CheckOut where ShoppingCart is the Controller class and "CheckOut" is a method like:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;[Action]&lt;br /&gt;public void CheckOut(){&lt;br /&gt; //do so&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The MVC model can be used with regular control-based pages. The url determines the handler that's activated, so it can be mixed an matched. In fact, a Controller could dispatch a view that _uses_ some controls. i.e. Telerik controls could still be used without Telerik modifying them. From what I saw, no capabilities are taken away, just more options are added.&lt;/p&gt;&lt;p&gt;In this prototype, the controller loads the appropriate view by relative path to the .aspx. The view can be only markup - pure template, or it can take advantage of controls. This can work without postbacks, or you can use postbacks if you prefer.&lt;/p&gt;&lt;p&gt;The view has to inherit from PageView or if it needs properties from the controller (like the Model to display), it can inherit from PageView&lt;t&gt; where T is the type of the controller it depends on. Then the view can grab specific properties off of the controller.&lt;/t&gt;&lt;/p&gt;&lt;p&gt;I would recommend making "T" an interface so that the view doesn't bind directly to the controller type. I've been collaborating with Scott Guthrie to work out the kinks. There is still a lot of work to do. This is only in prototype form.&lt;/p&gt;&lt;hr /&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;Of course, Microsoft has been warming up to &lt;a href="http://msdn2.microsoft.com/en-us/library/ms998516.aspx"&gt;MVC and front controllers&lt;/a&gt; patterns for some time. This is not &lt;a href="http://msdn2.microsoft.com/en-us/library/aa478961.aspx"&gt;the first time we've heard that MVC or front controller will be in the "next" version of ASP.NET&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;But, not to worry. If Microsoft comes out with a MVC technology, we will do what we always do ... reinvent it as a JSR.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8756120507170365011?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8756120507170365011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8756120507170365011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8756120507170365011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8756120507170365011'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/mvc-convergence-mr-action-meet-ms-asp.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6456185881804268232</id><published>2007-03-25T06:00:00.000-04:00</published><updated>2008-12-13T01:53:29.915-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Simulating Action&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Since client-side JavaScript is event-driven, Ajax libraries follow suit. For many developers, Ajax is their first time around the event-driven maypole. &lt;/p&gt;&lt;p&gt;When event-driven controls for the first time, it's common for a noobe to attach some application-specific behavior to a control's onClick event. As the application grows more complex, we often want to invoke the same behavior without the help of the control. A common question then becomes "How can we send the control a change event, as if the user had himself clicked on the option?" As with many programming problems, the solution is to add a layer of abstraction. :) &lt;/p&gt;&lt;p&gt;Instead of attaching our behavior directly to primitive events, like onClick, we should create our own idiomatic events to describe what happens when the user selects the option. Selecting the option is a means to an end. If we create own custom event for that end, the select control change event can turn around and raise our event. Then, when our custom event needs to be raised from another point in the workflow, we can just go ahead and raise it progmatically. &lt;/p&gt;&lt;p&gt;It's not about clicking the control, it's about the action that the control triggers.&lt;/p&gt;&lt;p&gt;In essence, user-interface widgets raise primitive events, like "change" and "click". This is a Good Thing, because those events represent what widgets do (or appear to do). Applications don't "click". Applications update state and run reports. An event-driven application should create its own layer of idiomatic events that describes what the application does in its own terms. In that way, we are not chained to the controls, and we can call our own events whenever we like. Architectually, idiomatic events &lt;a href="http://en.wikipedia.org/wiki/Cohesive"&gt;increase cohesion&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Coupling_%28computer_science%29"&gt;lower coupling&lt;/a&gt;. Also Good Things.&lt;/p&gt;&lt;p&gt;An excellent introduction to event-driven design is Christian Heilmann's &lt;a href="http://yuiblog.com/blog/2007/01/17/event-plan/"&gt;Event-Driven Web Application Design&lt;/a&gt; (which I like to call "Brace yourself, Bridget!).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6456185881804268232?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6456185881804268232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6456185881804268232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6456185881804268232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6456185881804268232'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/simulating-action-since-client-side.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-8211409929748092586</id><published>2007-03-24T06:00:00.000-04:00</published><updated>2008-12-13T01:43:14.981-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;Struts from Square One: Part 1, Text Complete&lt;/span&gt;&lt;/p&gt;&lt;p&gt;There's still the last mile to go, but at least the text for part one has reached its first full draft. Now, it's down to fussing with the figures. :)&lt;/p&gt;&lt;p&gt;From the &lt;a href="http://code.google.com/p/sq1-struts2/"&gt;GoogleCode site&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Apache Struts 2 from Square One is a training course designed for people who want to create Java web applications, not just quickly, but correctly. Training sessions include a technology primer and a coding exercise. This Project hosts materials used by the course including slide presentations, coding exercises, and a companion text book. The course can be used for independant study or in a classroom setting.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://jroller.com/page/TedHusted?entry=googlecode"&gt;As mentioned&lt;/a&gt;, the course is something I developed over the years for Struts 1, and then adapted for WebWork 2, and now for Struts 2. The course itself is the usual "slides and labs" affair. &lt;/p&gt;&lt;p&gt;Struts 2 from Square One is a textbook adaptation of the course. I'd like to print the text through &lt;a href="http://lulu.com/"&gt;LuLu.com&lt;/a&gt; and include it as part of the course. If people want to use the textbook for individual homestudy, that's fine too. Eventually, what I started at the &lt;a href="http://www.strutsuniversity.org/"&gt;Struts University&lt;/a&gt; site will be migrated to the Square One GoogleCode site.&lt;/p&gt;&lt;p&gt;With Struts 2 in GA mode, I'll have a bit more time to work on this, but there's no telling how long it will take to finish the other three parts. To an extent, how much effort I can put into the text depends on whether people engage me to &lt;a href="http://www.strutsmentor.com/"&gt;present the course&lt;/a&gt; this year. &lt;/p&gt;&lt;p&gt;In the meantime, &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=49385&amp;amp;package_id=223769&amp;amp;release_id=490486"&gt;an early release of the manuscript is available as a PDF&lt;/a&gt;. Enjoy! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-8211409929748092586?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/8211409929748092586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=8211409929748092586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8211409929748092586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/8211409929748092586'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/struts-from-square-one-part-1-text.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-1750018668944336765</id><published>2007-03-23T06:00:00.000-04:00</published><updated>2008-12-13T01:39:54.481-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;S2 Tip - Use namespaces to organize your application into logical "modules"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Many Struts applications contain hundreds of pages. To help organize large applications, the Struts configuration is designed around the notions of "packages" and "namespaces". Each package can set its own defaults, including a namespace setting. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;struts&amp;gt;&lt;br /&gt;&amp;lt;package name="example" namespace="/example"&gt;&lt;br /&gt;   &amp;lt;action name="HelloWorld" class="example.HelloWorld"&gt;&lt;br /&gt;      &amp;lt;result&gt;/example/HelloWorld.jsp&lt;br /&gt;    &amp;lt;/action&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- Add actions here --&gt;&lt;br /&gt;&amp;lt;/package&gt;&lt;br /&gt;&amp;lt;/struts&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Use the namespace attribute to create logical modules or units of work within an application, each with its own identifying prefix. In an accounting application, the actions relating to "payables" might be in one namespace, and actions relating to "receivables" in another.&lt;/p&gt;&lt;p&gt;Namespaces avoid conflicts between action names. Each namespace can have it's own "menu" or "help" action, each with its own implementation. While the prefix appears in the browser URI, the tags are "namespace aware", so the namespace prefix does not need to be embedded in forms and links.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-1750018668944336765?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/1750018668944336765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=1750018668944336765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1750018668944336765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/1750018668944336765'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/s2-tip-use-namespaces-to-organize-your.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-6069193939855201942</id><published>2007-03-22T06:00:00.000-04:00</published><updated>2008-12-13T01:37:29.272-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;How much is open source worth?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;It's official! WebWork is "worth" more than Struts 2! About 4x more! And they are both written "primarily in JavaScript"! &lt;/p&gt;&lt;p&gt;... at least according to the &lt;a href="http://www.ohloh.net/"&gt;www.oloh.net&lt;/a&gt; "Explore Open Source" website. &lt;/p&gt;&lt;p&gt;It seems that based on metrics like "lines of code", the WebWork codebase is "worth" a wopping $7,849,557. Meanwhile, Struts 1 weighs in at a paltry $1,761,104. Struts 2 falls in between at $2,305,602.&lt;/p&gt;&lt;p&gt;Obviously, there's something askew with the &lt;a href="http://www.ohloh.net/projects/4312"&gt;WebWork metric&lt;/a&gt;. I expect it refers to WebWork 1, which included what is now XWork, and imported JavaScript libraries that the project didn't code. &lt;/p&gt;&lt;p&gt;The &lt;a href="http://www.ohloh.net/projects/3562"&gt;Struts 1 metrics&lt;/a&gt; are also weird. Although the project is six years old, and we have the history of every commit from day one, Struts 1 is rated as having a short version control history. Stranger yet, Craig McClanahan is not listed as one of the contributors! That's just not right. :)&lt;/p&gt;&lt;p&gt;The &lt;a href="http://www.ohloh.net/projects/3569"&gt;Struts 2&lt;/a&gt; contributor metrics seem about right, though the language metric doesn't realize that most JavaScript libraries are imported rather than coded by the host project. But, I have to admit, the ohloh site design is pleasant, and it looks like they are trying to build a community around both contributors and other users. Given a sane set of metrics, ohloh would be interesting indeed. There's a good number of projects onboard now, though a few are still missing, like &lt;a href="http://www2.sqlonrails.org/"&gt;SQL on Rails&lt;/a&gt; (don't overlook the screencast!).&lt;/p&gt;&lt;p&gt;Another "fly on the wall of open source" project is &lt;a href="http://www.sourcekibitzer.org/"&gt;SourceKibitzer&lt;/a&gt;. Rather than provide digital metrics, the Kibitzer specializes in trend reports. Evidentially, the idea is that we should choose open source projects using the same sort of charts we use to pick stocks (Buy!Buy!Buy!Ching!). Where ohloh offers metrics regarding lines of code, languages, licenses, and contributors, Kibitzer offers charts describing progress, completeness, complexity, and size.&lt;/p&gt;&lt;p&gt;Once upon a time, I tried submitting similar statistics about Struts as part of an &lt;a href="http://svn.apache.org/viewvc/struts/current/STATUS.txt?revision=51337&amp;amp;view=markup"&gt;ASF board report&lt;/a&gt;. The numbers I collected related to the number of mailing list subscriptions, new posts, new issues, newly resolved issues, and total number of issues. At the board level, there was zero interest in this sort of thing. From the ASF perspective, so long as the interpersonal relationship between the PMC members is warm and fuzzy, the rest will take care of itself :) &lt;/p&gt;&lt;p&gt;Of course, I'm not only an ASF engineer, I'm an engineer, and, personally, I do like to see hard numbers. But, sites like ohloh and Kibitzer have to move beyond codebase analyses. To the user-only community, the things that matter are the mailing list and issue tracker. Kibitzer tries to track completeness by looking for semantic clues like "TODO" comments. In practice, we are far more likely to log TODOs in the issue tracker. While it's interesting that so-and-so contributes a lot of code, to someone casing a project, it's more interesting the so-and-so will answer my question on the mailing list. &lt;/p&gt;&lt;p&gt;In the same vein, it would also be important to analyze the project documentation. How many lines of text compared to how many lines of code? Is the wording complex? How many contributors? Are related books and articles being published outside of the project?&lt;/p&gt;&lt;p&gt;I suspect that the mailing list and issue tracker statistics might be more reliable than either code or documentation analysis. Compared with reality as we know it, much of the code-based analysis &lt;a href="http://www.sucks-rocks.com/rate/struts2/tapestry/jsf/wicket/stripes"&gt;seems dodgy&lt;/a&gt;, and a dodgy statistic can worth less than Ted's best guessimate at a release date :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-6069193939855201942?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/6069193939855201942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=6069193939855201942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6069193939855201942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/6069193939855201942'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/how-much-is-open-source-worth-its.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5208774.post-5447617878274769447</id><published>2007-03-21T06:00:00.001-04:00</published><updated>2008-12-13T01:33:59.220-05:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:180%;"&gt;13 ASF Practices&lt;/span&gt;&lt;/p&gt;&lt;p&gt;People often mention "Apache Rules". We don't actually have a rule book, but if we did, here's what I believe might be the top thirteen practices.&lt;/p&gt;&lt;table border="1" cellpadding="8"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;0&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Projects must be managed in a collaborative, meritocratic way, so that new volunteers are encouraged to join the project group, and so that the volunteers doing the work are the volunteers who make the decisions.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;1&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;A project's primary web site and mailing lists must be maintained on ASF hardware. Resources maintained elsewhere are not ASF resources, even if maintained by ASF committers.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;2&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Code and documentation donated to the ASF must be maintained on ASF hardware.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;3&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Project source code and documentation must be donated to the ASF under a &lt;a href="http://apache.org/licenses/index.html#clas"&gt;Contributor's License Agreement&lt;/a&gt;.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;4&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Donated source code and documentation must carry the ASF copyright and be placed under the Apache License.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;5&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Other libraries included with a distribution must be redistributable under the Apache license.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;6&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;PMC members can veto a product change with a technical justification.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;7&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;An ASF release must be approved by at least three members of the PMC. A release cannot be vetoed.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;8&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Releases must be digitally signed by a release manager.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;9&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;The PMC chair/Project VP must submit a status report to the ASF board every three months&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;A&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;PMC members are encouraged to nominate qualified contributors as new committers. ASF Members are encouraged to nominate qualified committers as new members.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;B&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;Obtaining a non-exclusive ASF copyright on all material in the ASF repository is encouraged.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;&lt;br /&gt;C&lt;br /&gt;&lt;/th&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://tinyurl.com/mw7t6"&gt;Author tags&lt;/a&gt; in source code are discouraged but permitted.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Of course, there are other customs, but I believe that most other ASF practices would stem from this initial set. And, as with all things ASF, YMMV! :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5208774-5447617878274769447?l=tedhusted.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tedhusted.blogspot.com/feeds/5447617878274769447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5208774&amp;postID=5447617878274769447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5447617878274769447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5208774/posts/default/5447617878274769447'/><link rel='alternate' type='text/html' href='http://tedhusted.blogspot.com/2007/03/13-asf-practices-people-often-mention.html' title=''/><author><name>Ted Husted</name><uri>http://www.blogger.com/profile/00991480421608354977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_LCoIt82CYdA/SdNQMR8nTSI/AAAAAAAAASM/8V8nUoNVBH0/S220/ted.husted.black.png'/></author><thr:total>0</thr:total></entry></feed>
