<?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>Max Cutler &#187; Software Development - Max Cutler</title>
	<atom:link href="http://www.maxcutler.com/category/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.maxcutler.com</link>
	<description>Dev, Tech, and Life</description>
	<lastBuildDate>Tue, 01 May 2012 22:51:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>WordPress for Windows Phone: 2.0 UI Improvement Ideas</title>
		<link>http://www.maxcutler.com/2011/10/22/wordpress-for-windows-phone-2-0-ui-improvement-ideas/</link>
		<comments>http://www.maxcutler.com/2011/10/22/wordpress-for-windows-phone-2-0-ui-improvement-ideas/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 03:15:37 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=487</guid>
		<description><![CDATA[As I discussed last time, the WordPress app for Windows Phone was recently updated for compatibility with the 7.5 (&#8220;Mango&#8221;) OS update. With that out of the way, I&#8217;d like to see the app undergo some UI/UX improvements to make it feel less like a ported Android app and more like a native Metro-style WP7 [...]]]></description>
			<content:encoded><![CDATA[<p>As I discussed <a title="Coming soon to WordPress for Windows Phone: Mango" href="http://www.maxcutler.com/2011/09/27/wordpress-for-windows-phone-mango">last time</a>, the WordPress app for Windows Phone was recently updated for compatibility with the 7.5 (&#8220;Mango&#8221;) OS update. With that out of the way, I&#8217;d like to see the app undergo some UI/UX improvements to make it feel less like a ported Android app and more like a native Metro-style WP7 app.</p>
<p><span id="more-487"></span></p>
<h3>Better and Consistent Headers</h3>
<p>For some reason, almost every screen in the app uses a header that consists of a relatively large WordPress logo and then the typical page header text. That makes some sense for the blog selection screen (Fig. 1), but not for inner screens (Figs. 3 &amp; 4) when the user is well-aware that they are using the WordPress app.</p>
<p>On the panorama screen, the blog&#8217;s name takes prime billing (Fig. 2), which makes total sense and should be replicated (with a smaller font size/height) for all other &#8220;interior&#8221; screens in the app. If the branding is still desired, we could maybe keep a small circular WP logo in the top-left or top-right corner of the screen.</p>
<p>For non-panorama pages, I&#8217;d also like to enable the system tray (clock, battery, wireless signal, etc.). This eats up some vertical screen space, but I think most users prefer to see it when using apps. It would also allow us to use the system progress indicator (see below).</p>
<p><div class='sc_column one_fourth'><div id="attachment_504" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.maxcutler.com/2011/10/22/wordpress-for-windows-phone-2-0-ui-improvement-ideas/wp_header_1/" rel="attachment wp-att-504"><img class="size-thumbnail wp-image-504 " title="Figure 1" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/10/wp_header_11-e1319334619198-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Figure 1</p></div></div></p>
<p><div class='sc_column one_fourth'><div id="attachment_505" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.maxcutler.com/2011/10/22/wordpress-for-windows-phone-2-0-ui-improvement-ideas/wp_header_2/" rel="attachment wp-att-505"><img class="size-thumbnail wp-image-505 " title="Figure 2" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/10/wp_header_21-e1319334677844-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Figure 2</p></div></div></p>
<p><div class='sc_column one_fourth'><div id="attachment_506" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.maxcutler.com/2011/10/22/wordpress-for-windows-phone-2-0-ui-improvement-ideas/wp_header_3/" rel="attachment wp-att-506"><img class="size-thumbnail wp-image-506 " title="Figure 3" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/10/wp_header_31-e1319334762480-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Figure 3</p></div></div></p>
<p><div class='sc_column one_fourth last'><div id="attachment_507" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.maxcutler.com/2011/10/22/wordpress-for-windows-phone-2-0-ui-improvement-ideas/wp_header_4/" rel="attachment wp-att-507"><img class="size-thumbnail wp-image-507" title="Figure 4" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/10/wp_header_41-e1319334908194-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Figure 4</p></div></div></p>
<h3 style="clear: both;">Use Native Controls</h3>
<p>When the WP7 app was originally made, the Windows Phone 7 SDK was pretty new and the ecosystem was relatively weak. As such, the original developer(s) was forced to implement custom controls for certain tasks, and they reverted to emulating the controls implemented/used by the WordPress for Android app. With the <a href="http://silverlight.codeplex.com/">Silverlight Toolkit</a>, that is no longer necessary, and it would be a great improvement to use native-like controls instead.</p>
<h4>Multi-select lists</h4>
<p>For comment moderation and category selection (Fig. 5), the app employs a multiple selection list control. The current design toggles a blue background for &#8220;selected&#8221; list items, where native WP7 apps like email use a checkbox paradigm. Figure 6 shows the multi-select list control from the Silverlight Toolkit.</p>
<p><div class='sc_column one_half'><div id="attachment_468" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.maxcutler.com/?attachment_id=468" rel="attachment wp-att-468"><img class="size-thumbnail wp-image-468  " title="Category Selection" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/10/wp_cat_multiselect1-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Figure 5 - Category Selection</p></div></div></p>
<p><div class='sc_column one_half last'><div id="attachment_469" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.maxcutler.com/?attachment_id=469" rel="attachment wp-att-469"><img class="size-thumbnail wp-image-469  " title="Silverlight Toolkit Multiselect Control" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/10/wp_st_multiselect1-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Figure 6 - Toolkit Multiselect Control</p></div></div></p>
<h4> Progress indicators</h4>
<p>Another Android-ism used throughout the app is progress spinners (Fig. 7). For the 1.2 release, we added a WP7-style progress bar to the panorama screen, but most other screens use a modal spinner animation. With the WP7.5 SDK, Microsoft made it super-easy to use <a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.shell.progressindicator(v=VS.92).aspx">native progress indicators</a> by building it into the system tray.</p>
<p>One advantage of the spinner was that we could load the underlying page controls and they would be impossible to interact with until the spinner disappeared. If we switch to using the system-tray ProgressIndicator, then we will likely want to hide or disable controls while data is loading or an action is being performed (or whatever else is causing a progress indicator).</p>
<p><div class='sc_column one_half'><div id="attachment_481" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.maxcutler.com/?attachment_id=481" rel="attachment wp-att-481"><img class="size-thumbnail wp-image-481" title="Spinner" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/10/wp_spinner1-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Figure 7 - Spinner</p></div></div></p>
<p><div class='sc_column one_half last'><div id="attachment_488" class="wp-caption aligncenter" style="width: 289px"><a href="http://www.maxcutler.com/2011/10/22/wordpress-for-windows-phone-2-0-ui-improvement-ideas/wp_progress_indicator-2/" rel="attachment wp-att-488"><img class="size-full wp-image-488 " title="ProgressIndicator" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/10/wp_progress_indicator1-e13193339745011.png" alt="" width="279" height="36" /></a><p class="wp-caption-text">Figure 8 - ProgressIndicator</p></div></div></p>
<h4 style="clear: both;">Context menus</h4>
<p>On the blog selection screen, you can currently delete a blog by choosing &#8220;delete blog&#8221; from the appbar menu (hidden under the &#8216;&#8230;&#8217;) and then choose the desired blog from a modal pop-up list. It would make a ton more sense to just support the tap-and-hold context menu paradigm as supplied by the Silverlight Toolkit. I would have the context menus contain &#8220;pin&#8221; and &#8220;delete&#8221; actions.</p>
<p>A similar pop-up list exists for pages and posts in the panorama, though it&#8217;s less clear that a context menu makes sense in that context. But that&#8217;s a non-issue, because&#8230;</p>
<h3>Panorama Cleanup</h3>
<p>Perhaps the biggest concession made to the WP7 app when porting it from Android was the use of the iconic panorama control. It opens to a grid of tiles for the most common actions (see Fig. 2 above), and has additional columns for comments, posts, pages, and statistics. While there is a separate &#8220;moderate comments&#8221; screen (see Fig. 4 above), the panorama is the only way to access the functionality for posts, pages, and stats.</p>
<p>The WP7/Metro design guidelines call for panoramas to be like &#8220;magazine covers&#8221;, with a very small amount of content that entices users to dig deeper into the content on additional screens. But the WordPress app&#8217;s panorama has heavy lists for comments (see scrollbar in Fig. 9), pages, and posts; this is not only in violation of the design guidelines, but also makes the panorama slow to load and heavy on memory usage.</p>
<div id="attachment_532" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.maxcutler.com/2011/10/22/wordpress-for-windows-phone-2-0-ui-improvement-ideas/wp_pano_scroll/" rel="attachment wp-att-532"><img class="size-thumbnail wp-image-532" title="Panorama Scroll" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/10/wp_pano_scroll1-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Figure 9 - Panorama Long List</p></div>
<p>Recently, I&#8217;ve been attempting to discern usage patterns for users of the various WordPress mobile apps, in addition to mobile apps for other blogging systems/services (Tumblr, Blogger, SquareSpace, etc.). As far as I can tell, the primary scenarios for mobile blog wrangling are new post creation, comment moderation, and light tweaking of recent posts.</p>
<p>Curiously, all of the WordPress mobile apps give equal weight to the four top-level items (comments, posts, pages, stats), perhaps because that&#8217;s what the WordPress XML-RPC API supports. But I&#8217;m in favor of optimizing the UI for the most important use-cases, and relegating some of that functionality to deeper parts of the app.</p>
<p>My proposal is to keep the first actions screen, but with two groups of tiles:</p>
<ol>
<li>&#8220;Actions&#8221;: Add a post, Moderate comments, View stats, and Blog Settings</li>
<li>&#8220;Manage&#8221;: Posts, Pages, Comments, Users (once supported by XML-RPC API), &lt;one tile for each custom post type (once they are supported by XML-RPC API)&gt;</li>
</ol>
<p>I would have three columns in addition to the actions screen: unmoderated comments, drafts, and recent posts. These correspond with the scenarios I identified above, and would include a maximum of 3-5 items each, with &#8220;more&#8230;&#8221; links leading to the corresponding archive management pivot screens.</p>
<h4>Content-type management pages</h4>
<p>This light-weight panorama would require new screens for management of the archives for each content type (page, post, comments, etc.). I envision these using the pivot control, allowing pivoting by the &#8216;status&#8217; field (all/draft/published for posts, unmoderated/approved/rejected for comments, etc.).</p>
<p>The appbar on these pages would contain &#8220;add&#8221;, &#8220;search&#8221;, and &#8220;refresh&#8221; buttons. Tapping a list item would open an edit/moderate page for that item, and tap-and-hold would open a context menu for actions like &#8220;delete&#8221;, &#8220;preview&#8221;, &#8220;view comments&#8221;, etc. (replacing the pop-up modal menu used in the panorama now for posts and pages).</p>
<p>Using the new Mango SQL CE database support and paging for XML-RPC in WordPress 3.4 (<a href="http://core.trac.wordpress.org/ticket/18433">hopefully</a>), we can load the entire archive of a blog (probably only the most important fields like title, author, status, format, date, tags, and categories; notably, not the full body contents) and support infinite-scroll on these pivot pages. This would also back the &#8220;search&#8221; operation, and we could add a feature to the post editing page akin to the internal linking feature in WP core admin.</p>
<h3>About &amp; Feedback Page</h3>
<p>The app currently has a page that shows when unexpected exceptions occur, and has links to some sources of help. This is a decent start, but the app really needs a proper &#8216;about&#8217; page, with links to it in the appbar of the blog selection page and the panorama page.</p>
<p>The page would contain the current app version information and links to common sources of help and feedback, such as the official forums, official FAQ, and marketplace review form. We&#8217;ve been getting a number of bad app reviews in the past months, but not much feedback on the forums so that we can actually identify and address users&#8217; issues.</p>
<h3>Live Tiles</h3>
<p>In the last release, we added support for per-blog live tiles on the start screen. But these tiles are still static images, with nothing &#8220;live&#8221; about them. The tiles should probably update with the number of new comments, number of views today (if stats are enabled/allowed), and maybe the text of the most recent comment on the back. This will require some design work from Isaac to make it look pretty. I like the way <a href="http://youtu.be/DvKcK5Or1LM">Evernote</a> has tackled this in their Mango release, maybe we can try something similar.</p>
<h3>Animations</h3>
<p>The WordPress app is painfully static, especially when compared with the first-party apps that are full of subtle animations that make the apps feel alive. The app would feel much more polished and enjoyable if we spent some time carefully designing proper animations and transitions. The Silverlight Toolkit makes transitions super easy, and animations aren&#8217;t particularly difficult either. This will require some serious design collaboration with Isaac, since it&#8217;s critical to get animations just right or else they will just annoy users and detract from the experience.</p>
<h3>Conclusion</h3>
<p>The end result of all of these proposed changes would be a noticeable change to the app&#8217;s feel and flow, which is why I&#8217;ve tagged them for version &#8217;2.0&#8242;.</p>
<p>One of the Windows Phone marketing slogans was &#8220;designed to get you in and out and back to life&#8221;. I know the WP7 team had a strong scenario-focused design effort, and it really shows when you use the OS. I&#8217;d really like to see the WordPress for Windows Phone app streamline and orient itself such that it&#8217;s fast and easy to tackle the most common tasks.</p>
<p>The most complex page of the app is the post/page editor, which also requires some serious rethinking. This post was too long, so I&#8217;ve saved my thoughts on the editor another post soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2011/10/22/wordpress-for-windows-phone-2-0-ui-improvement-ideas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Coming soon to WordPress for Windows Phone: Mango</title>
		<link>http://www.maxcutler.com/2011/09/27/wordpress-for-windows-phone-mango/</link>
		<comments>http://www.maxcutler.com/2011/09/27/wordpress-for-windows-phone-mango/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 19:46:32 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=445</guid>
		<description><![CDATA[The rollout of Windows Phone 7.5, codename &#8220;Mango&#8221;, began today. Over the next month, all owners of Windows Phone 7 devices should receive the upgrade to Mango, which brings a ton of new consumer-facing functionality. It also brings a healthy amount of new developer capabilities, including background agents, multiple live tiles, and more. All apps [...]]]></description>
			<content:encoded><![CDATA[<p>The rollout of Windows Phone 7.5, codename &#8220;Mango&#8221;, <a href="http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2011/09/27/windows-phone-7-5-mango-update-begins.aspx">began today</a>. Over the next month, all owners of Windows Phone 7 devices should receive the upgrade to Mango, which brings a ton of new consumer-facing <a href="http://www.winsupersite.com/article/WindowsPhone75/windows-phone-75-review-part-2-major-features-140731">functionality</a>. It also brings a healthy amount of new <a href="http://msdn.microsoft.com/library/ff637516(v=VS.92).aspx">developer capabilities</a>, including background agents, multiple live tiles, and more.<span id="more-445"></span></p>
<p>All apps compiled for Mango support the new &#8220;fast switching&#8221; capability, which suspends the app instead of immediately tombstoning it when the user only leaves the app temporarily (e.g., for a phone call or to check email).</p>
<p>To take advantage of fast switching, we&#8217;re trying to push out a quick update (1.3) for Mango users of the <a href="http://windowsphone.wordpress.org">WordPress for Windows Phone</a> app. We also added two new features: per-blog live tiles and picture hub integration.</p>
<p><a href="http://www.maxcutler.com/wp-content/uploads/2011/09/wp_multitile1.png"><img class="alignright size-thumbnail wp-image-446" title="Multiple live tiles" src="http://www.maxcutler.com/wp-content/uploads/2011/09/wp_multitile1-150x150.png" alt="" width="150" height="150" /></a></p>
<p>In the current release, when you launch the app you choose which blog you want to manage. For the 1.3 release, there will be a new &#8220;pin&#8221; button in the appbar on the blog panorama that will let you pin that blog directly to your start screen. This lets you easily jump into your favorite blog(s) right away. In a future update we hope to add new comment counts and other information to the live tiles to make them even more useful.</p>
<div><span style="color: #0000ee;"><span style="text-decoration: underline;"><br />
</span></span><br />
<a href="http://www.maxcutler.com/2011/09/27/wordpress-for-windows-phone-mango/ic513012/" rel="attachment wp-att-451"><img class="alignleft size-thumbnail wp-image-451" style="margin: 10px;" title="Photo share" src="http://maxcutler.wpengine.com/wp-content/uploads/2011/09/IC513012-e13171525288871-150x150.png" alt="Photo share screen (Courtesy MSDN: http://msdn.microsoft.com/en-us/library/ff967563(v=VS.92).aspx)" width="150" height="150" /></a>One of the common use-cases for on-the-go blogging is uploading photos taken with your smartphone. The 1.3 release will now include integration with the Photo hub&#8217;s &#8220;Share&#8221; functionality. When you take a photo, click the &#8220;&#8230;&#8221; menu and choose &#8220;share.&#8221; Your email and social networking accounts will show in the list, and now WordPress will too. When you choose to share with WordPress, the app will launch, you can select the appropriate blog, and you&#8217;ll be taken right into the &#8220;New Post&#8221; page with the photo already attached and waiting for you to write your post.</p>
<p style="clear: both;">I hope the app will be submitted for certification soon, and we&#8217;ll have a post on the <a href="http://windowsphone.wordpress.org/blog/">official blog</a> when it becomes available in the marketplace.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2011/09/27/wordpress-for-windows-phone-mango/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing WordPress for Windows Phone</title>
		<link>http://www.maxcutler.com/2011/09/06/developing-wordpress-for-windows-phone/</link>
		<comments>http://www.maxcutler.com/2011/09/06/developing-wordpress-for-windows-phone/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 00:24:47 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp7]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=419</guid>
		<description><![CDATA[As a supporter of both WordPress and the Windows Phone platform, I was of course drawn to the WordPress for Windows Phone app. Since getting involved in the app&#8217;s development in May, I&#8217;ve explored the codebase and done plenty of brainstorming about the app&#8217;s future. What follows is a brief history of the app and [...]]]></description>
			<content:encoded><![CDATA[<p>As a supporter of both <a href="http://www.wordpress.org">WordPress</a> and the <a href="http://www.microsoft.com/windowsphone">Windows Phone</a> platform, I was of course drawn to the <a href="http://windowsphone.wordpress.org">WordPress for Windows Phone</a> app. Since getting involved in the app&#8217;s development in May, I&#8217;ve explored the codebase and done plenty of brainstorming about the app&#8217;s future. What follows is a brief history of the app and initial thoughts on what it&#8217;s like working on its development.</p>
<h3><span id="more-419"></span>Background</h3>
<p>The WordPress <a href="http://wordpress.org/extend/mobile/">mobile apps</a> are primarily developed and maintained by the Mobile team at <a href="http://automattic.com">Automattic</a>, although all of the apps are themselves open source. At present, there are three developers and one designer on the Mobile team, and they try to spread their efforts among the six mobile apps.</p>
<p>Each app has its own P2 development blog and Trac instance, and anyone from the general population can contribute patches and file tickets. In practice, however, it appears that the vast majority of the work is done by the Automattic employees.</p>
<p>I wish more people would contribute to these projects, as they are a great opportunity to get involved in open source on a smaller scale, since these apps are much less complex than WordPress itself.</p>
<h3>WP7 App Beginnings</h3>
<p>Windows Phone 7, which was a reset of Microsoft&#8217;s mobile strategy, launched worldwide in October/November of 2010. In December 2010, the WordPress for Windows Phone app was <a href="http://windowsphone.wordpress.org/2010/12/14/the-app-is-live/">first released</a>. Version 1.1, which fixed a set of important bugs, was <a href="http://windowsphone.wordpress.org/2010/12/19/quick-update/">released</a> shortly thereafter.</p>
<p>The app was a &#8220;partnership between <a href="http://www.isoftstone.com/">iSoftStone</a>, Microsoft and [Automattic]&#8220;. As far as I can tell (as an outsider), the app was primarily developed by iSoftStone, a Chinese outsourcing company. The app was a port of the WordPress app for Android, with a light UI skin to match the WP7 &#8220;Metro&#8221; design style, including the popular panorama control.</p>
<p>Once the app was &#8220;complete&#8221; and iSoftStone had delivered the code, their involvement was essentially done. From there, the Automattic team filed tickets for several bugs, but never really moved forward on v1.2.</p>
<h3>Version 1.2</h3>
<p>Around mid-May 2011, on the eve of purchasing a WP7 device for my personal use, I decided to see how I could help out. As a developer with a fair amount of C# experience who was going to be using a WP7 device as my primary phone, I thought I was well-positioned to lend some support to the app development.</p>
<p>It appeared that the app had been abandoned, though I was told that it was just on hiatus until some process issues were worked out. So I started playing with the app and discovered a number of annoying bugs, some of which didn&#8217;t have tickets yet.</p>
<p>The app had not been updated since the v1.1 release in December, and since then a WP7 OS update (<a href="http://en.wikipedia.org/wiki/Windows_Phone_version_history#NoDo">NoDo</a>) had come out with copy/paste support and some performance improvements, neither of which the app properly supported. So I worked on some patches to solve those shortcomings and put them up on the trac.</p>
<p>Soon after, the Automattic team started contributing too and the commits started flowing. The iSoftStone dev fixed his final outstanding bugs, and I contributed patches where I could to help the Automattic team take care of the rest.</p>
<p>Version 1.2 was finally released at the beginning of August, see the <a href="http://windowsphone.wordpress.org/2011/08/03/version-1-2-now-available/">release post</a> for details on the features added. At this time, I was given commit access, and thus officially joined the dev team.</p>
<h3>Prepping for Mango</h3>
<p>With the v1.2 release, we had fixed almost all of the tickets in Trac and most of the glaring flaws in the app. However, there is still a ton of <a href="http://wpwindowsphonedev.wordpress.com/2011/07/16/i-spent-some-time-considering-future-feature-development/">room for improvement</a>. August was a mini-vacation for me, so I had hoped to get some good work done on the app in anticipation of the Mango launch this fall.</p>
<p>On August 22, the WP7 app store opened the door for apps targeting the Mango release (WP7.5), which offers a large number of new features and APIs. This includes support for multitasking, multiple live tiles per app, background agents, built-in SQL CE databases, and <a href="http://msdn.microsoft.com/library/ff637516(v=VS.92).aspx">more</a>. Consumers will be able to get Mango phones within the next month or two, and I wanted to have an update ready for them.</p>
<p>Most of my work on the app to-date had been relatively superficial changes, and I had not yet dug deep into the internals. However, to implement a database backend or improve live-tile support, I would have to make deep changes. And, boy, was I in for a shock.</p>
<h3>Architecture?!</h3>
<p>I&#8217;ve worked on a healthy variety of software projects, from pet projects to large enterprise applications at companies like Microsoft. I&#8217;ve become fond of concepts like <a href="http://en.wikipedia.org/wiki/Separation_of_concerns">Separation of Concerns</a> and <a href="http://en.wikipedia.org/wiki/Do_not_repeat_yourself">Do Not Repeat Yourself</a>, and basic architecture patterns like MVC (or its Silverlight/WPF variant, <a href="http://en.wikipedia.org/wiki/Model_View_ViewModel">MVVM</a>).</p>
<p>The WordPress for Windows Phone app codebase is a total mess. XAML code-behinds gleefully call XML-RPC methods or into the global singleton containing all the app&#8217;s data structures. The XML-RPC methods themselves are a convoluted mess of string interpolation and concatenation, using string templates from multiple sources (some in RESX files, some inline with logic). Because the data is in a singleton and code-behinds, designers can&#8217;t work on the app in <a href="http://www.microsoft.com/expression/windowsphone/Default.aspx">Blend</a>. In short, highly coupled code with almost no separation of concerns.</p>
<p>Perhaps the original developers were under intense time pressure, and had to sacrifice maintainable architecture to hit a tight deadline. Been there, done that. However, given that this was primarily the work of an outsourcing firm, my suspicions are that the truth lies elsewhere&#8230;</p>
<h3>How To Go Forward</h3>
<p>So, given the state of the code, what&#8217;s the right way to proceed? I see three options:</p>
<p>Option #1 is to start piecemeal refactoring the app towards a &#8220;proper&#8221; MVVM architecture. Use <a href="http://mvvmlight.codeplex.com/">MVVMLight</a> or <a href="http://www.caliburnproject.org/">Caliburn</a>, and start moving code from XAML code-behinds to ViewModels. In the process, decouple the data layer too, so that it can eventually be replaced with a SQL CE database backend. I imagine this would take a few months at a reasonable pace; but a few months means that Mango users will have to wait for fast-switching support and all the other niceties that Mango apps get over NoDo apps.</p>
<p>Option #2 would be to do a minor update for Mango, perhaps just multiple tiles (per-blog) and a background agent to keep the data fresh. Thus we could do a v1.3 Mango release to tide people over until we can get around to the work in option #1.</p>
<p>Option #3 would be to just soldier on and learn to live with code duplication and tight coupling. This makes it harder to make changes, but maybe releases could happen sooner. If we stumble along long enough, maybe we won&#8217;t have any users or Windows Phone will radically change and require a rewrite anyway.</p>
<p>The code snob in me would prefer #1, and I may get started on that on my own. The pragmatist in me would prefer #2. The developer in me would want to quit a project that would choose #3.</p>
<p>I suspect that next week at <a href="http://www.buildwindows.com/">BUILD</a> we will learn that WinPhone apps will have an easy path towards compatibility with Windows 8; a properly architectured MVVM app would make it super-easy to bring the WP7 app over to W8, or even to existing Windows versions by writing a WPF UI layer over the same ViewModels and data backends. Just another reason to go for option #1 or #2.</p>
<h3>Conclusion</h3>
<p>Sadly, WP7&#8242;s marketshare just isn&#8217;t very high, and Automattic has a very small team of mobile developers. I understand and respect their decision to work primarily on the iOS and Android mobile apps. <a href="http://en.gravatar.com/ievolver">Isaac</a>, <a href="http://en.gravatar.com/danroundhill">Dan</a>, and <a href="http://en.gravatar.com/daniloercoli">Dan</a> have been extremely gracious and helpful to me over the past several months, and my complaints/criticisms are not aimed at them.</p>
<p>My academic studies prevent me from pouring significant time into the project, so the app has been sitting since the v1.2 release. If there are other Microsoft stack developers out there who are interested, please post on the <a href="http://wpwindowsphonedev.wordpress.com">dev blog</a> and get involved! With some more manpower, I think we can do great things with this app.</p>
<p>In the short-term, I&#8217;ll likely start work on an MVVM refactor and post that work on GitHub. If it doesn&#8217;t work out, then no harm done. If it does, and the rest of the team approves, we can merge that back into the primary SVN repository.</p>
<p>Beyond the app&#8217;s internal workings, I also have many thoughts about its user interface design. With custom post type support (hopefully) coming in XML-RPC in WordPress 3.4, I have some ideas for how to prepare the app to support more than just posts, pages, and comments. I also have ideas for how to make it better match the WP7 styling and behaviors, support rich text editing, and more. Look for my next post on that topic next week.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2011/09/06/developing-wordpress-for-windows-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Return to Blogging</title>
		<link>http://www.maxcutler.com/2011/08/31/a-return-to-blogging/</link>
		<comments>http://www.maxcutler.com/2011/08/31/a-return-to-blogging/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 02:34:18 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp7]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=406</guid>
		<description><![CDATA[It&#8217;s been almost six months since my last blog post, but I hope less than six days until my next one. I&#8217;ve put off several blog post topics until I finished a site redesign that I&#8217;ve been struggling with since July, but decided to stop waiting and just start writing again. Maybe one of the [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been almost six months since my <a title="Introducing ShoeVox" href="http://www.maxcutler.com/2011/03/08/introducing-shoevox">last</a> blog post, but I hope less than six days until my next one. I&#8217;ve put off several blog post topics until I finished a site redesign that I&#8217;ve been struggling with since July, but decided to stop waiting and just start writing again. Maybe one of the upcoming posts will be about the redesign, but I&#8217;m going to start with a recap of what I&#8217;ve been up to lately.</p>
<p><span id="more-406"></span></p>
<h3>Microsoft</h3>
<p>In March, I was still in Redmond/Bellevue, Washington, working through my third internship at Microsoft with the <a href="http://crm.dynamics.com/">Dynamics CRM</a> team. I got to continue working on a set of functionality that I started on during my previous Summer 2010 internship, and which will hopefully ship in the next release. I also got to see the wheels turning on some longer term work, and I&#8217;m super excited about where the CRM product is heading.</p>
<p>So excited, in fact, that I&#8217;ve accepted Microsoft&#8217;s offer to join the team full-time after completion of my degree this school year. As it stands, it looks like I&#8217;ll be moving to Seattle in September 2012.</p>
<h3>Back to School</h3>
<p>After my adventures with Camayak and Microsoft, it was time to return to my studies and finish my degree. I spent the summer here at Yale in New Haven, CT, taking several courses to get back into academic mode.</p>
<p>Today was the first day of classes of the fall semester, and it&#8217;s exciting to be back among so many passionate students. I miss many of my friends from the Class of 2011, but will soon get to better know my new Class of 2012 peers and more underclassmen.</p>
<h3>World of WordPress</h3>
<p>With my previous Yale extracurricular involvements terminated, I finally spent some time digging into WordPress this summer in my &#8220;spare&#8221; time. Over the past couple of years, I&#8217;ve gotten to know a <a title="Andrew Spittle" href="http://www.andrewspittle.net">number</a> <a title="Will Davis" href="http://wpdavis.com/">of</a> <a title="Daniel Bachhuber" href="http://www.danielbachhuber.com">people</a> <a href="http://www.andrewnacin.com">involved</a> in the WordPress community, and they&#8217;ve slowly dragged me into it as well. I&#8217;ve now been to four <a href="http://central.wordcamp.org/">WordCamp</a> events, and met even more folks that way.</p>
<p>WordPress is an interesting beast of a project, and I must confess having mixed feelings about it overall. Several years ago, I did the <a title="Courant no longer…" href="http://www.maxcutler.com/2010/02/21/courant-no-longer">Courant News project</a> because WordPress was not yet ready (IMHO) to power &#8220;proper&#8221; news websites. But since <a href="http://wordpress.org/news/2010/06/thelonious/">version 3.0</a>, I think WordPress is better suited for the task, as evidenced by countless news sites now running on WordPress. I intend to write more about that in the future.</p>
<p>But my involvement with the news folks has been quickly winding down, so I&#8217;ve gotten involved in WordPress to scratch two of my own itches.</p>
<h4>XML-RPC API</h4>
<p>While working on Camayak last fall, I wrote a <a title="python-wordpress-xmlrpc" href="https://github.com/maxcutler/python-wordpress-xmlrpc">python library</a> to integrate WordPress with other systems by leveraging WordPress&#8217; <a href="http://codex.wordpress.org/XML-RPC_Support">XML-RPC API</a>. We ended up going a different route for Camayak, and the library sat in my <a href="http://www.github.com/maxcutler">GitHub account</a> for several months.</p>
<p>This spring, I discovered that several folks were using the library for real-world problems, such as the <a href="http://blog.apps.chicagotribune.com/2011/06/28/dont-break-the-homepage-using-unit-tests-to-validate-your-wordpress-varnish-caching-strategy/">Chicago Tribune news apps team</a>. This led me to finally finish several outstanding workitems and fix some discovered bugs. The library is now at version 1.5, and I intend to keep actively maintaining it.</p>
<p>This summer saw a Google Summer of Code <a href="http://gsoc2011.wordpress.com/extending-wp-webservices/">project</a> dedicated to expanding WordPress&#8217; XML-RPC API, finally gaining feature parity with internal APIs and features such as custom post types, taxonomies, and post formats. The project just finished this past week, and will hopefully be merged into core by WordPress 3.4 (feature freeze for 3.3 is technically today, and the patches aren&#8217;t really ready).</p>
<p>I&#8217;ll be writing several posts on XML-RPC soon, as I have a ton of thoughts on the topic and where I see WordPress evolving on that front.</p>
<h4>WordPress for Windows Phone</h4>
<p>In May, Verizon finally launched their first Windows Phone 7 phone, the <a href="http://www.htc.com/www/smartphones/htc-7-trophy/">HTC Trophy</a>. As a Microsoft intern, I had a voucher for a free WP7 phone, and was eager to take it for a spin. However, I soon discovered that the <a href="http://windowsphone.wordpress.org/">WordPress app for WP7</a> was pretty weak.</p>
<p>Given WP7&#8242;s low marketshare, Automattic&#8217;s mobile team understandably wasn&#8217;t spending much effort on the WP7 app. As all WordPress mobile apps are open-source, I decided to get involved and start submitting patches. We managed to trim the existing bug backlog and in July put out <a href="http://windowsphone.wordpress.org/2011/08/03/version-1-2-now-available/">version 1.2</a>, the first since December 2010.</p>
<p>I&#8217;ve since been given commit access, so that I can take a more active role in developing the app. I have a ton of <a href="http://wpwindowsphonedev.wordpress.com/2011/07/16/i-spent-some-time-considering-future-feature-development/">ideas</a> for where to take the app, just not enough time to execute on them for now. I&#8217;ll have a post in the coming weeks on some UI ideas for rich text editing and revamping the functionality to take advantage of the new XML-RPC methods mentioned above.</p>
<h3>Conclusion</h3>
<p>My <a href="https://twitter.com/maxcutler/status/108248921192665088">goal</a> is to post at least once per week, and eventually start microblogging and reducing my dependence on external services like Twitter and Delicious/Diigo.</p>
<p>As my primary work these days is as a full-time student, I&#8217;ll eventually be blogging about my studies. In the meantime, I have a backlog of post topics expanding on items mentioned in this post. Thanks to Andrew Nacin and the CoPress gang for inspiring me to get back into using my blog again.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2011/08/31/a-return-to-blogging/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introducing ShoeVox</title>
		<link>http://www.maxcutler.com/2011/03/08/introducing-shoevox/</link>
		<comments>http://www.maxcutler.com/2011/03/08/introducing-shoevox/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 06:24:47 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[foss]]></category>
		<category><![CDATA[shoevox]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[speechrecognition]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=398</guid>
		<description><![CDATA[Over the past few weekends, I&#8217;ve been working with my friend Robert on a fun side project. Tonight we&#8217;re proud to be releasing ShoeVox, a Windows applications that allows you to control media applications with your voice. Please check our Rob&#8217;s announcement post for full details, including a download link.]]></description>
			<content:encoded><![CDATA[<p>Over the past few weekends, I&#8217;ve been working with my friend <a href="http://www.rsbaskin.com">Robert</a> on a fun side project. Tonight we&#8217;re proud to be releasing <a href="http://www.shoevox.org">ShoeVox</a>, a Windows applications that allows you to control media applications with your voice. Please check our Rob&#8217;s <strong><a href="http://blog.rsbaskin.com/post/3717628154/shoevox-voice-control-for-your-pc">announcement post</a></strong> for full details, including a download link.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2011/03/08/introducing-shoevox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>An Analysis of hNews Usage</title>
		<link>http://www.maxcutler.com/2010/10/15/an-analysis-of-hnews-usage/</link>
		<comments>http://www.maxcutler.com/2010/10/15/an-analysis-of-hnews-usage/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 18:30:16 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[hnews]]></category>
		<category><![CDATA[microformats]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=369</guid>
		<description><![CDATA[On Wednesday, Martin Moore, one of the creators of the hNews microformat, posted on Idea Lab about how hNews is in use at 577 U.S. news sites. As someone who has long been interested in standardized markup and interchange formats for news content, I found this interesting and set out to investigate for myself. Moore&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>On Wednesday, <a href="http://www.pbs.org/idealab/author-bios.html#martin_moore">Martin Moore</a>, one of the creators of the<a href="http://en.wikipedia.org/wiki/HNews"> hNews microformat</a>, posted on Idea Lab about how <a href="http://www.pbs.org/idealab/2010/10/577-us-news-sites-now-using-hnews285.html">hNews is in use at 577 U.S. news sites</a>. As someone who has long been interested in standardized markup and interchange formats for news content, I found this interesting and set out to investigate for myself.</p>
<p><span id="more-369"></span></p>
<p>Moore&#8217;s post contains a link to a <a href="https://spreadsheets.google.com/ccc?key=0Aju_93nx_sJldHFLRFVUa0M3MXlXc1VBb2p4R043dFE&amp;authkey=CJ_V9Ww&amp;hl=en&amp;pli=1#gid=0">Google document</a> containing a list of the 577 sites. I downloaded this spreadsheet as a CSV for easy consumption and analysis, and set to work.</p>
<h3><strong>Duplicates/Sub-sites</strong></h3>
<p>First thing I noticed is that there are <strong>25 entries whose domain is already mentioned previously</strong> in the list. For example, &#8216;http://www.picayune-times.com/&#8217; is mentioned twice, in rows 34 and 43. There are also sub-sites listed, such as &#8216;http://www.tcpalm.com/&#8217; (row 119) and &#8216;http://www.tcpalm.com/news/sebastian-sun/&#8217; (row 121). If we remove all of these redundancies, we&#8217;re down to 552 sites.</p>
<h3>CMSs</h3>
<p>Then I started randomly going to sites in the list, and noticed that many of them look remarkably similar. It soon became apparent that there were a number of <strong>large chains sharing the same CMS</strong> and almost identical templates.</p>
<p>I came up with simple heuristics for determining which CMS powered a site (e.g., by looking for references to the CMS company&#8217;s domain in a CSS stylesheet or Javascript file link). I wrote a <a href="#footnote_script">small Python program</a> to go through all the URLs, check the HTML source of each page against my heuristics, and identify the CMS.</p>
<h3>Results</h3>
<p>The results (<a href="#footnote_doc">see appendix for full document</a>):</p>
<ul>
<li>170 sites using <a href="http://www.townnews.com/">TownNews</a> products (e.g., BLOX)</li>
<li>101 sites using <a href="http://www.matchbin.com/">MatchBin</a> (many <a href="http://www.medianewsgroup.com">MediaNewsGroup</a> papers)</li>
<li>213 sites using <a href="http://www.zope.com/products/z4m/zope4media.html">Zope.com/Zope4Media</a> (many from the <a href="http://cnhi.com/newspapers">Community Newspaper Holdings</a> chain)</li>
<li>21 sites using <a href="http://www.ellingtoncms.com">Ellington</a> (<a href="http://www.scripps.com/">Scripps chain</a>)</li>
<li>2 sites using <a href="http://www.medianewsgroup.com">MediaNewsGroup</a> (rest of MNG&#8217;s papers still using MatchBin, see above)</li>
<li>24 sites from the Rush Publishing chain (I couldn&#8217;t find a corporate site, but you can see a <a href="http://www.areawidenews.com/help/partners/">list of papers here</a>)</li>
<li>17 sites from the <a href="http://www.swiftcom.com/publications/">Swift Communications chain</a></li>
<li>4 sites from the <a href="http://www.freedom.com/">Freedom Communications chain</a></li>
<li>5 sites built using Microsoft FrontPage (seriously? in 2010?)</li>
<li>20 other sites with either custom or obscure CMSes</li>
</ul>
<p>I&#8217;m not claiming that my script&#8217;s results are perfect, but they are at least indicative. I draw two conclusions here:</p>
<ol>
<li>The majority of the 577 claimed sites are from a <strong>small set of CMSs</strong>. Notably absent are open-source CMSs. If you only count once for each CMS that has implemented hNews, you have the 8 listed above, plus perhaps a few more from the &#8216;other&#8217; list.</li>
<li>The list <strong>does not contain the full client list for each of the chains</strong> represented, and thus there are far more sites that support hNews which just aren&#8217;t listed there.</li>
</ol>
<h3>Compliance</h3>
<p>I had intended to algorithmically verify that all of these sites were actually hNews-compliant.</p>
<p>The <a href="http://github.com/bcampbell/microtron">microtron</a> library has simple hNews extraction/validation which I was able to leverage, but I needed a way to find an individual article page on each site.</p>
<p>My first instinct was to use the RSS feed of each site to extract a recent article link. However, I discovered (and <a href="http://twitter.com/maxcutler/status/27383928778">tweeted in despair</a>) that <strong>almost none</strong> of the sites have a &lt;link&gt; tag in their homepage &lt;head&gt; to <strong>support RSS auto-discovery</strong>. A few had RSS feeds on their &#8220;News&#8221; section pages, but it become clear that automagically trying to find RSS feeds was doomed to fail. You would think that a site that implements a microformat standard would also implement the ubiquitous standard of RSS or Atom&#8230;</p>
<p>Instead, I manually verified compliance with examples of each of the CMSs discovered, and was glad to see that they all passed. I apologize for the scare quotes in one of my <a href="http://twitter.com/maxcutler/status/27383928778">tweets</a>, I did not mean to imply that Mr. Moore or anyone else was being disingenuous.</p>
<h3>Final Thoughts</h3>
<p>I am quite happy to see that hNews is being adopted more broadly, and I hope to see that trend continue. As a structured data fan, it makes me happy that so many articles out there are easily parse-able.</p>
<p>However, I think it&#8217;s a bit unfair for the hNews proponents to use individual sites as the primary metric for &#8220;reach&#8221; of the microformat. Instead, I would prefer that they look at the <strong>CMSs</strong> supported, and continue evangelism in an effort to convince the other newspaper chains out there to adopt hNews in their own systems.</p>
<h3>Appendix</h3>
<p><a id="footnote_doc" href="https://spreadsheets.google.com/ccc?key=0Ar7xKczIVXpLdHk0MUpPR3NjT0IzX1hoRUpFaExIQ2c&amp;hl=en&amp;authkey=COjx4rEB">My annotated Google Spreadsheet with CMS breakdown and domain uniqueness.</a></p>
<p><a id="footnote_script" href="https://gist.github.com/03abb4979ba338704bb8">My python script</a> (&#8216;hnews.csv&#8217; is Moore&#8217;s original spreadsheet exported as a CSV, and &#8216;hnews_rev.csv&#8217; was the basis for my own spreadsheet above).</p>
<h3><span style="font-size: x-small;"><br />
</span></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2010/10/15/an-analysis-of-hnews-usage/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>What is a (news) CMS?</title>
		<link>http://www.maxcutler.com/2010/09/13/what-is-a-news-cms/</link>
		<comments>http://www.maxcutler.com/2010/09/13/what-is-a-news-cms/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 15:29:12 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[College News]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[camayak]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=344</guid>
		<description><![CDATA[Is CMS still an acronym or a word of its own? Is web-first really the best strategy for news organizations? How can we improve the news ecosystem by improving the news gathering and production process?]]></description>
			<content:encoded><![CDATA[<p>C.M.S., an acronym for “<a href="http://en.wikipedia.org/wiki/Content_management_system">Content Management System</a>,” is a term that has become ubiquitous in the open source web software world. Ranging from systems that manage a small set of static pages to full-fledged “enterprise” content management solutions (<a href="http://en.wikipedia.org/wiki/Enterprise_content_management">ECMS</a>) like <a href="http://www.typo3.com/">Typo3</a> or <a href="http://www.alfresco.com/">Alfresco</a>, the term “CMS” has become a catch-all term for any web software package that can produce a website.<span id="more-344"></span></p>
<p>Historically, the Content in CMS referred to an organization’s warehouse of documents and information, both for public and private consumption. Most ECMS suites handle tasks like document review workflows, business process management, archiving, access control, and other powerful tools for actually <em>managing</em> content.</p>
<p>For most personal and small business websites, such huge tools are overkill. Over the past several years, there has been an explosion of simpler &#8220;CMS&#8221; systems to address this market gap. There have also been tools targeted for specific niches, the most well-known of which is the blogging CMS <a href="http://www.wordpress.org">WordPress</a>.</p>
<p>Because the content management needs of these non-enterprise ventures are minimal, most of these CMSes focus the majority of their effort on “themes” and “plugins” and other ways of managing the public visual appearance of the website. In fact, the rich ecosystem of themes and plugins is one of the reasons that WordPress continues to thrive. People call these systems “CMS,” but really they are <strong>using the term as a new word meaning “web interface for managing the presentation layer and piping content into it.”</strong></p>
<p>News organizations, finally beginning to realize the need for a more agile web presence, have begun using such CMSes for their websites. Where news organizations differ from most business and personal websites, and even most blogs, is that they are constantly publishing new content and do not linger on the past. Yet few “CMS”es really provide <strong>management</strong> and <strong>production</strong> tools that these newsrooms need.</p>
<p>Some organizations have begun to go “<a href="http://multimedia.journalism.berkeley.edu/tutorials/digital-transform/web-first-publishing/">web-first</a>,” meaning that they first post their content on their website and then later bring the content “down” to their print editions.</p>
<div id="attachment_351" class="wp-caption alignright" style="width: 610px"><a href="http://www.maxcutler.com/wp-content/uploads/2010/09/web_v_print_first1.png"><img class=" wp-image-351 " title="Web-first versus Print-first" src="http://www.maxcutler.com/wp-content/uploads/2010/09/web_v_print_first1-1024x651.png" alt="Web-first versus Print-first" width="600" height="381" /></a><p class="wp-caption-text">Web-first versus Print-first</p></div>
<p>Why is the production process tied to the delivery process? Although “web-first” is often lauded as the correct step forward for many organizations, is hitching your wagon to your web CMS really any better than when it was hitched to your print CMS? Either way, you are limiting your production processes to those supported by the delivery system.</p>
<p>When the next big delivery platform comes along, is your organization going to pick up shop and change to make that the “first” delivery target? Are you going to go through the painful process of migrating your legacy content, rewriting your themes, retraining your staff, and rethinking your workflows?<strong> Why are we letting the delivery platform hold our content hostage?</strong></p>
<p>News organizations should instead be “<strong>content-first</strong>,” and use tools that promote content above all else. We need first-class tools for managing the production process, and then for archiving, analyzing, referencing, and otherwise taking advantage of our past work.</p>
<p>Yes, your content will end up in <strong>multiple different delivery vectors</strong>. Each of those delivery platforms has its own infrastructure supporting actual presentation of the content (InDesign for print, WordPress themes/plugins for web, Objective-C for iOS). And each of those delivery platforms will have staff members who specialize in them and their capabilities (P&amp;D staff for print, web designers and developers for websites, UX/UI designers and programmers for iOS). Let your content production staff (reporters, editors, photographers, etc.) have their own specific toolset optimized for content production.</p>
<div id="attachment_350" class="wp-caption alignright" style="width: 610px"><a href="http://www.maxcutler.com/2010/09/13/what-is-a-news-cms/content_hub/" rel="attachment wp-att-350"><img class=" wp-image-350 " title="Content Hub &amp; Delivery Platforms" src="http://www.maxcutler.com/wp-content/uploads/2010/09/content_hub1-1024x571.png" alt="Content Hub &amp; Delivery Platforms" width="600" height="335" /></a><p class="wp-caption-text">Content Hub &amp; Delivery Platforms</p></div>
<p><a href="http://stdout.be/2010/information-architecture-for-news-websites/">News organizations are in the information business</a>. Without tools to leverage their information archives, news orgs can’t live up to their potential. Without tools to analyze and cross-pollinate content, what opportunities are being missed? Without tools for internal and external collaboration, how can news orgs share resources, reduce redundant coverage, and leverage public insight and input?</p>
<p>As news organizations with legacy Java ECMS systems from the 90’s begin to look towards the future, and as college newsrooms continue to adapt to the web and new business models, I think the time is right for a new generation of tools and services designed for streamlined, efficient, collaborative, and forward-thinking content production. <strong>We need to spend less time reinventing the presentation layer (“web CMS”) and instead focus on news content production systems (“NCPS”).</strong></p>
<p>I intend to throw my hat in that ring, and I hope others will join me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2010/09/13/what-is-a-news-cms/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>October Code Sprint Results</title>
		<link>http://www.maxcutler.com/2009/10/24/october-code-sprint-results/</link>
		<comments>http://www.maxcutler.com/2009/10/24/october-code-sprint-results/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 03:13:13 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Courant News]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Yale Daily News]]></category>
		<category><![CDATA[headers]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://maxcutler.com/blog/?p=190</guid>
		<description><![CDATA[Today Rob and I did a Courant News code sprint to get momentum building again. I did some YDN work first and then worked on finishing search functionality, while Rob focused on a new &#8220;headers&#8221; app that we&#8217;ve been brainstorming for the past week. Multimedia Being both an early riser and three hours ahead by [...]]]></description>
			<content:encoded><![CDATA[<p>Today <a href="http://www.rsbaskin.com">Rob</a> and I did a <a href="http://www.courantnews.com">Courant News</a> code sprint to get momentum building again. I did some YDN work first and then worked on finishing search functionality, while Rob focused on a new &#8220;headers&#8221; app that we&#8217;ve been brainstorming for the past week.</p>
<p><span id="more-190"></span></p>
<h3>Multimedia</h3>
<p>Being both an early riser and three hours ahead by virtue of time zones, I started my day working on some YDN tasks and left Courant for the afternoon. First order of business was finishing the new <a href="http://www.yaledailynews.com/multimedia/">multimedia landing page</a>. We&#8217;ve been without that page since launching on Courant at the beginning of the semester, and the version before was barely functionality as it was. Zeke Miller, the new Online Editor, was the driving force for the design while brainstorming and gathering feedback from the rest of the Online desk. I&#8217;m very pleased with the results, but have opened a <a href="http://www.copress.org/forum/weekly-discussion-topics/multimedia-landing-page-design/">thread</a> over at the CoPress forums to get feedback from the wider college news community.</p>
<h3>Search</h3>
<p>Next on the docket was finishing the transition from Sphinx to Haystack for the Courant News search system. Sphinx was very nice, but Haystack opens new doors and fits better with the Courant News project philosophy; it allows for the use of multiple search engine backends, so that sites can use whatever is most appropriate for their situation.</p>
<p>For example, if a site cannot install a powerful Java system like <a href="http://lucene.apache.org/solr/">Solr</a>, then they can use the pure-Python <a href="http://whoosh.ca/">Whoosh</a> backend (which is also nice for development use). In practice, I ran into problems while trying to use the <a href="http://xapian.org/">Xapian</a> (fast C++ engine) backend and had to switch back to the resource-heavy Solr. Hopefully as Haystack and its Xapian backend mature the situation will improve.</p>
<p>By the end of the afternoon, I had finished implementing it in Courant and had completed the templates for the YDN search system. Please feel free to <a href="http://www.yaledailynews.com/search/">explore</a>. I&#8217;m especially proud of the filtering options, which allowing for filtering of the query results by section, staff members, content type (article, photo, video, etc.), and date range. It makes it very easy to find specific content that you are looking for, or even to just get a broader sense of how popular a given topic is.</p>
<p>Solr&#8217;s relevancy engine is giving disproportionate weight to photos because they aren&#8217;t as long as articles, which is not very desirable. However, I&#8217;m still a Solr newbie and am trying to explore options for resolving that issue. Once I figure out how to do it with Solr, I&#8217;ll have to push the Haystack folks to expose any requisite functionality.</p>
<h3>Headers App</h3>
<p>Rob&#8217;s big project, and his first major code contribution in several months, was the implementation of an app we&#8217;ve been designing for the past few days. He&#8217;s going to write a more in-depth post, so I won&#8217;t step on his toes too much and go too deeply into it right now; essentially, it allows you to vary the display of your news site based on HTTP header values, most importantly User-Agent and Referer [sic].</p>
<p>The biggest example is to show a different set of templates to visitors with mobile User-Agent strings by showing them .mobile templates (using the FileExtension middleware and render() function in Courant News). You can also define a cascade of extensions, so that you only have to customize certain parts of your site if you want, and show the standard .html version elsewhere; this could be interesting if you wanted to take advantage of new HTML5 functionality in browsers (User-Agents) that support it, while not having to duplicate templates on other pages (or if you want to customize only certain pages on your mobile site for iPhone users).</p>
<p>It also lets you simply set extra template context variables, so that you can show special content to people coming from certain referrers (e.g., Facebook or Twitter). There are countless uses for such functionality, I&#8217;ll let you come up with your own.</p>
<p>You can <a href="http://code.courantnews.com/browser/trunk/courant/core/headers">browse the headers app in our code repository</a>; it only requires a bit more work before we will declare it complete, hopefully that will happen in the next several days. When Rob writes his post, I&#8217;ll update with a link.</p>
<h3>Conclusion</h3>
<p>Today was a productive day, with <a href="http://code.courantnews.com/timeline?from=10%2F24%2F09&amp;daysback=1">9 commits</a> to the Courant News repository. Hopefully the pace will keep up, and once these last few features are finalized the path will be clear to begin work on Nando, which will be the real cornerstone of the Courant News platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2009/10/24/october-code-sprint-results/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Courant News: Installation</title>
		<link>http://www.maxcutler.com/2009/04/18/courant-news-installation/</link>
		<comments>http://www.maxcutler.com/2009/04/18/courant-news-installation/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 02:53:05 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Courant News]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[reusable apps]]></category>
		<category><![CDATA[virtualenv]]></category>

		<guid isPermaLink="false">http://maxcutler.com/blog/?p=91</guid>
		<description><![CDATA[I&#8217;ve been working all day on making the installation script for Courant, and am now writing the documentation files. So I thought I&#8217;d take a few minutes to summarize the process in anticipation of release in the coming week. For your techies, some background: We have been using Subversion (svn) for source control, but there&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working all day on making the installation script for Courant, and am now writing the documentation files. So I thought I&#8217;d take a few minutes to summarize the process in anticipation of release in the coming week.</p>
<p><span id="more-91"></span></p>
<p>For your techies, some background: We have been using Subversion (svn) for source control, but there&#8217;s been a push to move towards git. The biggest holdup had been our dependence on svn:externals to pull in some other projects without having to fork them, which is a pretty poor reason. As a result, I&#8217;ve been seeking ways to get rid of that last vestige of svn so that we could allow people to use git if they prefer that. We intend to continue using svn for Courant&#8217;s core codebase, but we appreciate the fact that many devs prefer to use git for their workflow, so we don&#8217;t want to preclude that.</p>
<p>As a result, I&#8217;ve been seeking a solution to simultaneously get rid of svn:externals while also easing the process of installing and using Courant. Some <a title="James Bennett: Why I like pip" href="http://www.b-list.org/weblog/2008/dec/15/pip/">posts</a> by the famous djangonaut <a href="http://www.b-list.org">James</a> <a title="Practical Django Projects" href="http://www.apress.com/book/view/1590599969">Bennett</a>, along with looking at projects like <a href="http://www.pinaxproject.com">Pinax</a>, convinced me that such a solution existed in pip with virtualenv. Virtualenv allows you to create an isolated environment on your computer in which you can install python packages without it polluting the rest of your system, while pip allows you to install python packages from the <a title="PyPI" href="http://pypi.python.org/pypi">Chesseshop</a> or from a repository (supports svn, git, bzr, and hg currently).</p>
<p>Now for everyone: To use Courant, you first have to install python (2.5 recommended), svn, git, and whatever database engine you&#8217;d like to use (we strongly recommend PostgreSQL, but MySQL works too). From there, you just download one file from the Courant servers, courant-boot.py. Running courant-boot.py with some options will install Courant and all of its python dependencies, including Django and many others, inside a fresh virtualenv. It can also set up a clean copy of our sample project, or it can checkout your own site project from an external repository.</p>
<pre>python courant-boot.py myvirtualenv -n website -p default</pre>
<p>That one command will create a new virtualenv called &#8220;myvirtualenv,&#8221; install everything, and make a copy of the &#8220;default&#8221; sample project in a folder called &#8220;website.&#8221; For the YDN, I can replace &#8220;default&#8221; with the URL to our private SVN repository, and it will check out the Courant-powered version of our site and be all ready to go. I don&#8217;t think it could be much simpler. It should work perfectly well across all the major operating systems, and I have personally tested it on Ubuntu and Windows. I&#8217;ll get Paul to verify it works on OSX before release.</p>
<p>More detailed installation instructions, including a number of other options and instructions for how to set things up for developing on Courant itself, will be included in the project documentation. This was one of our last hurdles before public release, so once we finalize some remaining details and get team consensus, we will be opening up the project site. Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2009/04/18/courant-news-installation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Proliferation of Registries</title>
		<link>http://www.maxcutler.com/2009/04/13/the-proliferation-of-registries/</link>
		<comments>http://www.maxcutler.com/2009/04/13/the-proliferation-of-registries/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 22:23:58 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Courant News]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://maxcutler.com/blog/?p=64</guid>
		<description><![CDATA[As I&#8217;ve discussed before, one of the core design tenets of Courant News was the ability for news orgs to customize and add on to our core platform without having to modify the code of the platform itself. While it is possible to create a cohesive platform, it is more difficult to allow outside code [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ve discussed before, one of the core design tenets of Courant News was the ability for news orgs to customize and add on to our core platform without having to modify the code of the platform itself. While it is possible to create a cohesive platform, it is more difficult to allow outside code to hook into it without actually modifying the platform itself.</p>
<p>One common way, adopted by the Django built-in admin app, as well as  a number of common Django reusable apps like <a href="http://code.google.com/p/django-tagging/">django-tagging</a> and <a href="http://code.google.com/p/django-mptt/">django-mptt</a>, is that of a registry system. I&#8217;ve been joking with one of my Courant cohorts, <a href="http://rsbaskin.com">Robert Baskin</a> (<a href="http://www.twitter.com/rsbaskin">@rsbaskin</a>), on twitter about registries, and I thought it was time to let everyone else in on the discussion.</p>
<p><span id="more-64"></span></p>
<h3>An Example</h3>
<p>One way to manage functionality across various content types is to define the set of content types in your settings file. A recent example is <a href="http://github.com/jacobian/django-shorturls/tree/master">django-shorturls</a>, which lets you generate short URLs for your content by specifiying the content types to expose with a given prefix/abbreviation.</p>
<p><a id="shorturl-example"></a></p>
<pre lang="python"># in settings.py
SHORTEN_MODELS = {
    'A': 'myapp.animal',
    'V': 'myapp.vegetable',
    'M': 'myapp.mineral'
}</pre>
<p>This works wonderfully when you have full control of the codebase, but if we were to include django-shorturls in Courant itself, it would require news orgs to modify our code<a href="#footnote">*</a> to add in their own custom content types or tweak how our standard configuration works.</p>
<p>You can solve this problem by creating a registry system. Each model can then register itself with the URL shortening app, passing along the prefix parameter of its choice. For example:</p>
<pre lang="python"># in myapp/models.py
from django.db import models
from courant.core.shorturls import shorturls

class Planet(models.Model):
    name = models.CharField(max_length=100)
    ...
shorturls.register(Planet, 'P')</pre>
<p>In the courant.core.shorturls app, it keeps track of all the models that register with it, and then can use this registry in its internal code. It also means that if you want to change the prefix for, say, the built-in Article model from &#8216;A&#8217; to &#8216;S&#8217; (for story), you could do this:</p>
<pre lang="python"># in myapp/models.py or any other place that will get automatically run by Django, such as an __init__.py
from courant.core.news.models import Article
from courant.core.shorturls import shorturls

shorturls.unregister(Article)
shorturls.register(Article, 'S')</pre>
<p>In this manner you can tweak the default configuration, while also hooking your own new content types into our functionality.</p>
<h3>The Proliferation Problem</h3>
<p>The short URL app example above is a nice, clear example of the types of situations where registries make sense. But as I mentioned in the beginning of this post, there are a number of other apps that use registries, both within Courant and in the general Django community. There&#8217;s the Django admin, <a href="http://code.google.com/p/django-tagging/">django-tagging</a>, <a href="http://code.google.com/p/django-mptt/">django-mptt</a> (hierarchical relationships), and <a href="http://code.google.com/p/django-comment-utils/">django-comment-utils</a> on the outside. We also have the <a href="http://maxcutler.com/blog/2009/04/03/courant-news-templates/#gettag">get tag</a> which I described previously and a registry for the search system (upcoming post once a few bugs are fixed). Our Article model currently looks like this (much simplified):</p>
<pre lang="python"># courant/core/news/models.py
from django.db import models
from courant.core.discussions.moderation import moderator, CourantModerator
from courant.core.gettag import gettag
from courant.core.search import search

class Article(models.Model):
    heading = ...
    ...
moderator.register(Article, CourantModerator)
gettag.register(Article, name_field='heading')
search.register(Article,
                fields=('heading', 'subheading', 'summary', 'body'),
                filter_fields=('section', 'display_type','status'),
                date_field='published_at',
                use_delta=True)</pre>
<p>We haven&#8217;t actually written the short URLs app I described above, but likely will, in which case you can tack on yet another registration call there. As you can see, this starts to rapidly build up for the more commonly used models, although that&#8217;s admittedly a rather small percentage of all of our models.</p>
<p>For those who follow Rob or I on twitter, you may have noticed us joking about meta-registries, which would be a registry to help manage all of these individual registries. How that would actually work is up for debate, and is really nothing more than an inside joke (though not so inside anymore).</p>
<h3>Alternatives?</h3>
<p>In light of this potential problem of runaway registry creation, we&#8217;ve been considering some other options. For some of the more complicated registries, like for search, we&#8217;d most likely be better served by going to a declarative syntax like models themselves. <a href="http://github.com/brosner/django-haystack/blob/72dce6d88f7466aa10f035c47f0cfc5423936b84/docs/tutorial.rst#creating-searchindexes">django-haystack</a> has taken this approach, and I actually much prefer it in many respects, and just haven&#8217;t yet gotten around to building something similar to work with <a href="http://code.google.com/p/django-sphinx/">django-sphinx</a> (our search tool of choice; explanation of that decision for that future post on search). It still requires a small registry of its own, but the registration call is handled in a separate file from the model itself, similar to how the admin system works.</p>
<p>Another option could be to tack additional options onto the models&#8217; <a title="Django Documentation - Models" href="http://docs.djangoproject.com/en/dev/topics/db/models/#id3">internal Meta classes</a> and customize the python metaprogramming that Django does to build python objects from your model definitions. A registration process would still be occuring behind the scenes, but you wouldn&#8217;t be required to interact with it directly. For the above Article example, it might look like this (again, the surrounding parts of the model are much simplified):</p>
<pre lang="python"># courant/core/news/models.py
from django.db import models
from courant.core.discussions.moderation import CourantModerator

class Article(models.Model):
    heading = ...
    ...

    class Meta:
        # standard Django meta options
        ordering = '-published_at'

        # custom Courant meta options
        short_url_prefix = 'A'
        get_tag = {'name_field': 'heading'}
        moderator = CourantModerator
    ...</pre>
<p>This is maybe slightly cleaner because you don&#8217;t need all the imports at the top of the file, but I&#8217;m not sure it gains you much in the end. I personally rather like the explicitness of importing everything and manually registering it. Note that the get_tag meta option in this example uses a python dictionary because there are actually a number of other optional parameters that you can pass to it, and you wouldn&#8217;t want to have a meta option for every single possible parameter. My biggest hesitation with going this route is that it probably involves mucking with metaprogramming and doing some behind-the-scenes magic, which I don&#8217;t really think is a favorable cost/benefit tradeoff.</p>
<h3>Conclusion</h3>
<p>I hope that explains some of my twitter ramblings over the past couple weeks, and gives some additional insight into how Courant will enable customization and extension of the platform without forking the code. Please post comments if you have any questions or thoughts or opinions.</p>
<p id="footnote">* Technically, <a href="#shorturl-example">this example</a> resides in the settings file, which the news org has full control over anyways and thus would have no problem modifying. But I think it makes more sense to define the prefixes with the models they are related to, and not hidden away in a setting.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2009/04/13/the-proliferation-of-registries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

