<?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>This End Up</title><link>http://codersforchrist.com/cs/blogs/nick/default.aspx</link><description>handling technology in the church with care</description><dc:language>en</dc:language><generator>CommunityServer 2.1 (Build: 60809.935)</generator><item><title>Github's Diff Sorta Stinks</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2017/09/27/Github-Diff-Sorta-Stinks.aspx</link><pubDate>Wed, 27 Sep 2017 15:31:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5498</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5498.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5498</wfw:commentRss><description>
&lt;p&gt;Ever make a commit to Git and then look at the commit&amp;#39;s diff in Github you say to yourself --&amp;quot;I didn&amp;#39;t do that!&amp;quot; &amp;nbsp;It&amp;#39;s probably just diff confusion caused by whitespace. &amp;nbsp;Here&amp;#39;s my change where I just wrapped code with a try catch block:&lt;/p&gt;


&lt;p&gt;&lt;a href="http://codersforchrist.com/images/20170927-GithubDiff.png"&gt;&lt;img src="http://codersforchrist.com/images/20170927-GithubDiff_sm.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s that same change as seen in my favorite editor&amp;#39;s UltraEdit simple diff tool:&lt;/p&gt;

&lt;p&gt;
   &lt;a href="http://codersforchrist.com/images/20170927-UltraEditDiff.png"&gt;&lt;img src="http://codersforchrist.com/images/20170927-UltraEditDiff_sm.png" /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/blog/967-github-secrets"&gt;This Github secret (?w=1)&lt;/a&gt; would have been nice -- if it was working.&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5498" 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/angry+coder/default.aspx">angry coder</category></item><item><title>Rock, The First Year</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2015/10/27/Rock_2C00_-The-First-Year.aspx</link><pubDate>Tue, 27 Oct 2015 17:18:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5496</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5496.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5496</wfw:commentRss><description>&lt;p&gt;&lt;img src="http://codersforchrist.com/blog/images/20151008_RockFirstYear.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;What a year. We just wrapped up &lt;a href="https://twitter.com/RefreshCache"&gt;RefreshCache v7&lt;/a&gt; at the 2015 National Church IT Network Round-table (&lt;a href="https://twitter.com/citrt"&gt;CITRT&lt;/a&gt;) where I was asked to present a 10 minute update on the Rock RMS project. Luckily the hard-working team at Harvest recorded the 10Talks so you can &lt;a href="https://www.youtube.com/watch?v=5YOGcTNLWH0&amp;amp;list=PLhew51LnKikjUiczwk1cZPGgCFyIjQgVn&amp;amp;index=10"&gt;watch it on this YouTube channel&lt;/a&gt;&amp;nbsp;if you&amp;#39;d like to get an update on what has happened over the last year. &lt;/p&gt;

