<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://codersforchrist.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Coders for Christ</title><link>http://codersforchrist.com/cs/blogs/default.aspx</link><description>&lt;P&gt;coding for His Kingdom on earth&lt;/P&gt;</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 (Build: 60809.935)</generator><item><title>Can Your ChMS Do This?</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2012/04/24/Can-Your-ChMS-Do-This_3F00_.aspx</link><pubDate>Tue, 24 Apr 2012 17:13:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5240</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;em&gt;WARNING: This is probably going to be my yearly rant blog posting for 2012.&amp;nbsp; Feel free to just walk away.&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ok, I&amp;#39;m pretty mad right now.&amp;nbsp; I don&amp;#39;t want to write this blog post, but I just can&amp;#39;t believe what&amp;#39;s going on and what I&amp;#39;m being told to do.&amp;nbsp; This should not be happening and I want to do all that I can to make sure this sort of thing does not happen again. I&amp;#39;m reminded of the &lt;a href="http://airdo.org/blog/index.php?entry=entry050812-010916"&gt;Holy Discontent talk at 2005 Leadership Summit that started me on the path I&amp;#39;m now&lt;/a&gt; on.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Let&amp;#39;s back up a few months.&amp;nbsp; We were told we had to upgrade from our mostly stable Arena 2010.1.x to 2011.1.500 because the background check service provider that we use with Arena was changing on 3/1. Up against the wall, we reluctantly upgraded.&amp;nbsp; A month later (3/29) I got an email from Arena saying a known bug (in their new code; the code that was supposed to be the fix for the &amp;quot;problem&amp;quot;) would be fixed in an upcoming 2011.2.400.&amp;nbsp; Herein starts the real topic of this post.&amp;nbsp; Why was I being told a bug fix would be put into a new release of the product and not a .600 patch fix?&amp;nbsp; &lt;a href="http://semver.org/"&gt;Semver&lt;/a&gt; (Semantic Versioning) is all but the standard way of doing things now, and even if you don&amp;#39;t version using the X.Y.Z form, every software vendor knows you issue patches to fix bugs.&amp;nbsp; You don&amp;#39;t ask your customers to upgrade to a newer version (which in almost certainty) has it&amp;#39;s own set of bugs and changes to deal with. Me and others complained, and today I was told the vendor is now going to create a .600 patch -- it should be &lt;strong&gt;ready in another month or so&lt;/strong&gt; (around the end of May?).&lt;/p&gt;&lt;p&gt;What?&amp;nbsp; Two+ months to issue a patch?  Are you kidding me?&amp;nbsp; What is this &lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2011/06/15/Patchy-Philosophy-and-the-Bug-Free-Software.aspx"&gt;patchy philosophy&lt;/a&gt;?&lt;/p&gt;&lt;p&gt;A patch from a paid vendor need not take this long to issue.&amp;nbsp; I understand QA testing for a &lt;em&gt;full &lt;/em&gt;release takes time, but a full QA/test cycle is not needed for a patch because you should be changing only one piece of code and testing that one piece of code.&lt;/p&gt;&lt;p&gt;In the meantime, several times a week (we&amp;#39;ve had 10 failures out of approximately 30 requests in the past month) I was asked by the vendor to have our ministry assistant using the following steps to work around the problem:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="center" class="MsoNormal" style="text-align: center"&gt;&lt;strong&gt;Steps for identifying and retrieving outstanding background checks
containing Alerts&lt;/strong&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 45pt; text-indent: -0.25in"&gt;&lt;span style="color: black"&gt;&lt;span&gt;1)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Run the agent configuration utility on the Arena
webserver and click on the background check agent. Go to the notifications tab
and identify the email address that alerts are set to go to.&lt;/p&gt;&lt;p class="MsoListParagraph"&gt;&lt;span&gt;&lt;img height="191" src="file:///C:/Users/NickA/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg" width="371" /&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 45pt; text-indent: -0.25in"&gt;&lt;span style="color: black"&gt;&lt;span&gt;2)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Access the noted account and look for
an alert email containing the information shown below.&lt;br /&gt;&amp;lt;IMAGE REMOVED&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="margin-left: 45pt"&gt;&lt;span&gt;&lt;img height="56" src="file:///C:/Users/NickA/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg" width="608" /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="margin-left: 45pt; text-indent: -0.25in"&gt;&lt;span class="MsoHyperlink"&gt;&lt;span style="color: black; text-decoration: none"&gt;&lt;span&gt;3)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;If
such an email is found, they will need to contact Melissa ****** at ABC @ 800-***-****
ext. *** or &lt;a href="mailto:***@protectmyministry.com"&gt;***@serviceprovidervendor.com&lt;/a&gt;.
Request that she email them the Name and URL of all individuals with an Alert on
their record. They should receive a url for each person that looks something
like: &lt;a href="https://blahblahblah/foo/bar?ReportID=**********"&gt;https://blahblahblah/foo/bar?ReportID=**********&lt;/a&gt;&lt;span class="MsoHyperlink"&gt;. &lt;/span&gt;&lt;span class="MsoHyperlink"&gt;&lt;span style="color: windowtext; text-decoration: none"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoListParagraph" style="margin-left: 45pt; text-indent: -0.25in"&gt;&lt;span style="color: black"&gt;&amp;nbsp;&lt;span&gt;4)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Once they receive the info from ABC,
they would then do the following (access to Arena and SQL required):&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoListParagraph" style="margin-left: 63pt; text-indent: -0.25in"&gt;&lt;span style="color: black"&gt;&lt;span&gt;1.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;In Arena, go to the affected background
check and click on it. In the url it will provide you with the check id, take
note as that&amp;rsquo;s the id in the arena database. Repeat for each check in the list
that ABC provided. &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoListParagraph" style="margin-left: 63pt; text-indent: -0.25in"&gt;&lt;span style="color: black"&gt;&lt;span&gt;2.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Go to SQL and run:&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoListParagraph" style="margin-left: 1.25in"&gt;&lt;span style="color: blue"&gt;select&lt;/span&gt;&lt;span&gt;
background_check_id&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;span style="color: blue"&gt;status&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;result&lt;span style="color: gray"&gt;,&lt;/span&gt;results_link &lt;span style="color: blue"&gt;from&lt;/span&gt; you_have_got_to_be_kidding_me &lt;span style="color: blue"&gt;where&lt;/span&gt; background_check_id &lt;span style="color: gray"&gt;=&lt;/span&gt;
x &lt;em&gt;(where x is the id number of the
check).&lt;/em&gt; Only the id and status should have a value, result and result link
should be blank.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoListParagraph" style="margin-left: 63pt; text-indent: -0.25in"&gt;&lt;span style="color: black"&gt;&lt;span&gt;3.&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Run:&lt;span style="color: red"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoListParagraph" style="margin-left: 1.25in"&gt;&lt;span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;update&lt;/span&gt;
foo_bar_blah_check &lt;span style="color: blue"&gt;set&lt;/span&gt; &lt;span style="color: blue"&gt;status&lt;/span&gt;
&lt;span style="color: gray"&gt;=&lt;/span&gt; 4&lt;span style="color: gray"&gt;,&lt;/span&gt; result &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;&amp;#39;Complete - Record&amp;#39;&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;results_link &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;&amp;#39;URL that ABC provided&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoListParagraph" style="margin-left: 1.25in"&gt;&lt;span style="color: blue"&gt;where&lt;/span&gt;&lt;span&gt;
background_check_id &lt;span style="color: gray"&gt;= x&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 45pt; text-indent: -0.25in"&gt;&lt;span style="color: black"&gt;&lt;span&gt;5)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;After they have completed step 4, they
can either manually stop and restart their agents to pull the background checks
now, or they can wait for the agent to cycle and pull down the background
checks.&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 45pt; text-indent: -0.25in"&gt;&lt;span style="color: black"&gt;&lt;span&gt;6)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;To determine if the background check record
has been successfully retrieved, run: &lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 1in"&gt;&lt;span style="color: blue"&gt;select&lt;/span&gt;&lt;span&gt; background_check_id&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;span style="color: blue"&gt;status&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;result&lt;span style="color: gray"&gt;,&lt;/span&gt;results_link&lt;span style="color: gray"&gt;,&lt;/span&gt; results_blob_id &lt;span style="color: blue"&gt;from&lt;/span&gt;
more_fun_with_sql_tables &lt;span style="color: blue"&gt;where&lt;/span&gt; background_check_id &lt;span style="color: gray"&gt;=&lt;/span&gt; x &lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 45pt"&gt;&lt;span&gt;The check has been successfully retrieved if there is a value in
the results_blob_id field, note the value and proceed to step 7.&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 45pt; text-indent: -0.25in"&gt;&lt;span style="color: black"&gt;&lt;span&gt;7)&lt;span style="font: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;To
confirm the existence of the background check document, run:&lt;span style="color: red"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 1in"&gt;&lt;span style="color: blue"&gt;select&lt;/span&gt;&lt;span&gt; created_by&lt;span style="color: gray"&gt;,&lt;/span&gt;modified_by&lt;span style="color: gray"&gt;,&lt;/span&gt;file_ext&lt;span style="color: gray"&gt;,&lt;/span&gt;mime_type&lt;span style="color: gray"&gt;,&lt;/span&gt;original_file_name &lt;span style="color: blue"&gt;from&lt;/span&gt;
big_blobby_table &lt;span style="color: blue"&gt;where&lt;/span&gt; blob_id &lt;span style="color: gray"&gt;=&lt;/span&gt; x &amp;nbsp;&lt;em&gt;(x
being the value noted in step 6)&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 45pt"&gt;&lt;span&gt;And to complete the process, updating
the document so that it can be viewed, run:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoListParagraph" style="margin-left: 1in"&gt;&lt;span style="color: blue"&gt;Update&lt;/span&gt;&lt;span&gt; that_big_blobby_table_again&amp;nbsp; &lt;span style="color: blue"&gt;Set&lt;/span&gt; file_ext &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;&amp;#39;pdf&amp;#39;&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;Original_file_name
&lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;&amp;#39;BackgroundCheckReport.pdf&amp;#39;
&lt;/span&gt;&lt;span style="color: blue"&gt;Where&lt;/span&gt; file_ext &lt;span style="color: gray"&gt;like&lt;/span&gt;
&lt;span style="color: red"&gt;&amp;#39;cfm?reportid=%&amp;#39;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;em&gt;* I&amp;#39;ve changed certain tables/URLs/names for obvious security reasons and to protect the mostly innocent.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;If I had the source code, I would probably just fix this myself instead of writing this stupid blog post. I realize I&amp;#39;m setting the &lt;a href="http://www.RockChMS.com"&gt;Rock ChMS&lt;/a&gt; &lt;a href="http://www.sparkdevelopmentnetwork.com/"&gt;initiative&lt;/a&gt; which I&amp;#39;ve joined to meet these same expectations -- even though it&amp;#39;s is a free and open source product.&amp;nbsp; I just don&amp;#39;t think it&amp;#39;s reasonable to have to run broken in a broken state for two months while a patch is being assembled.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5240" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/project/default.aspx">project</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/angry+coder/default.aspx">angry coder</category></item><item><title>CrowdSync - All Your Phones Are Belong To Us</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/12/24/Control-Mobile-Phones-During-Worship-Experience.aspx</link><pubDate>Sat, 24 Dec 2011 16:22:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5198</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;h3&gt;An Idea&lt;/h3&gt;

&lt;p&gt;A few months ago Kim
Vehon, from our Worship team came, into our office to share &lt;a href="http://vimeo.com/m/8118831"&gt;a video showing a
bunch of phones hanging from wires flashing on and off&lt;/a&gt;.&lt;span&gt; It&amp;#39;s pretty cool. &lt;/span&gt;She wondered if we could do something like
that during our Christmas services at &lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.centralaz.com" title="Central Christian Church AZ"&gt;Central&lt;/a&gt;. Building a &amp;quot;fat-app&amp;quot; to control a
bunch of phones wired together did not seem like a challenge nor interesting
enough to be worth pursuing.&lt;/p&gt;

&lt;h3&gt;A Better Idea&lt;/h3&gt;

&lt;p&gt;But then we started thinking. What if we tried to
control the congregation&amp;#39;s phones and what if we used only their existing 3G
network connection?&lt;span&gt;&amp;nbsp; &lt;/span&gt;And, since hardly
anyone would want to install an app from the market/store, what if it only used
their phone&amp;#39;s web browser?&lt;span&gt;&amp;nbsp; &lt;/span&gt;We also thought it
should be built in such a way as to reduce the dependency on the network -- in
other words the phone should get what it needs from the server and then be able
to loose network connection without impact to the performance.&lt;span&gt; &lt;/span&gt;Game on. &lt;a href="http://twitter.com/#!/JasonOffutt/status/150070481922428929"&gt;I agree with Jason&lt;/a&gt; (&lt;a href="http://twitter.com/#!/JasonOffutt/status/150070481922428929"&gt;tweet&lt;/a&gt;),
this might be one of the funnest things I&amp;#39;ve worked on in a long time. &lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/jsondata.tumblr.com" title="Jason Offutt"&gt;Jason&lt;/a&gt; and I call our software CrowdSync...&lt;/p&gt;&lt;p&gt;&lt;img alt="Pre-event countdown on CrowdSync" height="235" src="http://codersforchrist.com/images/20121224_CrowdSyncFourIPhones.png" title="Pre-event countdown on CrowdSync" width="500" /&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Ultimately we also needed to
generate a lights time coded &amp;quot;track&amp;quot; from a Christmas song (midi
file) with each note being assigned to 1-4 colors.&lt;span&gt;&amp;nbsp; &lt;/span&gt;A person&amp;#39;s phone would receive the track, be
randomly assigned one of the four colors, and start playing the track in sync
with the band.&amp;nbsp; Sounded simple
enough. Thankfully I found &lt;a href="http://www.codeproject.com/KB/audio-video/MIDIToolkit.aspx"&gt;the C# MIDI
Toolkit code from Leslie Sanford&lt;/a&gt; that reads midi files (thank you Leslie!)
which I was able to modify in order to extract and generate our time coded
light track as JSON data which looks roughly like this:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" style="border: 1px solid silver; text-align: left; padding: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',Courier,Monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text"&gt;
&lt;pre id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',Courier,Monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible"&gt;{ &lt;br /&gt;    startTime: 123578916,&lt;br /&gt;    endTime: 12345667,&lt;br /&gt;    ticks: [&lt;br /&gt;                { notes: [&amp;quot;a&amp;quot;], &lt;span style="color: #0000ff"&gt;time&lt;/span&gt;: 27, duration: 900 },&lt;br /&gt;                { notes: [&amp;quot;b&amp;quot;], &lt;span style="color: #0000ff"&gt;time&lt;/span&gt;: 982, duration: 900 },&lt;br /&gt;                { notes: [&amp;quot;c&amp;quot;], &lt;span style="color: #0000ff"&gt;time&lt;/span&gt;: 1940, duration: 900 },&lt;br /&gt;                { notes: [&amp;quot;d&amp;quot;], &lt;span style="color: #0000ff"&gt;time&lt;/span&gt;: 2908, duration: 900 },&lt;br /&gt;                ...&lt;br /&gt;           ]&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;h3&gt;The Time Problem&lt;/h3&gt;

