<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gabe Sumner</title>
	<atom:link href="http://gabesumner.com/feed" rel="self" type="application/rss+xml" />
	<link>http://gabesumner.com</link>
	<description></description>
	<lastBuildDate>Fri, 17 Feb 2012 20:16:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Wanted: Video-conferencing solution for mid-sized teams</title>
		<link>http://gabesumner.com/wanted-video-conferencing-solutions-for-mid-sized-teams</link>
		<comments>http://gabesumner.com/wanted-video-conferencing-solutions-for-mid-sized-teams#comments</comments>
		<pubDate>Tue, 14 Feb 2012 22:32:20 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google hangouts]]></category>
		<category><![CDATA[lync]]></category>
		<category><![CDATA[skype]]></category>
		<category><![CDATA[video conferencing]]></category>
		<category><![CDATA[webex]]></category>

		<guid isPermaLink="false">http://gabesumner.com/?p=674</guid>
		<description><![CDATA[The Telerik Evangelism team has recently been experimenting with new techniques for staying connected and in-sync.  One of these techniques was to utilize video-conferencing for our bi-weekly meetings.  Sadly, I&#8217;ve not discovered any video-conferencing solutions that accommodates a team of our &#8230; <a href="http://gabesumner.com/wanted-video-conferencing-solutions-for-mid-sized-teams">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright  wp-image-682" title="Early attempts at video conferencing" src="http://gabesumner.com/wp-content/uploads/2012/02/images.jpg" alt="Early attempts at video conferencing" width="203" height="163" />The Telerik Evangelism team has recently been experimenting with new techniques for staying connected and in-sync.  One of these techniques was to utilize video-conferencing for our bi-weekly meetings.  Sadly, I&#8217;ve not discovered any video-conferencing solutions that accommodates a team of our size (15 people).  Below I&#8217;ve summarized my experiences thus far:</p>
<p><span id="more-674"></span></p>
<h2>Video-conferencing solutions at a glance</h2>
<p>All video-conferencing solutions limit how many attendees can participate with their webcams.  Once this limit is exceeded, the behavior varies from service to service.  However, most services will support several more audio-only participants.  Below I&#8217;ve summarized the video and total limits for each service.</p>
<table>
<tbody>
<tr>
<td><strong>Service</strong></td>
<td><strong>Video Limit</strong></td>
<td><strong>Total Limit</strong></td>
</tr>
<tr>
<td><a href="http://www.gotomeeting.com/fec/online_meeting">GotoMeeting</a></td>
<td>6</td>
<td>15</td>
</tr>
<tr>
<td><a href="http://www.webex.com/">Webex</a></td>
<td>7</td>
<td>25</td>
</tr>
<tr>
<td><a href="http://www.skype.com/">Skype </a></td>
<td>10</td>
<td>20</td>
</tr>
<tr>
<td><a href="http://www.google.com/+/learnmore/">Google Hangouts</a></td>
<td>10</td>
<td>10</td>
</tr>
<tr>
<td><a href="http://www.oovoo.com/">Oovoo</a></td>
<td>12</td>
<td>12</td>
</tr>
<tr>
<td><a href="http://vidtel.com/">Vidtel</a></td>
<td>12</td>
<td>12</td>
</tr>
<tr>
<td><a href="http://bluejeans.com/">Blue Jeans Network</a></td>
<td>25</td>
<td>25</td>
</tr>
<tr>
<td><a href="http://lync.microsoft.com/en-us/Pages/unified-communications.aspx">Microsoft Lync</a></td>
<td>250</td>
<td>250</td>
</tr>
</tbody>
</table>
<h2> What happens when the video limit is exceeded?</h2>
<p><strong>Gotomeeting</strong> -Video in Gotomeeting is first come, first serve.  Each participant must manually enable their webcam.  However, once the 6 video-user limit is reached the option is disabled for other attendees.  These other attendees will be audio-only, able to see the 6 video users, but not utilize their own webcam.</p>
<p><strong>Webex</strong> &#8211; When more than 7 participants join the meeting the meeting moderator can  select who can share video.  Up to 25 total participants can join the call but only 7 will have video sharing options available.</p>
<p><strong>Skype</strong> &#8211; When more than 10 participants join, video conferencing and screensharing get disabled for everyone.  After this, the call continues and up to 25 participants can join for audio-only conferencing.</p>
<p><strong>Google Hangouts</strong> &#8211; There is a hard cap of 10 participants.  Anyone else who joins the conference will be put into spectator mode.  They can hear the conference, but not participate.  I&#8217;m intrigued by Google Hangouts, but the 10 person limit is a deal-breaker.</p>
<p><strong>Microsoft Lync</strong> &#8211; Using Lync all participants can utilize their webcam, but only the speaker gets focus (no Hollywood Squares style display).  Furthermore, I&#8217;m seldom able to get Lync to perform reasonably with 2 participants, let alone 250.  This problem becomes even worse for our telecommuters who are forced to VPN into the network to utilize Lync.  On a LAN this might be a great solution; however, for our distributed team Lync does not produce great results.</p>
<p><strong>Oovoo</strong> &#8211; I have no direct experience with Oovoo yet.  If you do, feel free to comment below.</p>
<p><strong>Blue Jeans Network</strong> &#8211; I have no direct experience with Blue Jeans Network yet.  I&#8217;m intrigued by its ability to bridge multiple solutions (WebEx, Skype, etc.) though.  I would love to see feedback from others who have direct experiences with this service.</p>
<h2>Our current solution</h2>
<p>For the time being we&#8217;re using Skype for voice-only communication.  It&#8217;s ubiquitous, which is nice; it also has integrated chat which the evangelism team seems to enjoy using during the meetings.  For screen-sharing, we&#8217;ll probably just fire-up a Gotomeeting session as needed.  We&#8217;ll only use it for screen-sharing and disable the audio.</p>
<p>In a nutshell, we&#8217;re abandoning video-conferencing entirely.  I&#8217;m not happy about this, but I haven&#8217;t been happy with any of the other options either.  I&#8217;ll update this post if I locate a better solution or more information.</p>
<p><a href="https://twitter.com/ryanlowdermilk">Special thanks to @ryanlowdermilk for helping with this post.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/wanted-video-conferencing-solutions-for-mid-sized-teams/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How to Export Blog Comments from Sitefinity 3 to Disqus</title>
		<link>http://gabesumner.com/how-to-export-blog-comments-from-sitefinity-3-to-disqus</link>
		<comments>http://gabesumner.com/how-to-export-blog-comments-from-sitefinity-3-to-disqus#comments</comments>
		<pubDate>Mon, 13 Feb 2012 02:04:22 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[disqus]]></category>
		<category><![CDATA[sitefinity]]></category>

		<guid isPermaLink="false">http://gabesumner.com/?p=581</guid>
		<description><![CDATA[Over this past weekend I decided to retire my old goondocks.com blog.  This domain name is a reference to The Goonies which is a movie I remember fondly from the 80&#8242;s.  I picked up this domain many years ago and &#8230; <a href="http://gabesumner.com/how-to-export-blog-comments-from-sitefinity-3-to-disqus">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over this past weekend I decided to retire my old <strong>goondocks.com</strong> blog.  This domain name is a reference to The Goonies which is a movie I remember fondly from the 80&#8242;s.  I picked up this domain many years ago and held on to it.  When I discovered Sitefinity 3.0 I used it to experiment and share my lessons &amp; experiences.</p>
<p>After joining Telerik,  I launched <strong>sitefinitywatch.com</strong> and never again touched <strong>goondocks.com</strong>.  Consequently, this blog has stagnated and become a dumping ground for spammers.  There are now thousands of blog comments that contain nothing but spam:</p>
<p><a href="http://gabesumner.com/wp-content/uploads/2012/02/2012-02-12_1715.png" rel="lightbox[581]"><img class="alignnone size-full wp-image-584" title="Obscene amount of comments" src="http://gabesumner.com/wp-content/uploads/2012/02/2012-02-12_1715-e1329097604485.png" alt="Obscene amount of comments" width="600" height="261" /></a></p>
<p>I wanted to import my old blog posts and legitimate comments to this blog.  If you scroll down below you&#8217;ll see I&#8217;m using Disqus to manage my comments on this blog.  Consequently, I needed to find a way to filter the SPAM from these comments, export the comments from Sitefinity 3.x and then import these comments into Disqus.</p>
<p><span id="more-581"></span></p>
<h1>How to import comments into Disqus</h1>
<ol>
<li>Creating a Test Forum on Disqus</li>
<ol>
<li><em>Seriously, you&#8217;re going to make mistakes</em></li>
</ol>
<li>Read the following resources:</li>
<ol>
<li><a href="http://docs.disqus.com/developers/export/import_format/">Custom XML Import Format</a></li>
<li><a href="http://chrisrisner.com/Importing-Comments-into-Disqus">Importing-Comments-into-Disqus</a></li>
<li><a href="http://sumedh.info/articles/importing-comments-disqus-xml-database.php">How to import your existing database comments into Disqus using generic WXR XML format</a></li>
</ol>
<li>Create your Sitefinity Comments Export</li>
<ol>
<li>Add the code below to your Sitefinity 3 project</li>
<li>Access the page and paste the resulting XML into Notepad</li>
</ol>
<li>Upload the XML file to Disqus</li>
<li><em>Wait&#8230;.</em></li>
</ol>
<h2> Exporting Sitefinity 3 Comments using the API</h2>
<div id="gist-1811490" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nt">&lt;%@</span> <span class="n">Page</span> <span class="n">Language</span><span class="o">=</span><span class="s">&quot;C#&quot;</span> <span class="n">AutoEventWireup</span><span class="o">=</span><span class="s">&quot;true&quot;</span> <span class="n">CodeFile</span><span class="o">=</span><span class="s">&quot;test.aspx.cs&quot;</span> <span class="k">Inherits</span><span class="o">=</span><span class="s">&quot;test&quot;</span> <span class="nt">%&gt;</span></div><div class='line' id='LC2'><br/></div><div class='line' id='LC3'><span class="cp">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'><span class="nt">&lt;html</span> <span class="na">xmlns=</span><span class="s">&quot;http://www.w3.org/1999/xhtml&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC6'><span class="nt">&lt;head</span> <span class="na">id=</span><span class="s">&quot;Head1&quot;</span> <span class="na">runat=</span><span class="s">&quot;server&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;title&gt;</span>Use Ctrl + A to select All, then Paste into Notepad.  This is your XML export file.<span class="nt">&lt;/title&gt;</span></div><div class='line' id='LC8'><span class="nt">&lt;/head&gt;</span></div><div class='line' id='LC9'><span class="nt">&lt;body&gt;</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;form</span> <span class="na">id=</span><span class="s">&quot;form1&quot;</span> <span class="na">runat=</span><span class="s">&quot;server&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;div&gt;</span></div><div class='line' id='LC12'><br/></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;asp:Repeater</span> <span class="na">ID=</span><span class="s">&quot;xmlRepeater&quot;</span> <span class="na">runat=</span><span class="s">&quot;server&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;HeaderTemplate&gt;</span></div><div class='line' id='LC15'><span class="nt">&lt;pre&gt;</span></div><div class='line' id='LC16'><span class="ni">&amp;lt;</span>?xml version=<span class="ni">&amp;quot;</span>1.0<span class="ni">&amp;quot;</span> encoding=<span class="ni">&amp;quot;</span>UTF-8<span class="ni">&amp;quot;</span>?<span class="ni">&amp;gt;</span></div><div class='line' id='LC17'><span class="ni">&amp;lt;</span>rss version=<span class="ni">&amp;quot;</span>2.0<span class="ni">&amp;quot;</span></div><div class='line' id='LC18'>&nbsp;&nbsp;xmlns:content=<span class="ni">&amp;quot;</span>http://purl.org/rss/1.0/modules/content/<span class="ni">&amp;quot;</span></div><div class='line' id='LC19'>&nbsp;&nbsp;xmlns:dsq=<span class="ni">&amp;quot;</span>http://www.disqus.com/<span class="ni">&amp;quot;</span></div><div class='line' id='LC20'>&nbsp;&nbsp;xmlns:dc=<span class="ni">&amp;quot;</span>http://purl.org/dc/elements/1.1/<span class="ni">&amp;quot;</span></div><div class='line' id='LC21'>&nbsp;&nbsp;xmlns:wp=<span class="ni">&amp;quot;</span>http://wordpress.org/export/1.0/<span class="ni">&amp;quot;</span></div><div class='line' id='LC22'><span class="ni">&amp;gt;</span></div><div class='line' id='LC23'>&nbsp;&nbsp;<span class="ni">&amp;lt;</span>channel<span class="ni">&amp;gt;</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/HeaderTemplate&gt;</span></div><div class='line' id='LC25'><br/></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;ItemTemplate&gt;</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>item<span class="ni">&amp;gt;</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>title<span class="ni">&amp;gt;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[Title]&quot;</span><span class="p">)</span> <span class="nt">%&gt;</span><span class="ni">&amp;lt;</span>/title<span class="ni">&amp;gt;</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>link<span class="ni">&amp;gt;</span>http://www.goondocks.com/blog<span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[Url]&quot;</span><span class="p">)</span> <span class="nt">%&gt;</span>.aspx<span class="ni">&amp;lt;</span>/link<span class="ni">&amp;gt;</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>dsq:thread_identifier<span class="ni">&amp;gt;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[ID]&quot;</span><span class="p">)</span> <span class="nt">%&gt;</span><span class="ni">&amp;lt;</span>/dsq:thread_identifier<span class="ni">&amp;gt;</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:post_date_gmt<span class="ni">&amp;gt;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[DatePosted]&quot;</span><span class="p">)</span><span class="nt">%&gt;</span><span class="ni">&amp;lt;</span>/wp:post_date_gmt<span class="ni">&amp;gt;</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_status<span class="ni">&amp;gt;</span>open<span class="ni">&amp;lt;</span>/wp:comment_status<span class="ni">&amp;gt;</span></div><div class='line' id='LC33'><br/></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;asp:Repeater</span> <span class="na">DataSource=</span><span class="s">&#39;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[Comments]&quot;</span><span class="p">)</span> <span class="nt">%&gt;</span>&#39; runat=&quot;server&quot;&gt;</div><div class='line' id='LC35'><br/></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;ItemTemplate&gt;</span></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment<span class="ni">&amp;gt;</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_id<span class="ni">&amp;gt;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[ID]&quot;</span><span class="p">)</span> <span class="nt">%&gt;</span><span class="ni">&amp;lt;</span>/wp:comment_id<span class="ni">&amp;gt;</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_author<span class="ni">&amp;gt;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[Author]&quot;</span><span class="p">)</span> <span class="nt">%&gt;</span><span class="ni">&amp;lt;</span>/wp:comment_author<span class="ni">&amp;gt;</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_author_email<span class="ni">&amp;gt;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[Email]&quot;</span><span class="p">)</span> <span class="nt">%&gt;</span><span class="ni">&amp;lt;</span>/wp:comment_author_email<span class="ni">&amp;gt;</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_author_url<span class="ni">&amp;gt;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[Website]&quot;</span><span class="p">)</span> <span class="nt">%&gt;</span>/<span class="ni">&amp;lt;</span>/wp:comment_author_url<span class="ni">&amp;gt;</span></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_author_IP<span class="ni">&amp;gt;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[IpAddress]&quot;</span><span class="p">)</span> <span class="nt">%&gt;</span><span class="ni">&amp;lt;</span>/wp:comment_author_IP<span class="ni">&amp;gt;</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_date_gmt<span class="ni">&amp;gt;</span><span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[DatePosted]&quot;</span><span class="p">)</span><span class="nt">%&gt;</span><span class="ni">&amp;lt;</span>/wp:comment_date_gmt<span class="ni">&amp;gt;</span></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_content<span class="ni">&amp;gt;&amp;lt;</span>![CDATA[<span class="nt">&lt;%#</span> <span class="n">Eval</span><span class="p">(</span><span class="s">&quot;[Text]&quot;</span><span class="p">)</span><span class="nt">%&gt;</span>]]<span class="ni">&amp;gt;&amp;lt;</span>/wp:comment_content<span class="ni">&amp;gt;</span></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_approved<span class="ni">&amp;gt;</span>1<span class="ni">&amp;lt;</span>/wp:comment_approved<span class="ni">&amp;gt;</span></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>wp:comment_parent<span class="ni">&amp;gt;</span>0<span class="ni">&amp;lt;</span>/wp:comment_parent<span class="ni">&amp;gt;</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>/wp:comment<span class="ni">&amp;gt;</span></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/ItemTemplate&gt;</span></div><div class='line' id='LC49'><br/></div><div class='line' id='LC50'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/asp:Repeater&gt;</span></div><div class='line' id='LC51'><br/></div><div class='line' id='LC52'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="ni">&amp;lt;</span>/item<span class="ni">&amp;gt;</span></div><div class='line' id='LC53'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/ItemTemplate&gt;</span></div><div class='line' id='LC54'><br/></div><div class='line' id='LC55'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;FooterTemplate&gt;</span></div><div class='line' id='LC56'>&nbsp;&nbsp;<span class="ni">&amp;lt;</span>/channel<span class="ni">&amp;gt;</span></div><div class='line' id='LC57'><span class="ni">&amp;lt;</span>/rss<span class="ni">&amp;gt;</span>    </div><div class='line' id='LC58'><span class="nt">&lt;/pre&gt;</span></div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/FooterTemplate&gt;</span></div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/asp:Repeater&gt;</span></div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;</div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/div&gt;</span></div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/form&gt;</span></div><div class='line' id='LC64'><span class="nt">&lt;/body&gt;</span></div><div class='line' id='LC65'><span class="nt">&lt;/html&gt;</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1811490/7787b8e5b3a0def241760d1fdde6e8d612008bf3/DisqusExport.aspx" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1811490#file_disqus_export.aspx" style="float:right;margin-right:10px;color:#666">DisqusExport.aspx</a>
            <a href="https://gist.github.com/1811490">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Collections</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">System.Web</span><span class="p">;</span></div><div class='line' id='LC4'><span class="k">using</span> <span class="nn">Telerik.Cms.Engine</span><span class="p">;</span></div><div class='line' id='LC5'><span class="k">using</span> <span class="nn">System.Text.RegularExpressions</span><span class="p">;</span></div><div class='line' id='LC6'><br/></div><div class='line' id='LC7'><span class="k">public</span> <span class="k">partial</span> <span class="k">class</span> <span class="nc">test</span> <span class="p">:</span> <span class="n">System</span><span class="p">.</span><span class="n">Web</span><span class="p">.</span><span class="n">UI</span><span class="p">.</span><span class="n">Page</span></div><div class='line' id='LC8'><span class="p">{</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">protected</span> <span class="k">void</span> <span class="nf">Page_Load</span><span class="p">(</span><span class="kt">object</span> <span class="n">sender</span><span class="p">,</span> <span class="n">EventArgs</span> <span class="n">e</span><span class="p">)</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Telerik</span><span class="p">.</span><span class="n">Cms</span><span class="p">.</span><span class="n">Engine</span><span class="p">.</span><span class="n">ContentManager</span> <span class="n">contentManager</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Telerik</span><span class="p">.</span><span class="n">Cms</span><span class="p">.</span><span class="n">Engine</span><span class="p">.</span><span class="n">ContentManager</span><span class="p">(</span><span class="s">&quot;Blogs&quot;</span><span class="p">);</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">IList</span> <span class="n">posts</span> <span class="p">=</span> <span class="n">contentManager</span><span class="p">.</span><span class="n">GetContent</span><span class="p">();</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ArrayList</span> <span class="n">Posts</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ArrayList</span><span class="p">();</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">int</span> <span class="n">Count</span> <span class="p">=</span> <span class="m">0</span><span class="p">;</span></div><div class='line' id='LC15'><br/></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Loop through all blog posts</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">foreach</span> <span class="p">(</span><span class="n">IContent</span> <span class="n">post</span> <span class="k">in</span> <span class="n">posts</span><span class="p">)</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Yes, I know ArrayLists and Hashtables are lame.  However, Sitefinity 3 was built with .NET 2.0 </span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// which doesn&#39;t support generics and I didn&#39;t want to take the time to fully implement IList.</span></div><div class='line' id='LC21'><br/></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Hashtable</span> <span class="n">Post</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Hashtable</span><span class="p">();</span></div><div class='line' id='LC23'><br/></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Post</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;ID&quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">.</span><span class="n">ID</span><span class="p">);</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Post</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;Title&quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">.</span><span class="n">GetMetaData</span><span class="p">(</span><span class="s">&quot;Title&quot;</span><span class="p">));</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Post</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;Url&quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">.</span><span class="n">Url</span><span class="p">);</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// That &quot;GeteCreationDate()&quot; only exists in later version of Sitefinity 3.x.</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Post</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;DatePosted&quot;</span><span class="p">,</span> <span class="n">post</span><span class="p">.</span><span class="n">DateModified</span><span class="p">.</span><span class="n">ToUniversalTime</span><span class="p">().</span><span class="n">ToString</span><span class="p">(</span><span class="s">&quot;yyyy-MM-dd HH:mm:ss&quot;</span><span class="p">));</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Post</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;Comments&quot;</span><span class="p">,</span> <span class="k">new</span> <span class="n">ArrayList</span><span class="p">());</span></div><div class='line' id='LC30'><br/></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">foreach</span> <span class="p">(</span><span class="n">IComment</span> <span class="n">comment</span> <span class="k">in</span> <span class="n">post</span><span class="p">.</span><span class="n">Comments</span><span class="p">)</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ArrayList</span> <span class="n">Comments</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ArrayList</span><span class="p">();</span></div><div class='line' id='LC34'><br/></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// I had a TON of spam in my blog (thousands of comments), this is used to filter this SPAM.</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Sorry for the offensive language, you can thank spammers for this.</span></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">comment</span><span class="p">.</span><span class="n">Visible</span> <span class="p">==</span> <span class="k">true</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">comment</span><span class="p">.</span><span class="n">IsReadByUser</span><span class="p">(</span><span class="s">&quot;admin&quot;</span><span class="p">)</span> <span class="p">==</span> <span class="k">true</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">comment</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">Length</span> <span class="p">&gt;</span> <span class="m">100</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">comment</span><span class="p">.</span><span class="n">GetCreationDate</span><span class="p">()</span> <span class="p">&lt;</span> <span class="k">new</span> <span class="n">DateTime</span><span class="p">(</span><span class="m">2011</span><span class="p">,</span> <span class="m">1</span><span class="p">,</span> <span class="m">1</span><span class="p">)</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Regex</span><span class="p">.</span><span class="n">IsMatch</span><span class="p">(</span><span class="n">comment</span><span class="p">.</span><span class="n">Email</span><span class="p">,</span> <span class="s">@&quot;aol\.com&quot;</span><span class="p">)</span> <span class="p">==</span> <span class="k">false</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Regex</span><span class="p">.</span><span class="n">IsMatch</span><span class="p">(</span><span class="n">comment</span><span class="p">.</span><span class="n">Author</span><span class="p">,</span> <span class="s">@&quot;\@&quot;</span><span class="p">)</span> <span class="p">==</span> <span class="k">false</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">String</span><span class="p">.</span><span class="n">IsNullOrEmpty</span><span class="p">(</span><span class="n">comment</span><span class="p">.</span><span class="n">Author</span><span class="p">)</span> <span class="p">==</span> <span class="k">false</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Regex</span><span class="p">.</span><span class="n">IsMatch</span><span class="p">(</span><span class="n">comment</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">ToString</span><span class="p">(),</span> <span class="s">@&quot;penis&quot;</span><span class="p">)</span> <span class="p">==</span> <span class="k">false</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Regex</span><span class="p">.</span><span class="n">IsMatch</span><span class="p">(</span><span class="n">comment</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">ToString</span><span class="p">(),</span> <span class="s">@&quot;sex&quot;</span><span class="p">)</span> <span class="p">==</span> <span class="k">false</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Regex</span><span class="p">.</span><span class="n">IsMatch</span><span class="p">(</span><span class="n">comment</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">ToString</span><span class="p">(),</span> <span class="s">@&quot;herbal&quot;</span><span class="p">)</span> <span class="p">==</span> <span class="k">false</span> <span class="p">&amp;&amp;</span></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Regex</span><span class="p">.</span><span class="n">IsMatch</span><span class="p">(</span><span class="n">comment</span><span class="p">.</span><span class="n">IpAddress</span><span class="p">.</span><span class="n">ToString</span><span class="p">(),</span> <span class="s">@&quot;121\.204&quot;</span><span class="p">)</span> <span class="p">==</span> <span class="k">false</span></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">)</span></div><div class='line' id='LC50'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Count</span><span class="p">++;</span></div><div class='line' id='LC52'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Hashtable</span> <span class="n">Comment</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Hashtable</span><span class="p">();</span></div><div class='line' id='LC53'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Comment</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;ID&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="p">.</span><span class="n">ID</span><span class="p">);</span></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Comment</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;Author&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="p">.</span><span class="n">Author</span><span class="p">);</span></div><div class='line' id='LC55'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Comment</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;Email&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="p">.</span><span class="n">Email</span><span class="p">);</span></div><div class='line' id='LC56'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Comment</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;Website&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="p">.</span><span class="n">WebSite</span><span class="p">);</span></div><div class='line' id='LC57'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Comment</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;Text&quot;</span><span class="p">,</span> <span class="n">HttpUtility</span><span class="p">.</span><span class="n">HtmlEncode</span><span class="p">(</span><span class="n">comment</span><span class="p">.</span><span class="n">Text</span><span class="p">));</span></div><div class='line' id='LC58'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Comment</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;IpAddress&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="p">.</span><span class="n">IpAddress</span><span class="p">);</span></div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// That &quot;GeteCreationDate()&quot; only exists in later version of Sitefinity 3.x.</span></div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Comment</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="s">&quot;DatePosted&quot;</span><span class="p">,</span> <span class="n">comment</span><span class="p">.</span><span class="n">GetCreationDate</span><span class="p">().</span><span class="n">ToUniversalTime</span><span class="p">().</span><span class="n">ToString</span><span class="p">(</span><span class="s">&quot;yyyy-MM-dd HH:mm:ss&quot;</span><span class="p">));</span></div><div class='line' id='LC61'><br/></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">((</span><span class="n">ArrayList</span><span class="p">)</span><span class="n">Post</span><span class="p">[</span><span class="s">&quot;Comments&quot;</span><span class="p">]).</span><span class="n">Add</span><span class="p">(</span><span class="n">Comment</span><span class="p">);</span></div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC64'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC65'><br/></div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(((</span><span class="n">ArrayList</span><span class="p">)</span><span class="n">Post</span><span class="p">[</span><span class="s">&quot;Comments&quot;</span><span class="p">]).</span><span class="n">Count</span> <span class="p">&gt;</span> <span class="m">0</span><span class="p">)</span></div><div class='line' id='LC67'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC68'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Posts</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span><span class="n">Post</span><span class="p">);</span></div><div class='line' id='LC69'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC70'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC71'><br/></div><div class='line' id='LC72'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">xmlRepeater</span><span class="p">.</span><span class="n">DataSource</span> <span class="p">=</span> <span class="n">Posts</span><span class="p">;</span></div><div class='line' id='LC73'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">xmlRepeater</span><span class="p">.</span><span class="n">DataBind</span><span class="p">();</span></div><div class='line' id='LC74'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC75'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1811490/8fb944c9ef6fb4eeafc570994f84152332cb79b2/DisqusExport.aspx.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1811490#file_disqus_export.aspx.cs" style="float:right;margin-right:10px;color:#666">DisqusExport.aspx.cs</a>
            <a href="https://gist.github.com/1811490">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/how-to-export-blog-comments-from-sitefinity-3-to-disqus/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2011 reflections on Telerik’s Sitefinity CMS</title>
		<link>http://gabesumner.com/2011-reflections-on-teleriks-sitefinity-cms</link>
		<comments>http://gabesumner.com/2011-reflections-on-teleriks-sitefinity-cms#comments</comments>
		<pubDate>Mon, 19 Dec 2011 15:36:07 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[sitefinity]]></category>

		<guid isPermaLink="false">http://gabesumner.com/?p=387</guid>
		<description><![CDATA[The Holidays are upon us and 2011 is nearly gone.  This past year has been extremely busy and significant for Sitefinity.  Before we move into 2012 I want to reflect on 2011.  This post is strictly my personal opinion and, &#8230; <a href="http://gabesumner.com/2011-reflections-on-teleriks-sitefinity-cms">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>
<p><img class="alignright size-full wp-image-391" title="Sitefinity - Work in progress" src="http://gabesumner.com/wp-content/uploads/2011/12/sfServicePack.png" alt="Sitefinity - Work in progress" width="200" height="182" />The Holidays are upon us and 2011 is nearly gone.  This past year has been extremely busy and significant for Sitefinity.  Before we move into 2012 I want to reflect on 2011.  This post is strictly my personal opinion and, consequently, is being published to my personal blog.</p>
</div>
<p>I’m publishing this for Sitefinity customers who might be interested in a Telerik insiders’ perspective on this past year.  Hopefully this provides some context and a glimpse into what’s coming in 2012.</p>
<p><span id="more-387"></span></p>
<h2>Rewind, back to January 2011</h2>
<p>I can’t address the significance of 2011 without talking about the release of Sitefinity 4.0.</p>
<p>Sitefinity 4.0 was a huge milestone for us and its release marked a transition to a new chapter in Sitefinity’s evolution.  Sitefinity 4.0 changed everything.  This isn’t marketing babble, this is truth.  Not one line of Sitefinity 3 code was used in Sitefinity 4.  Furthermore, in addition to rebuilding the product, we also introduced a new licensing and pricing model.</p>
<p>If you’re thinking “<em>that looks like a lot of change to navigate</em>”, then you’d be right.  Saying Sitefinity 4.0 was “disruptive” would be an understatement.  We were prepared for some measure of this, but it took a lot more time than expected to fully assimilate these changes.</p>
<h2>Why was all this change needed?</h2>
<p>For those who don’t know, I was a Sitefinity customer before I was an employee.  When I discovered Sitefinity (back in 2007) this was the tag-line:</p>
<p><a href="http://gabesumner.com/wp-content/uploads/2011/12/built-for-developers.png" rel="lightbox[387]"><img class="alignnone size-full wp-image-388" title="Inspired by End-users, Built for Developers - Sitefinity" src="http://gabesumner.com/wp-content/uploads/2011/12/built-for-developers.png" alt="Inspired by End-users, Built for Developers - Sitefinity" width="630" height="248" /></a></p>
<p>At the time, this tagline matched my mental model.  I was a “developer” and I needed to deliver a website that could be managed by “end-users”.  Sitefinity spoke to me with this message and the product walked the talk.  I loved it!</p>
<p>However, this message now looks simplistic to me.  “End-user” is just a generic bucket where we dump everyone who isn’t us.  If you talk to those “end-users” you quickly discover real people with rich skillsets and objectives.  The CMS belongs as much to them, as it does developers.  Managing a modern website requires collaboration between multiple audiences and a good CMS enables this collaboration while simultaneously empowering diverse audiences throughout the organization.</p>
<p>This trend is a natural by-product of the web’s popularity.  An organization’s website is no longer a piece of technology, but instead a vital communication conduit.  As a result, the website impacts the entire organization and CMS stakeholders are diversifying.  Consequently, Sitefinity needed to engage beyond developers to address complex organizational challenges (governance, communication, collaboration, syndication, etc.).</p>
<p>Historically Sitefinity was an $899 product marketed and sold to developers.  If we wanted to move beyond this model, then substantial changes were required to the product and our organization.</p>
<h2>Getting from here to there</h2>
<p>I understand there could be debate about whether the premise outlined above is correct.  Some organizations still view the website as a “technology resource”.  As a result, CMS selection continues to be driven exclusively by the IT department and “users” simply inherit their decision.  For those scenarios, an $899 developer-focused product continues to be very attractive.</p>
<p>However, these scenarios are diminishing.  Internally, we became convinced Sitefinity needed to evolve beyond its historic market positioning to remain relevant.</p>
<p>This led to 3 conclusions:</p>
<ol>
<li>We needed to rebuild Sitefinity from the ground-up.</li>
<li>We needed to double+ the size of the Sitefinity team.</li>
<li>We needed to change Sitefinity’s licensing.</li>
</ol>
<p>I could write very long posts exploring each of these 3 decisions; instead I’ll try to quickly summarize:</p>
<ul>
<li><strong>Rebuilding Sitefinity</strong> – When Sitefinity 3 was conceived, .NET 2.0 was the predominant framework.  A lot has happened since then and it was becoming difficult (hacky) to evolve the platform.  Rebuilding on .NET 4 enabled us to utilize a lot of newer technologies (WWF 4.0, web services, LINQ, etc.).  In addition, Sitefinity 3 was built on Nolics and Nolics is dead.</li>
<li><strong>Doubling the team</strong> – Rebuilding and then extending the product takes a lot of manpower.  In addition, selling a CMS to non-developers takes a very different sales organization.  Not to mention support, partner managers, etc…</li>
<li><strong>Changing the licensing</strong> – I could simply refer to #2, but it goes beyond that.  A flat $899 price would not fuel product development at our current pace, nor support the large customer projects that we were engaging with.  The new tiered pricing was implemented to provide a more sustainable &amp; accessible licensing framework.</li>
</ul>
<p>We knew these decisions would cause discomfort for existing customers and none of us felt happy about this.  However, we viewed this as a necessary transition needed to evolve Sitefinity.</p>
<h2>Weathering the storm</h2>
<p>We underestimated what it would take to assimilate all of this change.  It’s like dropping a boulder into a pond while you’re sitting in a boat.  You expect some waves and brace for them, but in this case the waves continued for months.</p>
<p>A big part of 2011 was devoted to stabilizing Sitefinity (the product, the organization, the community) after this change.  This included a stream of product releases, license extensions, extensive support, etc. It’s been an exhausting year.</p>
<p>However, under difficult circumstances the team has pulled together to deliver the best possible results.  We’ve made massive headway in 2011.  Today, Sitefinity is seeing strong adoption and customers are now delivering a stream of results on Sitefinity 4.</p>
<p>With our recent <a href="http://www.sitefinity.com/upgrade">upgrade initiative</a>, we’re largely closing the book on this difficult transition.  Of course it’ll never fully be done, but we feel good about where we’re starting in 2012.</p>
<h2>A quick word for the developer audience</h2>
<p>I already expressed our desire to engage beyond developers with Sitefinity 4.  In practical terms, this meant a heavy emphasis on usability.  It also meant a lot of features like scheduling, layouts, workflows, granular permissions, a form builder, rich classifications, etc., etc.  These features are designed to empower people throughout the organization.</p>
<p>However, in the midst of empowering non-developers we complicated things that .NET developers loved about Sitefinity 3; this primarily being the accessibility of Sitefinity’s extensibility.  My phrasing is very precise here.  Sitefinity 4 has obscene amounts of extensibility, but to a developer with a tight deadline (most of us) this extensibility isn’t easily grasped or utilized.</p>
<p>We’ve addressed this through “teaching resources” (Sitefinity SDK, extensive documentation, webinars, videos, blogs), but it still takes too much time to absorb.  Our goal in Q1 2012 is to create an extensibility framework that is naturally intuitive to .NET developers.  We’ll do this primarily through the Module Builder and with Sitefinity Thunder (<a href="http://www.sitefinity.com/web-content-management/roadmap.aspx">roadmap</a>).</p>
<p>Expect to hear more about this in January and February.  We’ll iterate on these tools rapidly until extensibility is widely accessible &amp; utilized.  After all, developer productivity is what Telerik is widely recognized for.  It’s time for us to reclaim this benefit.</p>
<h2>Wrapping up…</h2>
<p>As many of you know Telerik is based in Sofia, Bulgaria and most of the Sitefinity team resides at this office.  I personally work from our Houston office and I visit Telerik HQ each year in October.  I chat with my co-workers constantly, but I only get to see them (in person) once a year.  This provides me a chance to view a time-elapsed perspective of this team and their growth.</p>
<p>Here is the team in October of 2010:</p>
<p><a href="http://gabesumner.com/wp-content/uploads/2011/12/team-2010.jpg" rel="lightbox[387]"><img class="alignnone size-full wp-image-390" title="Sitefinity Team - October 2010" src="http://gabesumner.com/wp-content/uploads/2011/12/team-2010.jpg" alt="Sitefinity Team - October 2010" width="620" height="358" /></a></p>
<p>Here is the team in October of 2011:</p>
<p><img class="alignnone size-full wp-image-389" title="Sitefinity Team - October 2011" src="http://gabesumner.com/wp-content/uploads/2011/12/team-2011.jpg" alt="Sitefinity Team - October 2011" width="620" height="298" /></p>
<p>This past October I left very optimistic.  My optimism didn’t stem from any grandiose idea that I saw prototypes for.  Instead, my optimism stemmed from the maturity and discipline I saw in action.  It was great to listen to their scrum meetings, their testing conversations, their planning meetings, etc.  The difficulties of this past year have made this team stronger and wiser.</p>
<p>Of course, we still have a lot of work ahead of us.  But we’re closing the book on 2011 and with it the high-volume of change that we needed to assimilate.  In 2012 we will finally get to explore the capabilities of this new team and product we’ve created.  As an evangelist, that makes me excited.  As a customer, hopefully it makes you excited too.</p>
<p><strong>Happy Holidays and we’ll chat next year!  :)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/2011-reflections-on-teleriks-sitefinity-cms/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Amazon&#8217;s Silk Browser breaks Web Personalization</title>
		<link>http://gabesumner.com/amazons-silk-browser-breaks-web-personalization</link>
		<comments>http://gabesumner.com/amazons-silk-browser-breaks-web-personalization#comments</comments>
		<pubDate>Thu, 29 Sep 2011 20:29:58 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gabesumner.com/?p=461</guid>
		<description><![CDATA[Yesterday Amazon&#8217;s Jeff Bezos announced their new Kindle Fire tablet.  This tablet is a full color, touch-enabled device that is capable of apps, games, books, movies or web browsing.  To put it bluntly, it&#8217;s like an iPad&#8230;except it&#8217;s $199. However, it&#8217;s the &#8230; <a href="http://gabesumner.com/amazons-silk-browser-breaks-web-personalization">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Yesterday Amazon&#8217;s Jeff Bezos <a href="http://thisismynext.com/2011/09/28/amazon-kindle-tablet-pictures-videohands-on/">announced</a> their new Kindle Fire tablet.  This tablet is a full color, touch-enabled device that is capable of apps, games, books, movies or web browsing.  To put it bluntly, it&#8217;s like an iPad&#8230;except it&#8217;s $199.</p>
<p><img class="alignnone size-full wp-image-462" title="Kindle Fire" src="http://gabesumner.com/wp-content/uploads/2012/02/kindle-fire.png" alt="Kindle Fire" width="471" height="299" /></p>
<p>However, it&#8217;s the web browser component of this device that caught my attention.</p>
<p><span id="more-461"></span></p>
<h2>Introducing Amazon&#8217;s Silk Web Browser</h2>
<p>Amazon is calling the Kindle Fire&#8217;s browser &#8220;Amazon Silk&#8221;.  This browser is based on WebKit, but utilizes Amazon&#8217;s Elastic Computing to optimize the delivery of web content. [<a href="http://www.extremetech.com/mobile/97587-amazon-silk-bridging-the-gap-between-desktop-and-tablet-web-browsers">More details</a>]</p>
<p>This video gives a nice overview of how this works.</p>
<p><a href="http://www.youtube.com/watch?feature=player_embedded&amp;v=_u7F_56WhHk">http://www.youtube.com/watch?feature=player_embedded&amp;v=_u7F_56WhHk</a></p>
<p>The <strong>key point to understand</strong> is that the web request will be coming from Amazon&#8217;s Elastic Computing infrastructure, not the visitor&#8217;s Kindle Fire device.  For web sites that are doing personalization, content targeting or analytics, this presents a challenge.</p>
<h2>It&#8217;s all about the experience</h2>
<p><a href="http://www.aiim.org/infonomics/web-experience-management.aspx">Web Experience Management</a> is the latest hot trend in CMS.  WEM enables marketers to slice &amp; dice their visiting audience into segments (based on behavior patterns, geolocation and profiles) and personalize content accordingly.</p>
<p>The ultimate goal is increased engagement (<em>we want to cultivate a more engaged audience</em>).  In practical terms though, this translates into more buying, sharing, subscribing, clicking, etc.</p>
<p>However, these personalization and targeting tools are often initially based on the IP address of your anonymous visitor.  Using their IP address the CMS can approximate which region of the world they are in and subsequent page requests bring their profile into clearer focus.</p>
<p>But what happens to this personalization when all the web requests are coming from Amazon&#8217;s Elastic Computing infrastructure?</p>
<h2>Opera did it &#8211; and it broke personalization</h2>
<p>Although not entirely the same, Opera already implemented a similar feature known as <a href="http://www.opera.com/browser/turbo/">Turbo</a> into their browser.  Opera, like Amazon Silk, is acting as a proxy and pre-fetching content on behalf of slower browsers.</p>
<p>As a little test, I fired up Opera Turbo and pointed it at <a href="http://whatismyipaddress.com/">WhatIsMyIPAddress.com</a>.</p>
<p><img class="alignnone size-full wp-image-463" title="Where am I? Based on my IP Address" src="http://gabesumner.com/wp-content/uploads/2012/02/whereami.png" alt="Where am I? Based on my IP Address" width="676" height="323" /></p>
<p>For the record, I&#8217;m not off the cost of Africa and my ISP isn&#8217;t Opera Software.  Here is another test searching for &#8220;restaurants&#8221; with Google:</p>
<p><img class="alignnone size-full wp-image-464" title="Restaurant results based on IP address" src="http://gabesumner.com/wp-content/uploads/2012/02/google-for-restaurants.png" alt="Restaurant results based on IP address" width="664" height="327" /></p>
<p>Google is very good at approximating your location (<a href="http://www.google.com/search?gcx=w&amp;sourceid=chrome&amp;ie=UTF-8&amp;q=restaurants">try it</a>) and presenting restaurant results for your area.  However, with Opera Turbo it completely fails and they are forced to ask for my zip code.</p>
<h2>There is still hope</h2>
<p>Amazon Silk was only announced yesterday so details are still emerging.   It&#8217;s possible that Amazon has a solution to these challenges.  However, as demonstrated, these pre-fetching techniques can present sizable challenges for organizations that are employing personlization or content targeting on their web sites.  It will be interesting to see how Amazon addresses these challenges and how the CMS industry is impacted (if at all).</p>
<p>Long-term, I can&#8217;t imagine these pre-fetching technique will become widespread.  Mobile devices are getting increasingly more powerful and wireless broadband is becoming ubiquitous.  It will only be a matter of time before page load times are a non-issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/amazons-silk-browser-breaks-web-personalization/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WYSIWYG Rich Text Editors: Your CMS&#8217;s Achilles&#8217; heel</title>
		<link>http://gabesumner.com/wysiwyg-rich-text-editors-your-cmss-achilles-heel</link>
		<comments>http://gabesumner.com/wysiwyg-rich-text-editors-your-cmss-achilles-heel#comments</comments>
		<pubDate>Sun, 08 May 2011 15:13:22 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://gabesumner.com/?p=371</guid>
		<description><![CDATA[Most of what you read online flows through web-based (browser-based) WYSIWYG Rich Text editors.  These tools are central to every CMS and enable content authors, who might know little about HTML, to create HTML. However, content authors are often baffled by &#8230; <a href="http://gabesumner.com/wysiwyg-rich-text-editors-your-cmss-achilles-heel">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Most of what you read online flows through web-based (browser-based) WYSIWYG Rich Text editors.  These tools are central to every CMS and enable content authors, who might know little about HTML, to create HTML.</p>
<p>However, content authors are often baffled by the behavior of these tools.  In fact, many characterize their Rich Text editor as the <em><strong>most fragile part of their CMS</strong></em>.  This blog post is inspired by my research into this challenge.</p>
<p><span id="more-371"></span></p>
<h2>Why is web-based Rich Text editing so challenging?</h2>
<ul>
<li>Web “browsers” were never designed to be MS Word.</li>
<li>Lack of standards around browser-based WYSIWYG editing</li>
<li>Each browser has a unique implementation of this functionality</li>
<li>Rich Text editors require many layers of ‘hacks’ to create WYSIWYG editing</li>
</ul>
<p><em>** Standards are </em><a href="http://blog.whatwg.org/the-road-to-html-5-contenteditable"><em>beginning to emerge</em></a><em> through HTML5</em></p>
<h2>How can Rich Text editors be improved?</h2>
<ol>
<li><a href="http://gabesumner.com/unclutter-your-rich-text-editors-toolbar-essential-vs-useless-features">Get control of the toolbar</a></li>
<li><a href="http://gabesumner.com/copy-from-ms-word-paste-into-a-rich-text-wysiwyg-editor">Automatically clean pasted content</a></li>
<li><a href="http://gabesumner.com/do-not-use-font-styling-in-your-rich-text-wysiwyg-editor">Eliminate ad-hoc usage of fonts, font sizes &amp; colors</a></li>
<li>Eliminate tables</li>
<li><a href="http://gabesumner.com/create-a-rich-text-editing-experience-that-authors-wont-avoid">Use good typography</a></li>
<li><a href="http://gabesumner.com/create-a-rich-text-editing-experience-that-authors-wont-avoid">Go &#8216;full screen’</a></li>
<li><a href="http://gabesumner.com/create-a-rich-text-editing-experience-that-authors-wont-avoid">Use TAB for indent</a></li>
<li>Apply custom styles to the editor to create WYSIWYG</li>
<li>Auto-save content</li>
</ol>
<h2>Enough talk, where is a demo?</h2>
<p>I created a demo that implements many of these recommendations:</p>
<p><strong><a href="http://gabesumner.com/samples/wysiwyg.html">Rich Text WYSIWYG Demo</a></strong></p>
<p><em>** This demo is a work in progress.  Please report any issues you discover.  Some of the scripting needs refactored.  I also haven’t done extensive testing for browser compatibility.  Consider this demo a proof-of-concept, at this stage.</em></p>
<h2>See it in action</h2>
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/7taQjWHRlc4?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/wysiwyg-rich-text-editors-your-cmss-achilles-heel/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>DO NOT use font styling in your Rich Text WYSIWYG editor</title>
		<link>http://gabesumner.com/do-not-use-font-styling-in-your-rich-text-wysiwyg-editor</link>
		<comments>http://gabesumner.com/do-not-use-font-styling-in-your-rich-text-wysiwyg-editor#comments</comments>
		<pubDate>Wed, 04 May 2011 17:13:28 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://gabesumner.com/do-not-use-font-styling-in-your-rich-text-wysiwyg-editor</guid>
		<description><![CDATA[This web page looks the way it does because of a combination of HTML and CSS.  These 2 technologies are the primary languages of the web.  However, very few people who publish web content know HTML &#38; CSS.  This is &#8230; <a href="http://gabesumner.com/do-not-use-font-styling-in-your-rich-text-wysiwyg-editor">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This web page looks the way it does because of a combination of HTML and CSS.  These 2 technologies are the primary languages of the web.  However, very few people who publish web content know HTML &amp; CSS.  <em>This is okay though; very few people who drive cars can build a car.</em></p>
<p><em><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="Using font types, sizes, colors and background colors in a WYSIWYG editor is WRONG" src="http://gabesumner.com/wp-content/uploads/2011/05/image3.png" border="0" alt="Using font types, sizes, colors and background colors in a WYSIWYG editor is WRONG" width="604" height="110" /></em></p>
<p>Rich Text (WYSIWYG) editors enable content authors, who know nothing about HTML, to create HTML.  However, there are good &amp; bad practices with regard to HTML &amp; CSS.  When Rich Text editors are poorly configured these tools make it easy for unsuspecting authors to accidently ruin their web site.</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/7taQjWHRlc4?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/7taQjWHRlc4?version=3" type="application/x-shockwave-flash" width="640" height="385" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><span id="more-359"></span></p>
<h2>Using font types, sizes, colors &amp; background colors in a Rich Text editor will eventually ruin your web site</h2>
<p>Most Rich Text editors (and CMS’s) enable authors to arbitrarily select new fonts, font sizes, font colors and background colors.  However, these tools should not be used!  In fact, these tools should be entirely <a href="http://gabesumner.com/unclutter-your-rich-text-editors-toolbar-essential-vs-useless-features">removed from the toolbar</a>.</p>
<p>Understanding why these features are destructive requires some basic HTML &amp; CSS knowledge.  Here is a simple example:</p>
<p>&lt;a href=”http://gabesumner.com”&gt;This is an important link.&lt;/a&gt;</p>
<p>The HTML shown above defines a web link (<a href="#">like this</a>).  These links are easy to create using a Rich Text editor.  However, this is an important link and the font should be bigger and red.  This is also easily accomplished using the font size and color features…</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="Creating an important link using in-line styling in a WYSIWYG editor" src="http://gabesumner.com/wp-content/uploads/2011/05/image6.png" border="0" alt="Creating an important link using in-line styling in a WYSIWYG editor" width="604" height="102" /></p>
<p>However, this is what these features do to the HTML:</p>
<p>&lt;a href=&#8221;http://gabesumner.com&#8221;&gt;&lt;span style=&#8221;font-family: verdana; font-size: 24px; color: #c00000;&#8221;&gt;This is an important link.&lt;/span&gt;&lt;/a&gt;</p>
<p>The Rich Text editor injects in-line styling directly into the HTML.  This <em>looks</em> fine and it’s easy to understand why many authors are entirely happy with these results.   Eventually, however, this in-line styling will create insidious challenges for the web site.</p>
<h2>What will in-line (or ad-hoc) styling do to your web site?</h2>
<p>Occasional use of in-line styling won’t create many problems for the web site.  However, as the web site grows and in-line styling multiplies it creates visual inconsistencies between pages.  Each time authors compose content they are arbitrarily deciding what, for example, an important link looks like.</p>
<p>This lack of consistency creates usability issues for web visitors.  Each page in the web site is redefining the visual interface.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="Using arbitrary in-line styling in a WYSWIYG editor makes each page feel like it's a new web site" src="http://gabesumner.com/wp-content/uploads/2011/05/image4.png" border="0" alt="Using arbitrary in-line styling in a WYSWIYG editor makes each page feel like it's a new web site" width="604" height="294" /></p>
<p>The other challenge arises when the visual style of the web site needs modified.  This might be due to a simple redesign, or it might be needed to adapt the web site to a new form factor (phones, tablets, etc.).  When styling is injected directly into the content it becomes extremely difficult to modify.</p>
<h2>Using pre-defined styles will make authors more productive and produce better results</h2>
<p>Instead of arbitrarily sprinkling ad-hoc styling through the web site, authors can work with web developers &amp; designers to establish a menu of pre-defined styles.  Once established, these styles can be used by authors to style content:</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="Use pre-defined styles in a WYSWIYG Rich Text editor" src="http://gabesumner.com/wp-content/uploads/2011/05/image5.png" border="0" alt="Use pre-defined styles in a WYSWIYG Rich Text editor" width="604" height="414" /></p>
<p>Behind the scenes, the Rich Text editor is applying pre-defined class styles to the content.</p>
<p>&lt;a href=&#8221;http://gabesumner.com&#8221; class=”ImportantLink”&gt;This is an important link.&lt;/a&gt;</p>
<p>In this example, the “ImportantLink” class was pre-defined.  The styling associated with this class (font size, color, type, weight, etc.) is defined outside the web content.  This class could be used thousands of times and, if it needed restyled, modified in a single place.</p>
<h2>The pros of pre-defined styles vastly outweigh the cons</h2>
<p>Pre-defined styles take some extra time (initially) to define.  In addition, content authors might feel limited when they encounter new scenarios for which pre-defined styles do not exist.</p>
<p>However, once established, pre-defined styles are easy to use, produce rich results, and create a consistent visual experience throughout the web site.  Furthermore, these styles can be easily adapted by web developers &amp; designers if needed.</p>
<p>Long-term, web site management will be much easier when in-line styling is avoided.</p>
]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/do-not-use-font-styling-in-your-rich-text-wysiwyg-editor/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Modifying the width of the CKEditor Styles dropdown</title>
		<link>http://gabesumner.com/modifying-the-width-of-the-ckeditor-styles-dropdown</link>
		<comments>http://gabesumner.com/modifying-the-width-of-the-ckeditor-styles-dropdown#comments</comments>
		<pubDate>Sun, 01 May 2011 22:51:26 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ckeditor]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://gabesumner.com/modifying-the-width-of-the-ckeditor-styles-dropdown</guid>
		<description><![CDATA[CKEditor comes included with a handy-dandy style selector: Unfortunately this style selector defaults to a very small width.  This small width can result in larger styles being truncated: Thankfully this can be fixed with a couple of custom styles: div.cke_panel.cke_ltr.cke_rcombopanel &#8230; <a href="http://gabesumner.com/modifying-the-width-of-the-ckeditor-styles-dropdown">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>CKEditor comes included with a handy-dandy style selector:</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="The style selector of CKEditor's toolbar" src="http://gabesumner.com/wp-content/uploads/2011/05/image.png" border="0" alt="The style selector of CKEditor's toolbar" width="549" height="58" /></p>
<p>Unfortunately this style selector defaults to a very small width.  This small width can result in larger styles being truncated:</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="CKeditor's style selector toolbar is too small and cuts off the text." src="http://gabesumner.com/wp-content/uploads/2011/05/image1.png" border="0" alt="CKeditor's style selector toolbar is too small and cuts off the text." width="550" height="225" /></p>
<p>Thankfully this can be fixed with a couple of custom styles:</p>
<p><span id="more-345"></span></p>
<p>div.cke_panel.cke_ltr.cke_rcombopanel { width: 300px !important; }<br />
span.cke_rcombo span.cke_styles a span span.cke_text { width: 150px; }</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="CKEditor's style selector is now wider" src="http://gabesumner.com/wp-content/uploads/2011/05/image2.png" border="0" alt="CKEditor's style selector is now wider" width="550" height="188" /></p>
<h2>Where should these styles be put?</h2>
<p>For my own project, I was using the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsCss">contentsCss</a> setting to apply a set of custom CSS styles to CKEditor.  Consequently, I simply put the styles shown above in this file.</p>
<p>However, these styles could also be put in the <strong>Editor.css</strong> file for the skin being used by CKEditor.  (<em>The default skin is the Kama skin.</em>)</p>
<p>Lastly, it’s possible these styles might not work with other (non-Kama) skins.</p>
<p>Best of luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/modifying-the-width-of-the-ckeditor-styles-dropdown/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Create a Rich Text editing experience that authors won&#8217;t avoid</title>
		<link>http://gabesumner.com/create-a-rich-text-editing-experience-that-authors-wont-avoid</link>
		<comments>http://gabesumner.com/create-a-rich-text-editing-experience-that-authors-wont-avoid#comments</comments>
		<pubDate>Thu, 28 Apr 2011 13:19:55 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://gabesumner.com/?p=326</guid>
		<description><![CDATA[WYSIWYG Rich Text editors are central to every CMS.   These tools enable content authors, who might know nothing about HTML, to create HTML content. However, content authors frequently fear and avoid their CMS’s rich text editor.  These tools are perceived &#8230; <a href="http://gabesumner.com/create-a-rich-text-editing-experience-that-authors-wont-avoid">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gabesumner.com/wp-content/uploads/2011/04/beware.jpg" rel="lightbox[326]"><img class="alignright size-full wp-image-333" title="Beware of Rich Text Editor" src="http://gabesumner.com/wp-content/uploads/2011/04/beware.jpg" alt="Beware of Rich Text Editor" width="140" height="147" /></a>WYSIWYG Rich Text editors are central to every CMS.   These tools enable content authors, who might know nothing about HTML, to create HTML content.</p>
<p>However, content authors frequently fear and avoid their CMS’s rich text editor.  These tools are perceived as confusing, buggy &amp; fragile.  As a result, content is written off-line, using tools like MS Word, and then pasted into the CMS’s Rich Text editor.  Unfortunately, this behavior creates a completely <a href="http://gabesumner.com/copy-from-ms-word-paste-into-a-rich-text-wysiwyg-editor">different set of challenges</a>.</p>
<p>This post is devoted to reshaping this behavior.  The goal is to lure content authors away from their <a href="http://office.microsoft.com/en-us/word/">trusty off-line tools</a> and instead use their CMS to compose new content.  Below are some recommendations for creating a more friendly web-based authoring experience.</p>
<p><span id="more-326"></span></p>
<h2>1.  Use good typography</h2>
<p>Many Rich Text editors use extremely hostile fonts &amp; font sizes.  No content creator is going to spend an hour writing content in an editor that makes them squint.</p>
<p><a href="http://gabesumner.com/wp-content/uploads/2011/04/image2.png" rel="lightbox[326]"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="TinyMCE defaults to using small fonts.  No content author will want to compose in this environment." src="http://gabesumner.com/wp-content/uploads/2011/04/image_thumb1.png" alt="TinyMCE defaults to using small fonts.  No content author will want to compose in this environment." width="504" height="250" border="0" /></a></p>
<p>Readability is a problem, in general, on the web.  In fact, there are applications devoted solely to <a href="https://www.readability.com/">transforming the web into a readable format</a>.  The <a href="http://www.smashingmagazine.com/2009/03/18/10-principles-for-readable-web-typography/">same principals</a> used to create legible web sites, can also be used to create a pleasing authoring environment.</p>
<h2>2.  Go ‘full screen’ for distraction free writing</h2>
<p>In most CMS’s, the Rich Text editor occupies a very small portion of the screen.  This is appropriate for small content <em>touch-up’s</em>, but completely undesirable for extended writing sessions (like this article).</p>
<p><a href="http://gabesumner.com/wp-content/uploads/2011/04/4-27-2011-10-52-03-AM1.png" rel="lightbox[326]"><img style="padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Blogger has one of the worst Rich Text WYSIWYG authoring experiences imaginable." src="http://gabesumner.com/wp-content/uploads/2011/04/4-27-2011-10-52-03-AM_thumb1.png" alt="Blogger has one of the worst Rich Text WYSIWYG authoring experiences imaginable." width="520" height="295" border="0" /></a></p>
<p>It’s frustrating to edit a 4-page article and only see 2 paragraphs at a time.  It’s even more frustrating when most of the screen is completely unused.</p>
<p>Most Rich Text editors (<a href="http://tinymce.moxiecode.com/">TinyMCE</a>, <a href="http://ckeditor.com/">CKEditor</a>, <a href="http://www.telerik.com/products/aspnet-ajax/editor.aspx">RadEditor</a>) have a full-screen feature that can be added to the <a href="http://gabesumner.com/unclutter-your-rich-text-editors-toolbar-essential-vs-useless-features">toolbar</a>.  By using this feature authors can easily toggle into (and out-of) full-screen mode.</p>
<h2>3.  Wrap long-lines of text for readability</h2>
<p>A single line of text should not be wider than 65-70 characters.  Anything longer will be difficult to read.  This rule is well known in typography, but often ignored in Rich Text Editors.</p>
<p><a href="http://gabesumner.com/wp-content/uploads/2011/04/4-27-2011-11-24-49-AM1.png" rel="lightbox[326]"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Orchard CMS - tiny fonts and no word wrapping means that content authors will write their content elsewhere." src="http://gabesumner.com/wp-content/uploads/2011/04/4-27-2011-11-24-49-AM_thumb1.png" alt="Orchard CMS - tiny fonts and no word wrapping means that content authors will write their content elsewhere." width="520" height="295" border="0" /></a></p>
<p>This problem is particularly noticeable with full-screen mode, or any CMS that occupies the entire width of the screen.  Thankfully custom CSS styles can be applied to the Rich Text editor and establish a width to wrap text.</p>
<p>Here is an example of ‘full screen’ edit mode with comfortable word-wrapping:</p>
<p><a href="http://gabesumner.com/wp-content/uploads/2011/04/4-27-2011-11-32-56-AM1.png" rel="lightbox[326]"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="There is a reason that WordPress is beloved by its users." src="http://gabesumner.com/wp-content/uploads/2011/04/4-27-2011-11-32-56-AM_thumb1.png" alt="There is a reason that WordPress is beloved by its users." width="520" height="295" border="0" /></a></p>
<h2>4.  Use the TAB key to indent lists</h2>
<p>Outside of the web-world, the tab key is used to indent a list item.  (Shift-tab is used to out-dent a list item).  However, on the web the TAB key moves to the next field in a web form.  These 2 conflicting conventions are at war in Rich Text editors.  As a result, authors are frequently frustrated that a familiar convention (TAB to indent) sends them somewhere else in the web page.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Indent &amp; outdent options in WordPress's toolbar" src="http://gabesumner.com/wp-content/uploads/2011/04/4-27-2011-11-47-28-AM1.png" alt="Indent &amp; outdent options in WordPress's toolbar" width="596" height="76" border="0" /></p>
<p>Rich Text editors (<a href="http://tinymce.moxiecode.com/">TinyMCE</a>, <a href="http://ckeditor.com/">CKEditor</a>, <a href="http://www.telerik.com/products/aspnet-ajax/editor.aspx">RadEditor</a>) have an option for capturing the TAB key and modifying the behavior.  However, web savvy users are going to be equally frustrated if their browser’s traditional TAB behavior is modified.</p>
<p><strong>My advice,</strong> modify the behavior of TAB when authors switch into ‘full screen’ mode.  In this mode there are no other web form fields.  Consequently, no one will be using the TAB key to move to the next field.  When ‘full screen’ mode is switched off, restore the traditional web-behavior of the TAB key.</p>
<h2>5.  Auto-save to protect against computer mishaps</h2>
<p><em>Imagine the unimaginable happens…</em></p>
<p>Authors are lured away from MS Word in favor of web-authoring tools.  These tools create a comfortable authoring environment and they forget they’re on a web page.  Instead, they are purely focused on writing.</p>
<p>An hour passes and the author clicks Save…</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Your web browser reminding you that your Rich Text WYSIWYG editor is stateless - and now your article is gone" src="http://gabesumner.com/wp-content/uploads/2011/04/image0011.jpg" alt="Your web browser reminding you that your Rich Text WYSIWYG editor is stateless - and now your article is gone" width="520" height="378" border="0" /></p>
<p>This error will quickly cause authors to regain their fear of web-based authoring tools and retreat to predictable off-line environments.  In MS Word, even if power is entirely lost, the content is typically recoverable.</p>
<p>On the web this level of auto-recovery is also possible by periodically saving the editor’s state.  This can be done through…</p>
<ol>
<li>HTML5’s off-line storage</li>
<li>Browser cookies – <em><a href="http://support.microsoft.com/kb/306070">beware limitations</a></em></li>
<li>Server-side – through web services or the CMS</li>
</ol>
<p>Realistically, #3 is the path most projects will pursue.  However, this will require developers to invent a storage &amp; recovery solution.  To my knowledge, no Rich Text editor offers a canned solution to this challenge.  However, there are likely CMS products that have implemented this feature.</p>
<h2>Parting words…</h2>
<p>Microsoft Word has been around since 1983.  It’s unreasonable to think that a blog post with a few tips could prescribe a full alternative to this software.  Like it or not, MS Word will continue to be an enormous force behind the content that finds its way online.  <a href="http://gabesumner.com/copy-from-ms-word-paste-into-a-rich-text-wysiwyg-editor">Accept it and learn to cope with it.</a></p>
<p>However, it’s also true the Rich Text editors (and CMS’s) frequently make UI decisions that are downright hostile to content authors.  These systems work great for developers (who are pasting “Lorem ipsum” sample text all day), but create poor experiences for extended writing sessions.  It’s little surprise authors actively avoid them.</p>
<p>Hopefully the recommendations described above will help repair some of this damage.  In addition, I&#8217;ve attempted to put many of these recommendations into practice in the following sample (give it a try):</p>
<p><a href="/samples/wysiwyg.html"><strong>Try It! &#8211; Best Practice WYSIWYG Rich Text Editor</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/create-a-rich-text-editing-experience-that-authors-wont-avoid/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Copy from MS Word, Paste into a Rich Text WYSIWYG editor</title>
		<link>http://gabesumner.com/copy-from-ms-word-paste-into-a-rich-text-wysiwyg-editor</link>
		<comments>http://gabesumner.com/copy-from-ms-word-paste-into-a-rich-text-wysiwyg-editor#comments</comments>
		<pubDate>Tue, 26 Apr 2011 13:21:02 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://gabesumner.com/copy-from-ms-word-paste-into-a-rich-text-wysiwyg-editor</guid>
		<description><![CDATA[This title will send chills up the spine of web developers &#38; content authors everywhere.  Web Developers fear the bloated markup caused by this action.  Content authors fear the difficulty of mixing their favorite authoring environment with their CMS’s editor. &#8230; <a href="http://gabesumner.com/copy-from-ms-word-paste-into-a-rich-text-wysiwyg-editor">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://gabesumner.com/wp-content/uploads/2011/04/ralph_eats_paste.jpg" rel="lightbox[289]"><img class="alignright size-full wp-image-312" title="Ralph &amp; paste - a lethal combination" src="http://gabesumner.com/wp-content/uploads/2011/04/ralph_eats_paste.jpg" alt="" width="142" height="160" /></a>This title will send chills up the spine of web developers &amp; content authors everywhere.  Web Developers fear the bloated markup caused by this action.  Content authors fear the difficulty of mixing their favorite authoring environment with their CMS’s editor.</p>
<h2>Why is copy &amp; paste a problem on the web?</h2>
<p>The problem isn’t copy &amp; paste.  The problem is WHAT is being copied &amp; pasted.</p>
<p>Plain text (content without any styling) is completely safe to paste into a Rich Text editor.  However, rich text content consists of 1) <strong>text</strong> and 2) <strong>styling</strong>.</p>
<blockquote><p>This sentence has a <strong>bolded</strong> word.</p></blockquote>
<p>In this example, my Rich Text editor added hidden markup around the word “bolded”.  This markup instructs the web browser to apply special styling.  If this content is copied &amp; pasted into another program then this hidden styling is included.</p>
<p><strong><em>And despite what you think, this isn’t what you want…</em></strong></p>
<p><em><strong><span id="more-289"></span></strong></em></p>
<h2>MS Word is not good at creating web sites</h2>
<p>There are plenty of choices for accessing the web (PC, Mac, phones, iPad, IE, Chrome, Firefox, Opera, etc).  Ideally, a web site needs to function reliably in all of these environments.</p>
<p>To address this challenge, web developers establish styling for the entire web site.  This styling, in addition to creating a consistent visual experience, enables the web site to be adapted for each device or browser.</p>
<p>By importing styling from MS Word authors are circumventing their web site’s styling.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Insidious hidden styling that accompanies copy &amp; paste actions from MS Word" src="http://gabesumner.com/wp-content/uploads/2011/04/image_thumb41.png" border="0" alt="Insidious hidden styling that accompanies copy &amp; paste actions from MS Word" width="600" height="249" /></p>
<p>As a result, styling that worked wonderfully in one environment (MS Word) will behave very poorly in another environment (your web site).   Even if it looks okay during publishing, this imported styling will create <a href="http://gabesumner.com/do-not-use-font-styling-in-your-rich-text-wysiwyg-editor">insidious long-term issues</a> for the web site.</p>
<h2>What’s the solution to copy &amp; paste?</h2>
<p>As described above, the embedded styling (found in copy &amp; pasted content) is the problem.  Consequently, the solution is simple and obvious:</p>
<p><strong>Copy the text, but remove the styling.</strong></p>
<p>Towards this end, special ‘paste’ buttons are popular with many Rich Text editors:</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="8 icons devoted to copying &amp; pasting in a Rich Text WYSIWYG editor" src="http://gabesumner.com/wp-content/uploads/2011/04/4-25-2011-11-59-09-AM.png" border="0" alt="8 icons devoted to copying &amp; pasting in a Rich Text WYSIWYG editor" width="426" height="66" /></p>
<p>However, this is a ridiculous <a href="http://gabesumner.com/unclutter-your-rich-text-editors-toolbar-essential-vs-useless-features">waste of toolbar real estate</a>.  The Rich Text editor should automatically clean pasted content.  The alternative is educating end-users regarding which of these 8 buttons they should click.</p>
<p>All major Rich Text solutions (<a href="http://tinymce.moxiecode.com/">TinyMCE</a>, <a href="http://ckeditor.com/">CKEditor</a>, <a href="http://www.telerik.com/products/aspnet-ajax/editor.aspx">RadEditor</a>) have options for automatically cleaning pasted rich text content.</p>
<p><strong>This solution has a downside though:</strong></p>
<p>When styling is removed the content will look radically different.  This requires content authors to reapply missing styling within the Rich Text editor.  By doing this, authors are replacing MS Word styling with web friendly styling.</p>
<h2>This solution is unrealistic, content authors will revolt</h2>
<p>Everything I’ve written is well known to developers.  Furthermore, features for automatically detecting and cleaning <em>dirty</em> content are widely available.</p>
<p>However, these features are often disabled in the face of user revolt.</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Content authors will revolt if you strip away their MS Word styling (or remove font colors)" src="http://gabesumner.com/wp-content/uploads/2011/04/Simpsons_angry_mob.png" border="0" alt="Content authors will revolt if you strip away their MS Word styling (or remove font colors)" width="600" height="262" /></p>
<p>It’s normal for content authors to react negatively when their nicely formatted MS Word document turns to garbage in the CMS.  These reactions are given credibility since their actions <em>worked fine in another CMS or Rich Text editor</em>.</p>
<p><em>So…just disable the feature that strips MS Word styling and make them happy…</em></p>
<p>This will eventually ruin the web site, but the customer is always right.  Right?</p>
<h2>Is Clippy the solution to our problems?</h2>
<p>This post has now come full circle and we’re no closer to a real-world solution:</p>
<ol>
<li>Developers remove pasted styling to protect the web site</li>
<li>Authors create content in their preferred writing environment.</li>
<li>Authors want to move this content to the web site.</li>
<li>Copy &amp; paste is a logical choice.</li>
<li>Authors are confused when everything goes to hell.</li>
<li>Authors complain to developers.</li>
<li>Developers allow pasted styling to make authors stop complaining.</li>
</ol>
<p>However, as I look over this cascade of events, I see an opportunity for intervention at stage #5.  Education (as much as technology) is the problem.</p>
<p>To address this, here is what I propose:</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Rich Text dialog window when pasting from MS Word.  No, it's not like Clippy." src="http://gabesumner.com/wp-content/uploads/2011/04/image.png" border="0" alt="Rich Text dialog window when pasting from MS Word.  No, it's not like Clippy." width="534" height="358" /></p>
<p>I was chatting with a colleague about this dilemma and showed him this mockup.  He replied with “<em>you want Clippy</em>” and then smiled.  This reply severely shook my faith in my proposal.  I certainly have no desire to interact with Clippy…</p>
<p><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="Microsoft Clippy - Alive, well and now in your CMS" src="http://gabesumner.com/wp-content/uploads/2011/04/Microsoft-Clippy.png" border="0" alt="Microsoft Clippy - Alive, well and now in your CMS" width="134" height="158" align="right" /><strong>However, there is a lot I like about this proposal:</strong></p>
<ul>
<li>It doesn’t involve an animated character</li>
<li>It empowers authors to make their own choice</li>
<li>It educates authors about the consequences</li>
<li>It only displays when relevant</li>
<li>It contains useful information</li>
<li>It will go away</li>
</ul>
<p>None of these things could be said about Clippy.</p>
<h2>If you build it, they will come!</h2>
<p>Everything described happens because authors avoid writing content in their CMS’s Rich Text editor.  The hacky style stripping &amp; modal windows are completely unnecessary if authors simply <em>type the content in the CMS</em>.</p>
<p>Towards that end, I’m very interested in creating an attractive web-based authoring experience.  Why are authors avoiding web-based authoring tools in favor of off-line tools? How can we change this behavior?</p>
<p>There are some big players (Google Documents, Word Live) that are also wrestling with this challenge.  <a href="http://gabesumner.com/create-a-rich-text-editing-experience-that-authors-wont-avoid">This topic is covered in another post.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/copy-from-ms-word-paste-into-a-rich-text-wysiwyg-editor/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Unclutter your Rich Text Editor&#8217;s toolbar&#8211; Essential vs. Useless Features</title>
		<link>http://gabesumner.com/unclutter-your-rich-text-editors-toolbar-essential-vs-useless-features</link>
		<comments>http://gabesumner.com/unclutter-your-rich-text-editors-toolbar-essential-vs-useless-features#comments</comments>
		<pubDate>Sun, 24 Apr 2011 15:50:57 +0000</pubDate>
		<dc:creator>Gabe Sumner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://gabesumner.com/unclutter-your-rich-text-editors-toolbar-essential-vs-useless-features</guid>
		<description><![CDATA[WYSIWYG Rich Text Editors (like TinyMCE, CKEditor, RadEditor, etc.) are central to how content gets into a CMS.  These tools enable content authors, who know nothing about HTML, to create HTML.  However, these tools are notoriously fragile, buggy and confusing &#8230; <a href="http://gabesumner.com/unclutter-your-rich-text-editors-toolbar-essential-vs-useless-features">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>WYSIWYG Rich Text Editors (like <a href="http://tinymce.moxiecode.com/">TinyMCE</a>, <a href="http://ckeditor.com/">CKEditor</a>, <a href="http://www.telerik.com/products/aspnet-ajax/editor.aspx">RadEditor</a>, etc.) are central to how content gets into a CMS.  These tools enable content authors, who know nothing about HTML, to create HTML.  However, these tools are <a href="http://www.mikeindustries.com/blog/archive/2009/04/the-sorry-state-of-wysiwyg-web-editors">notoriously</a> fragile, buggy and confusing to non-technical authors.</p>
<p><img title="A very very cluttered Rich Text editor toolbar.  Where is Clippy?" src="http://www.sitefinitywatch.com/Libraries/MetaBlogLib/WindowsLiveWriter-EnablingDisablingToolsinRadEditor_9461-radeditor-all-tools_3.sflb.ashx" alt="A very very cluttered Rich Text editor toolbar.  Where is Clippy?" /></p>
<p>There aren’t any perfect answers to this challenge, but a helpful strategy is to disable unneeded features that are cluttering the Rich Text editor’s toolbar.  This is a minor task that creates a vastly improved authoring experience.</p>
<p>At best, these unneeded features confuse content authors &amp; encourage bad practices.  At worst, these features will cripple the web site.  Identifying (and removing) unnecessary Rich Text features creates a friendlier, safer and more predictable content authoring experience.</p>
<p><span id="more-274"></span></p>
<h2>Essential Rich Text (WYSIWYG) features</h2>
<ul>
<li>Lists
<ul>
<li>Unordered, Ordered</li>
<li>Indent, Outdent</li>
</ul>
</li>
<li>Links
<ul>
<li>Insert &amp; Remove</li>
</ul>
</li>
<li>Images
<ul>
<li>Upload, Resizing</li>
<li>Alignment</li>
</ul>
</li>
<li>Styling
<ul>
<li>H1, H2, H3</li>
<li>Paragraph</li>
<li>Bold, Italics</li>
</ul>
</li>
</ul>
<h2>Optional Rich Text (WYSIWYG) features</h2>
<ul>
<li>More styling…
<ul>
<li>H4, H5</li>
<li>Blockquote</li>
<li>Preformatted</li>
<li>Pre-defined custom styles<!--EndFragment--></li>
</ul>
</li>
<li>Spellcheck</li>
<li>Special Characters</li>
<li>Page break</li>
<li>Full-screen edit mode</li>
</ul>
<h2>Unnecessary Rich Text (WYSIWYG) features</h2>
<ul>
<li>Copy &amp; paste operations should be handled (and cleaned) automatically:
<ul>
<li>Clear Formatting<!--EndFragment--></li>
<li>Paste from Word</li>
<li>Paste as Plain Text</li>
</ul>
</li>
<li>Styling with limited use-cases, disable to create a less cluttered toolbar
<ul>
<li>Strikethrough</li>
<li>Horizonal rule</li>
<li>Subscript</li>
</ul>
</li>
<li>Features that clutter the toolbar and are never used:
<ul>
<li>Find</li>
<li>Word count</li>
<li>Date/time</li>
<li>Print <!--EndFragment--></li>
</ul>
</li>
</ul>
<h2>Inappropriate or dangerous Rich Text (WYSIWYG) features</h2>
<ul>
<li>Any feature that generates in-line CSS styling
<ul>
<li>Colors</li>
<li>Sizes</li>
<li>Font types</li>
<li>Background colors</li>
<li>Left &amp; right alignment</li>
<li>Centered</li>
<li>Justify</li>
<li>Layers</li>
</ul>
</li>
<li>Any features that encourages content authors to do advanced HTML development:
<ul>
<li>HTML mode</li>
<li>Form elements
<ul>
<li>Textboxes, checkboxes, buttons, etc.</li>
</ul>
</li>
</ul>
</li>
<li>Any feature that encourages authors to create ugly or confusing end-user experiences:<!--EndFragment-->
<ul>
<li>Emoticons</li>
<li>Underline – this is reserved for links on the web.</li>
</ul>
</li>
</ul>
<h2>What am I missing?</h2>
<p>What are your experiences?  Are some of these <em>“unnecessary”</em> options essential for your organization?  Why?  What have you done to create a friendlier (and safer) Rich Text editing experience?</p>
]]></content:encoded>
			<wfw:commentRss>http://gabesumner.com/unclutter-your-rich-text-editors-toolbar-essential-vs-useless-features/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