&lt;p&gt;One thing I forgot to mention during the update was this: &amp;quot;yes, even that beautiful booth we had at the event was donated -- and it was donated by the people who made it, the amazing people at &lt;a href="http://groupimaging.com/home/"&gt;Group Imaging&lt;/a&gt;.&amp;quot; (&lt;em&gt;If you ever have the need for printed displays, apparel, or promotional items, you won&amp;#39;t go wrong giving your business to them.&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://codersforchrist.com/blog/images/20151008_RockBooth.jpg"&gt;&lt;img src="http://codersforchrist.com/blog/images/20151008_RockBooth_sm.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the event, there was tons of excitement about finally having access (it&amp;#39;s free) to an enterprise level CMS/ChMS Relationship Management System like Rock. Although we&amp;#39;re planning the &lt;a href="http://www.rockrms.com/rx2015"&gt;Rock eXperience 2015&lt;/a&gt; event on Oct 26-27 in AZ, many expressed a desire for Rock specific workshops at this year&amp;#39;s CITRT. We&amp;#39;ll see what we can do at next year&amp;#39;s 10th anniversary event being hosted by our close friends and Rock development partners at &lt;a href="https://newspring.cc/"&gt;NewSpring&lt;/a&gt;&amp;nbsp;Church.&lt;/p&gt;

&lt;h2&gt;Rock McKinley 4.0 News&lt;/h2&gt;

&lt;p&gt;Some news we leaked was the eminent release of Rock McKinley 4.0. If you looked at the earlier versions of Rock, you might have noticed it lacked some important features. &lt;strong&gt;We knew this.&lt;/strong&gt; It&amp;#39;s why the Rock core team&amp;#39;s churches couldn&amp;#39;t move to Rock. With this next release, it&amp;#39;s enabled &lt;a href="http://ccvonline.com"&gt;Christ&amp;#39;s Church of the Valley&lt;/a&gt;&amp;nbsp;(as of this writing, they&amp;#39;re on the 4.0 pre-release) to move to Rock and will enable &lt;a href="http://centralaz.com"&gt;my church&lt;/a&gt; to move off our current Church Management System over the next few months. (Side note: Although there are more organizations using Rock in production we don&amp;#39;t know them all. On the rockrms.com site we only publish &lt;a href="http://www.rockrms.com/organizations#all-orgs"&gt;those who self-report their organization&amp;#39;s implementation status&lt;/a&gt; and I&amp;#39;m looking forward to finally making our half circle a full circle.)&lt;/p&gt;

&lt;h2&gt;Rock Support&lt;/h2&gt;

&lt;p&gt;Another piece of huge news is the &lt;a href="http://www.sparkdevnetwork.com"&gt;Spark Development Network&lt;/a&gt;&amp;nbsp;(the 501c3 that manages Rock)&amp;nbsp;is going to take away another reason why some were saying they couldn&amp;#39;t move to Rock: support.&lt;/p&gt;

&lt;p&gt;If your organization needs to pay someone to help with implementation or help with problem solving, the Spark Development Network is partnering with &lt;a href="http://www.kingdomfirstsolutions.com/Rock"&gt;Kingdom First Solutions&lt;/a&gt; who will start offering this as a for-fee service option. We are &lt;strong&gt;super excited&lt;/strong&gt; about this partnership because, not only is the team at KFS is a remarkable group of guys who really understand ministry, they are like minded and like-hearted as the Spark team.  Again, Rock is free and you don&amp;#39;t have to pay for support, but if you must, now you can. :)&lt;/p&gt;

&lt;p&gt;I&amp;#39;ve got more to say, but that&amp;#39;s enough for now.&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5496" width="1" height="1"&gt;</description><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/ChMS/default.aspx">ChMS</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Rock+RMS/default.aspx">Rock RMS</category></item><item><title>Rock RMS is Released</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2014/11/03/Rock-RMS-is-Released.aspx</link><pubDate>Mon, 03 Nov 2014 17:44:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5477</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5477.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5477</wfw:commentRss><description>&lt;img height="100" src="http://codersforchrist.com/images/201411103_rockrms.png" style="width: 444px; height: 100px" width="444" /&gt;

&lt;p&gt;It recently came to my attention that someone thought the Rock project was dead because the team members were not blogging about it on our personal blogs. &lt;strong&gt;How far from the truth!&lt;/strong&gt; In all fairness, we probably should have told everyone months ago to go read &lt;a href="https://www.rockrms.com/Rock/Connect"&gt;the Rock blog&lt;/a&gt; for the latest details about it.  So please go do that now...&lt;/p&gt;

&lt;p&gt;Let me just say that Rock McKinley 1.0 was released a few weeks ago and we launched it at the &lt;a href="http://www.refreshcache.com/"&gt;RefreshCache&lt;/a&gt; and &lt;a href="http://codersforchrist.com/cs/ControlPanel/Blogs/http:"&gt;Church IT RoundTable (CITRT)&lt;/a&gt;. &amp;nbsp;We held a pre-event called &amp;quot;Rock Day&amp;quot; and then shared nearly 20 sessions at the main three day event. You can &lt;a href="https://www.rockrms.com/Learn/Videos"&gt;watch most of the recorded videos&lt;/a&gt; on the Rock &lt;a href="https://www.rockrms.com/Learn"&gt;Learn&lt;/a&gt; pages.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;could not be more excited&lt;/em&gt; about what the future will now bring as we re-grow a new community of developers to contribute solutions for this new free and open source platform.&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5477" 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/RefreshCache/default.aspx">RefreshCache</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Rock+RMS/default.aspx">Rock RMS</category></item><item><title>Simply SQL Loops</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2014/05/27/Simply-SQL-Loops.aspx</link><pubDate>Tue, 27 May 2014 20:37:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5471</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5471.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5471</wfw:commentRss><description>&lt;p&gt;(&lt;em&gt;I&amp;#39;m mostly writing this for myself... to remind myself how easy this can be.&lt;span style="font-size: 10pt"&gt;)&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I recently needed to &lt;span style="font-size: 10pt"&gt;record some metrics for our prayer ministry using data we&amp;#39;ve been collecting over the past 5 years. &amp;nbsp;We had the data in various other tables, so I just needed a quick way to pull them out and insert them into our metric table.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;No complex CTEs, recursion, cursors, etc. are necessary when you just need to crank through N&amp;nbsp;&lt;em&gt;sets&lt;/em&gt;&amp;nbsp;of date ranges.&lt;/p&gt;

&lt;p&gt;&lt;span style="font-size: 10pt"&gt;Here&amp;#39;s an example using monthly date ranges. &amp;nbsp;All that&amp;#39;s needed is a start date, an end date, and the query you need to run for each month (for something BETWEEN 1st of previous month and 1st of current month):&lt;/span&gt;&lt;/p&gt;

&lt;pre&gt;-- Set your start date and end date
Declare @StartDt DATE = &amp;#39;05/01/2009&amp;#39;
Declare @EndDt DATE = GetDate()
DECLARE @DateA DATE
DECLARE @DateB DATE
WHILE @StartDt &amp;lt; @EndDt
	BEGIN
		-- First day of previous month
		--SELECT DATEADD(month, DATEDIFF(MONTH, 0, @StartDt) - 1, 0)
		
		-- First day of current month
		--SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @StartDt), 0)
		
		-- First day of next month
		--SELECT DATEADD(month, DATEDIFF(MONTH, 0, @StartDt) + 1, 0)
		
		-- Our range will be 1st of previous month and 1st of current month.
		SET @DateA = (SELECT DATEADD(month, DATEDIFF(MONTH, 0, @StartDt) - 1, 0))
		SET @DateB = (SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @StartDt), 0))
		
		-- Your query goes here... take this abbreviated example
		--INSERT INTO mtrc_metric_item
		--( 
		--	[metric_id], 
		--	[metric_value], 
		--	[collection_date])
		--SELECT
		--	65,
		--	COUNT(1),
		--	@DateA
		-- FROM pryr_request WHERE date_created BETWEEN @DateA AND @DateB
	-- Increment to the next month
	SET @StartDt = (SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @StartDt) + 1, 0))
	
	END
