<?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 CutlerMax Cutler</title>
	<atom:link href="http://www.maxcutler.com/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>Remembering Shuttle</title>
		<link>http://www.maxcutler.com/2012/05/01/remembering-shuttle/</link>
		<comments>http://www.maxcutler.com/2012/05/01/remembering-shuttle/#comments</comments>
		<pubDate>Tue, 01 May 2012 22:43:37 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[space shuttle]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=691</guid>
		<description><![CDATA[The Space Shuttles have been in the news lately as Discovery and Enterprise were ferried to DC and NYC, respectively, for public display in their retirement. And SpaceX is scheduled to launch the first private industry spacecraft to the International Space Station next week. So in keeping with the space news, I&#8217;ve fixed the broken [...]]]></description>
			<content:encoded><![CDATA[<p>The Space Shuttles have been in the news lately as Discovery and Enterprise were ferried to DC and NYC, respectively, for public display in their retirement. And SpaceX is scheduled to launch the first private industry spacecraft to the International Space Station next week. So in keeping with the space news, I&#8217;ve fixed the broken gallery on my <a href="http://www.maxcutler.com/2009/05/13/space-shuttle-launch/">Space Shuttle Atlantis launch post</a>.</p>
<p style="text-align: center;"><a href="http://www.maxcutler.com/2009/05/13/space-shuttle-launch/"><img class="aligncenter size-full wp-image-692" title="Atlantis STS-125 Launch" src="http://www.maxcutler.com/wp-content/uploads/2012/05/atlantis_launch.jpg" alt="" width="640" height="690" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2012/05/01/remembering-shuttle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python-wordpress-xmlrpc v2.0!</title>
		<link>http://www.maxcutler.com/2012/04/16/python-wordpress-xmlrpc-v2-0/</link>
		<comments>http://www.maxcutler.com/2012/04/16/python-wordpress-xmlrpc-v2-0/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 16:25:02 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[python-wordpress-xmlrpc]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=634</guid>
		<description><![CDATA[As WordPress 3.4 approaches RC and final release, the new features in the XML-RPC API have finally stabilized. For those Python users out there, I&#8217;ve updated my Python binding library to take advantage of the new functionality. As part of the release, I spent the time to write proper documentation; be sure to check out [...]]]></description>
			<content:encoded><![CDATA[<p>As WordPress 3.4 approaches RC and final release, the new features in the XML-RPC API have finally stabilized. For those Python users out there, I&#8217;ve updated my Python binding library to take advantage of the new functionality.</p>
<p>As part of the release, I spent the time to write proper <a href="http://python-wordpress-xmlrpc.rtfd.org/">documentation</a>; be sure to check out the <a href="http://python-wordpress-xmlrpc.readthedocs.org/en/latest/examples.html">examples section</a>! The library is now also compatible with Python 3 (in addition to Python 2.6+).</p>
<p>If you are currently using a previous release (1.x) of the library, be warned that 2.0 is not backwards compatible. I&#8217;ve removed all but one use of legacy Blogger/metaWeblog methods, which has caused the posts module and several others to change significantly. See the <a href="http://python-wordpress-xmlrpc.readthedocs.org/en/latest/dev/changelog.html">changelog</a> for full details.</p>
<p>And, of course, you can download it on <a href="http://pypi.python.org/pypi/python-wordpress-xmlrpc/2.0">PyPI</a> or directly through <a href="https://github.com/maxcutler/python-wordpress-xmlrpc">GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2012/04/16/python-wordpress-xmlrpc-v2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XML-RPC in WordPress 3.4</title>
		<link>http://www.maxcutler.com/2012/04/04/xml-rpc-in-wordpress-3-4/</link>
		<comments>http://www.maxcutler.com/2012/04/04/xml-rpc-in-wordpress-3-4/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 02:07:22 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=632</guid>
		<description><![CDATA[WordPress 3.4 has finally hit beta! Since full changelog/release notes are not yet available, I want to recap the improvements in XML-RPC functionality for this release here. New Methods The most significant change was the addition of a suite of new methods covering post and taxonomy functionality. These replace the legacy legacy metaWeblog API methods for creating and [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 3.4 has finally <a href="http://wordpress.org/news/2012/04/wordpress-3-4-beta-1/">hit beta</a>! Since full changelog/release notes are not yet available, I want to recap the improvements in XML-RPC functionality for this release here.<br />
<span id="more-632"></span></p>
<h3>New Methods</h3>
<p>The most significant change was the addition of a suite of new methods covering <a href="http://codex.wordpress.org/User:Maxcutler/XML-RPC_WordPress_API/Posts">post</a> and <a href="http://codex.wordpress.org/User:Maxcutler/XML-RPC_WordPress_API/Taxonomies">taxonomy</a> functionality.</p>
<p>These replace the legacy legacy <a href="http://codex.wordpress.org/User:Maxcutler/XML-RPC_MetaWeblog_API">metaWeblog API</a> methods for creating and editing posts, which did not support custom post types or taxonomies. You should no longer need to use any non-wp.* methods, please use the <a href="http://codex.wordpress.org/User:Maxcutler/XML-RPC_WordPress_API">WordPress API</a> in all of your apps and integrations!</p>
<h3>Bugfixes</h3>
<p>Fortunately, most of the items from my <a title="The WordPress XML-RPC (Ticket) Hit List" href="http://www.maxcutler.com/2011/12/22/the-wordpress-xml-rpc-ticket-hit-list/">bugs hitlist</a> have been fixed this cycle.</p>
<p>One of the most requested was <a href="http://core.trac.wordpress.org/ticket/15098">#15098</a>, support for adding a featured image/thumbnail to posts. This has been added to both the new post methods and the legacy metaWeblog post methods. Now the mobile apps can finally support post thumbnails, a long-requested feature by mobile users.</p>
<p>Check out the <a href="http://core.trac.wordpress.org/query?status=closed&amp;component=XML-RPC&amp;milestone=3.4&amp;col=id&amp;col=summary&amp;col=status&amp;col=owner&amp;col=type&amp;col=priority&amp;col=milestone&amp;col=changetime&amp;order=id">full list</a> of XML-RPC tickets from this cycle.</p>
<h3>Unit Tests</h3>
<p>The WordPress core team takes backwards compatibility very seriously, and that&#8217;s even more important for a public/external API like XML-RPC. The best way to protect against breaking API changes is to have a robust test suite for it. One of the commit bars for this cycle was that core patches needed corresponding unit tests.</p>
<p>The <a href="http://unit-tests.trac.wordpress.org/">core unit test suite</a> now includes 134 XML-RPC tests, covering 631 assertions. While this is a large step forward, it&#8217;s hopefully just the beginning.</p>
<h3>Documentation</h3>
<p>Having written XML-RPC clients in Python, C#, and Java for talking to WordPress, I&#8217;ve banged my head against the vagaries of the WordPress XML-RPC API many many times. A large part of this is because there has been a dearth of documentation on the specifics of method parameters and return values.</p>
<p>Although WordPress ostensibly implements &#8220;standard&#8221; APIs (Blogger, metaWeblog, and MovableType), the specs for those APIs have largely disappeared from the internet, and WordPress has expanded or modified them to cover WordPress-specific features. This makes life difficult for developers who don&#8217;t want to dive into WordPress core code.</p>
<p>Over the past several months, I&#8217;ve been documenting the entirety of the XML-RPC API, including all of the legacy methods. For now you can find it on my <a href="http://codex.wordpress.org/User:Maxcutler#XMLRPC">Codex userpage</a>, but I hope to work with the Codex team to get it onto the &#8220;real&#8221; Codex before the final 3.4 release.</p>
<h3>Conclusion</h3>
<p>Between support for custom post types, custom taxonomies, post thumbnails, and all of the other bugfixes, the XML-RPC API has made significant strides forward this release. This has opened the door for the official mobile apps to become more capable, as well as enable new scenarios for other external services and API consumers.</p>
<p>I&#8217;d like to thank <a href="http://westi.wordpress.com/">Peter Westwood</a> (aka westi) for being our fearless leader and carving time out of his busy schedule to mentor <a href="http://markoheijnen.com/">Marko Heijnen</a> and I this cycle. Thanks also to <a href="http://josephscott.org/">Joseph Scott</a> for helping to drive the bugfix work at the beginning of the cycle. And thanks to <a href="http://nacin.com/">Andrew Nacin</a> and <a href="http://ryan.boren.me/">Ryan Boren</a> for their support and beating the security drum.</p>
<p>If anyone finds bugs, please <a href="http://codex.wordpress.org/Reporting_Bugs#Reporting_a_Bug">report them</a>! Once 3.4 is out the door, we&#8217;ll talk about scope for 3.5, and I have several ideas on where XML-RPC can head in future releases. Especially if core is serious about adopting a REST(ful) API like the one <a href="https://twitter.com/#!/peterchester/status/185079725880905728">being built for WordPress.com</a>. But more on that another day!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2012/04/04/xml-rpc-in-wordpress-3-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XML-RPC Modernization Plugin: v0.7 Release</title>
		<link>http://www.maxcutler.com/2012/02/05/xml-rpc-modernization-plugin-v0-7-release/</link>
		<comments>http://www.maxcutler.com/2012/02/05/xml-rpc-modernization-plugin-v0-7-release/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 16:54:08 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-xmlrpc-modernization]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=629</guid>
		<description><![CDATA[I&#8217;ve released another update of my XML-RPC modernization plug-in for WordPress. This release incorporates the work from Ticket #18429, and adds new wp.newPost, wp.editPost and wp.deletePost methods. With these new methods, full CRUD capabilities for posts of any type (posts, pages, and any registered custom post types) are available through XML-RPC.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve released another <a href="https://github.com/maxcutler/wp-xmlrpc-modernization/tree/v0.7">update</a> of my XML-RPC modernization <a href="http://wordpress.org/extend/plugins/xml-rpc-modernization/">plug-in</a> for WordPress. This release incorporates the work from <a href="http://core.trac.wordpress.org/ticket/18429">Ticket #18429</a>, and adds new wp.newPost, wp.editPost and wp.deletePost methods. With these new methods, full CRUD capabilities for posts of any type (posts, pages, and any registered custom post types) are available through XML-RPC.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2012/02/05/xml-rpc-modernization-plugin-v0-7-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redesign</title>
		<link>http://www.maxcutler.com/2012/02/04/redesign/</link>
		<comments>http://www.maxcutler.com/2012/02/04/redesign/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 06:23:36 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[maxcutler.com]]></category>
		<category><![CDATA[pixelpower]]></category>
		<category><![CDATA[redesign]]></category>
		<category><![CDATA[wp-resume]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=627</guid>
		<description><![CDATA[As a birthday present to myself, I&#8217;m finally launching a redesign of maxcutler.com. The new design is based on a theme called PixelPower by Curt Ziegler. My previous design was also one of his themes, and I&#8217;m certainly a fan of his minimalistic style. PixelPower employs responsive web design techniques, so the site should now scale [...]]]></description>
			<content:encoded><![CDATA[<p>As a birthday present to myself, I&#8217;m finally launching a redesign of maxcutler.com. <span id="more-627"></span></p>
<p>The new design is based on a theme called <a href="http://themeforest.net/item/pixelpower-responsive-html5css3-wordpress-theme/705136">PixelPower</a> by <a href="http://curtziegler.com/">Curt Ziegler</a>. My previous design was also one of his themes, and I&#8217;m certainly a fan of his minimalistic style.</p>
<p>PixelPower employs <a href="http://coding.smashingmagazine.com/2011/01/12/guidelines-for-responsive-web-design/">responsive web design</a> techniques, so the site should now scale in size from my large desktop monitor down to smartphones, without the need for fragile plugins and browser sniffing.</p>
<p>The new theme also supports WordPress <a href="http://codex.wordpress.org/Post_Formats">post formats</a>, which will enable me to start micro-blogging. My <a href="http://www.maxcutler.com/2011/08/31/a-return-to-blogging/">goal</a> has been to make this site the repository of all my personal activity on the web, and this is one more step along that path. Over the coming months I intend to archive my <a href="http://twitter.com/maxcutler">tweets</a> and <a href="http://www.diigo.com/user/maxcutler">bookmarks</a> here and start treating this site as my canonical data warehouse.</p>
<p>Alongside the new theme, I am using the excellent <a href="http://wordpress.org/extend/plugins/wp-resume/">WP Resume</a> plug-in by <a href="http://ben.balter.com/">Ben Balter</a>. It uses custom post types to capture the resume information in a structured format, and comes with an intelligent default template and markup structure (hResume+HTML5). Certainly beats maintaining a text resume by hand!</p>
<p>So expect the volume on this blog to increase moderately, as I start posting content here that I might have otherwise posted on Twitter or various mailing lists. Here&#8217;s to an exciting 23rd year!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2012/02/04/redesign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XML-RPC Modernization Plugin: v0.6 Release</title>
		<link>http://www.maxcutler.com/2012/01/21/xml-rpc-modernization-plugin-v0-6-release/</link>
		<comments>http://www.maxcutler.com/2012/01/21/xml-rpc-modernization-plugin-v0-6-release/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 22:36:32 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[python-wordpress-xmlrpc]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-xmlrpc-modernization]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=591</guid>
		<description><![CDATA[Today I released an update (version 0.6) to my XML-RPC modernization plugin for WordPress, and have put it up on the WordPress.org plugin repository. I have also released a branch of python-wordpress-xmlrpc that supports the new functionality provided by the WordPress plugin. This update mostly refines and previous release by making parameter names and return values [...]]]></description>
			<content:encoded><![CDATA[<p>Today I <a href="https://github.com/maxcutler/wp-xmlrpc-modernization/tree/v0.6">released an update</a> (version 0.6) to my XML-RPC modernization plugin for WordPress, and have put it up on the WordPress.org <a href="http://wordpress.org/extend/plugins/xml-rpc-modernization/">plugin repository</a>. I have also released a <a href="https://github.com/maxcutler/python-wordpress-xmlrpc/tree/modernization-plugin">branch of python-wordpress-xmlrpc</a> that supports the new functionality provided by the WordPress plugin.</p>
<p><span id="more-591"></span></p>
<p>This update mostly refines and previous release by making parameter names and return values more consistent across the API.</p>
<p>I also reorganized the code to separate the plugin initialization hooks from the new server class implementation. This is mostly for organizational purposes, but also makes it so that the bulk of the code isn&#8217;t parsed and loaded by WordPress unless the request is actually to xmlrpc.php.</p>
<p>The plugin is still missing <em>wp.newPost</em> and <em>wp.editPost</em>, as I have not yet come up with a design for them that I am satisfied with. These methods are currently the planned focus for our core dev team&#8217;s (led by westi, with me and MarkoHeijnen as collaborators) first two-week cycle for 3.4. If/when they are ready, I&#8217;ll include them in a 0.7 release for the plugin.</p>
<p>I&#8217;d love to get feedback and more people testing the new functionality, so if you are so-inclined please do let me know and share your thoughts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2012/01/21/xml-rpc-modernization-plugin-v0-6-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XML-RPC Modernization Plugin: v0.5 Release</title>
		<link>http://www.maxcutler.com/2011/12/27/xml-rpc-modernization-plugin-v0-5-release/</link>
		<comments>http://www.maxcutler.com/2011/12/27/xml-rpc-modernization-plugin-v0-5-release/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 02:28:41 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-xmlrpc-modernization]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=590</guid>
		<description><![CDATA[Tonight I’ve open sourced the current state of my WordPress XML-RPC plugin containing a slew of new methods. I’m going through the motions to get it on the WordPress.org plugin repository and will update this post with a link when it’s up there. What is it? This plugin is primarily a refinement of the work [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight I’ve <a href="https://github.com/maxcutler/wp-xmlrpc-modernization">open sourced</a> the current state of my WordPress XML-RPC plugin containing a slew of new methods. I’m going through the motions to get it on the WordPress.org plugin repository and will update this post with a link when it’s up there.<span id="more-590"></span></p>
<h3>What is it?</h3>
<p>This plugin is primarily a refinement of the work done by Prasath during the WordPress Web Services GSoC 2011 project, as discussed in my <a href="http://www.maxcutler.com/2011/12/22/the-wordpress-xml-rpc-ticket-hit-list/">last post</a>. This involved a lot of reformatting the code to be self-consistent and closer to the WordPress core code style, as well as simplifying or reorganizing some of the logic.</p>
<p>In an effort to reduce code duplication, I’ve taken a cue from the <a href="http://bbpress.org/">bbPress</a> XML-RPC <a href="http://bbpress.trac.wordpress.org/browser/trunk/xmlrpc.php">implementation</a> and extracted common return-value preparation code into <em>prepare_&lt;datatype&gt;</em> methods. Where sensible, I’ve also removed some input validation that already occurs in the core APIs that are subsequently called.</p>
<p>I had to remove three methods from the original <a href="http://wordpress.org/extend/plugins/wp-webservices/">wp-webservices</a> plugin: <em>wp.newPost</em>, <em>wp.editPost</em>, and <em>wp.deletePost</em>. These methods are pretty crucial, but I was unsatisfied with the approach taken in the GSoC project and want to spend more time devising a more sensible implementation before including them in the plugin.</p>
<h3>Highlight: <em>wp.getPosts</em></h3>
<p>One of the biggest pain points for the WordPress mobile apps and other XML-RPC integrations is the inability to retrieve anything beyond the latest 10 posts. The <em>metaWeblog.getRecentPosts</em> method lets you specify the number of posts to return, but does not support paging or any sort of filtering, which means that many shared hosts fall over (or time out) if you try to retrieve all the posts at once.</p>
<p>The new <em>wp.getPosts</em> method has two parameters that allow for much greater control over the return values: filter and fields.</p>
<p>The “filter” (associative) array allows you to more precisely control what posts will be returned. It can accept the following keys:</p>
<ul>
<li><em>post_type</em>: the type of post to return (post, page, or any custom post type)</li>
<li><em>post_status</em>: only return posts with specific status(es)</li>
<li><em>numberposts</em>: the number of posts to return</li>
<li><em>offset</em>: combined with <em>numberposts</em>, allows paged return of results</li>
<li><em>orderby</em> and <em>order</em>: if you’d prefer an ordering other than reverse-chronological, you can use these parameters to specify the ordering (see <a href="http://codex.wordpress.org/Function_Reference/wp_get_recent_posts">wp_get_recent_posts</a> docs for valid values)</li>
</ul>
<p>The “fields” array allows you to specify the extra set of fields to return in the response for each post. In many scenarios, the calling application does not require <em>all</em> of the fields, so asking for a subset saves on bandwidth and potentially avoids some additional queries on the server.</p>
<p>“fields” can contain individual field names, but can also contain “conceptual group” names, which are sets of associated fields. The available conceptual groups for posts in v0.5 are “post” (most of the basic fields), “taxonomies” (akin to calling <em>wp.getPostTerms</em>), “custom_fields”, and “enclosure”.</p>
<h3>Other Features</h3>
<p>See the readme.txt file for a full list of methods, including methods for user management, custom taxonomies, and basic information on custom post types. I’ll cover many of these methods in future blog posts.</p>
<h3>Next Steps</h3>
<p>This release is just the first step in a process of trying to get these methods into core. Tomorrow I’ll be updating patches on all of the relevant tickets and soliciting feedback on certain design and implementation questions. If you have an interest in this, please watch the core Trac (see my last post for specific tickets).</p>
<p>A new branch of <a href="https://github.com/maxcutler/python-wordpress-xmlrpc">python-wordpress-xmlrpc</a> is also forthcoming that includes support for the new methods.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2011/12/27/xml-rpc-modernization-plugin-v0-5-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The WordPress XML-RPC (Ticket) Hit List</title>
		<link>http://www.maxcutler.com/2011/12/22/the-wordpress-xml-rpc-ticket-hit-list/</link>
		<comments>http://www.maxcutler.com/2011/12/22/the-wordpress-xml-rpc-ticket-hit-list/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 01:24:18 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=588</guid>
		<description><![CDATA[After half a year of complaining about the state of XML-RPC in WordPress, I’ve tried to get the stars aligned for some significant improvements in the next release (3.4). The 3.4 development cycle has just begun after the release of 3.3 last week, and I am currently on winter break until spring semester classes start [...]]]></description>
			<content:encoded><![CDATA[<p>After half a year of <a href="http://www.maxcutler.com/2011/10/31/wordpress-as-a-web-citizen-the-need-for-better-apis/">complaining</a> about the state of XML-RPC in WordPress, I’ve tried to get the stars aligned for some significant improvements in the next release (3.4). The 3.4 development cycle has just begun after the <a href="http://wordpress.org/news/2011/12/sonny/">release of 3.3</a> last week, and I am currently on winter break until spring semester classes start on January 9. Some of the core developers have shown interest in seeing XML-RPC improved, so I hope to make their job easier by doing the legwork on patches.</p>
<p>As of today (12/22/2011), there are <a href="http://core.trac.wordpress.org/query?status=accepted&amp;status=assigned&amp;status=new&amp;status=reopened&amp;status=reviewing&amp;component=XML-RPC&amp;col=id&amp;col=summary&amp;col=status&amp;col=owner&amp;col=type&amp;col=priority&amp;col=milestone&amp;col=changetime&amp;desc=1&amp;order=changetime">72 open tickets</a> in the WordPress core Trac XML-RPC component. While I’d love to see them all fixed, there is limited amount of time and so we must prioritize. This post represents my current priorities and plans.<span id="more-588"></span></p>
<h3>GSoC Project</h3>
<p>The first area of focus will be refining the work from the <a href="http://gsoc2011.wordpress.com/tag/wp-webservices/">WordPress Web Services</a> 2011 Google Summer of Code project, which resulted in the <a href="http://wordpress.org/extend/plugins/wp-webservices/">wp-webservices</a> plugin. These new methods expand the wp.* method namespace and deprecate the usage of metaWeblog/MT/Blogger API methods for common tasks.</p>
<p>I’ll first release a new plugin based on wp-webservices but with updated implementations. The goal is to allow people to test the new methods on 3.3 or earlier, and to make it easier than applying two dozen patches against trunk. I’ll also have a new branch of <a href="https://github.com/maxcutler/python-wordpress-xmlrpc">python-wordpress-xmlrpc</a> that can talk to the new methods.</p>
<table width="90%" border="1" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td valign="top" width="124"><strong>Ticket #</strong></td>
<td valign="top" width="118"><strong>Type</strong></td>
<td valign="top" width="113"><strong>Method</strong></td>
<td valign="top" width="110"><strong>Priority</strong></td>
</tr>
<tr>
<td valign="top" width="133"><a href="http://core.trac.wordpress.org/ticket/18433">18433</a></td>
<td valign="top" width="124">Posts</td>
<td valign="top" width="118">wp.getPosts</td>
<td valign="top" width="114">0</td>
</tr>
<tr>
<td valign="top" width="135"><a href="http://core.trac.wordpress.org/ticket/18432">18432</a></td>
<td valign="top" width="126"></td>
<td valign="top" width="120">wp.getPost</td>
<td valign="top" width="116">2</td>
</tr>
<tr>
<td valign="top" width="135"><a href="http://core.trac.wordpress.org/ticket/18430">18430</a></td>
<td valign="top" width="126"></td>
<td valign="top" width="121">wp.editPost</td>
<td valign="top" width="117">2</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18431">18431</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.deletePost</td>
<td valign="top" width="118">3</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18437">18437</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.getPostTypes</td>
<td valign="top" width="118">3</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18436">18436</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.getPostType</td>
<td valign="top" width="118">3</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18444">18444</a></td>
<td valign="top" width="125">Taxonomies</td>
<td valign="top" width="122">wp.getTaxonomies</td>
<td valign="top" width="118">1</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18443">18443</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.getTaxonomy</td>
<td valign="top" width="118">2</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18442">18442</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.getTerms</td>
<td valign="top" width="118">1</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18441">18441</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.getTerm</td>
<td valign="top" width="118">2</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18438">18438</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.newTerm</td>
<td valign="top" width="118">1</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18439">18439</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.editTerm</td>
<td valign="top" width="118">2</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18440">18440</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.deleteTerm</td>
<td valign="top" width="118">4</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18434">18434</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.getPostTerms</td>
<td valign="top" width="118">1</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18435">18435</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.setPostTerms</td>
<td valign="top" width="118">1</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18428">18428</a></td>
<td valign="top" width="125">Users</td>
<td valign="top" width="122">wp.getUsers</td>
<td valign="top" width="118">1</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18427">18427</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.getUser</td>
<td valign="top" width="118">2</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18424">18424</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.newUser</td>
<td valign="top" width="118">1</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18425">18425</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.editUser</td>
<td valign="top" width="118">1</td>
</tr>
<tr>
<td valign="top" width="134"><a href="http://core.trac.wordpress.org/ticket/18426">18426</a></td>
<td valign="top" width="125"></td>
<td valign="top" width="122">wp.deleteUser</td>
<td valign="top" width="118">3</td>
</tr>
</tbody>
</table>
<p>(Note: priorities are my opinion, not necessarily that of WordPress core team)</p>
<h3>Bugfixes</h3>
<p>The remainder of the tickets are a mix of feature requests and bugs. Many already have patches, though they may need to be updated to apply against trunk. An example of some easy fixes that would make the lives of the mobile app developers (and other XML-RPC users) so much better:</p>
<table width="90%" border="1" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td valign="top" width="81"><strong>Ticket #</strong></td>
<td valign="top" width="331"><strong>Description</strong></td>
<td valign="top" width="86"><strong>Status</strong></td>
</tr>
<tr>
<td valign="top" width="81"><a href="http://core.trac.wordpress.org/ticket/18566">18566</a></td>
<td valign="top" width="331">Expose discussion settings on XML-RPC</td>
<td valign="top" width="86">has-patch</td>
</tr>
<tr>
<td valign="top" width="81"><a href="http://core.trac.wordpress.org/ticket/18126">18126</a></td>
<td valign="top" width="331">Expose image options on XML-RPC</td>
<td valign="top" width="86">has-patch</td>
</tr>
<tr>
<td valign="top" width="81"><a href="http://core.trac.wordpress.org/ticket/17981">17981</a></td>
<td valign="top" width="331">wp.getComments should work for non-admins</td>
<td valign="top" width="86">has-patch</td>
</tr>
<tr>
<td valign="top" width="81"><a href="http://core.trac.wordpress.org/ticket/18683">18683</a></td>
<td valign="top" width="331">wp.getMediaLibrary doesn’t return attachment ids</td>
<td valign="top" width="86">has-patch</td>
</tr>
<tr>
<td valign="top" width="81"><a href="http://core.trac.wordpress.org/ticket/17109">17109</a></td>
<td valign="top" width="331">Add more hooks for pluggability</td>
<td valign="top" width="86">has-patch</td>
</tr>
<tr>
<td valign="top" width="81"><a href="http://core.trac.wordpress.org/ticket/13917">13917</a></td>
<td valign="top" width="331">wp.uploadFile cannot be attached to a post</td>
<td valign="top" width="86">has-patch</td>
</tr>
<tr>
<td valign="top" width="81"><a href="http://core.trac.wordpress.org/ticket/17132">17132</a></td>
<td valign="top" width="331">Expose template/active_plugins on XML-RPC</td>
<td valign="top" width="86">has-patch</td>
</tr>
<tr>
<td valign="top" width="81"><a href="http://core.trac.wordpress.org/ticket/10933">10933</a></td>
<td valign="top" width="331">Expose custom more text on XML-RPC</td>
<td valign="top" width="86">has-patch</td>
</tr>
<tr>
<td valign="top" width="81"><a href="http://core.trac.wordpress.org/ticket/19027">19027</a></td>
<td valign="top" width="331">Return modification date on mw.getPost/mw.getRecentPosts</td>
<td valign="top" width="86">has-patch</td>
</tr>
</tbody>
</table>
<p>Of the 51 open non-GSoC XML-RPC tickets, 34 currently have patches.</p>
<h3>Next Steps</h3>
<p>My first task is to get a release of the improved wp-webservices plugin out the door. I started work on it this summer when the GSoC project was winding down, and I’ll spend the next few days doing some more refining. My goal is to have code available by Tuesday, and updated patches on all the GSoC tickets by Wednesday.</p>
<p>Starting this weekend I’ll also start idling in <a href="http://codex.wordpress.org/IRC#.23wordpress-dev">#wordpress-dev</a> again, where I’ll be pestering nacin, westi and josephscott about triaging the old tickets and getting some of the low-hanging fruit committed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2011/12/22/the-wordpress-xml-rpc-ticket-hit-list/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>WordPress as a Web Citizen: The Need for (Better) APIs</title>
		<link>http://www.maxcutler.com/2011/10/31/wordpress-as-a-web-citizen-the-need-for-better-apis/</link>
		<comments>http://www.maxcutler.com/2011/10/31/wordpress-as-a-web-citizen-the-need-for-better-apis/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 20:48:59 +0000</pubDate>
		<dc:creator>maxcutler</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.maxcutler.com/?p=567</guid>
		<description><![CDATA[Prior to the 3.0 release of WordPress, I often dismissed WordPress as &#8220;just a tool for blogging.&#8221; Much to the credit of the core developers and community, WordPress has become much better suited for projects that are more complex than reverse-chronological blogging. But when I try to use WordPress as a CMS, one of my [...]]]></description>
			<content:encoded><![CDATA[<p>Prior to the 3.0 release of WordPress, I often dismissed WordPress as &#8220;just a tool for blogging.&#8221; Much to the credit of the core developers and community, WordPress has become much better suited for projects that are more complex than reverse-chronological blogging.</p>
<p>But when I try to use WordPress as a CMS, one of my biggest remaining stumbling blocks is the difficulty of integrating with other systems.</p>
<p><span id="more-567"></span></p>
<p>Friends like <a href="http://www.danielbachhuber.com">Daniel</a> and <a href="http://www.andrewspittle.net/">Andrew</a> have been <a href="http://andrewspittle.net/2011/09/03/blog-as-commonplace-book/">experimenting</a> with using WordPress as a repository for all of their digital activity. Leveraging custom post types, plugins, post formats, and more, they have created rich means of capturing different types of activity and ideas. As a data aggregation and repository tool, I think that&#8217;s wonderful and want to pursue similar efforts for my own site eventually.</p>
<p>However, such efforts are mostly one-way: WordPress plugin code uses the APIs of other services to transfer data to or from WordPress. If WordPress is the only system in your personal or corporate data ecosystem, that may be fine. But for many many companies, there are legacy and complementary systems that need to interact with WordPress.</p>
<p>My background is in newspapers, where many newsrooms are struggling with how, and even <em>if</em>, to tie together legacy behemoth CMSs with ad-hoc Django/Rails projects and WordPress blog networks. There&#8217;s also third party special-purpose content services like <a href="http://www.coveritlive.com/">CoverItLive</a> and <a href="http://www.storify.com/">Storify</a>, for which the primary means of &#8220;integration&#8221; seems to be dropping HTML/JS snippets in the CMS or WordPress posts.</p>
<p>What is really needed is a robust way for these heterogeneous networks of systems to communicate with each other. Most of the aforementioned services offer read+write APIs for just that purpose. But WordPress is the odd man out, and I do not understand why that has been allowed to continue for years.</p>
<p>The recommended &#8220;WordPress way&#8221; to handle this is to use the<a href="http://codex.wordpress.org/XML-RPC_Support"> XML-RPC API</a>. That would indeed be a good response if the API supported more than the basic blogging capabilities. But if you are using WordPress as a CMS and leveraging all the wonderful features added in and since WordPress 3.0, then you are S.O.L.</p>
<p>The WordPress XML-RPC API is essentially the descendant of the classic MetaWeblog, MovableType, and Blogger blog APIs. But while WordPress core has plowed ahead with new features every point release, the XML-RPC API is essentially frozen in time at 3.0, with minor bugfixes over the years.</p>
<p>One of the biggest consumers of the API today are the <a href="http://wordpress.org/extend/mobile/">mobile apps</a>, to which I <a title="Developing WordPress for Windows Phone" href="http://www.maxcutler.com/2011/09/06/developing-wordpress-for-windows-phone">started contributing</a> this year. One of the biggest mobile app feature requests is support for custom post types, which were added to core in 3.0 but are still not supported by XML-RPC almost three releases later. Coming close behind is the need for better media management and support for custom taxonomies.</p>
<p>I&#8217;ve built <a href="http://github.com/maxcutler/python-wordpress-xmlrpc">python-wordpress-xmlrpc</a> over the past year to facilitate integrations with Django (and other Python-based) projects. I know of a number of individuals and companies who have fallen back on custom WordPress plugins that add new XML-RPC methods to support their needs. That&#8217;s great for them, but results in the fragmentation of the ecosystem, and limits opportunities for shared knowledge and libraries. Everyone would be better off if we could all use the same API instead of each creating our own variants. And since you can&#8217;t run plugins on WordPress.com, that&#8217;s not even an option for commercial integrations wanting to support that market.</p>
<p>This summer, WordPress sponsored a Google Summer of Code <a href="http://gsoc2011.wordpress.com/tag/wp-webservices/">project</a> to rectify this situation, and we now have a series of patches to expose most of the core functionality through XML-RPC. These patches still require a fair amount of polish and testing before being commit-ready, but they are a good starting point.</p>
<p>Having all the raw features accessible via the XML-RPC API would be great, but it&#8217;s also only a start. There remain some critical usability flaws that limit the usefulness of the API as a means of cross-system integration.</p>
<p>There&#8217;s still <a href="http://core.trac.wordpress.org/ticket/16316">no way to page through the posts archive</a>, forcing very expensive database operations to pull the full archive for large sites, often blowing past memory limits. The media management methods <a href="http://core.trac.wordpress.org/ticket/18683">don&#8217;t return IDs</a>, making it difficult to change media after they are uploaded. There&#8217;s <a href="http://core.trac.wordpress.org/ticket/19027">no way to differentiate</a> published and modified dates on posts. None of the methods support &#8216;since &lt;date&gt;&#8217; parameters to allow efficient discovery of changes for diff-based syncing. The use of actions and filters in the method implementations are incredibly inconsistent, if they exist at all, making it very <a href="http://core.trac.wordpress.org/ticket/17109">difficult for plugins</a> to modify the behavior without wholesale replacing the built-in methods. And the list goes on&#8230;</p>
<p>As you may notice, many of these issues already have tickets filed in the core trac, and most of them even have patches. Yet they sit there mostly untouched. I&#8217;ve offered to help on some of them, and am willing to do much more work on XML-RPC patches, but I won&#8217;t waste my time if they aren&#8217;t going to be acted upon.</p>
<p>Those of us building cross-system integrations and working on the official mobile apps need a better API. There&#8217;s really no downside, especially when there are people like me who are willing to put in serious work on patches and testing. I&#8217;ve watched the core devs agonize over internal (&#8220;core&#8221;) WordPress API design decisions, but they seem not to care nearly as much about the public-facing XML-RPC API.</p>
<p>So I&#8217;ll be petitioning for XML-RPC to be one of the focuses/priorities for the WordPress 3.4 release cycle. Hopefully someone will agree and we won&#8217;t see another release go by without improving WordPress&#8217; interoperability.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maxcutler.com/2011/10/31/wordpress-as-a-web-citizen-the-need-for-better-apis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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>
	</channel>
</rss>