&lt;p&gt;Pretty quickly
we eliminated web sockets and other client-server signaling technology for a
variety of reasons including lack of consistent device support, chattiness,
lag, and timing control.&lt;span&gt;&amp;nbsp; &lt;/span&gt;We wanted to
constrain ourselves in order to force us to think differently about certain
problems -- such as the &amp;quot;&lt;span style="font-style: italic"&gt;how do we get all
of these devices/clients to start at exactly the same time?&lt;/span&gt;&amp;quot;
problem. &lt;/p&gt;

&lt;p&gt;Initially we were
thinking we could rely on the time from the phone&amp;#39;s operating system.&lt;span&gt;&amp;nbsp; &lt;/span&gt;You might think two 3G Verizon phones would
have the same time, right?&lt;span&gt;&amp;nbsp; &lt;/span&gt;Wrong. Very
wrong. We saw phones that were off anywhere from several seconds to a few
minutes. (&lt;span style="font-style: italic"&gt;Who knows how or where each phone is
getting its time from? It doesn&amp;#39;t appear they&amp;#39;re using a common Network Time
Protocol (NTP) server.&lt;/span&gt;)&lt;/p&gt;


&lt;p&gt;After some medium
scale client tests and experimentation, we came up with the following
approach:&lt;span&gt;&amp;nbsp; &lt;/span&gt;Each client asks our server
for the current time, calculates the delta (from it&amp;#39;s local time), and repeats
this about 20 times over the&lt;span&gt; &lt;/span&gt;course of
about 20 seconds.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The error introduced
because of network latency is reduced to a minimum because we use only the
&amp;#39;smallest&amp;#39; delta from our samples. &lt;/p&gt;


&lt;p&gt;&lt;img alt="CrowdSync Time Sync Diagram" height="288" src="http://codersforchrist.com/images/20111224_CrowdSyncDiagram.png" title="CrowdSync Time Sync Diagram" width="433" /&gt;&lt;br /&gt;
&lt;/p&gt;


&lt;p&gt;Once we&amp;#39;ve got the
correct delta we calculate and shift the entire track&amp;#39;s note times to represent
the exact localized time each particular note should play (light up) on that
device.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Then we basically wait until the
note&amp;#39;s time occurs and set some CSS to play that particular note&amp;#39;s light.&lt;/p&gt;

&lt;h3&gt;Other Stuff&lt;/h3&gt;

&lt;p&gt;Since not all
browsers can handle HTML5, we had to keep things simple and used basic HTML,
CSS and JavaScript (&lt;a href="http://coffeescript.org/"&gt;CoffeeScript&lt;/a&gt;).&lt;span&gt;&amp;nbsp; &lt;/span&gt;Other problems worth mentioning are: cell
phone auto dimming, screen locking, and mysterious time lost as a result of
certain mobile phone browser interruptions - such as screen lock and wake up.&lt;span&gt;&amp;nbsp; &lt;/span&gt;(On my Android phone, a screen lock and
re-open would cause a simple JavaScript clock to become out of sync with
correct time.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It smells like a timing
bug with the OS - but what do I know.)&lt;/p&gt;

&lt;p&gt;Forward to November
when it was decided that our system should also power the worship center&amp;#39;s IMAG
side screens with something cool, show an event count down timer, and the drive
the band&amp;#39;s click track.&lt;span&gt;&amp;nbsp; &lt;/span&gt;That ended up
being a real blessing because we got to work on some really fun stuff.&lt;span&gt;&amp;nbsp; &lt;/span&gt;After more experimentation for the
&amp;quot;something cool&amp;quot; part, and more ramping-it-up &amp;trade; with statements like
&amp;quot;what if we could ...&amp;quot;, we ended up programmatically building a
Christmas Tree as colored circles on the HTML5 canvas to match our church&amp;#39;s
Luminous graphic.&lt;/p&gt;

&lt;p&gt;&lt;img alt="Central Christian Church&amp;#39;s Christmas Luminous Graphic" height="298" src="http://codersforchrist.com/images/20111224_Luminous.png" title="Central Christian Church&amp;#39;s Christmas Luminous Graphic" width="365" /&gt;&lt;/p&gt;



&lt;p&gt;We &lt;span style="font-style: italic"&gt;somewhat&lt;/span&gt; randomly plot circles in the shape of
a Christmas tree using a little Math.sin() trick to get the curve we
wanted.&lt;span&gt;&amp;nbsp; &lt;/span&gt;(Remember that stuff you learned
in high school -- it really does come in handy!)&lt;span&gt;&amp;nbsp; &lt;/span&gt;The same JSON encoded light track data would
be used to control the four sets of lights on the tree.&lt;span&gt;&amp;nbsp; &lt;/span&gt;We kept the same code base and ended up with
some configuration settings to control whether the simple HTML/CSS (cell
phones) or HTML5 canvas w/tree was being used (side screens).&lt;/p&gt;


&lt;p&gt;Ultimately, the midi
file click track turned into a full blown amazing score and arrangement of
Carol of the Bells by &lt;a href="http://twitter.com/#!/adriandarsee"&gt;Adrian
Darsee&lt;/a&gt; in mp3 format.&lt;span&gt;&amp;nbsp; &lt;/span&gt;There was more
fun getting the audio track to play which perhaps &lt;a href="http://jsondata.tumblr.com/"&gt;Jason will cover in his blog&lt;/a&gt;.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We also created a small admin panel as an Arena module so that the A/V tech guys at each campus could store the event start time for that service once they knew exactly when they wanted it to start.&lt;/p&gt;
&lt;p&gt;&lt;img alt="CrowdSync Admin Panel" height="224" src="http://codersforchrist.com/images/20111224_CrowdSyncAdminPage.png" title="CrowdSync Admin Panel" width="500" /&gt;&amp;nbsp;&lt;/p&gt;

&lt;h3&gt;Time Shifting Gotchas&lt;/h3&gt;

&lt;p&gt;Late in the game we
discovered something unfortunate when we put it all together with all
the other equipment (&lt;a href="http://figure53.com/qlab/"&gt;QLab&lt;/a&gt;, the worship
center&amp;#39;s A/V systems and side screens, a full 30 minute pre-service countdown,
etc.).&lt;span&gt;&amp;nbsp; &lt;/span&gt;Not all seconds are created
equal. I should have realized this, but somehow it failed to register.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Due to NTP being used on the various systems,
the QLab mac, the mac running Chrome for the IMAG, and our server would slowly
drift by a 1 to .5 seconds during the 40 minute countdown.&lt;span&gt;&amp;nbsp; &lt;/span&gt;That&amp;#39;s a big problem if you&amp;#39;re trying to
achieve millisecond synchronization.&lt;span&gt;&amp;nbsp; &lt;/span&gt;We
turned off NTP as a work-around but realize it&amp;#39;s something we want to address
in future versions of CrowdSync.&amp;nbsp; We&amp;#39;re also going to implement all the server side stuff in &lt;a href="http://nodejs.org/" title="Node is a server side JavaScript application framework"&gt;Node.js&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;The goal was for
each person to &amp;quot;be the light&amp;quot; and &amp;quot;let your light shine&amp;quot; as a literal
and symbolic expression during the worship to our King. Overall it was a
success for the whole opening worship experience but when the congregation
erupted into loud applause&lt;span&gt; at the end &lt;/span&gt;I knew they
enjoyed the experience too.&lt;span&gt;&amp;nbsp; &lt;/span&gt;I hope we
have some of it captured on video.&lt;/p&gt;&lt;p&gt;&lt;a href="http://codersforchrist.com/images/20111224_CrowdSyncLive.jpg" title="click to enlarge"&gt;&lt;img alt="click for large image" height="337" src="http://codersforchrist.com/images/20111224_CrowdSyncLive_sm.png" title="click for large image" width="500" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;We&amp;#39;ll post the latest alpha &lt;a href="https://github.com/CentralAZ/CrowdSync" title="CrowdSync source code"&gt;CrowdSync source up on Github&lt;/a&gt; shortly. &lt;br /&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5198" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/code/default.aspx">code</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/ajax/default.aspx">ajax</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>5th Generation Arena ChMS Website</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/11/18/5th-Generation-Arena-ChMS-Website.aspx</link><pubDate>Fri, 18 Nov 2011 15:57:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5156</guid><dc:creator>nairdo</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Today marks the launch of &lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.centralaz.com" title="CentralAZ -- aka CCCEV"&gt;our 5th Arena ChMS powered website&lt;/a&gt;.&amp;nbsp; This time around it was more of a cosmetic face-lift, and as far as the switch-over was concerned, we used all the tricks we learned last time to make the change very smooth (more on that below).&amp;nbsp; The bulk of the switch took 8 seconds (scripted), about 1 hour of minor 
manual tweaks by &lt;a href="http://jsondata.tumblr.com/"&gt;Jason Offutt&lt;/a&gt; and I, followed by roughly 4 hours of 
additional fine tuning by Jason Ake.&lt;/p&gt;&lt;p&gt;&lt;img alt="5th Generation CentralAZ.com website - aka &amp;quot;007&amp;quot;" height="503" src="http://codersforchrist.com/images/20111118CentralAZ_2.png" title="5th Generation CentralAZ.com website - aka &amp;quot;007&amp;quot;" width="475" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;A few lessons were learned during the 4th generation site (aka Hasselhoff) which were largely based on feedback we received from the congregation and staff.&amp;nbsp; Gone is the campus selection integration that was initially prevalent after the initial launch in the summer 2010.&amp;nbsp; Now the only place a person needs to think about which campus they care about is when they&amp;#39;re exploring the &lt;a href="http://www.centralaz.com/Arena/default.aspx?page=4131"&gt;calendar&lt;/a&gt;, giving online (since one of our campuses has a different giving system - ugh), and when they simply want information about our different campuses.&amp;nbsp; It mostly turns out that people don&amp;#39;t like campus separation/segregation.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Although the new site is based on the &amp;quot;Elegance&amp;quot; theme, props go to Jason Ake (our new web designer) and our graphic artists, &lt;a href="http://wagnerdesign.virb.com/"&gt;Jeremy Wagner&lt;/a&gt; and &lt;a href="http://www.mitcheiler.com/design/recent-work/"&gt;Mitch Eiler&lt;/a&gt;, for their many cool elements and tweaks.&amp;nbsp; Most of the cool code changes including the newly tweaked &lt;a href="http://www.centralaz.com/Arena/default.aspx?page=4131"&gt;event calendar&lt;/a&gt;, our Facebook login integration, and Vimeo &lt;a href="http://www.centralaz.com/Arena/default.aspx?page=4132"&gt;video wall&lt;/a&gt; come from &lt;a href="http://jsondata.tumblr.com/"&gt;Jason Offutt&lt;/a&gt;, who&amp;#39;s continually pushing me to learn the latest techniques and libraries.&amp;nbsp; To that end, this time around we used a little &lt;a href="http://mustache.github.com/"&gt;Mustache.js&lt;/a&gt;, &lt;a href="http://documentcloud.github.com/backbone/"&gt;Backbone.js&lt;/a&gt;, and as we discussed at &lt;a href="http://www.refreshcache.com/Arena/Default.aspx?page=3285"&gt;RefreshCache 2011&lt;/a&gt;, we wrote some of our JavaScript in &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;CoffeeScript&lt;/a&gt;.&amp;nbsp; Our promotion slider (&lt;a href="http://www.centralaz.com/Arena/default.aspx?page=4139"&gt;seen here&lt;/a&gt;) is still based on our &lt;a href="http://redmine.refreshcache.com/projects/cccev-web-collection/wiki/Promotions_via_XSLT"&gt;Promotions via XSLT&lt;/a&gt; module but this time around our XSLT spits-out &lt;a href="http://www.awkwardgroup.com/sandbox/awkward-showcase-a-jquery-plugin/"&gt;Awkward-Showcase&lt;/a&gt; jQuery library goodness to handle the transitions and &lt;em&gt;widgety-thumbnaily&lt;/em&gt; UI.&amp;nbsp; The recent blog entries that are pulled into the the home page is using a slightly customized (I added caching) version of Arena&amp;#39;s standard XML File Transformation module (which I just posted to &lt;a href="http://redmine.refreshcache.com/projects/cccev-web-collection/repository/show/trunk/Arena/UserControls/Custom/Cccev/Core" title="The CCCEV Website Collection on Redmine.RefreshCache.com"&gt;the shared repo here&lt;/a&gt;).&amp;nbsp; Lastly, we also used the &lt;a href="http://www.centralaz.com/Arena/default.aspx?page=5363"&gt;Promotion via XSLT module on a standalone page&lt;/a&gt; to &amp;quot;feed&amp;quot; our Arena based promotions into our &lt;a href="https://www.facebook.com/CentralAZ#!/CentralAZ?sk=app_190322544333196"&gt;&amp;quot;Welcome&amp;quot; Facebook page&lt;/a&gt; as seen here:&lt;/p&gt;&lt;p&gt;&lt;img alt="CentralAZ Welcome Page on Facebook" height="432" src="http://codersforchrist.com/images/20111118_FB_integration.png" title="CentralAZ Welcome Page on Facebook" width="475" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Overall these changes took our code team between 2-4 weeks of execution time while all the rest of the project work took Jason Ake between 2-3 months of planning and execution. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now, about the planning, staging and cut-over...&lt;/p&gt;&lt;p&gt;First of all we decided to ease our pain by creating four new Arena templates which would roughly match our previous four (home page, child page, single column page, and wide page). In addition to that, whenever possible, we used identical &amp;quot;area&amp;quot; (placeholder) names inside the templates.&amp;nbsp; &lt;strong&gt;These two steps alone&lt;/strong&gt; simplify the cut-over tremendously since our cutover SQL script now &lt;em&gt;basically &lt;/em&gt;only has to change (for example) pages that use template 65 and update them to use template 77, etc.&amp;nbsp; I highly recommend you use this same technique when upgrading/updating your website from generation to generation.&lt;/p&gt;&lt;p&gt;Once the templates were created/beta we also immediately added them to our production Arena install so that we could get their final templateID (for use later when writing the cut-over script).&amp;nbsp; At that point in the process it&amp;#39;s also a good idea to add any new pages that you&amp;#39;re going to want in the new website and just set the &amp;quot;Display in Nav&amp;quot; to false.&amp;nbsp; On the day of the cut-over your script can surgically flip that bit to make it show up.&amp;nbsp; At about t-minus 2 weeks we copied our production Arena database and Arena website folders into a new test instance for testing the cut-over scripts. We added an alias to our internal DNS and set up IIS to serve the test site up as http://testweb/ for general staff &lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2008/06/05/User-Acceptance-Testing-_2800_UAT_2900_.aspx"&gt;User Acceptance Testing&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now that this website is behind us, next up will be creating a personal, personalized space on the site and the modules needed for people to access all of &amp;quot;their&amp;quot; stuff (profile, prayer requests, small groups, contribution statements, event registrations, customized news/promotions, etc.).&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5156" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/project/default.aspx">project</category></item><item><title>Rock ChMS, An Open Source Church Management System and CMS Framework</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/10/10/Rock-ChMS_2C00_-An-Open-Source-Church-Management-System-and-CMS-Framework.aspx</link><pubDate>Mon, 10 Oct 2011 20:11:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5141</guid><dc:creator>nairdo</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;img align="right" alt="Rock ChMS - an Open Source Church Management System" border="0" height="80" hspace="5" src="http://codersforchrist.com/images/RockChMS.png" title="Rock ChMS - an Open Source Church Management System" vspace="5" width="219" /&gt;I&amp;#39;ve joined forces with an initially &lt;a href="http://www.sparkdevelopmentnetwork.com/#who"&gt;small team of developers and artists&lt;/a&gt; to form the &lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.sparkdevelopmentnetwork.org"&gt;Spark Development Network&lt;/a&gt; (&lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.sparkdevelopmentnetwork.org"&gt;www.sparkdevelopmentnetwork.org&lt;/a&gt;) and we are creating a new, open source Church Management System (&lt;a href="http://twitter.com/search?q=%23ChMS" title="#ChMS on twitter"&gt;ChMS&lt;/a&gt;) called Rock ChMS. You can read the &lt;a href="http://www.sparkdevelopmentnetwork.com/files/SparkAnnouncement.pdf"&gt;press release&lt;/a&gt; if you wish.&lt;/p&gt;&lt;p&gt;This may come as no surprise to some of you after hearing me last year at &lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.refreshcache.com"&gt;RefreshCache&lt;/a&gt; (&lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.refreshcache.com"&gt;www.refreshcache.com&lt;/a&gt;) and previous rants on why open source is the best option.&amp;nbsp; Last week I reviewed my &amp;quot;State of the Union&amp;quot; presentation from last October.&amp;nbsp; Reading that now, you might think that Rock ChMS was already underway; however our group had not even had a single discussion about anything remotely related.&amp;nbsp; Over the years several groups tried to apply pressure to our vendors to release open source versions of their product and I think we waited as long as we could, but in the spirit of RefreshCache, decided to just make it happen on our own.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Although everyone at Spark Development Network will have slightly different reasons, basically we wanted to &lt;strong&gt;collaborate &lt;/strong&gt;on a framework that was &lt;strong&gt;free &lt;/strong&gt;for the Christian Church and para-church community, that&amp;#39;s &lt;strong&gt;beautiful&lt;/strong&gt;, &lt;strong&gt;easy &lt;/strong&gt;and &lt;strong&gt;simple &lt;/strong&gt;to use, easy to administrate, &lt;strong&gt;open source&lt;/strong&gt; and &lt;strong&gt;easy to develop&lt;/strong&gt; against for the church developer &lt;strong&gt;community&lt;/strong&gt;.&amp;nbsp; For those who want to eventually run their church on Rock ChMS, should they ever encounter a mission critical bug, their developer can jump in and&lt;strong&gt; fix it&lt;/strong&gt; without having to wait for an official patch.&lt;/p&gt;&lt;p&gt;Rock ChMS is only a pre-alpha seed at the moment, but the source is now open and publicly available on Github: &lt;a href="https://github.com/SparkDevNetwork/Rock-ChMS"&gt;https://github.com/SparkDevNetwork/Rock-ChMS&lt;/a&gt;. This was done so that others could collaborate and get involved from the earliest days of the project.&amp;nbsp; Rock ChMS is going to be a full featured &lt;a href="http://www.sparkdevelopmentnetwork.com/#work"&gt;Church Management System&lt;/a&gt; built on top of a custom CMS application framework, so you may find it&amp;#39;s similar to other CMS frameworks you&amp;#39;ve used in the past. It&amp;#39;s an ASP.NET 4.0 Entity Framework application written in C#, so if you&amp;rsquo;re serious about wanting to help The Church, then git on over to GitHub and &lt;a href="http://help.github.com/fork-a-repo/ "&gt;fork the repo&lt;/a&gt;. When you&amp;#39;re ready, submit a pull request and we&amp;#39;ll take a look at your work. If you&amp;#39;re interested in knowing more or want to get involved in other ways, &lt;a href="http://www.sparkdevelopmentnetwork.com/#contact"&gt;sign up on our Stay in Touch&lt;/a&gt; page.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5141" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/.NET+4.0/default.aspx">.NET 4.0</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/ChMS/default.aspx">ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Rock+ChMS/default.aspx">Rock ChMS</category></item><item><title>Grouping Arena Module Settings</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/09/27/Grouping-Arena-Module-Settings.aspx</link><pubDate>Tue, 27 Sep 2011 23:26:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5135</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Something I&amp;#39;ve been meaning to have added to the Arena Custom Module Developer (ACMD) guide is this little known feature that was introduced at some point in the past few years.&amp;nbsp; It&amp;#39;s a way to group your custom module&amp;#39;s settings as seen here:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://codersforchrist.com/images/20110927_ModuleSettings_lg.png" title="click to enlarge"&gt;&lt;img alt="Grouping Arena Module Settings" border="0" height="267" src="http://codersforchrist.com/images/20110927_ModuleSettings.png" title="Grouping Arena Module Settings" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The effect is subtle, but when you have 20 or so settings like we have in &lt;a href="http://redmine.refreshcache.com/projects/cccevcheckin/wiki" title="the CCCEV / HDC custom Arena check-in module"&gt;our check-in module&lt;/a&gt; it starts to become really necessary (of course we haven&amp;#39;t yet added groupings, but we will in the next release).&lt;/p&gt;&lt;p&gt;To create these groupings (aka categories) all you need to do is include the System.ComponentModel in your using section:&lt;/p&gt;&lt;div id="codeSnippetWrapper" style="border: 1px solid silver; text-align: left; padding: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',Courier,Monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text"&gt;&lt;pre id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',Courier,Monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;... and then define a Category attribute with a grouping name argument for each module setting as seen in this example:&lt;br /&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper" style="border: 1px solid silver; text-align: left; padding: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New',Courier,Monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text"&gt;&lt;pre id="codeSnippet" style="border-style: none; text-align: left; padding: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New',Courier,Monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible"&gt;&lt;span style="color: #008000"&gt;// Styling Group&lt;/span&gt;&lt;br /&gt;[TextSetting( &lt;span style="color: #006080"&gt;&amp;quot;Search Button Image Path&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;Relative path ...&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; ), Category( &lt;span style="color: #006080"&gt;&amp;quot;Styling&amp;quot;&lt;/span&gt; )]&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; SearchImagePathSetting { get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Setting( &lt;span style="color: #006080"&gt;&amp;quot;SearchImagePath&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; ); } }&lt;br /&gt;&lt;br /&gt;[TextSetting( &lt;span style="color: #006080"&gt;&amp;quot;Search Button CSS Class&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;CSS classname...&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; ), Category( &lt;span style="color: #006080"&gt;&amp;quot;Styling&amp;quot;&lt;/span&gt; )]&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; SearchButtonCSSClassSetting { get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Setting( &lt;span style="color: #006080"&gt;&amp;quot;SearchButtonCSSClass&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; ); } }&lt;br /&gt;&lt;br /&gt;[TextSetting( &lt;span style="color: #006080"&gt;&amp;quot;TextBox CSS Class&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;CSS classname ...&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; ), Category( &lt;span style="color: #006080"&gt;&amp;quot;Styling&amp;quot;&lt;/span&gt; )]&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; TextBoxCSSClassSetting { get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Setting( &lt;span style="color: #006080"&gt;&amp;quot;TextBoxCSSClass&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; ); } }&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;// No group defined -- these go into a &amp;quot;General Settings&amp;quot; section automatically&lt;/span&gt;&lt;br /&gt;[NumericSetting( &lt;span style="color: #006080"&gt;&amp;quot;Return Results Page Size&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;The number of ...&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; )]&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ReturnResultsPageSizeSetting { get { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Setting( &lt;span style="color: #006080"&gt;&amp;quot;ReturnResultsPageSize&amp;quot;&lt;/span&gt;, &lt;span style="color: #006080"&gt;&amp;quot;10&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;false&lt;/span&gt; ); } }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5135" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/code/default.aspx">code</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category></item><item><title>VBS Check-in Process Improvement</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/07/25/VBS-Check_2D00_in-Process-Improvement.aspx</link><pubDate>Tue, 26 Jul 2011 00:15:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5121</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;This year we had a little more than 1750+ kids use the automated check-in system for VBS across three of our campuses.&lt;/p&gt;
&lt;p&gt;Looking at this graph which shows the number of check-ins per minute, you can see check-in does not ramp up as sharply as we would want on Monday (red).&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://codersforchrist.com/images/20110725_VBS_lg.png" title="click for larger image" target="_blank"&gt;&lt;img alt="VBS check-in comparing two days" border="0" height="251" src="http://codersforchrist.com/images/20110725_VBS.png" title="VBS check-in comparing two days" width="400" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;em style="color: #888888"&gt;(click for larger image)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;By Tuesday (blue) after some adjustments were made and parents knew 
the routine a bit better, check-in ramps up quicker to about 50-60 kids 
per minute and 28 minutes later the lines were gone and the majority of kids were checked in.&lt;/p&gt;&lt;p&gt;It&amp;#39;s OK, but not great. Ideally, you&amp;#39;d like to check in 1500+ kids per minute and have check in last one minute.&amp;nbsp; Not realistic or necessary since not all parents arrive exactly on time.&amp;nbsp; Perhaps 150 kids per minute is a goal.&amp;nbsp; Then check-in only lasts 10 minutes.&amp;nbsp; What will it take to reach that goal?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;With some analysis, we found that it takes about 15-18 seconds per parent to check in their kids.&amp;nbsp; It turns out, much of the time it takes for someone to check in using &lt;a href="http://redmine.refreshcache.com/projects/cccevcheckin/wiki" title="our Arena ChMS based check-in system"&gt;our system&lt;/a&gt; involves punching in the phone number (&lt;a href="http://youtu.be/zERUzwIrbUI"&gt;see this video&lt;/a&gt;).&amp;nbsp; That&amp;#39;s something I already knew, and it&amp;#39;s one of the reasons why I wanted to keep barcode scanners at all our campuses. (a battle I lost -- for now).&amp;nbsp; If a parent uses a barcode they shave 6-12 seconds off that time (depending on how slowly a person normally types in their phone number) and they can check in their kids in about 4-6 seconds.&lt;/p&gt;&lt;p&gt;So if we don&amp;#39;t start using barcode scanners again, I think the only thing we&amp;#39;ll be able to to is drop in more, cheap, iPad kiosks... unless we start letting people check in using their mobile phone when they arrive on campus...&lt;br /&gt;&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5121" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/check-in/default.aspx">check-in</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/IT/default.aspx">IT</category></item><item><title>Eddy Currents Can Trap You</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/06/24/How-to-Make-A-Grown-Man-Cry.aspx</link><pubDate>Fri, 24 Jun 2011 13:48:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5107</guid><dc:creator>nairdo</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;img src="http://codersforchrist.com/images/20110624_PropertyPage.png" style="width: 444px" /&gt;&lt;/p&gt;&lt;p&gt;Our current &lt;a href="http://twitter.com/#!/search/%23ChMS"&gt;church management&amp;nbsp;system&lt;/a&gt; has been falling behind.&amp;nbsp; The Visual Studio precompiled website solution we get with&amp;nbsp;the SDK still targets the .NET Framework 3.5 and this morning I ran into my biggest issue to date:&lt;/p&gt;&lt;p&gt;&lt;img alt="Arena on NuGet Core" height="325" src="http://codersforchrist.com/images/20110624_ArenaOnNuGetCore.png" style="width: 328px; height: 325px" title="Arena on NuGet Core" width="328" /&gt;&lt;/p&gt;&lt;p&gt;I can&amp;#39;t use the NuGet.Core library in my new module until our current vendor either updates the solution to target the .40 framework or I figure out a way to get around this hurdle.&amp;nbsp; I don&amp;#39;t think I can safely just change the build target on the solution since it&amp;#39;s precompiled...&amp;nbsp; hmm.&lt;/p&gt;&lt;p&gt;Once I figure that out, I&amp;#39;ll move onto the other problem.&amp;nbsp; The system is still using jQuery 1.3 (circ. 2009).&amp;nbsp; Yes, jQuery 1.4 was released at the beginning of 2010, 1.5 at the beginning of 2011, and 1.6 was just released last month.&amp;nbsp; I&amp;#39;m beginning to understand why President Roosevelt uttered the words &amp;quot;the only thing we have to fear is fear itself.&amp;quot;&lt;/p&gt;&lt;p&gt;Any suggestions?&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5107" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/.NET+3.0/default.aspx">.NET 3.0</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/.NET+4.0/default.aspx">.NET 4.0</category></item><item><title>Custom IE Error Page (DNSERROR.HTM)</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/06/20/Custom-IE-Error-Page-_2800_DNS.aspx</link><pubDate>Mon, 20 Jun 2011 22:22:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5105</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When you use a &lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2011/06/15/Remote_2C00_-Mobile_2C00_-3G_2C00_-Check_2D00_in.aspx"&gt;web based kiosk for your attendant-less check-in system&lt;/a&gt;, you should think about what&amp;#39;s going to happen if your network fails you -- especially if you&amp;#39;re using the 3G network.&amp;nbsp; This is what you&amp;#39;ll see if the kiosk cannot reach the server:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="standard error" height="268" src="http://codersforchrist.com/images/20110620_StandardError.png" title="standard error" width="460" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;That page is especially problematic if you don&amp;#39;t have a keyboard because 
there is no way to refresh/reload the page if the network starts working
 again.&lt;/p&gt;&lt;p&gt;Luckily &lt;em&gt;you can customize this&lt;/em&gt; content... it&amp;#39;s just a pain to do it but I&amp;#39;ll show you how.&amp;nbsp; Here&amp;#39;s what our page now looks like:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="Custom DNSERROR" height="316" src="http://codersforchrist.com/images/20110620_CustomDNSERROR.png" title="Custom DNSERROR" width="455" /&gt;&lt;/p&gt;&lt;p&gt;The button is a nice feature because it&amp;#39;s basically just going to load our check-in system page again.&amp;nbsp; Without that, in the past someone would have to reboot the whole system (pressing F5 on an stashed-away emergency keyboard would have also worked).&amp;nbsp; It&amp;#39;s also worth noting that since you can use javascript in there, you should even 
be able to do something more sophisticated such as automatically retry every few seconds, etc.&lt;/p&gt;&lt;p&gt;Here&amp;#39;s how we did it:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Download a Resource editor such as &lt;a href="http://download.cnet.com/Resource-Hacker/3000-2352_4-10178587.html"&gt;Resource Hacker&lt;/a&gt;. I read that it is possible to edit .mui files using VisualStudio, but after about a half hour of fail, I found Resource Hacker and it did it quite easily.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Grab a copy of your kiosk&amp;#39;s ieframe.dll.mui file (found under C:\Windows\system32\en-US\) and stow it away for backup purposes.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use &lt;a href="http://download.cnet.com/Resource-Hacker/3000-2352_4-10178587.html"&gt;Resource Hacker&lt;/a&gt; and edit the ieframe.dll.mui file.&amp;nbsp; Navigate down into the &amp;quot;23&amp;quot; folder (aka HTML folder) and select the DNSERROR.HTM item like so:&lt;br /&gt;&lt;br /&gt;&lt;img alt="Resource Hacker" height="553" src="http://codersforchrist.com/images/20110620_ResHacker.png" title="Resource Hacker" width="456" /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make your changes.&amp;nbsp; It&amp;#39;s just HTML, so you know what to do...&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Press the &amp;quot;Compile Script&amp;quot; button.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Save the file and quit.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Copy the file over to your kiosk&amp;#39;s C:\Windows\system32\en-US\ folder.&amp;nbsp; If you&amp;#39;re unable to, because the file is in use or similar, just rename the &lt;em&gt;live &lt;/em&gt;file (oddly Windows let&amp;#39;s you do that) and then copy the file down to that folder.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Start IE and kill your network to see the result.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Is this a hack?&amp;nbsp; Of course, but it works. We&amp;#39;re using an old version of IE, so you&amp;#39;re mileage may vary. I&amp;#39;d consider switching to Chrome for our kiosks (since &lt;a href="http://think2loud.com/google-chrome-full-screen-kiosk-mode/"&gt;you can start chrome in -kiosk mode&lt;/a&gt; too) but I can&amp;#39;t seem to find any information on how to customize its equivalent error page.&amp;nbsp; Let me know if you&amp;#39;ve found another way.&lt;br /&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5105" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/check-in/default.aspx">check-in</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/IT/default.aspx">IT</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/utilities/default.aspx">utilities</category></item><item><title>Patchy Philosophy and the Bug Free Software</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/06/15/Patchy-Philosophy-and-the-Bug-Free-Software.aspx</link><pubDate>Thu, 16 Jun 2011 03:17:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5104</guid><dc:creator>nairdo</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;img alt="bugs outnumber humans" height="184" src="http://codersforchrist.com/images/20110615_bugs.jpg" title="bugs outnumber humans" width="444" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;em&gt;[note: This is an especially &amp;#39;angry coder&amp;#39; post -- so I encourage the the faint of heart reader to simply skip this article.]&lt;/em&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Although I hate to admit it, I know there is no such thing as bug free software releases.&amp;nbsp; With testing and a solid &lt;a href="http://en.wikipedia.org/wiki/Software_quality_assurance" title="Software Quality Assurance, Testing, etc. -- making sure your software does not stink"&gt;QA&lt;/a&gt; process in place, you most definitely can drive software defects in new releases &lt;em&gt;toward &lt;/em&gt;zero. However, the more complex the software is, the less likely it will come close to zero.&amp;nbsp; Some have argued from a business perspective it&amp;#39;s not cost effective to even &lt;em&gt;try &lt;/em&gt;to reach zero bugs.&amp;nbsp; Personally, I think it&amp;#39;s your obligation to do your best to find and kill bugs before your customers do -- if you want to keep your customers and your business.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;What to do?&amp;nbsp; Shall we developers simply pretend bugs don&amp;#39;t exist and keep on creating new releases?&amp;nbsp; Certainly not.&amp;nbsp; Patches to the rescue.&lt;/p&gt;&lt;p&gt;When you haven&amp;#39;t yet proven that you can release software with little to no defects, you are obligated to follow the patch principle.&amp;nbsp; Your customers are counting on it.&amp;nbsp; The idea is simple.&amp;nbsp; After you release a new version of your software (major or minor release -- any version that introduces new or changed functionality) you &lt;strong&gt;promise to quickly and frequently release patches&lt;/strong&gt; for the bugs that are reported by your customers.&amp;nbsp; You &lt;strong&gt;must not&lt;/strong&gt; wait until the &lt;em&gt;next &lt;/em&gt;release because guess what...there &lt;em&gt;will &lt;/em&gt;be more bugs in that release too. (To think that &amp;#39;the next release will not contain bugs&amp;#39; is to misunderstand developers and software development.) You should not wait and batch them up either and you should not endlessly test the patches for weeks or even days. You create and release them -- &lt;em&gt;quickly &lt;/em&gt;-- as your customers are broken until they&amp;#39;ve applied that patch.&amp;nbsp; They are at your mercy.&amp;nbsp; It&amp;#39;s up to you to establish a solid, reliable patch process your customers can count on. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;So, as we move into the future, I intend on pushing this same philosophy with the two open-source software projects that I&amp;#39;m involved with. Both of these new management systems (&lt;a href="https://github.com/JasonOffutt/Grassroots" title="Grassroots will empower non-profits to crowdsource their giving efforts. "&gt;Grassroots&lt;/a&gt; and ****) will not suffer from the patchy philosophy syndrome.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5104" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/CMS/default.aspx">CMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/IT/default.aspx">IT</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/project/default.aspx">project</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/angry+coder/default.aspx">angry coder</category></item><item><title>Remote, Mobile, 3G, Check-in</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/06/15/Remote_2C00_-Mobile_2C00_-3G_2C00_-Check_2D00_in.aspx</link><pubDate>Wed, 15 Jun 2011 14:11:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5102</guid><dc:creator>nairdo</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;img alt="the Kiosk Cart" height="184" src="http://codersforchrist.com/images/20110615_QC_kiosk.jpg" title="the Kiosk Cart" width="444" /&gt;&lt;/p&gt;

&lt;p&gt;When we launched our Queen Creek campus at the Queen Creek High School, we decided not to rely on the local network there.&amp;nbsp; Having learned our network reliability lessons when we ran a test church at Campo Verde High School the year before, we instead decided to put some trust into the 3G cellular network. So far it&amp;#39;s been pretty solid.&lt;/p&gt;

&lt;p&gt;Built not for looks but for quick setup, tear-down, and storage, this &amp;#39;kiosk on a cart&amp;#39; solution was somewhat based on &lt;a href="http://www.blueboxmoon.com/wordpress/"&gt;Daniel&amp;#39;s&lt;/a&gt; &amp;quot;network in a box&amp;quot; configuration and our &lt;a href="http://redmine.refreshcache.com/projects/cccevcheckin"&gt;custom check-in Arena module&lt;/a&gt;.&amp;nbsp; The cart includes a self contained network using a used Cisco 800 series router with a 3G card that creates a VPN tunnel to our main campus.&amp;nbsp; If IT and Networking are your gig, you can read &lt;a href="http://grinding-it-out.blogspot.com/2010/09/network-in-box-solution-for-our-new.html" title="Network-In-A-Box"&gt;all the details about those parts over on Derek&amp;#39;s blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re wondering if it&amp;#39;s fast or even usable... check out this video of me doing check-in of some test children during a live, normal weekend.&lt;/p&gt;
&lt;iframe frameborder="0" height="277" src="http://www.youtube.com/embed/PlzUvb0uWOA" width="444"&gt;&lt;/iframe&gt;
&lt;p&gt;Every time I see the labels print out with this setup, I&amp;#39;m amazed.&amp;nbsp; The browser on the kiosk is talking over the 3G VPN network, to our web server which is then sending a local print job to a printer called QC1 (or QC2), which in turn is defined to talk to the printer&amp;#39;s print-server on a particular static IP back over the 3G VPN network.&amp;nbsp; Back and fourth over the 3G network without a hitch.&lt;/p&gt;
&lt;p&gt;One more important thing to note. Notice how fast we can punch in a phone number? Unless you&amp;#39;re using iPads or some other non-mouse/keyboard device, you might need to change your registry&amp;#39;s &lt;a href="http://technet.microsoft.com/en-us/library/cc978662.aspx"&gt;DoubleClickSpeed &lt;/a&gt;setting. We&amp;#39;ve set ours to 50. That setting defines how clicks are interpreted by the OS, so if the number is too high the OS won&amp;#39;t interpret two very fast clicks (screen touches) as two single clicks.&lt;br /&gt;
&lt;/p&gt;

&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5102" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena/default.aspx">Arena</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/check-in/default.aspx">check-in</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/IT/default.aspx">IT</category></item><item><title>Mind Storm</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/06/11/Mind-Storm.aspx</link><pubDate>Sat, 11 Jun 2011 14:02:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5101</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;img height="178" src="http://codersforchrist.com/blog/images/nosleep.jpg" width="444" /&gt;&lt;br /&gt;Here are a few of the things swirling around in my head that make it hard to sleep...&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;thinking about new friends I met in North Africa that&amp;nbsp;live in tents 
(refugees) and have lost everything due to the revolution&lt;br /&gt;&lt;/li&gt;&lt;li&gt;having so much side work I have to turn customers away&lt;/li&gt;&lt;li&gt;emails I haven&amp;#39;t responded to&lt;br /&gt;&lt;/li&gt;&lt;li&gt;still top-secret and not secret side projects such as &lt;a href="https://github.com/JasonOffutt/Grassroots" title="our github repo for Grassroots"&gt;Grassroots&lt;/a&gt;&lt;/li&gt;&lt;li&gt;the need to do more &lt;a href="http://www.refreshcache.com" title="RefreshCache 2011"&gt;RefreshCache 2011&lt;/a&gt; prep work&lt;/li&gt;&lt;li&gt;thinking about how to keep up with news, software tech, tweets, feeds, and friends&lt;br /&gt;&lt;/li&gt;&lt;li&gt;trying to figure out when we can upgrade our Arena to a newer version&lt;/li&gt;&lt;li&gt;potential security holes&lt;/li&gt;&lt;li&gt;bugs&lt;/li&gt;&lt;li&gt;bed bugs (not that I have any -- just knowing that they exist somewhere out there)&lt;/li&gt;&lt;li&gt;&lt;a href="http://online.wsj.com/article/BT-CO-20110601-703255.html" title="They said it would not happen again after QE1, so why would I think this will be the end?"&gt;Quantative Easing 3&lt;/a&gt;&lt;/li&gt;&lt;li&gt;thinking about and publishing a list of things that are keeping me awake at 
night&lt;/li&gt;&lt;li&gt;recursion &lt;/li&gt;&lt;/ul&gt;Ok, they say if you just write things down that you&amp;#39;ll feel better and can get back to work. We&amp;#39;ll see if that works.&lt;br /&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5101" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/angry+coder/default.aspx">angry coder</category></item><item><title>I'm Defeated: Community Communications</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2011/02/16/I_2700_m-Defeated_3A00_-Community-Communications.aspx</link><pubDate>Wed, 16 Feb 2011 18:20:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5089</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;img align="right" alt="Community Subscriptions" border="0" height="269" hspace="3" src="http://codersforchrist.com/images/20110216_CommunitySubs.png" title="Community Subscriptions" vspace="2" width="266" /&gt;I admit defeat. I can&amp;#39;t keep up with all the community posts in &lt;a href="http://community.arenachms.com/forums/default.aspx" title="the.community Forums"&gt;the Arena community forums&lt;/a&gt; anymore.&amp;nbsp; Actually, I would have to say it started at some point during 2010.&amp;nbsp; I just would not admit it until today.&amp;nbsp; I guess this might also mean &lt;a href="http://codersforchrist.com/cs/ControlPanel/Blogs/community.arenachms.com" title="Arena: the.Community"&gt;the.Community&lt;/a&gt; has become a pretty successful tool for certain things &lt;a href="http://www.arenachms.com" title="ArenaChMS Arena ChMS"&gt;ArenaChMS&lt;/a&gt;! &lt;/p&gt;&lt;p&gt;Anyhow as a result, I&amp;#39;m finally changing my forum&amp;#39;s subscriptions -- unsubscribing from about 90% of them.&amp;nbsp; I just need to keep the most essential ones... and I&amp;#39;m lucky I went in there.&amp;nbsp; I also just discovered several new forums for the community developers, namely the &lt;a href="http://community.arenachms.com/forums/90/ShowForum.aspx" title="Arena: Developer Alerts"&gt;Developer Alerts&lt;/a&gt; forum. Perhaps that forum will be used to announce when a Arena deprecates a method from their class library API...&lt;/p&gt;&lt;p&gt;&lt;img alt="my developer forum subscriptions" height="305" src="http://codersforchrist.com/images/20110216_CommDevSubs.png" title="my developer forum subscriptions" width="447" /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5089" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/angry+coder/default.aspx">angry coder</category></item><item><title>Using Firebug in IE</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2010/12/07/Using-Firebug-in-IE.aspx</link><pubDate>Tue, 07 Dec 2010 15:39:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5077</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;div style="width: 450px"&gt;&lt;span style="float: left; margin-right: 8px"&gt;&lt;img src="http://community.arenachms.com/users/avatar.aspx?userid=2108" /&gt;&lt;/span&gt;&lt;span style="float: right"&gt;&lt;img src="http://www.codersforchrist.com/images/blog/firebug-logo.png" /&gt;&lt;/span&gt; &lt;p&gt;If you&amp;#39;re developing complex modules for your Arena website, you&amp;#39;ll probably need a tool such as &lt;a href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt; (a plugin for Firefox) to test how your CSS changes will effect layout in the browser.&amp;nbsp; Once you&amp;#39;ve used Firebug you&amp;#39;ll have a hard time trying to manage without it.&lt;/p&gt;&lt;p&gt;That&amp;#39;s great for Firefox, but what about IE?&amp;nbsp; With &lt;a href="http://getfirebug.com/firebuglite" title="Firebug Lite"&gt;Firebug Lite&lt;/a&gt; you can also have much of Firebug&amp;#39;s great functionality inside IE too -- you just need to add a script reference into the &amp;quot;head&amp;quot; section of your webpage...&lt;/p&gt;&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; overflow-x: auto; overflow-y: auto; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', Courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; cursor: text; border: silver 1px solid; padding: 4px"&gt;&lt;pre id="codeSnippet" style="text-align: left; line-height: 12pt; overflow-x: visible; overflow-y: visible; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', Courier, monospace; direction: ltr; color: black; font-size: 8pt; border-style: none; padding: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;https://getfirebug.com/firebug-lite.js&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;If you use &lt;a href="http://www.cccev.com" title="Central Christian Church (Arizona)"&gt;our&lt;/a&gt; custom &lt;strong&gt;&lt;a href="http://community.arenachms.com/files/folders/modules/entry10963.aspx" title="Inject Javascript"&gt;Inject Javascript&lt;/a&gt;&lt;/strong&gt; Arena module, you can have that (or any other javascript reference) put directly into the head of the HTML with a few simple module settings:&lt;/p&gt;&lt;p&gt;&lt;img alt="The module settings" height="127" src="http://www.codersforchrist.com/images/20101201_InjectJS.png" style="width: 644px; height: 127px" title="The module settings" width="644" /&gt;&lt;/p&gt;&lt;p&gt;And if you add it to your site&amp;#39;s Arena template and only allow admins view&amp;nbsp;permission to that module, it will have absolutely&amp;nbsp;no impact to anyone else.&amp;nbsp; Enjoy.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;em&gt;** You also need to add this &amp;quot;bookmarklet&amp;quot; (&lt;/em&gt;&lt;a href="BLOCKED SCRIPT(function(F,i,r,e,b,u,g,L,I,T,E){if(F.getElementById(b))return;E=F[i+&amp;#39;NS&amp;#39;]&amp;amp;&amp;amp;F.documentElement.namespaceURI;E=E?F[i+&amp;#39;NS&amp;#39;](E,&amp;#39;script&amp;#39;):F[i](&amp;#39;script&amp;#39;);E[r](&amp;#39;id&amp;#39;,b);E[r](&amp;#39;src&amp;#39;,I+g+T);E[r](b,u);(F[e](&amp;#39;head&amp;#39;)[0]||F[e](&amp;#39;body&amp;#39;)[0]).appendChild(E);E=new%20Image;E[r](&amp;#39;src&amp;#39;,I+L);})(document,&amp;#39;createElement&amp;#39;,&amp;#39;setAttribute&amp;#39;,&amp;#39;getElementsByTagName&amp;#39;,&amp;#39;FirebugLite&amp;#39;,&amp;#39;4&amp;#39;,&amp;#39;firebug-lite.js&amp;#39;,&amp;#39;releases/lite/latest/skin/xp/sprite.png&amp;#39;,&amp;#39;https://getfirebug.com/&amp;#39;,&amp;#39;#startOpened&amp;#39;);"&gt;&lt;em&gt;Launch Firebug Lite&lt;/em&gt;&lt;/a&gt;&lt;em&gt;) to your your Favorites in IE which is used to start Firebug Lite.&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5077" width="1" height="1"&gt;</description><enclosure url="http://codersforchrist.com/cs/blogs/nick/attachment/5077.ashx" length="9859" type="image/gif" /><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/code/default.aspx">code</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/reviews/default.aspx">reviews</category></item><item><title>Jason Offutt == JSON Data</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2010/11/25/Jason-Offutt-_3D003D00_-JSON-Data.aspx</link><pubDate>Thu, 25 Nov 2010 15:40:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5072</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;img align="right" alt="JSON Data" src="http://codersforchrist.com/images/JsonData.png" title="JSON Data" /&gt;My good friend and co-worker,&amp;nbsp;&lt;a href="http://twitter.com/jasonoffutt" title="Jason&amp;#39;s tweets"&gt;Jason Offutt&lt;/a&gt;, recently started blogging&amp;nbsp;over at &lt;a href="http://jsondata.tumblr.com/"&gt;JsonData.tumblr.com&lt;/a&gt;.&amp;nbsp; (Yes, not only is he a&amp;nbsp;developer and&amp;nbsp;an&amp;nbsp;artist, he&amp;#39;s also a great&amp;nbsp;writer!)&amp;nbsp; In our spare time, Jason and I have been working on a couple of open source projects.&amp;nbsp;One of them, his baby,&amp;nbsp;is an &lt;a href="http://redmine.refreshcache.com/projects/jrmycampaign" title="MyCampaign"&gt;MVC web application for allowing organizations to start giving campaigns w/sponsors&lt;/a&gt; and the other is still very young and undisclosed. The topic of open source&amp;nbsp;is a frequent&amp;nbsp;discussion among the guys involved in these projects and Jason just wrote &lt;a href="http://jsondata.tumblr.com/day/2010/11/22" title="Regarding Open Source and .NET"&gt;a great article about open source development&lt;/a&gt; in the .NET&amp;nbsp;world&amp;nbsp;--- which is something many non-MS developers may not realize is happening.&lt;/p&gt;&lt;p&gt;As I mentioned at &lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.refreshcache.com" title="RefreshCache"&gt;RefreshCache&lt;/a&gt;, it&amp;#39;s a shame when can&amp;#39;t utilize the tools and experience we&amp;#39;ve gained during our regular job when we continue the work of our ministry in the off hours; whether we&amp;#39;re helping&amp;nbsp;build a website for an&amp;nbsp;orphanage in Nepal or writing software for a&amp;nbsp;parachurch ministry.&amp;nbsp; We love &lt;a href="http://www.arenachms.com" title="Arena ChMS"&gt;Arena ChMS&lt;/a&gt;&amp;nbsp;as application development framework, but it&amp;#39;s not open source and we just can&amp;#39;t use it for our other projects.&lt;/p&gt;&lt;p&gt;We can&amp;#39;t control the choices of&amp;nbsp;our vendors, but we can control our own actions. This is part of the reason why Jason and I are involved in these other two projects.&amp;nbsp; I&amp;#39;ll be posting more about all this early next year.&amp;nbsp; Happy Thanksgiving!&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5072" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category></item><item><title>Silence: the moral dilemma on hiding a Facebook friend</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2010/10/06/Silence_3A00_-the-moral-delima-on-when-to-hide-a-FB-friend.aspx</link><pubDate>Thu, 07 Oct 2010 02:31:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5059</guid><dc:creator>nairdo</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;img align="right" alt="Facebook hiding" border="0" height="100" src="http://codersforchrist.com/images/blog/SilenceTheFBTroll.png" style="width: 239px; height: 100px" title="Facebook hiding" width="239" /&gt;Yesterday I used the &amp;quot;hide&amp;quot; &amp;lt;friend&amp;gt; feature on Facebook and I&amp;#39;m torn over it.&lt;/p&gt;&lt;p&gt;For me, &lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2007/08/16/Missing-the-Boat_3F00_-Look-at-the-Trend.aspx" title="my thoughts on Facebook from the summer of 2007"&gt;the Facebook trend&lt;/a&gt;&amp;nbsp;had become something I dreaded&amp;nbsp;because of a particular person&amp;nbsp;I know who doesn&amp;#39;t seem to have a day job other than to FB &lt;a href="http://en.wikipedia.org/wiki/Troll_(Internet)" title="someone who posts inflammatory, extraneous, or off-topic messages in an online community"&gt;troll&lt;/a&gt;&amp;nbsp;every day -&amp;nbsp;all day.&amp;nbsp;You know the type of person I&amp;#39;m talking about.&amp;nbsp;Not&amp;nbsp;the regular person who occasionally drops&amp;nbsp;an agenda-based-topic into their socially acceptable narcissistic stream of consciousness.&amp;nbsp;I&amp;#39;m talking about the &lt;em&gt;super activist&lt;/em&gt; whose only job is to dredge up nonsense, pre-spun statistics, so-called facts and bogus &amp;quot;news&amp;quot; which they feel is going to influence the overwhelmingly &lt;em&gt;silent&lt;/em&gt; majority of Americans.&amp;nbsp; In order to see what my other friends were up to, I&amp;#39;d have to wade through 6-12 other daily, inflammatory, repulsing posts from you-know-who, and after a year&amp;nbsp;or so&amp;nbsp;of doing this Facebook simply sickened me.&lt;/p&gt;&lt;p&gt;The act of &lt;em&gt;FB hiding&lt;/em&gt; is something I&amp;#39;ve been struggling with internally for months now.&amp;nbsp; Most the people I&amp;#39;ve talked with say, &amp;#39;yeah, it&amp;#39;s fine to silence your friend, and you need to do it.&amp;#39;&amp;nbsp; But I can&amp;#39;t help but feel: what&amp;#39;s the point in calling someone a friend if you can&amp;#39;t stomach what they have to say.&amp;nbsp; Hiding seems like a&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Cop_out" title="avoid taking responsibility for an action"&gt;cop out&lt;/a&gt; - a lie to yourself.&lt;/p&gt;&lt;p&gt;Coincidentally, my pastor said today, &amp;#39;to outright reject every detail of what someone says without measuring its&amp;nbsp;truthfulness is foolish and you&amp;#39;ll be seen as an idiot.&amp;#39;&amp;nbsp; While this applies to&amp;nbsp;to &lt;em&gt;all&lt;/em&gt;&amp;nbsp;parties&amp;nbsp;in a debate, what if only one side is being intellectually honest and reasonable? &amp;nbsp;I suppose it&amp;#39;s only reasonable to end that debate and walk away from the unhealthy&amp;nbsp;conversation.&lt;/p&gt;&lt;p&gt;I&amp;#39;m going to try it for a while and see how it goes. At least with hiding there is still some ability to participate in each others discussions, but I will definitely be mulling my decision over and may just pull the plug on the &amp;#39;friendship&amp;#39;.&lt;/p&gt;&lt;p&gt;I knew something like this could happen.&amp;nbsp; It&amp;#39;s one of the reasons why I&amp;#39;ve always been overly thoughtful about who I accept friend requests from.&amp;nbsp;I don&amp;#39;t generally think of my FB friends as simply co-workers or acquaintances.&amp;nbsp; I consider them &lt;em&gt;real friends&lt;/em&gt; (someone I could call on for help) and I want to keep it that way.&lt;/p&gt;&lt;p&gt;[&lt;strong&gt;Note&lt;/strong&gt;: In yet another coincidence, shortly after writing this post, &lt;a href="http://blog.facebook.com/blog.php?post=434700832130" title="Fb Groups"&gt;Facebook announced a new version of &amp;quot;Groups&amp;quot;&lt;/a&gt; which could be the answer to the problem I&amp;#39;ve just described -- provided the trolls take&amp;nbsp;their constant&amp;nbsp;activism to&amp;nbsp;their activist groups.]&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5059" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/facebook/default.aspx">facebook</category></item><item><title>Simple Deploy Tool</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2010/09/10/Simple-Deploy-Tool.aspx</link><pubDate>Fri, 10 Sep 2010 17:25:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5052</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Even before the&amp;nbsp;full release of our &lt;a href="http://www.cccev.com/arena/default.aspx" title="a.k.a. Projekt Hasselhoff"&gt;newly rebuilt website&lt;/a&gt;, it seemed like we were constantly deploying daily/hourly updates from our sprints to&amp;nbsp;several of&amp;nbsp;servers (&lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2008/06/05/User-Acceptance-Testing-_2800_UAT_2900_.aspx" title="User Acceptance Testing"&gt;UAT&lt;/a&gt;, Staging, etc.)... so much so that, being a &lt;a href="http://en.wikipedia.org/wiki/Larry_Wall#Virtues_of_a_programmer" title="Virtues of a programmer, from Larry, Randal and Tom&amp;#39;s Programming Perl"&gt;Lazy programmer&lt;/a&gt;, I stopped what I was doing one night and wrote quick WinForms app I call Simple Deploy.&lt;/p&gt;&lt;p&gt;&lt;img alt="Simple Deploy Screenshot" height="588" src="http://codersforchrist.com/images/20100910_SimpleDeploy.png" style="width: 524px; height: 588px" title="Simple Deploy Screenshot" width="524" /&gt;&lt;/p&gt;&lt;p&gt;Now I can quickly deploy a set of files again-and-again to a set of servers with a simple button click -- &lt;em&gt;not that I endorse having to do this &lt;/em&gt;-- but now I can be lazy.&amp;nbsp; If I need to exclude a server, I just unclick the server&amp;#39;s checkbox before pressing Deploy.&lt;/p&gt;&lt;p&gt;I&amp;#39;m not sure yet, but I&amp;#39;m considering adding this into the &lt;a href="http://www.refreshcache.com/"&gt;RefreshCache&lt;/a&gt; swag bag if others think it&amp;#39;s useful.&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5052" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/code/default.aspx">code</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/utilities/default.aspx">utilities</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/RefreshCache/default.aspx">RefreshCache</category></item><item><title>The Arena Community Developer Board</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2010/07/02/The-Arena-Community-Developer-Board.aspx</link><pubDate>Fri, 02 Jul 2010 15:37:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:4957</guid><dc:creator>nairdo</dc:creator><slash:comments>1</slash:comments><description>&lt;img align="right" alt="the Board - NOT" height="159" src="http://codersforchrist.com/images/20100702theBoard_lol.jpg" style="width: 444px; height: 159px" title="the Board - NOT" width="444" /&gt;In February 2007 the guys at &lt;a href="http://www.arenachms.com/"&gt;Arena ChMS&lt;/a&gt; established what was loosely called the Community Developer Board (or CDB). This little known group was comprised of the Arena team (&lt;a href="http://twitter.com/jmaddox79"&gt;Jeff M&lt;/a&gt;, Steve, &lt;a href="https://twitter.com/mtwhite"&gt;Mark&lt;/a&gt;, &lt;a href="https://twitter.com/Alfred_Johnson"&gt;Alfred&lt;/a&gt;, etc), &lt;a href="http://www.jonedmiston.com/"&gt;Jon&lt;/a&gt; and &lt;a href="http://www.david-turner.net/"&gt;David&lt;/a&gt; from &lt;a href="http://www.ccvonline.com/"&gt;CCV&lt;/a&gt;, and Phil and &lt;a href="http://twitter.com/airdo"&gt;myself&lt;/a&gt; from &lt;a href="http://www.cccev.com/"&gt;Central&lt;/a&gt;. Since that time a few more churches were invited to the team (&lt;a href="http://transformingrenewal.blogspot.com/"&gt;Joel&lt;/a&gt; &amp;amp; &lt;a href="http://blueboxmoon.com/wordpress/highdesertchurch/"&gt;Daniel&lt;/a&gt;: &lt;a href="http://www.highdesertchurch.com/"&gt;High Desert Church&lt;/a&gt;, Jeremy Hoff:&amp;nbsp;&lt;a href="http://www.theshepherd.org/"&gt;Shepherd of the Hills&lt;/a&gt;, Tom Powers:&amp;nbsp;&lt;a href="http://www.southeastchristian.org/"&gt;Southeast Christian Church&lt;/a&gt;) but our charter has been roughly the same as summarized here: &lt;blockquote&gt;&lt;em&gt;The CDB&amp;rsquo;s role is to foster and grow structured development for the Arena community.&amp;nbsp;To achieve this, the CDB should, among other things, create and maintain documentation that illustrates how to properly design, develop and package Arena modules for use by the community.&amp;nbsp; Additionally it should&amp;nbsp;... fulfill other needs that are essential to more efficient module development.&lt;/em&gt;&lt;/blockquote&gt;&lt;p&gt;A few of the things the board has done:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;help establish &lt;a href="http://community.arenachms.com/"&gt;the.Community site&lt;/a&gt;&lt;/li&gt;&lt;li&gt;establish the &lt;a href="http://www.codersforchrist.com/arenawiki/"&gt;original wiki&lt;/a&gt; which later moved to the &lt;a href="http://community.arenachms.com/wiki/default.aspx"&gt;official wiki&lt;/a&gt; &lt;/li&gt;&lt;li&gt;establish the&amp;nbsp;namespace/naming standards&lt;/li&gt;&lt;li&gt;create the Arena Custom Module Developer guide (ACMD)&lt;/li&gt;&lt;li&gt;establish the monthly and yearly Arena Developer Roundtables&lt;/li&gt;&lt;li&gt;establish the module export/import feature (and applying constant pressure to make it more complete)&lt;/li&gt;&lt;li&gt;establish our original shared source repository on CVS Dude&lt;/li&gt;&lt;li&gt;establish the &amp;quot;My Portal&amp;quot; framework enabling developers to write personalization modules&lt;/li&gt;&lt;li&gt;establish consistency on various things like using the &lt;a href="http://www.asp.net/ajaxlibrary/cdn.ashx"&gt;MS Ajax CDN&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Although we&amp;nbsp;haven&amp;#39;t&amp;nbsp;always agreed on things, we&amp;#39;ve made good progress in areas where there was consensus.&amp;nbsp;(Establishing the &lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2009/10/11/RefreshCache-09_3A00_-Summary.aspx" title="people who attended the first RefreshCache conference"&gt;RefreshCache tribe&lt;/a&gt; has been instrumental in relieving pressure in areas where we have not agreed -- more below.)&lt;/p&gt;&lt;p&gt;With the arrival of &lt;a href="http://twitter.com/mike522" title="Mike on Twitter"&gt;Mike Gold&lt;/a&gt; at Arena and onto the CDB, he&amp;#39;s been &lt;a href="http://transformingrenewal.blogspot.com/2010/06/developer-roundtable-2010-day-1.html" title="SCRUM at Arena as described by Joel"&gt;reshaping how things are done at Arena&lt;/a&gt; and as result the CDB will be undergoing a reboot or reinvention.&amp;nbsp;Regardless of the direction the CDB takes, the RefreshCache team will continue to grow in importance.&amp;nbsp;On that team Arena has no responsibility -- which means they are not on the hook for anything.&amp;nbsp; This has&amp;nbsp;been a real blessing&amp;nbsp;for everyone.&amp;nbsp;Having that kind of clarity has freed up the community to take responsibility and ownership for things that they feel are critical or important (&lt;a href="http://www.refreshcache.com/Arena/Default.aspx?page=3283" title="The RefreshCache community is a group of connected web designers and developers from churches, businesses, and non-profits that leverage the power of the Arena Church Management System. Our purpose is to create an environment driven by innovation and collaboration. We seek to empower each other; to share ideas and code, and to shatter the traditional business dependencies on silos and secrecy that plague many ministry organizations today.   *    We believe that through our God-given talents in design, software engineering and the power of Arena, we are in control of our own destinies. With innovation and collaboration, we can give birth to far greater things than a single church IT staff can alone."&gt;our Manifesto&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;For the most part, everyone who attended &lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2009/10/11/RefreshCache-09_3A00_-Summary.aspx" title="Oct 09 was our first event"&gt;last year&amp;#39;s event&lt;/a&gt; is part of the RefreshCache team.&amp;nbsp;Over the past year this team has:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;established and manage the #ArenaChMS IRC channel (Brian Slezak)&lt;/li&gt;&lt;li&gt;established the &lt;a href="http://arena.refreshcache.com/" title="our Arena Sample Server"&gt;Arena Sample Server&lt;/a&gt; - a place where developers can setup their custom modules and try out other&amp;nbsp;live modules in action&lt;/li&gt;&lt;li&gt;established our &lt;a href="http://redmine.refreshcache.com/"&gt;Redmine project server&lt;/a&gt; - the new repository (replacing CSV Dude) for hosting your code, issue tracking, wiki, etc. &lt;a href="http://www.refreshcache.com/Arena/Default.aspx?page=3297&amp;amp;promotionId=9" title="read more about it here"&gt;more...&lt;/a&gt; (Daniel Hazelbaker)&lt;/li&gt;&lt;li&gt;created an amazing Arena module installer (Jon Edmiston, David Turner)&amp;nbsp;&lt;/li&gt;&lt;li&gt;really beta tested each major release of Arena before its available to everyone (Austin Spooner)&amp;nbsp;&lt;/li&gt;&lt;li&gt;created the &lt;a href="http://arena.refreshcache.com/Arena/default.aspx?page=3326" title="Sandbox"&gt;Arena Sandbox&lt;/a&gt; - a place where developers can test installing their modules in a clean sandbox environment (Daniel Hazelbaker)&lt;/li&gt;&lt;li&gt;taught&amp;nbsp;developers essential tips and tricks for developing Arena modules (David Turner, &lt;a href="http://www.jeffschinella.com/" title="Jeff Schinella&amp;#39;s Blog"&gt;Jeff Schinella&lt;/a&gt;, &lt;a href="http://twitter.com/jasonoffutt" title="Jason on Twitter"&gt;Jason Offutt&lt;/a&gt;) &lt;/li&gt;&lt;li&gt;shared vital&amp;nbsp;ideas and concepts about ChMS (Jon Edmiston)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We&amp;#39;re only about about 3 months away from RefreshCache 101010 so it&amp;#39;s not too late to get involved on this team by &lt;a href="http://www.refreshcache.com/Arena/Default.aspx?page=3295&amp;amp;eventid=4" title="You can stay at my house if needed"&gt;signing up to attend the free event&lt;/a&gt;.&amp;nbsp;As you can see on our &lt;a href="http://www.refreshcache.com/Arena/Default.aspx?page=3284" title="RefreshCache &amp;#39;10 Speakers"&gt;Speakers &lt;/a&gt;page, this year we&amp;#39;re planning on having &lt;a href="http://integrumtech.com/" title="Integrum"&gt;the guys from Integrum&lt;/a&gt; (creators of &lt;a href="http://gangplankhq.com/" title="Gangplank HQ"&gt;Gangplank&lt;/a&gt;) stop by and chat with us about stuff they think is important.&amp;nbsp;There are a few other surprises we&amp;#39;re hoping to unload on everyone there too but it&amp;#39;s too soon to spill the details.&lt;/p&gt;&lt;p&gt;Lastly, I&amp;#39;m serious about this:&amp;nbsp; if anyone else is out there and can&amp;#39;t attend RefreshCache because of cost please let me know.&amp;nbsp;You can stay at my house (last year we had a few people at my place -- it was great!)&amp;nbsp;or I&amp;#39;ll help find independent sponsors to help with travel costs, etc.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=4957" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Roundtable/default.aspx">Roundtable</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/RefreshCache/default.aspx">RefreshCache</category></item><item><title>101010 A Developers Conference: RefreshCache</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2010/05/08/101010-A-Developers-Conference_3A00_-RefreshCache.aspx</link><pubDate>Sun, 09 May 2010 01:28:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:4890</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2009/09/29/RefreshCache-2009.aspx"&gt;&lt;img align="right" alt="RC 101010" border="0" height="140" hspace="5" src="http://codersforchrist.com/images/20101010_RC_logo.png" title="RC 101010" vspace="5" width="369" /&gt;Last year we decided to take a little more ownership of our destiny&lt;/a&gt; so we created &amp;quot;&lt;a href="http://www.refreshcache.com" title="our official site for the RefreshCache developer conference"&gt;RefreshCache&lt;/a&gt;,&amp;quot; the &lt;strong&gt;free&lt;/strong&gt; two day event for church developer teams that use the &lt;a href="http://www.arenachms.com" title="Arena ChMS (Church Management System)"&gt;Arena ChMS&lt;/a&gt; platform.&amp;nbsp; We&amp;#39;re doing it again, but this year we&amp;#39;re breaking the ice with pre-event social and hack-night on the evening of 10/10/10.&amp;nbsp; (We did not initially realize it was a binary day.)&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;We only made &lt;a href="http://community.arenachms.com/forums/thread/7786.aspx"&gt;one announcement&lt;/a&gt; on the Arena community developer forum and we already have 19 registered attendees with two (and possibly three) of the &lt;a href="http://churchrelevance.com/100-largest-churches-in-america-for-2009/" title="100 Largest Churches in America for 2009"&gt;top ten largest Christian churches&lt;/a&gt; in America attending.&amp;nbsp; If you&amp;#39;re looking to get plugged into the core of the Arena &lt;em&gt;community developer&lt;/em&gt; team, the RefreshCache (RC) team is it.&lt;/p&gt;

&lt;p&gt;We haven&amp;#39;t locked everything down yet, but to give you an idea of what kinds of things we cover, &lt;a href="http://www.codersforchrist.com/docs/RefreshCache%20v1.0%20Schedule.pdf" title="RefreshCache v1.0 Schedule" target="_blank"&gt;check out last year&amp;#39;s schedule&lt;/a&gt; or &lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2009/10/11/RefreshCache-09_3A00_-Summary.aspx" title="my summary of last year&amp;#39;s RC"&gt;one&lt;/a&gt; of these &lt;a href="http://transformingrenewal.blogspot.com/2009/10/chms-refreshcache-day-1.html" title="Joel Lingenfelter"&gt;other blog&lt;/a&gt; posts. Also as an added bonus, this year we&amp;#39;re providing all registrants with early releases of a bunch of modules created by RefreshCache founding members.&amp;nbsp; These modules include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Arena &amp;lt;-&amp;gt; Planning Center Online (PCO&lt;/strong&gt;) integration.&amp;nbsp; Created by &lt;a href="http://www.jonedmiston.com/" title="Jon Edmiston"&gt;Jon&lt;/a&gt; and &lt;a href="http://www.david-turner.net/"&gt;David&lt;/a&gt; over at &lt;a href="http://www.ccvonline.com/" title="Christ&amp;#39;s Church of the Valley"&gt;CCV&lt;/a&gt;.&amp;nbsp; Currently being tested by &lt;a href="http://www.austinspooner.com/" title="Austin Spooner"&gt;Austin&lt;/a&gt; at &lt;a href="http://www.newcovenantbible.org/" title="New Covenant Bible Church"&gt;NCBC&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;TinyMCE &lt;/strong&gt;based Advanced HTML Editor. Created by &lt;a href="http://twitter.com/jasonOffutt" title="Jason Offutt"&gt;Jason O&lt;/a&gt; at &lt;a href="http://www.cccev.com" title="Central Christian Church of the East Valley"&gt;Central&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;CuFon Font Replacer&lt;/strong&gt;. Use the &lt;a href="http://wiki.github.com/sorccu/cufon/about" title="a worthy alternative to sIFR"&gt;CuFon font rendering engine&lt;/a&gt; instead of boring Arial, Verdana, etc on your website. Assembled by me.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Promotions via XSLT&lt;/strong&gt;.&amp;nbsp; It can use a custom XSLT (for layout), inject style sheet, apply image effects, randomize, and cache.&amp;nbsp; (The &amp;#39;promotions&amp;#39; module to end all other promotion modules.&lt;/li&gt;&lt;li&gt;and a few others...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;I really hope you don&amp;#39;t miss it -- &lt;a href="http://www.refreshcache.com/Arena/Default.aspx?page=3295&amp;amp;eventid=4"&gt;register now&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=4890" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena/default.aspx">Arena</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Roundtable/default.aspx">Roundtable</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/RefreshCache/default.aspx">RefreshCache</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/XSLT/default.aspx">XSLT</category></item><item><title>Ignore This Book At Your Own Peril</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2010/03/27/Ignore-This-Book-At-Your-Own-Peril.aspx</link><pubDate>Sat, 27 Mar 2010 18:09:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:4875</guid><dc:creator>nairdo</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;img align="left" alt="Rework by Jason Fried and David Heinemeier Hansson" height="171" src="http://codersforchrist.com/images/blog/rework_cover_sm.jpg" title="Rework by Jason Fried and David Heinemeier Hansson" width="120" /&gt;&amp;quot;&lt;a href="http://www.amazon.com/Rework-Jason-Fried/dp/0307463745" title="currently #11 on Amazon&amp;#39;s Top Seller list"&gt;Ignore this book at your own peril.&lt;/a&gt;&amp;quot; -- &lt;a href="http://www.sethgodin.com/sg/bio.asp" title="Who doesn&amp;#39;t know who Seth Godin is?"&gt;Seth Godin&lt;/a&gt; said that about the book &lt;a href="http://37signals.com/rework/" title="Rework"&gt;Rework&lt;/a&gt; by the founders of &lt;a href="http://37signals.com/" title="home of 37signals"&gt;37signals&lt;/a&gt;.&amp;nbsp; Before I even finished it, I went and ordered two copies for some friends. Everyone will benefit from reading the book, but anyone who&amp;#39;s writing software, is running a business, wants to start their own business, is a product manager, or is managing projects, really should &lt;em&gt;stop whatever they are doing&lt;/em&gt; and take 2-4 hours to read this book.&lt;/p&gt;&lt;p&gt;I&amp;#39;ve read a bunch of books on various topics over the past several years -- and while many of them are really good, I usually don&amp;#39;t talk them up too much.&amp;nbsp; This book is 99% meat and no fluff.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I experienced so many of the things Jason and David write about but one in particular stands out to me. Meetings are toxic.&amp;nbsp; Not all meetings, but most.&amp;nbsp; When I worked at a very large Fortune 100 company, I remember getting pulled into meetings with hundreds (400-800) of others.&amp;nbsp; If you take the average salary and compute the cost of this 800-1600 man hour meeting, you&amp;#39;re in the $20,000-$50,000 range. As my old boss, Frank Dooris, used to say, &amp;quot;How many pagers does a sales guy have to sell to make up for that?&amp;quot;&lt;/p&gt;&lt;p&gt;I could say so much more about this book.&amp;nbsp; It describes much of what inspired us to &lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2009/09/29/RefreshCache-2009.aspx" title="RefreshCache 09"&gt;start our own developer conference&lt;/a&gt; for the &lt;a href="http://www.arenachms.com" title="home of ArenaChMS or Shelby Arena ChMS"&gt;Arena ChMS&lt;/a&gt; community developers. We&amp;#39;re giving this book to all attendees of this year&amp;#39;s &lt;a href="http://www.refreshcache.com" title="a developer conference run by developers"&gt;RefreshCache&lt;/a&gt; conference.&amp;nbsp; I hope you or your developers can come.&amp;nbsp; We all end up hurting if you don&amp;#39;t make it to the event, but ultimately you&amp;#39;ll be missing out the most.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=4875" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/reviews/default.aspx">reviews</category></item><item><title>Arena Loves Twitter Too</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2010/02/03/Arena-Loves-Twitter-Too.aspx</link><pubDate>Thu, 04 Feb 2010 03:26:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:4870</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;img align="right" height="128" src="http://codersforchrist.com/images/twitter_logo_128.png" width="128" /&gt;Have I mentioned how much I love Arena?&amp;nbsp; Here&amp;#39;s why - because it can do almost anything you need it to.&amp;nbsp; Let me illustrate with a small example.&amp;nbsp; I recently heard someone say &amp;#39;oh, Arena can&amp;#39;t do that yet&amp;#39; on the topic of integrating twitter with our website.&amp;nbsp; Not true.&amp;nbsp; There&amp;#39;s no need to wait for a future of release of Arena.&amp;nbsp; You can easily add your favorite tweets to &lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.refreshcache.com" title="RefreshCache.com website"&gt;an Arena powered website&lt;/a&gt; using the &lt;strong&gt;XML File Transformation&lt;/strong&gt; module.&lt;/p&gt;&lt;p&gt;&lt;img alt="@RefreshCache tweets as seen on www.refreshcache.com (powered by Arena ChMS)" height="333" src="http://codersforchrist.com/images/20100203RCTweets_homepage.jpg" title="@RefreshCache tweets as seen on www.refreshcache.com (powered by Arena ChMS)" width="500" /&gt;&lt;/p&gt;&lt;p&gt;Here&amp;#39;s how to do it in three simple steps.&lt;/p&gt;&lt;p&gt;1) Publish an XSLT file that transforms a Twitter RSS feed to suit your website&amp;#39;s layout, look and feel.&amp;nbsp; I&amp;#39;ve included mine below which you can reuse or modify as you see fit.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2) Add the XML File Transformation module to a page.&lt;/p&gt;&lt;p&gt;3) Configure the module&amp;#39;s settings appropriately.&amp;nbsp; For example, I&amp;#39;m using &amp;quot;http://twitter.com/statuses/user_timeline/47123579.rss&amp;quot; for the &lt;strong&gt;XML File Path&lt;/strong&gt; and &amp;quot;~/xslt/Custom/Cccev/twitter.xslt&amp;quot; for the &lt;strong&gt;XSLT File Path&lt;/strong&gt; setting.&amp;nbsp; (That XML File Path is the RSS feed for our &lt;a href="http://twitter.com/RefreshCache" title="@RefreshCache tweets"&gt;@RefreshCache&lt;/a&gt; tweets.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ok, I&amp;#39;m definitely no XSLT expert -- in fact I&amp;#39;m an absolute bumbling n00b in this area.&amp;nbsp; Regardless, I was able to cobble something together that works.&amp;nbsp; Notice in lines 9-60 I&amp;#39;m falling back to my language of choice (C#) for date processing mostly because the JavaScript date parser does not like the RSS pubDate string format.&amp;nbsp; Yes, lines 63-75 are me embedding a style block directly inline.&amp;nbsp; (I know, shame on me.)&amp;nbsp; Line 78 is where I restrict the number of tweets displayed to only 5.&amp;nbsp; Lastly, lines 77-86 are the main HTML layout for the tweets. Again, &lt;a href="http://codersforchrist.com/docs/twitter.xslt" title="my twitter.xslt" target="_blank"&gt;you can download mine&lt;/a&gt; and modify it as you please.&lt;br /&gt;&lt;/p&gt;&lt;div style="line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: Consolas,'Courier New',Courier,Monospace; max-height: 700px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px"&gt;&lt;div style="line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ISO-8859-1&amp;quot;&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:stylesheet&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns:xsl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;xmlns:msxsl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;xmlns:cs&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;urn:cs&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;xmlns:js&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;urn:custom-javascript&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;         &lt;span style="color: #ff0000"&gt;exclude-result-prefixes&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;msxsl js&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;  &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;  &lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msxsl:script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;language&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;c#&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;implements-prefix&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;cs&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;[CDATA[       &lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;     public static string UXDate( string pubDate )&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;     {&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;         DateTime d = DateTime.Parse( pubDate );&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;         DateTime now = DateTime.Now;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;         TimeSpan timeSince = now - d;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;         &lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;         double inSeconds = timeSince.TotalSeconds;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;         double inMinutes = timeSince.TotalMinutes;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;         double inHours = timeSince.TotalHours;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;         double inDays = timeSince.TotalDays;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;         double inMonths = inDays / 30;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;         double inYears = inDays / 365;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt; &amp;nbsp;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;         if(Math.Round(inSeconds) == 1){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;             return &amp;quot;1 second ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;         else if(inMinutes &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt; 1.0){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;             return Math.Floor(inSeconds) + &amp;quot; seconds ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;         else if(Math.Floor(inMinutes) == 1){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  31:&lt;/span&gt;             return &amp;quot;1 minute ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  32:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  33:&lt;/span&gt;         else if(inHours &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt; 1.0){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  34:&lt;/span&gt;             return Math.Floor(inMinutes) + &amp;quot; minutes ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  35:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  36:&lt;/span&gt;         else if(Math.Floor(inHours) == 1){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  37:&lt;/span&gt;             return &amp;quot;about an hour ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  38:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  39:&lt;/span&gt;         else if(inDays &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt; 1.0){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  40:&lt;/span&gt;             return Math.Floor(inHours) + &amp;quot; hours ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  41:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  42:&lt;/span&gt;         else if(Math.Floor(inDays) == 1){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  43:&lt;/span&gt;             return &amp;quot;1 day ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  44:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  45:&lt;/span&gt;         else if(inMonths &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt; 3 ){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  46:&lt;/span&gt;             return Math.Floor(inDays) + &amp;quot; days ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  47:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  48:&lt;/span&gt;         else if(inMonths &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;= 12 ){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  49:&lt;/span&gt;             return Math.Floor(inMonths) + &amp;quot; months ago &amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  50:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  51:&lt;/span&gt;         else if(Math.Floor(inYears) &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;= 1){&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  52:&lt;/span&gt;             return &amp;quot;1 year ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  53:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  54:&lt;/span&gt;         else&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  55:&lt;/span&gt;         {&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  56:&lt;/span&gt;             return Math.Floor(inYears) + &amp;quot; years ago&amp;quot;;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  57:&lt;/span&gt;         }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  58:&lt;/span&gt;     }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  59:&lt;/span&gt;  ]]&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  60:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msxsl:script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  61:&lt;/span&gt; &amp;nbsp;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  62:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:template&lt;/span&gt; &lt;span style="color: #ff0000"&gt;match&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;rss/channel&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  63:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  64:&lt;/span&gt;        #tweets a {&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  65:&lt;/span&gt;         text-decoration: none;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  66:&lt;/span&gt;         color: #444;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  67:&lt;/span&gt;        }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  68:&lt;/span&gt;        &lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  69:&lt;/span&gt;        #tweets span {&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  70:&lt;/span&gt;         font-family: Verdana, Helvetica, sans-serif;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  71:&lt;/span&gt;         font-size: 9px;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  72:&lt;/span&gt;         color: #888;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  73:&lt;/span&gt;         font-style: italic;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  74:&lt;/span&gt;        }&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  75:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  76:&lt;/span&gt; &amp;nbsp;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  77:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;tweets&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;padding-left:5px;font-family: Verdana, Helvetica, sans-serif; font-size: 10px; width: 500px;&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  78:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:for-each&lt;/span&gt; &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;item[position() &amp;amp;lt;= 5]&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  79:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  80:&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;{link}&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  81:&lt;/span&gt;                   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:value-of&lt;/span&gt; &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;substring-after(title,&amp;#39;: &amp;#39;)&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  82:&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  83:&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:value-of&lt;/span&gt; &lt;span style="color: #ff0000"&gt;select&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;cs:UXDate(pubDate)&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;span&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  84:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  85:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:for-each&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  86:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  87:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:template&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas,'Courier New',Courier,Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;span style="color: #606060"&gt;  88:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;An &amp;quot;expert&amp;quot; may cringe at what I&amp;#39;ve done in there, but I really don&amp;#39;t care.&amp;nbsp; I mostly care about the end result.&lt;/p&gt;&lt;p&gt;In case you&amp;#39;re wondering, the XSLT transforms this sort of thing:&lt;/p&gt;&lt;div style="line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: Consolas, 'Courier New', Courier, Monospace; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: gray 1px solid; padding: 4px"&gt;&lt;pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: Consolas, 'Courier New', Courier, Monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px"&gt;&lt;p&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;UTF-8&amp;quot;&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;rss&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns:atom&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;2.0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns:georss&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://www.georss.org/georss&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;channel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Twitter / refreshcache&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;link&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;http://twitter.com/refreshcache&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;link&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;atom:link&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;application/rss+xml&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://twitter.com/statuses/user_timeline/47123579.rss&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;self&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;description&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Twitter updates from Refresh Cache / refreshcache.&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;description&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;language&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;en-us&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;language&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ttl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;40&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ttl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;item&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;refreshcache: #ArenaChMS comm devs - planning is underway for RefreshCache 2010!  Submit your topics and discussion ideas now http://digs.by/1KpL&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;description&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;refreshcache: #ArenaChMS comm devs - planning is underway for RefreshCache 2010!  Submit your topics and discussion ideas now http://digs.by/1KpL&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;description&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;pubDate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Wed, 03 Feb 2010 19:57:37 +0000&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;pubDate&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;guid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;http://twitter.com/refreshcache/statuses/8600862288&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;guid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;link&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;http://twitter.com/refreshcache/statuses/8600862288&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;link&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;item&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;/span&gt;
&lt;/p&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;...into this.&amp;nbsp; Here&amp;#39;s a close up of the final product.&lt;/p&gt;&lt;p&gt;&lt;img alt="@RefreshCache tweets as seen on www.refreshcache.com (powered by Arena ChMS)" height="250" src="http://codersforchrist.com/images/20100203RCTweets_sm.jpg" title="@RefreshCache tweets as seen on www.refreshcache.com (powered by Arena ChMS)" width="519" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=4870" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/code/default.aspx">code</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/XSLT/default.aspx">XSLT</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/twitter/default.aspx">twitter</category></item><item><title>RefreshCache 09: Summary</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2009/10/11/RefreshCache-09_3A00_-Summary.aspx</link><pubDate>Sun, 11 Oct 2009 11:47:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:4862</guid><dc:creator>nairdo</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;img alt="RefreshCache 09" border="0" height="195" src="http://codersforchrist.com/images/blog/RefreshCache_09_a.jpg" style="width: 495px; height: 195px" title="RefreshCache 09" width="495" /&gt;&lt;/p&gt;&lt;p&gt;Wow, what a week**.&amp;nbsp; Based on the feedback we heard or&amp;nbsp;saw&amp;nbsp;(&lt;a href="http://twitter.com/oddjosh/status/4668280429" title="Josh from Southeast Christian Church"&gt;Josh&lt;/a&gt;, &lt;a href="http://twitter.com/search?q=%23refreshcache" title="RefreshCache tweets"&gt;tweets&lt;/a&gt;), some blog posts we read (&lt;a href="http://transformingrenewal.blogspot.com/2009/10/chms-refreshcache-day-1.html" title="Joel&amp;#39;s blog"&gt;Joel&lt;/a&gt;, &lt;a href="http://officecurmudgeon.com/2009/10/07/refreshcache-reflections/" title="Brian&amp;#39;s blog"&gt;Brian&lt;/a&gt;),&amp;nbsp;as well as&amp;nbsp;Jason and my own observations, we can now say&amp;nbsp;&lt;a href="http://www.refreshcache.com" title="Official site of RefreshCache"&gt;RefreshCache&lt;/a&gt; was a total success!&lt;/p&gt;&lt;p&gt;While each person&amp;nbsp;had their favorite part, I think we&amp;#39;re all in agreement when I say we came together because of our passion for using software technology to grow the Kingdom of God.&amp;nbsp; Each of us wants &lt;strong&gt;to make a difference for the kingdom&lt;/strong&gt; and &lt;strong&gt;we want to use our skills to create software&lt;/strong&gt;.&amp;nbsp;&amp;nbsp;Ultimately RefreshCache was a seed; a realization that we are not limited by the speed of a vendor (as is the case with most other ChMS systems) and a kick start to working together as a community throughout the whole year.&lt;/p&gt;&lt;p&gt;For me, it was an honor to be able to rub shoulders with the guys that attended.&amp;nbsp; Here were some of my highlights and favorite moments:&lt;img align="right" alt="Life After Features" height="140" src="http://codersforchrist.com/images/blog/RC09_LifeAfterFeatures.jpg" style="width: 184px; height: 140px" title="Life After Features" width="184" /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Getting to hang out with&amp;nbsp;&lt;a href="http://blueboxmoon.com/wordpress/highdesertchurch/2009/08/24/all-church-check-in-success/" title="Daniel&amp;#39;s Blog"&gt;Daniel Hazelbaker&lt;/a&gt; from &lt;a href="http://www.highdesertchurch.com/" title="High Desert Church"&gt;HDC&lt;/a&gt;&amp;nbsp;and chat about check-in, subversion, CodePlex, branching, etc.&amp;nbsp; You should see the Arena WS API he created!&lt;/li&gt;&lt;li&gt;Having time to work in Visual Studio with &lt;a href="http://www.austinspooner.com/" title="Austin&amp;#39;s blog"&gt;Austin Spooner&lt;/a&gt; from NCBC.&amp;nbsp; Austin is Mr. Answer Man when it comes to Arena modules.&lt;/li&gt;&lt;li&gt;Having time to talk about open source and Typo3 with &lt;a href="http://officecurmudgeon.com/" title="Brian&amp;#39;s blog"&gt;Brian Slezak&lt;/a&gt; from &lt;a href="http://www.cor.org/" title="Church of the Resurrection"&gt;COR&lt;/a&gt;.&amp;nbsp; We&amp;#39;re lucky to have someone with Brian&amp;#39;s experience on our team.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Getting owned by David Turner in a few rounds of Halo ODST and learning about the &lt;a href="http://voracitysolutions.com" title="Voracity Solutions website"&gt;Voracity Solutions&lt;/a&gt; package installer.&amp;nbsp; This guy is skilled with Visual Studio and the Rocket Launcher.&lt;/li&gt;&lt;li&gt;Getting to see the work of Tom Powers, Josh Martin, and Maxim Strelsov from Southeast Christian.&amp;nbsp; These guys are pretty new to Arena but they&amp;#39;re already creating great stuff.&amp;nbsp; I can&amp;#39;t wait to see what they tackle next.&lt;/li&gt;&lt;li&gt;Talking with &lt;a href="http://transformingrenewal.blogspot.com/" title="A must read for any Church IT staff"&gt;Joel Lingenfelter&lt;/a&gt; from &lt;a href="http://www.highdesertchurch.com/" title="High Desert Church"&gt;HDC&lt;/a&gt;&amp;nbsp;about coffee and all things ChMS.&amp;nbsp; He has to be the most&amp;nbsp;gifted CFO I&amp;#39;ve ever met!&lt;/li&gt;&lt;li&gt;Chatting with Michael Speers and Eric Byrd from Shadow Mountain.&amp;nbsp; Thanks to their questions, they spurred on a mini &amp;quot;check out the features right under your nose&amp;quot; session.&lt;/li&gt;&lt;li&gt;Getting to hear from &lt;a href="http://www.cccev.com" title="Central Christian Church"&gt;Central&amp;#39;s&lt;/a&gt; own &lt;a href="http://twitter.com/yell0wdart" title="Jason&amp;#39;s tweets - someday a blog."&gt;Jason Offutt&lt;/a&gt; on JSON, SOA, and jQuery.&amp;nbsp; Jason&amp;#39;s an engineer and an artist!&lt;/li&gt;&lt;li&gt;Listening to CCV&amp;#39;s&amp;nbsp;Jeff Schinella on Semantic Web, CSS and XSLT.&amp;nbsp; We all need to put his lesson into action.&lt;/li&gt;&lt;li&gt;Hearing Jon&amp;#39;s closing presentation on &amp;quot;Life After Features&amp;quot; some of which is touched on &lt;a href="http://www.jonedmiston.com/?p=532" title="Jon&amp;#39;s on church metrics"&gt;in his blog&lt;/a&gt;. and &lt;a href="http://www.david-turner.net/2009/10/era/" title="David Turner on Estimated Regular Attenders"&gt;David&amp;#39;s blog on eRA&lt;/a&gt;.&amp;nbsp; Jon is a visionary and always seems to be 2 steps ahead of everyone.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For you Arena community developers who missed this year&amp;#39;s event, you need to join us on &lt;a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat"&gt;IRC&lt;/a&gt; channel &lt;a href="irc://chat.freenode.net/#ArenaChMS" title="IRC Channel #ArenaChMS on freenode" target="_blank"&gt;#ArenaChMS&lt;/a&gt; if you want to plug into this group of guys. Like I said at R.C., we are all going to see the rediscovery of Internet Relay Chat once the Google Wave hits -- albeit in a newer, easier to use form.&lt;/p&gt;&lt;p&gt;To correct the record, I&amp;#39;d say that &lt;a href="http://markmichaelmiller.com/" title="Mark&amp;#39;s blog -- finally!"&gt;Mark Miller&lt;/a&gt; was the actual inspiration for RefreshCache.&amp;nbsp; Mark is a creative cinematographer/director genius and due to unforeseen events he had to bow out from the planning of RefreshCache early this summer.&amp;nbsp;Hopefully we&amp;#39;ll have someone of his caliber to kick next year&amp;#39;s RefreshCache into the event-execution stratosphere.&amp;nbsp; Also thanks to Mark we have&amp;nbsp;&lt;a href="http://twitpic.com/ke9s9" title="Mark&amp;#39;s photo"&gt;the only clear picture at RefreshCache&lt;/a&gt; (showing a handful of people).&lt;/p&gt;&lt;p&gt;Lastly,&amp;nbsp;I just want to publically thank Kim Musgrave, Liz (my wife) and especially&amp;nbsp;Jason Offutt who picked up the tasks when we lost Mark Miller, because without him RefreshCache&amp;nbsp;09 would not have happened.&lt;/p&gt;&lt;p&gt;&lt;em&gt;** For anyone that though I was kidding, I&amp;nbsp;crashed at 7pm on Thursday night and slept for 13 hours.&lt;/em&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=4862" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/RefreshCache/default.aspx">RefreshCache</category></item><item><title>SSRS, SQL 2005 and Parameterized TOP</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2009/09/30/SSRS_2C00_-SQL-2005-and-Parameterized-TOP.aspx</link><pubDate>Thu, 01 Oct 2009 05:47:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:4861</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I was writing a query for&amp;nbsp;Reporting Services (SSRS) and I &lt;em&gt;really&lt;/em&gt; wanted to use a parameter to allow the user to choose how many of the &amp;quot;top&amp;quot; results should be retrieved/shown.&amp;nbsp; With SQL Server 2005, the TOP expression is now&amp;nbsp;parameterized however attempting to use it in an SSRS dataset like this:&lt;/p&gt;&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: Consolas, 'Courier New', Courier, Monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: Consolas, 'Courier New', Courier, Monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt; ( @topN ) p.person_id, p.first_name,p.last_name
&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; core_person p &lt;span style="color: #0000ff"&gt;WITH&lt;/span&gt;(NOLOCK)
&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; p.last_name&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;only gave me this error:&lt;/p&gt;&lt;p&gt;&lt;img alt="SSRS Error" height="162" src="http://codersforchrist.com/images/20090930SSRS_TOP.gif" style="width: 611px; height: 162px" title="SSRS Error" width="611" /&gt;&lt;/p&gt;&lt;p&gt;Rats!&amp;nbsp; It should have&amp;nbsp;worked.&amp;nbsp; My @topN parameter is properly defined&amp;nbsp;as a Report Parameter of type Integer with a default value of 20.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Looking around I found a lot of&amp;nbsp;complicated ways around the issue some of them involving creating dynamic statements and such &lt;a href="http://www.sqlserverbiblog.com/post/How-to-parameterize-a-TOP-values-query.aspx" title="How to parameterize a TOP values query"&gt;like this one (link)&lt;/a&gt;.&amp;nbsp; Way too complicated for me and I hate dynamic SQL -- I just say NO.&lt;/p&gt;&lt;p&gt;It turns out with a little creative oob thinking you can just trick SSRS by declaring another variable in&amp;nbsp;your dataset&amp;nbsp;and then setting it to the value of your Report Parameter like this:&lt;/p&gt;&lt;div style="font-size: 8pt; margin: 20px 0px 10px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; font-family: Consolas, 'Courier New', Courier, Monospace; background-color: #f4f4f4; border: gray 1px solid; padding: 4px"&gt;&lt;pre style="font-size: 8pt; margin: 0em; overflow: visible; width: 100%; color: black; line-height: 12pt; font-family: Consolas, 'Courier New', Courier, Monospace; background-color: #f4f4f4; border-style: none; padding: 0px"&gt;&lt;span style="color: #0000ff"&gt;DECLARE&lt;/span&gt; @NewTop &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; @NewTop = @topN

&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TOP&lt;/span&gt; ( @NewTop ) p.person_id, p.first_name, p.last_name
&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; core_person p &lt;span style="color: #0000ff"&gt;WITH&lt;/span&gt;(NOLOCK)
&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; p.last_name&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Problem solved.&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=4861" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/code/default.aspx">code</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/SQL+Reporting+Services/default.aspx">SQL Reporting Services</category></item><item><title>RefreshCache 2009</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2009/09/29/RefreshCache-2009.aspx</link><pubDate>Tue, 29 Sep 2009 19:24:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:4859</guid><dc:creator>nairdo</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;&lt;img align="right" alt="RefreshCache 09" height="212" hspace="10" src="http://codersforchrist.com/images/RefreshCache_reflect3.jpg" title="RefreshCache 09" width="226" /&gt;Well it&amp;#39;s less than a week away -- our first 100% community organized, managed and executed developer gathering for &lt;a href="http://arenachms.com" title="Arena ChMS"&gt; Arena&lt;/a&gt; called &lt;a href="http://www.refreshcache.com" title="RefreshCache"&gt;RefreshCache&lt;/a&gt;.&amp;nbsp; I originally envisioned this get together as a very small group of guys (6-8) but we decided to open it up to other Arena community developers.&amp;nbsp; Invitations were sent out about a month ago and we are now double what I was originally expecting.&lt;/p&gt;&lt;p&gt;Arena is unique, and although I&amp;#39;ve always known it, something changed this past spring when we collaborated with &lt;a href="http://transformingrenewal.blogspot.com/" title="Joel Ligenfelter&amp;#39;s blog"&gt;Joel&lt;/a&gt; and &lt;a href="http://blueboxmoon.com/wordpress/highdesertchurch/" title="Daniel Hazelbaker&amp;#39;s blog"&gt;Daniel&lt;/a&gt; of &lt;a href="http://www.highdesertchurch.com/" title="High Desert Church"&gt;High Desert Church&lt;/a&gt; to create a check-in system that works for both of our churches exactly the way we both needed it to work.&amp;nbsp; Something happened when we broke away and &lt;a href="http://checkinwizard.codeplex.com/" title="the Check-in Wizard on CodePlex"&gt;moved our code to CodePlex&lt;/a&gt;.&amp;nbsp; I think I realized that we are limited only by our fear and actions, and not by any one vendor.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This small group of developers who are gathering together next Monday and Tuesday in a desert town of Arizona are a unique group of developers who share the same goal: &lt;a href="http://www.airdo.org/blog/index.php?d=28&amp;amp;m=05&amp;amp;y=05" title="my very first blog post, Saturday, May 28, 2005"&gt;to collaborate and combine our development efforts in order to increase the fruit of our labor&lt;/a&gt; &lt;em&gt;(my first public blog post)&lt;/em&gt;.&amp;nbsp; This has been a great journey so far, but the best days are still to come.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=4859" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category></item><item><title>Online Arena ChMS Demo</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2009/09/10/Online-Arena-ChMS-Demo.aspx</link><pubDate>Thu, 10 Sep 2009 17:55:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:4858</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>
&lt;p&gt;&lt;img align="right" alt="Arena glass" height="154" src="http://codersforchrist.com/images/ArenaGlassy_m.jpg" style="padding: 10px" title="Arena glass" width="150" /&gt;In case you did not hear via twitter (&lt;a href="http://twitter.com/ourarena" title="OurArena on Twitter"&gt;@ourarena&lt;/a&gt; or &lt;a href="http://twitter.com/#search?q=%23ArenaChMS" title="ArenaChMS search on Twitter"&gt;#ArenaChMS&lt;/a&gt;) or the &lt;a href="http://community.arenachms.com/blogs/in_the_arena/archive/2009/09/10/Open-Arena-Demonstration.aspx" title="Open Arena Demonstrations"&gt;Arena blog&lt;/a&gt;, Chris Rivers will be giving a 10,000 foot demonstration of Arena ChMS.&amp;nbsp; If you have never seen Arena in action and are considering a switch from your current Church Management System (ChMS) I would definitely encourage you to &lt;a href="https://www1.gotomeeting.com/register/502881169" title="sign up for the demo"&gt;sign up for the Sept 16th demo next week&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The demo won&amp;#39;t even scratch the surface of all the features and possibilities Arena has, but it&amp;#39;s definitely a good starting point. &lt;br /&gt;
&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=4858" width="1" height="1"&gt;</description></item><item><title>The Voracity Solutions 'Installer'</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2009/07/21/The-Voracity-Solutions-_2200_Installer_2200_.aspx</link><pubDate>Tue, 21 Jul 2009 17:50:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:4856</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-size: 10pt; font-family: 'Arial','sans-serif'"&gt;&lt;img align="right" alt="Voracity Solutions Control Panel" height="92" src="http://codersforchrist.com/images/20090722VSInstaller.jpg" style="width: 300px; height: 92px" title="Voracity Solutions Control Panel" width="300" /&gt;If you&amp;nbsp;haven&amp;#39;t checked out &lt;a href="http://www.voracitysolutions.com" title="home of Voracity Solutions"&gt;&lt;font color="#800080"&gt;Voracity Solutions&lt;/font&gt;&lt;/a&gt; you should do it now.&amp;nbsp; You already know the guys at Voracity Solutions as Jon Edmiston and David Turner the original creators of what has become &lt;a href="http://www.arenachms.com" title="Arena ChMS"&gt;&lt;font color="#800080"&gt;Arena ChMS&lt;/font&gt;&lt;/a&gt;.&amp;nbsp; Among various long term plans and projects, they&amp;#39;ve started cooking up custom modules and solutions for Arena.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt; font-family: 'Arial','sans-serif'"&gt;A few weeks ago I got an early glimpse of an Arena module installer/control panel they worked on, but now they have a public demo in their &lt;a href="http://www.voracitysolutions.com/blog/?p=21" title="Voracity Installer"&gt;latest blog post&lt;/a&gt;. (I&amp;#39;d recommend &lt;a href="http://feeds2.feedburner.com/VoracitySolutionsBlog" title="subscribe here"&gt;&lt;font color="#800080"&gt;subscribing to their blog&lt;/font&gt;&lt;/a&gt;&amp;nbsp;to get the latest tidbits and news.)&amp;nbsp; Although such a mechanism was discussed some time ago, Jon and David finally had a serious need to make it happen.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 10pt; font-family: 'Arial','sans-serif'"&gt;It&amp;#39;s called the Voracity Installer and it has the potential to make installing your custom Arena modules a snap (literally a one click operation). I say &lt;em&gt;potentially&lt;/em&gt; because they&amp;rsquo;re wondering if other Arena community developers are interested in using it &amp;ndash; so if you are interested, let them know by &lt;a href="http://www.voracitysolutions.com/blog/?p=21#respond"&gt;dropping your comment/reply on that post&lt;/a&gt;.&amp;nbsp; If they publish their package file specification we&amp;#39;ll almost certainly adopt it for use in all our module packages.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=4856" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Arena+ChMS/default.aspx">Arena ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/utilities/default.aspx">utilities</category></item></channel></rss>