&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;For yearly ranges just make the necessary adjustments. &amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5471" 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/SQL/default.aspx">SQL</category></item><item><title>Rock Beta Status</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2014/04/23/Rock-Beta-Status.aspx</link><pubDate>Wed, 23 Apr 2014 22:58:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5438</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5438.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5438</wfw:commentRss><description>&lt;p&gt;&lt;img height="100" src="http://codersforchrist.com/images/2014-04-23_rock_refreshcache.png" style="width: 444px; height: 100px" width="444" /&gt;&lt;br /&gt;
From a blogging perspective, I&amp;#39;ve been in a cave for the past 6-12 months helping to get Rock into it&amp;#39;s beta phase. &amp;nbsp;If you are hungry for Rock news, hopefully you&amp;#39;re plugged into &lt;a href="http://www.rockrms.com/Rock/Connect" title="Rock Podcasts"&gt;our podcasts&lt;/a&gt;, our &lt;a href="http://www.rockrms.com/Rock/Learn" title="Rock Getting Started"&gt;Getting Started docs&lt;/a&gt;&lt;span style="font-size: 10pt"&gt;, our &lt;a href="http://www.rockrms.com/Rock/Ask" title="Rock Q &amp;amp; A"&gt;Q &amp;amp; A system&lt;/a&gt;, or &lt;a href="http://www.jonedmiston.com/?cat=30" title="Jon Edmiston Blog"&gt;Jon&amp;#39;s Rock blog posts.&lt;/a&gt;&amp;nbsp; Those sources will help you know what&amp;#39;s going on from an admin/user perspective. &amp;nbsp;Now that Rock is in beta and the dust has settled a bit, I plan on posting about what&amp;#39;s coming down the road -- from a Rock community developer&amp;#39;s perspective. That&amp;#39;s a perspective that you won&amp;#39;t hear too much about on those other channels.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s a summary of what will be&amp;nbsp;happening over the next few months:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We&amp;#39;ll have a developer site with developer documentation similar to the Rock Getting Started guides.&lt;/li&gt;

&lt;li&gt;We&amp;#39;ll have our own Developer Q &amp;amp; A separate from the General Use admin-users.&lt;/li&gt;

&lt;li&gt;&lt;span style="font-size: 10pt"&gt;We&amp;#39;ll have a Rock Store where we can share (for free or for fee) any packages you develop for Rock.&lt;/span&gt;&lt;/li&gt;

&lt;li&gt;&lt;span style="font-size: 10pt"&gt;&lt;/span&gt;We&amp;#39;ll have some tools to help you kick-start creating Rock Blocks.&lt;/li&gt;

&lt;li&gt;&lt;span style="font-size: 10pt"&gt;And besides all that,&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&amp;nbsp;w&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;e&amp;#39;re planning our own community meet-up at least once per year at the &lt;a href="http://www.refreshcache.com/" title="Church ChMS developer conference"&gt;RefreshCache developer event&lt;/a&gt;. &amp;nbsp; At RC we&amp;#39;ll&amp;nbsp;have basic and advanced Rock developer workshops, collaborate on Rock packages and projects, and generally do what we&amp;#39;ve been doing with other ChMS communities at RefreshCache.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, besides watching this blog for Rock developer news, make sure you plan to attend the Church IT Network Roundtable and RefreshCache event this year at Northwoods Community Church in Peoria, IL on October 22-24. &amp;nbsp;We&amp;#39;re planning our first meet-up &lt;strong&gt;the day before the event on Oct 21&lt;/strong&gt; -- so be sure you fly in a day early from the normal CITRT/RC event.&amp;nbsp; Mark your calendars because registration opens on May 1st this year.&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5438" 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/RefreshCache/default.aspx">RefreshCache</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/Rock+RMS/default.aspx">Rock RMS</category></item><item><title>RefreshCache is Four Weeks Away</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2013/09/26/RefreshCache-is-Four-Weeks-Away.aspx</link><pubDate>Fri, 27 Sep 2013 03:17:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5411</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5411.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5411</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.refreshcache.com"&gt;RefreshCache&lt;/a&gt; (RC) is four weeks away, so if you&amp;#39;ve been slacking it&amp;#39;s not too late to register. If you do so before Sept 30th, you&amp;#39;ll be eligible to win the Surface RT we&amp;#39;re giving away.&lt;/p&gt;

&lt;p&gt;This year we&amp;#39;re experimenting by joining forces with the great guys and gals that run the &lt;a href="http://www.churchitnetwork.com/" title="CITRT"&gt;National Church IT RoundTable&lt;/a&gt; (aka CITRT or Church IT Network). Although us web and developer types will have our own sessions, workshops, and round-tables, we will all gather with our IT-network-pro brothers for the general sessions and food gatherings. There should be some good synergy this year.&lt;/p&gt;

&lt;p&gt;RefreshCache will make you a better developer. Really! &lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2013/09/21/career-and-skills-advice.aspx" title="Career and skills advice"&gt;As recently mentioned by Jon Skeet&lt;/a&gt;, you should find opportunities to speak at conferences and present to your peers. This is one of those great things that RefreshCache gives you. What other national developer conferences will let us (you and I) speak and teach? Ha!&lt;/p&gt;

&lt;p&gt;All kidding aside, I believe in RefreshCache will all my heart. Regardless of which Church Management System (ChMS), Content Management System (CMS) platform, or device you&amp;#39;re developing or building on top of, if you&amp;#39;re doing any development for the Kingdom RefreshCache is the conference you should plan on attending each year. Add it into your budget. And definitely don&amp;#39;t miss next year. If you do, you&amp;#39;ll regret it when you find out who we&amp;#39;ve got lined up to speak and present.&lt;/p&gt;

&lt;p&gt;Although it&amp;#39;s better to give than to receive, we know for certain that &amp;quot;he who refreshes others will himself be refreshed.&amp;quot; (Prov 11:25b)&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5411" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/news/default.aspx">news</category></item><item><title>Rock ChMS Update</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2013/03/12/Rock-ChMS-Update.aspx</link><pubDate>Wed, 13 Mar 2013 00:03:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5269</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5269.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5269</wfw:commentRss><description>&lt;img alt="Rock ChMS Update" src="http://codersforchrist.com/images/2013-03-12_RockChMSUpdate.png" /&gt;

&lt;p&gt;A little over a year ago the Spark Development Network was formed and at RefreshCache v3 &lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2011/10/10/Rock-ChMS_2C00_-An-Open-Source-Church-Management-System-and-CMS-Framework.aspx"&gt;we announced our intentions&lt;/a&gt; to begin developing a Church Management System called Rock ChMS.&amp;nbsp; Where are we now?&lt;/p&gt;
&lt;p&gt;Well, hopefully you&amp;#39;ve subscribed to the semi-regular newsletters we&amp;#39;ve been sending out.&amp;nbsp; If you didn&amp;#39;t,&amp;nbsp;&lt;strong&gt;go&amp;nbsp;do it&amp;nbsp;right now&lt;/strong&gt; (&lt;a href="http://www.sparkdevelopmentnetwork.com/" title="Stay In Contact"&gt;bottom right corner of the Spark Dev Network home page&lt;/a&gt;) before you continue reading...&amp;nbsp;I&amp;#39;ll wait here.&lt;/p&gt;
&lt;p&gt;Over the past year the guys on the Rock core team (such as &lt;a href="http://www.david-turner.net/" title="David Turner"&gt;David&lt;/a&gt;, &lt;a href="http://www.jonedmiston.com/"&gt;Jon&lt;/a&gt; and &lt;a href="https://github.com/mikepetersonccv"&gt;Mike Peterson&lt;/a&gt;)&amp;nbsp;have been coding like mad.&amp;nbsp; These are the hardest and smartest working guys I know.&amp;nbsp; Sometime during 2012 the first phase was completed -- an entire modern &lt;strong&gt;application development framework&lt;/strong&gt; and CMS was created from scratch!&amp;nbsp; It&amp;#39;s got all the bells and whistles you&amp;#39;d want in a modern application development framework: Entity Framework, LINQ, REST api, Bootstrap adherence, integration with a job/task&amp;nbsp;scheduling system (Quartz),&amp;nbsp;etc. And then the team moved on to creating additional features needed to build the ChMS parts of the system including: a Workflow engine, a generic Group and Attribute system, reusable&amp;nbsp;&lt;a href="https://github.com/SparkDevNetwork/Rock-ChMS/wiki/UI-Toolkit"&gt;UI Toolkit&lt;/a&gt;,&amp;nbsp;etc.... and also&amp;nbsp;began creating the core ChMS functionality.&lt;/p&gt;
&lt;p&gt;For a few months during the summer of 2012, &lt;a href="http://www.centralaz.com" title="Central Christian Church AZ"&gt;my church&lt;/a&gt;&amp;nbsp;dipped&amp;nbsp;our toes into the development waters and gave &lt;a href="http://jsondata.tumblr.com/" title="Jason Offutt&amp;#39;s blog"&gt;Jason&lt;/a&gt; and I official time (albeit part-time) to work on Rock during office hours.&amp;nbsp; (Up to that point, we were only contributing a little during our personal free time.)  Now as of Jan 2013, Jason and I have begun working more regularly (I&amp;#39;m still part time due to other &lt;strike&gt;baggage&lt;/strike&gt; responsibilities that I deal with) simply because we&amp;#39;re now actively planning&amp;nbsp;for our future -- to&amp;nbsp;use&amp;nbsp;Rock ChMS here at our church when it&amp;#39;s ready.  Part of my job has been coding up some of the smaller features and building the ever-growing &lt;a href="https://github.com/SparkDevNetwork/Rock-ChMS/wiki"&gt;live Rock developer wiki&lt;/a&gt;&amp;nbsp;(an &lt;a href="https://github.com/SparkDevNetwork/Rock-ChMS/wiki/rockdev.epub"&gt;ePub&lt;/a&gt; snapshot&amp;nbsp;is also available and looks pretty decent on the iPad).&lt;/p&gt;
&lt;p&gt;Jon gave an update at the recent &lt;a href="http://www.churchitnetwork.com/blog/2012/11/16/church-it-network-2013-schedule-2-national-events-in-feb-and-oct/"&gt;National Church IT Network Roundtable&lt;/a&gt; showing a nice slide with progress bars representing the status of the big ChMS features. [insert slide here].&amp;nbsp; He also did a demo of&amp;nbsp;his very sweet and simple&amp;nbsp;Rock Installer and David Turner showed the check-in system -- built entirely&amp;nbsp;on top of the Workflow engine. It &lt;a href="https://twitter.com/airdo/status/291969268399099904" title="yes, truly."&gt;still blows my mind&lt;/a&gt; seeing that in action.&lt;/p&gt;&lt;p&gt;Ok, so there you have it.  I&amp;#39;ll probably be &amp;quot;heads down&amp;quot; for another 6 months until I pop up for RefreshCache in October.&amp;nbsp; This year we&amp;#39;re holding &lt;strong&gt;&lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.refreshcache.com" title="THE developer event for Church Management System developers and community developers"&gt;RefreshCache&lt;/a&gt;&lt;/strong&gt; alongside the Fall National Church IT Network Roundtable (CITRT) in Kansas City.&amp;nbsp;&amp;nbsp;Keep your ears open and look for the registration announcement on &lt;a href="http://citrt.onthecity.org/plaza/events" title="events for the CITRT"&gt;the CITRT events page&lt;/a&gt;. Don&amp;#39;t miss that event!  If you do, you&amp;#39;re going to regret it later.&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5269" 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/Rock+RMS/default.aspx">Rock RMS</category></item><item><title>Server Swap Leads to SPN Discovery</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2013/03/06/Server-Swap-Leads-to-SPN-Discovery.aspx</link><pubDate>Wed, 06 Mar 2013 17:01:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5254</guid><dc:creator>nairdo</dc:creator><slash:comments>0</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5254.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5254</wfw:commentRss><description>&lt;img src="http://codersforchrist.com/images/20130306_mystery.png" /&gt;
&lt;p&gt;I thought I understood DNS and naming enough to make a&amp;nbsp;seamless server swap/upgrade,&amp;nbsp;however during our test attempt to &amp;#39;upgrade&amp;#39; one of our internal servers&amp;nbsp;we ran into problems that ultimately was due to something called the &amp;quot;Service Principal Name&amp;quot;.&lt;/p&gt;

&lt;p&gt;Here was the&amp;nbsp;scenario...(the server names used below have been changed to protect the identity of the guilty)... also this was done in a test environment first so no actual users were harmed during our discovery...&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Our users access this webserver via it&amp;#39;s logical name, &lt;a href="http://chms/"&gt;http://chms/&lt;/a&gt;.&amp;nbsp; That logical name also happens to be the actual Windows&amp;nbsp;server name, &amp;quot;CHMS&amp;quot;.&lt;/li&gt;

&lt;li&gt;Our new server is called CHMS01 and &lt;a href="http://chms01/"&gt;http://chms01/&lt;/a&gt; works fine, however we wanted our users to continue using the logical service&amp;nbsp;name, &lt;a href="http://chms/"&gt;http://chms/&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Problem - when we updated the &amp;quot;chms&amp;quot; A record in our DNS to point to the IP address of the new CHMS01 server, IE users began receiving an authentication challenge which they don&amp;#39;t usually get.&amp;nbsp; Even worse, if they entered their correct credentials, it would not accept them.&amp;nbsp; No bueno.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After &lt;a href="http://grinding-it-out.blogspot.com/" title="Derek&amp;#39;s blog"&gt;Derek&lt;/a&gt;&amp;nbsp;and I did&amp;nbsp;some theorizing&amp;nbsp;about what must be happening behind the scenes that might be causing this weird behavior, we&amp;nbsp;consulted Google.&amp;nbsp; After&amp;nbsp;30 minutes of reading we both&amp;nbsp;came upon something&amp;nbsp;neither of us had ever encountered&amp;nbsp;before, the SPN or Service Principal Name.&lt;/p&gt;

&lt;p&gt;Looking at our CHMS server using the command&amp;nbsp;&amp;quot;&lt;tt&gt;setspn -l CHMS&lt;/tt&gt;&amp;quot; we saw that it indeed had a record that was causing the interference:&lt;/p&gt;

&lt;blockquote&gt;&lt;tt&gt;
&lt;pre&gt;Registered ServicePrincipalNames for CN=CHMS,OU=Servers,OU=Computers,OU=Resources,DC=centralaz,DC=com:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HOST/CHMS
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HOST/chms.centralaz.com&lt;/pre&gt;&lt;/tt&gt;&lt;/blockquote&gt;

&lt;p&gt;Without wanting to spend too much more time on understand the SPN, I concluded it&amp;#39;s basically a Kerberos authentication safety measure that&amp;nbsp;prevents&amp;nbsp;automatic credential passing&amp;nbsp;to a server other than the &amp;#39;principal&amp;#39;.&amp;nbsp; Once we removed those records using the &amp;quot;&lt;tt&gt;setspn -d HOST/CHMS CHMS&lt;/tt&gt;&amp;quot; and &amp;quot;&lt;tt&gt;setspn -d HOST/chms.centralaz.com CHMS&lt;/tt&gt;&amp;quot; records, IE passed credentials to CHMS01 without any issue.&lt;/p&gt;

&lt;p&gt;We&amp;#39;ll probably make CHMS01 the principle for those &amp;quot;chms&amp;quot; entries by using the &amp;quot;&lt;tt&gt;setspn -s HOST/CHMS CHMS01&lt;/tt&gt;&amp;quot; and &amp;quot;&lt;tt&gt;setspn -s HOST/chms.centralaz.com CHMS01&lt;/tt&gt;&amp;quot; commands, but for now it did not make a difference in getting things working again. &amp;nbsp;Anyhow check out&lt;span style="font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://grinding-it-out.blogspot.com/" style="font-size: 10pt" title="Derek&amp;#39;s blog"&gt;Derek&amp;#39;s blog&lt;/a&gt;&amp;nbsp;if you want to hear his perspective on this topic.&lt;/p&gt;
&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5254" width="1" height="1"&gt;</description><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/IIS/default.aspx">IIS</category></item><item><title>Mobile Phone Check-in</title><link>http://codersforchrist.com/cs/blogs/nick/archive/2012/07/05/Mobile-Phone-Check_2D00_in.aspx</link><pubDate>Thu, 05 Jul 2012 21:42:00 GMT</pubDate><guid isPermaLink="false">3335dbd7-428c-4c14-9321-d5fba297aca8:5245</guid><dc:creator>nairdo</dc:creator><slash:comments>5</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5245.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5245</wfw:commentRss><description>&lt;p style="color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px"&gt;Last year I told you about our problem of trying to check-in 1750+ kids (&lt;a href="http://codersforchrist.com/cs/blogs/nick/archive/2011/07/25/VBS-Check_2D00_in-Process-Improvement.aspx"&gt;http://codersforchrist.com/cs/blogs/nick/archive/2011/07/25/VBS-Check_2D00_in-Process-Improvement.aspx&lt;/a&gt;) at&amp;nbsp;&lt;em&gt;roughly&amp;nbsp;the same time&lt;/em&gt; to avoid the long line that growing as our Vacation Bible School program grows each year. &amp;nbsp;I hinted that the solution might be to allow people to use their mobile phones to check in... &lt;/p&gt;&lt;p style="color: #000000; font-family: Arial,Helvetica,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px"&gt;Presenting - Mobile Check-in!&amp;nbsp; Works on any mobile device (at least the ones that people are actually using ;) that has geo-location services.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="mobile kids checkin on iphone" height="343" src="http://codersforchrist.com/images/20120705_iphone_mobile_checkin_children.png" title="mobile kids checkin on iphone" width="175" /&gt;&lt;/p&gt;&lt;p&gt;Over the past several weeks, Jason and I have been adding the missing features, re-skinning, polishing and testing a variant of our custom &lt;a href="http://redmine.refreshcache.com/projects/cccevcheckin/wiki"&gt;Checkin Wizard&lt;/a&gt; module for Arena ChMS.&amp;nbsp; (Internally we&amp;#39;ve been calling it v1.5.0, but I&amp;#39;m still not sure if it will get merged back into the current Arena ChMS code base on our Redmine repo.&amp;nbsp; But, this is the kind of magic we&amp;#39;ll be adding into &lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.sparkdevnetwork.com" title="Rock ChMS by the Spark Development Network"&gt;Rock ChMS&lt;/a&gt; for sure.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Although it was a relatively simple set of changes, we still ran into enough &amp;#39;gotchas&amp;#39; that made the project linger longer than we both wanted.&amp;nbsp; &lt;span style="font-weight: bold"&gt;It&amp;#39;s still just a web app&lt;/span&gt;, so the person doesn&amp;#39;t need to install anything on their phone (&lt;span style="font-style: italic"&gt;because frankly, they don&amp;#39;t want to have to install a church app on their phone -- they&amp;#39;ve already got &lt;/span&gt;&lt;a href="http://www.youversion.com/about" style="font-style: italic"&gt;their Bible app&lt;/a&gt;&lt;span style="font-style: italic"&gt;, so what more do they really need?&lt;/span&gt;)&amp;nbsp; Seriously, I&amp;#39;ve mentioned &lt;a href="http://www.centralaz.com/mobile"&gt;this topic&lt;/a&gt; at previous &lt;a href="http://codersforchrist.com/cs/controlpanel/blogs/www.refreshcache.com"&gt;RefreshCache&lt;/a&gt; events -- &lt;a href="http://www.forbes.com/sites/fredcavazza/2011/09/27/mobile-web-app-vs-native-app-its-complicated/"&gt;many others balk at the idea&lt;/a&gt; writing separate apps for iPhone, Android, Blackberry, etc., and even though &lt;a href="http://phonegap.com/"&gt;there are frameworks/tools&lt;/a&gt; that will let you more easily build a &lt;span style="font-style: italic"&gt;native &lt;/span&gt;app wrapper around your HTML &amp;quot;app&amp;quot;, I still say &amp;quot;people don&amp;#39;t want to install your app.&amp;quot;&amp;nbsp; With the coming HTML5 storm coupled with &lt;a href="http://blog.mozilla.org/blog/2012/07/02/firefox-mobile-os/"&gt;changes by vendors to allow web apps to have the same access to hardware&lt;/a&gt; that native apps enjoy, I feel stronger than ever with my argument.&lt;/p&gt;&lt;p&gt;&lt;img alt="allow location" height="343" src="http://codersforchrist.com/images/20120705_iphone_mobile_checkin_children_allow.png" title="allow location" width="175" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;For now, the only thing we really needed was access to the person&amp;#39;s location.&amp;nbsp; Thanks to the team over at &lt;a href="http://code.google.com/p/geo-location-javascript/" title="javascript library for reading location services of mobile device"&gt;Geo-Location-Javascript&lt;/a&gt; for their JavaScript library and their use of the &lt;a href="http://en.wikipedia.org/wiki/MIT_License"&gt;MIT License&lt;/a&gt;, we only needed to work out the details of mapping the person&amp;#39;s geo-location to a particular kiosk at one of our four campuses.&amp;nbsp; We decided that if you&amp;#39;re within .5 miles (configurable, of course) of our campus you&amp;#39;re close enough to check-in, otherwise you&amp;#39;re still too far.&lt;/p&gt;&lt;p&gt;&lt;img alt="too far, try again later" height="343" src="http://codersforchrist.com/images/20120705_iphone_mobile_checkin_children_too_far.png" title="too far, try again later" width="175" /&gt;&lt;/p&gt;&lt;p&gt;Once you&amp;#39;re on campus, if the event&amp;#39;s check-in start time has started you can check-in using your phone number.&amp;nbsp; In the future, it would be nice to automatically access the devices mobile number directly and try to find a matching family first, but for now it&amp;#39;s still better than waiting in line to use a public kiosk.&lt;/p&gt;&lt;p&gt;&lt;img alt="mobile checkin, animated" height="343" src="http://codersforchrist.com/images/20120705_iphone_mobile_checkin_children_animated.gif" title="mobile checkin, animated" width="175" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Major props go to &lt;a href="http://jsondata.tumblr.com/" title="Jason Offut === Json Data"&gt;Jason&lt;/a&gt; because he did a sweet job taking our existing module&amp;#39;s markup and making it look amazing using his mad CSS styling magic skills.&lt;/p&gt;&lt;p&gt;I&amp;#39;ll let you know how it all goes sometime after next week&amp;#39;s VBS...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://codersforchrist.com/cs/aggbug.aspx?PostID=5245" 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/news/default.aspx">news</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/UX/default.aspx">UX</category><category domain="http://codersforchrist.com/cs/blogs/nick/archive/tags/JavaScript/default.aspx">JavaScript</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><comments>http://codersforchrist.com/cs/blogs/nick/comments/5198.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5198</wfw:commentRss><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><comments>http://codersforchrist.com/cs/blogs/nick/comments/5156.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5156</wfw:commentRss><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>2</slash:comments><comments>http://codersforchrist.com/cs/blogs/nick/comments/5141.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5141</wfw:commentRss><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://www.sparkdevelopmentnetwork.com/"&gt;Spark Development Network&lt;/a&gt; (&lt;a href="http://www.sparkdevelopmentnetwork.com/"&gt;www.sparkdevelopmentnetwork.com&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://www.refreshcache.com"&gt;RefreshCache&lt;/a&gt; (&lt;a href="http://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+RMS/default.aspx">Rock RMS</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><comments>http://codersforchrist.com/cs/blogs/nick/comments/5135.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5135</wfw:commentRss><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><comments>http://codersforchrist.com/cs/blogs/nick/comments/5121.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5121</wfw:commentRss><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><comments>http://codersforchrist.com/cs/blogs/nick/comments/5107.aspx</comments><wfw:commentRss>http://codersforchrist.com/cs/blogs/nick/commentrss.aspx?PostID=5107</wfw:commentRss><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></channel></rss>