<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Nothing But Words » Technical</title>
	
	<link>http://www.toppa.com</link>
	<description>Mike Toppa's Blog</description>
	<lastBuildDate>Sun, 27 May 2012 16:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/NothingButWordsTechnical" /><feedburner:info uri="nothingbutwordstechnical" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Plugin support post 5, and what’s new in Shashin 3.1.5</title>
		<link>http://www.toppa.com/2012/plugin-support-post-5-and-whats-new-in-shashin-3-1-5/</link>
		<comments>http://www.toppa.com/2012/plugin-support-post-5-and-whats-new-in-shashin-3-1-5/#comments</comments>
		<pubDate>Thu, 10 May 2012 01:41:23 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Support]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=4017</guid>
		<description><![CDATA[Please use the comments section of this post for questions about any of my plugins. Shashin 3.1.5 is now available at wordpress.prg. Also, I have updated to cover using it with Fancybox (the photo viewer now included with Shashin). Shashin 3.1.5 is a maintenance release with the following improvements: Improved installation and activation process (manual [...]]]></description>
			<content:encoded><![CDATA[<p>Please use the comments section of this post for questions about any of my plugins.</p>
<p><a href="http://wordpress.org/extend/plugins/shashin/">Shashin 3.1.5 is now available at wordpress.prg</a>. Also, I have updated <a href="http://www.toppa.com/shashin-wordpress-plugin/" title="Shashin - a WordPress plugin for displaying photos and videos from Picasa, YouTube, and Twitpic">the Shashin documentation</a> to cover using it with Fancybox (the photo viewer now included with Shashin).</p>
<p>Shashin 3.1.5 is a maintenance release with the following improvements:</p>
<ul>
<li>Improved installation and activation process (manual re-activation is no longer needed when upgrading, and the dependency on Toppa Plugin Libraries is handled more smoothly)</li>
<li>Ability to disable Shashin&#8217;s Fancybox if you already have your own Fancybox plugin installed</li>
<li>Improvements to album synchronizing, for handling slow connections and servers with misconfigured SSL settings (which is surprisingly common)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/plugin-support-post-5-and-whats-new-in-shashin-3-1-5/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>WordCamp Nashville</title>
		<link>http://www.toppa.com/2012/wordcamp-nashville/</link>
		<comments>http://www.toppa.com/2012/wordcamp-nashville/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 00:02:55 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Japan and Travel]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=3985</guid>
		<description><![CDATA[I&#8217;ve traveled coast-to-coast across the US 4 times, but until this past weekend I had never been in the South (except for a brief visit to UVA many years ago). I was in Nashville for only 48 hours, and I enjoyed every minute of it. The first thing I noticed was how kind and polite [...]]]></description>
			<content:encoded><![CDATA[<div class="shashinPhotoGroups"><table class="shashinThumbnailsTable" id="shashinGroup_1_1" style="margin-left: auto; margin-right: auto;">
<caption></caption>
<tr>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_1" style="width: 156px;"><a href="https://lh5.googleusercontent.com/-waOPCbPANXA/T5K85xuHwRI/AAAAAAAAJO4/-JZONNNWegU/IMG_1685.JPG?imgmax=800" id="shashinThumbnailLink_1" class="shashinFancybox" rel="shashinFancybox_1" title="People arriving for the start of WordCamp Nashville, at Watkins College"><img src="https://lh5.googleusercontent.com/-waOPCbPANXA/T5K85xuHwRI/AAAAAAAAJO4/-JZONNNWegU/IMG_1685.JPG?imgmax=150&amp;crop=1" alt="People arriving for the start of WordCamp Nashville, at Watkins College" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_1" /></a><span class="shashinThumbnailCaption">People arriving for the start of WordCamp Nashville, at Watkins College</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_1">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampNashville#5733852976381411602">View at Picasa</a></div>
<strong>People arriving for the start of WordCamp Nashville, at Watkins College<span class="shashinCaptionExif">21-Apr-2012 09:55, Canon Canon PowerShot SD780 IS, 3.2, 5.9mm, 0.033 sec, ISO 320</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_2" style="width: 156px;"><a href="https://lh3.googleusercontent.com/-YJh91IHW1Uk/T5259usDI5I/AAAAAAAAJQQ/5GN_XMvV8ic/mike_toppa_dependency_injection_for_wordpress_2.jpg?imgmax=800" id="shashinThumbnailLink_2" class="shashinFancybox" rel="shashinFancybox_1" title="My dependency injection talk at WordCamp Nashville (photo by Patricia Melton)"><img src="https://lh3.googleusercontent.com/-YJh91IHW1Uk/T5259usDI5I/AAAAAAAAJQQ/5GN_XMvV8ic/mike_toppa_dependency_injection_for_wordpress_2.jpg?imgmax=150&amp;crop=1" alt="My dependency injection talk at WordCamp Nashville (photo by Patricia Melton)" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_2" /></a><span class="shashinThumbnailCaption">My dependency injection talk at WordCamp Nashville (photo by Patricia Melton)</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_2">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampNashville#5736945970495824786">View at Picasa</a></div>
<strong>My dependency injection talk at WordCamp Nashville (photo by Patricia Melton)<span class="shashinCaptionExif">21-Apr-2012 00:56, Canon Canon EOS 40D, 4.0, 70.0mm, 0.017 sec, ISO 1600</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_3" style="width: 156px;"><a href="https://lh4.googleusercontent.com/-2LWGV8p4uB8/T5MVQcBHcNI/AAAAAAAAJPY/B7xEizma7LU/IMG_1691.JPG?imgmax=800" id="shashinThumbnailLink_3" class="shashinFancybox" rel="shashinFancybox_1" title="@rfair presenting &quot;Less, JS, and WP&quot;"><img src="https://lh4.googleusercontent.com/-2LWGV8p4uB8/T5MVQcBHcNI/AAAAAAAAJPY/B7xEizma7LU/IMG_1691.JPG?imgmax=150&amp;crop=1" alt="@rfair presenting &quot;Less, JS, and WP&quot;" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_3" /></a><span class="shashinThumbnailCaption">@rfair presenting "Less, JS, and WP"</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_3">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampNashville#5733950122715738322">View at Picasa</a></div>
<strong>@rfair presenting &quot;Less, JS, and WP&quot;<span class="shashinCaptionExif">21-Apr-2012 16:07, Canon Canon PowerShot SD780 IS, 3.2, 5.9mm, 0.04 sec, ISO 400</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
</tr>
<tr>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_4" style="width: 156px;"><a href="https://lh5.googleusercontent.com/-dBH2STmPBBo/T5Lbh5VThtI/AAAAAAAAJPQ/mczQAuDbnMM/IMG_1690.JPG?imgmax=800" id="shashinThumbnailLink_4" class="shashinFancybox" rel="shashinFancybox_1" title="The Otto and Nacin show - @otto42 @nacin"><img src="https://lh5.googleusercontent.com/-dBH2STmPBBo/T5Lbh5VThtI/AAAAAAAAJPQ/mczQAuDbnMM/IMG_1690.JPG?imgmax=150&amp;crop=1" alt="The Otto and Nacin show - @otto42 @nacin" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_4" /></a><span class="shashinThumbnailCaption">The Otto and Nacin show - @otto42 @nacin</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_4">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampNashville#5733886650968409810">View at Picasa</a></div>
<strong>The Otto and Nacin show - @otto42 @nacin<span class="shashinCaptionExif">21-Apr-2012 12:09, Canon Canon PowerShot SD780 IS, 3.2, 5.9mm, 0.033 sec, ISO 250</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_5" style="width: 156px;"><a href="https://lh6.googleusercontent.com/-l5o7FIvObq0/T5LM7bVue1I/AAAAAAAAJPI/WNg1HDCrdaA/IMG_1689.JPG?imgmax=800" id="shashinThumbnailLink_5" class="shashinFancybox" rel="shashinFancybox_1" title="@ryngrn presenting &quot;Child Theme Frameworks&quot;"><img src="https://lh6.googleusercontent.com/-l5o7FIvObq0/T5LM7bVue1I/AAAAAAAAJPI/WNg1HDCrdaA/IMG_1689.JPG?imgmax=150&amp;crop=1" alt="@ryngrn presenting &quot;Child Theme Frameworks&quot;" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_5" /></a><span class="shashinThumbnailCaption">@ryngrn presenting "Child Theme Frameworks"</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_5">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampNashville#5733870596919294802">View at Picasa</a></div>
<strong>@ryngrn presenting &quot;Child Theme Frameworks&quot;<span class="shashinCaptionExif">21-Apr-2012 11:06, Canon Canon PowerShot SD780 IS, 3.2, 5.9mm, 0.033 sec, ISO 400</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_6" style="width: 156px;"><a href="https://lh3.googleusercontent.com/-1ffjOmiY3x8/T5LAAj0Cd8I/AAAAAAAAJPA/-EHhlktekzg/IMG_1688.JPG?imgmax=800" id="shashinThumbnailLink_6" class="shashinFancybox" rel="shashinFancybox_1" title="@studionashvegas presenting &quot;The Blank Screen: Overcoming Fear of Pressing from Scratch&quot;"><img src="https://lh3.googleusercontent.com/-1ffjOmiY3x8/T5LAAj0Cd8I/AAAAAAAAJPA/-EHhlktekzg/IMG_1688.JPG?imgmax=150&amp;crop=1" alt="@studionashvegas presenting &quot;The Blank Screen: Overcoming Fear of Pressing from Scratch&quot;" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_6" /></a><span class="shashinThumbnailCaption">@studionashvegas presenting "The Blank Screen: Overcoming Fear of Pressing from Scratch"</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_6">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampNashville#5733856391442102210">View at Picasa</a></div>
<strong>@studionashvegas presenting &quot;The Blank Screen: Overcoming Fear of Pressing from Scratch&quot;<span class="shashinCaptionExif">21-Apr-2012 10:11, Canon Canon PowerShot SD780 IS, 3.2, 5.9mm, 0.025 sec, ISO 400</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
</tr>
</table>
</div>

<p>I&#8217;ve traveled coast-to-coast across the US 4 times, but until this past weekend I had never been in the South (except for a brief visit to UVA many years ago). I was in Nashville for only 48 hours, and I enjoyed every minute of it. The first thing I noticed was how kind and polite everyone is. The driver of my shuttle bus from the airport pointed out all the sights as we drove into town, and he seemed genuinely interested in what everyone on the bus was planning to do that weekend.  I spent the day on Friday with my friend Caryn, who I hadn&#8217;t seen since we finished grad school 16 years ago. She showed me around town, and it was great to catch up.</p>
<p>This was Nashville&#8217;s first WordCamp. The organizers did a great job pulling it together, and they clearly had a lot of local talent to draw upon for their speakers. Coming from Philly, I think I was the only Yankee among <a href="http://2012.nashville.wordcamp.org/speakers/">the speakers</a> &#8211; I felt honored to be included (Nacin, coming from DC, is a borderline case <img src='http://www.toppa.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).</p>
<p>I was in the developers&#8217; track all day. The first two sessions were design focused, and <a href="http://daryl.learnhouston.com/2012/04/23/wordcamp-nashville/">here&#8217;s an excellent summary of both presentations</a>. They were followed by <a href="http://2012.nashville.wordcamp.org/2012/04/03/wordcamp-nashville-draws-high-profile-presenters/">the Otto and Nacin show</a>. They are both deeply involved in the development of WordPress, and they gave a preview of features in WordPress 3.4. Their talk was the most popular of the day in the developers&#8217; track.</p>
<p>I was up next after lunch, and my talk went well. It was an advanced topic (dependency injection) so I drew a smaller crowd. But I got some good questions towards the end, and some good tweets:</p>
<div class="shashinPhotoGroups"><table class="shashinThumbnailsTable" id="shashinGroup_2_2" style="margin-left: auto; margin-right: auto;">
<caption></caption>
<tr>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_7" style="width: 596px;"><a href="https://lh6.googleusercontent.com/-SBwu_AF1uf4/T53SFBV4aqI/AAAAAAAAJQg/o1yVUlsl1co/rfair_tweet.jpg?imgmax=800" id="shashinThumbnailLink_7" class="shashinFancybox" rel="shashinFancybox_2" title="@rfair&#039;s tweet about my session"><img src="https://lh6.googleusercontent.com/-SBwu_AF1uf4/T53SFBV4aqI/AAAAAAAAJQg/o1yVUlsl1co/rfair_tweet.jpg?imgmax=640" alt="@rfair&#039;s tweet about my session" width="590" height="233" class="shashinThumbnailImage" id="shashinThumbnailImage_7" /></a><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_7">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampNashville#5736972484041271970">View at Picasa</a></div>
<strong>@rfair&#039;s tweet about my session<span class="shashinCaptionExif">29-Apr-2012 19:40</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
</tr>
</table>
</div>

<p>Here is <a href="http://2012.nashville.wordcamp.org/2012/04/17/webdevstudios-director-of-development-to-talk-about-creating-pluggable-objects-with-flexibility-for-reuse/">a non-technical summary of my talk</a>.</p>
<p>Russell Fair wrapped up the day, and he did a great job of sharing his experiences using <a href="http://lesscss.org/">LESS</a> with WordPress.</p>
<p>I didn&#8217;t get to see Joel Norris&#8217; WordPress bootcamp presentation, but from what everyone was saying, I believe he gets the prize for having the most popular session. He stayed in character as a drill sergeant for almost the entire session. And he was in costume &#8211; <a href="http://www.flickr.com/photos/wpnashville/7111202689/in/pool-1884270@N24/">here&#8217;s a photo</a>.</p>
<p>The speakers dinner and the after party were both a lot of fun. I learned a lot chatting with Otto and Nacin, made some new friends, and my friend Caryn was able to come too, so it was a great evening.</p>
<p>If you want to read more, <a href="http://wpcandy.com/reviewed/2012-wordcamp-nashville">WP Candy has a great review</a>, and they also have links to many of the presenters&#8217; slides. There&#8217;s also <a href="http://www.flickr.com/groups/wpnashville/pool/">a great photo pool on Flickr</a>. Here are my slides:</p>
<div style="width:510px" id="__ss_12634154"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/mtoppa/dependency-injection-for-wordpress" title="Dependency Injection for WordPress" target="_blank">Dependency Injection for WordPress</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/12634154" width="510" height="426" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/mtoppa" target="_blank">mtoppa</a> </div>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/wordcamp-nashville/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordCamp San Diego</title>
		<link>http://www.toppa.com/2012/wordcamp-san-diego/</link>
		<comments>http://www.toppa.com/2012/wordcamp-san-diego/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 00:20:07 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=3929</guid>
		<description><![CDATA[This was my second WordCamp, and my first not as a speaker. When last Fall, I was blown away by the positive energy of everyone there (which is one of the things that led to my current position with WebDevStudios). WordCamp San Diego was just as much fun, and there was plenty to learn too. [...]]]></description>
			<content:encoded><![CDATA[<div class="shashinPhotoGroups"><table class="shashinThumbnailsTable" id="shashinGroup_3_3" style="float: left;">
<caption></caption>
<tr>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_8" style="width: 156px;"><a href="https://lh4.googleusercontent.com/-_Y1QuqJKSUc/T23tTeap7cI/AAAAAAAAJH8/u0caVPNDf8c/IMG_1354.JPG?imgmax=800" id="shashinThumbnailLink_8" class="shashinFancybox" rel="shashinFancybox_3" title="@theandystratton presenting &quot;Accomplish it with Core: Galleries, Sliders and More&quot; at WordCamp San Diego"><img src="https://lh4.googleusercontent.com/-_Y1QuqJKSUc/T23tTeap7cI/AAAAAAAAJH8/u0caVPNDf8c/IMG_1354.JPG?imgmax=150&amp;crop=1" alt="@theandystratton presenting &quot;Accomplish it with Core: Galleries, Sliders and More&quot; at WordCamp San Diego" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_8" /></a><span class="shashinThumbnailCaption">@theandystratton presenting "Accomplish it with Core: Galleries, Sliders and More" at WordCamp San Diego</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_8">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampSanDiego#5723491620295929282">View at Picasa</a></div>
<strong>@theandystratton presenting &quot;Accomplish it with Core: Galleries, Sliders and More&quot; at WordCamp San Diego<span class="shashinCaptionExif">24-Mar-2012 11:31, Canon Canon PowerShot SD780 IS, 5.8, 17.9mm, 0.05 sec, ISO 500</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
</tr>
<tr>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_9" style="width: 156px;"><a href="https://lh5.googleusercontent.com/-ZJtsbeWM7qE/T25JmD-yP7I/AAAAAAAAJJk/e76vpjQJwHY/IMG_1382.JPG?imgmax=800" id="shashinThumbnailLink_9" class="shashinFancybox" rel="shashinFancybox_3" title="@norcross is out of uniform for his presentation &quot;Stay Classy, WordPress&quot; at WordCamp San Diego"><img src="https://lh5.googleusercontent.com/-ZJtsbeWM7qE/T25JmD-yP7I/AAAAAAAAJJk/e76vpjQJwHY/IMG_1382.JPG?imgmax=150&amp;crop=1" alt="@norcross is out of uniform for his presentation &quot;Stay Classy, WordPress&quot; at WordCamp San Diego" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_9" /></a><span class="shashinThumbnailCaption">@norcross is out of uniform for his presentation "Stay Classy, WordPress" at WordCamp San Diego</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_9">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampSanDiego#5723593094686982066">View at Picasa</a></div>
<strong>@norcross is out of uniform for his presentation &quot;Stay Classy, WordPress&quot; at WordCamp San Diego<span class="shashinCaptionExif">24-Mar-2012 18:26, Canon Canon PowerShot SD780 IS, 5.8, 17.9mm, 0.05 sec, ISO 800</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
</tr>
<tr>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_10" style="width: 156px;"><a href="https://lh3.googleusercontent.com/-BPYP8RLha-c/T29maM3T4JI/AAAAAAAAJKM/_p_lto81jT8/IMG_1389.JPG?imgmax=800" id="shashinThumbnailLink_10" class="shashinFancybox" rel="shashinFancybox_3" title="WordCamp San Diego Developer Day, at CoMerge"><img src="https://lh3.googleusercontent.com/-BPYP8RLha-c/T29maM3T4JI/AAAAAAAAJKM/_p_lto81jT8/IMG_1389.JPG?imgmax=150&amp;crop=1" alt="WordCamp San Diego Developer Day, at CoMerge" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_10" /></a><span class="shashinThumbnailCaption">WordCamp San Diego Developer Day, at CoMerge</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_10">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampSanDiego#5723906251727036562">View at Picasa</a></div>
<strong>WordCamp San Diego Developer Day, at CoMerge<span class="shashinCaptionExif">25-Mar-2012 14:35, Canon Canon PowerShot SD780 IS, 3.2, 5.9mm, 0.033 sec, ISO 250</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
</tr>
<tr>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_11" style="width: 156px;"><a href="https://lh4.googleusercontent.com/-cmEbjeRsEjw/T3AXLPSP7kI/AAAAAAAAJKY/6WTPSw1FxFk/IMG_1597.JPG?imgmax=800" id="shashinThumbnailLink_11" class="shashinFancybox" rel="shashinFancybox_3" title="@tweetsfromchris takes on Nicky Rotten&#039;s 2.5 lbs. burger challenge (with a gigantic side of fries)"><img src="https://lh4.googleusercontent.com/-cmEbjeRsEjw/T3AXLPSP7kI/AAAAAAAAJKY/6WTPSw1FxFk/IMG_1597.JPG?imgmax=150&amp;crop=1" alt="@tweetsfromchris takes on Nicky Rotten&#039;s 2.5 lbs. burger challenge (with a gigantic side of fries)" width="150" height="150" class="shashinThumbnailImage" id="shashinThumbnailImage_11" /></a><span class="shashinThumbnailCaption">@tweetsfromchris takes on Nicky Rotten's 2.5 lbs. burger challenge (with a gigantic side of fries)</span><div class="shashinFancyboxCaptionWrapper" id="shashinFancyboxCaption_11">
<div class="shashinFancyboxCaption">
<div class="shashinFancyboxCaptionClose"><a href="javascript:;" onclick="jQuery.fancybox.close();"><img src="http://www.toppa.com/wp-content/plugins/shashin/Public/Display/fancybox/closelabel.gif" /></a></div>
<div class="shashinLinkToOriginalPhoto"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampSanDiego#5724100608236973634">View at Picasa</a></div>
<strong>@tweetsfromchris takes on Nicky Rotten&#039;s 2.5 lbs. burger challenge (with a gigantic side of fries)<span class="shashinCaptionExif">25-Mar-2012 21:34, Canon Canon PowerShot SD1400 IS, 2.8, 5.0mm, 0.017 sec, ISO 800</span></strong><!-- comment for image counter --></div>
</div>

</div></td>
</tr>
</table>
</div>

<p>This was my second WordCamp, and my first not as a speaker. When <a href="http://www.toppa.com/2011/clean-code-for-wordpress-at-wordcamp-philly/" title="Clean code for WordPress at WordCamp Philly">I presented at WordCamp Philly</a> last Fall, I was blown away by the positive energy of everyone there (which is one of the things that led to <a href="http://webdevstudios.com/team/michael-toppa/">my current position with WebDevStudios</a>). <a href="http://2012.sandiego.wordcamp.org/">WordCamp San Diego</a> was just as much fun, and there was plenty to learn too. Coming from Philly means it&#8217;s a long way to go for a WordCamp, but WebDevStudios was a sponsor, so several of us from the company went. Since we are a virtual company, I also met a couple of my co-workers in person for the first time &#8211; <a href="http://www.twitter.com/tweetsfromchris">@tweetsfromchris</a> and <a href="https://twitter.com/TobyBenjamin">@TobyBenjamin</a></p>
<p>WordCamps typically have 2 simultaneous tracks &#8211; one for developers and one for users. They also provide an opportunity for these two parts of the WordPress community to come together, so online businesses can find good developers, and for developers to find rewarding projects.</p>
<p>I stayed in the developer track for all but one presentation, and they were all excellent. WebDevStudio&#8217;s own <a href="http://www.twitter.com/williamsba">@williamsba</a> presented on how to configure and use WordPress multi-site. Even in the more introductory-level sessions, where I thought I&#8217;d already know everything, I actually learned a lot. The vibrancy of the WordPress community, and the dedication of the speakers, who appear without compensation, continues to impress me.</p>
<p>The &#8220;spring training&#8221; theme was really well done, from the matching baseball jerseys for the speakers, to <a href="http://2012.sandiego.wordcamp.org/">the web site</a>, stickers, and, of course, the cake. @norcross gave his whole talk as Ron Burgundy (yes, in his boxers), which was hilarous enough to justify him being the only speaker out of uniform.</p>
<p>The after party was a blast. It was my first experience where it was socially acceptable to both drink and have endless conversations about code and WordPress. I have found my people <img src='http://www.toppa.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  and it was great to meet <a href="http://www.twitter.com/housechick">@housechick</a>, <a href="http://www.twitter.com/jaredatch">@jaredatch</a>, <a href="http://www.twitter.com/matthewjcnpilon">@matthewjcnpilon</a> and <a href="http://www.twitter.com/i3inary">@i3inary</a>.</p>
<p>The 2nd day of the conference was a developers&#8217; day, held at the very sleek <a href="http://co-merge.com/">Co-Merge workplace</a>. This was similiar to the developers&#8217; day at WordCamp Philly, with some short presentations, but the focus was more on people making connections and helping each other code.</p>
<p>The one challenge for me was sleep. WebDevStudios rented an apartment since several of us were there. The first night there was a party happening in an adjacent unit, and the thumping bass didn&#8217;t stop coming through the floor until about 3AM. The next night <a href="http://www.cbs8.com/story/17249464/police-investigate-fatal-shooting-in-the-gaslamp">someone was shot and killed right outside our apartment</a>, and the last night one of my co-workers had to get up and leave really early for his flight. But I&#8217;m not so old (yet) that I can&#8217;t handle it (actually, having kids has conditioned me to handle sleep deprivation better than I did years ago).</p>
<p>My next WordCamp is in just a few weeks. I&#8217;ll be speaking at WordCamp Nashville, on <a href="http://2012.nashville.wordcamp.org/session/dependency-injection-for-wordpress-plugin-development/">how to apply dependency injection techniques to WordPress plugin development</a>.</p>
<p>I took pictures throughout the day &#8211; here&#8217;s the complete album:</p>
<div class="shashinPhotoGroups"><table class="shashinThumbnailsTable" id="shashinGroup_4" style="margin-left: auto; margin-right: auto;">
<caption></caption>
<tr>
<td><div class="shashinThumbnailDiv" id="shashinThumbnailDiv_12" style="display: table; max-width: 156px;"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampSanDiego" id="shashinAlbumThumbLink_img_72" class="shashinAlbumThumbLink"><img src="https://lh3.googleusercontent.com/-d4XwyaX4Mm8/T23tRg2IFoE/AAAAAAAAJKs/P0w4HztZMOk/s150/2012WordCampSanDiego.jpg" alt="2012 - WordCamp San Diego" title="2012 - WordCamp San Diego" style="max-width: 150px; padding: 1px;" class="shashinThumbnailImage" id="shashinThumbnailImage_12" /></a><span class="shashinAlbumCaptionTitle"><a href="https://picasaweb.google.com/100291303544453276374/2012WordCampSanDiego" id="shashinAlbumThumbLink_caption_72" class="shashinAlbumThumbLink">2012 - WordCamp San Diego</a></span><span class="shashinAlbumCaptionDate">Mar 23, 2012</span><span class="shashinAlbumCaptionLocation">Photos: 14</span>
</div></td>
</tr>
</table>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/wordcamp-san-diego/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plugin support post 4, and what’s coming for Shashin</title>
		<link>http://www.toppa.com/2012/plugin-support-post-4-and-whats-coming-for-shashin/</link>
		<comments>http://www.toppa.com/2012/plugin-support-post-4-and-whats-coming-for-shashin/#comments</comments>
		<pubDate>Sat, 24 Mar 2012 22:48:13 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Support]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=3917</guid>
		<description><![CDATA[There are almost 100 comments total on my last two Shashin related posts, so its time for a new support thread. Please use the comments section of this post for questions about Shashin or any of my other plugins. Here&#8217;s what&#8217;s coming up for Shashin: Simplifying upgrades: I plan to integrate Plugin Dependencies so Toppa [...]]]></description>
			<content:encoded><![CDATA[<p>There are almost 100 comments total on my last two Shashin related posts, so its time for a new support thread. Please use the comments section of this post for questions about Shashin or any of my other plugins.</p>
<p>Here&#8217;s what&#8217;s coming up for Shashin:</p>
<ul>
<li>Simplifying upgrades: I plan to integrate <a href="http://wordpress.org/extend/plugins/plugin-dependencies/">Plugin Dependencies</a> so Toppa Plugin Libraries will be automatically installed or updated when you install/update Shashin. And I&#8217;ve already removed the need to deactivate and reactivate Shashin when auto-updating (this is actually <a href="http://core.trac.wordpress.org/ticket/17833#comment:5">an interesting issue with WordPress&#8217; automatic plugin upgrades</a>).</li>
<li>A Highslide add-on for Shashin: I plan to make this available outside the wordpress.org repository, but in a way that will stay within the good graces of the GPL.</li>
<li>Social media buttons: my #1 request is for Facebook like buttons, Google Plus, etc</li>
<li>Provide the ability to make a Shashin photo the featured image of a post (maybe): I need to confirm this is possible</li>
</ul>
<p>&#8230;And possibly making Shashin more <a href="http://en.wikipedia.org/wiki/Responsive_Web_Design">responsive design</a> friendly (if it doesn&#8217;t make it in the next version, it will in the following one).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/plugin-support-post-4-and-whats-coming-for-shashin/feed/</wfw:commentRss>
		<slash:comments>89</slash:comments>
		</item>
		<item>
		<title>Shashin 3.1.3, and why all the recent changes</title>
		<link>http://www.toppa.com/2012/shashin-3-1-3-and-why-all-the-recent-changes/</link>
		<comments>http://www.toppa.com/2012/shashin-3-1-3-and-why-all-the-recent-changes/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 15:06:52 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[WordPress plugins]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=3901</guid>
		<description><![CDATA[Update: Shashin 3.1.4 takes care of the activation issue &#8211; you no longer need to click the &#8220;deactivate&#8221; and &#8220;activate&#8221; links in the plugin panel when upgrading. I&#8217;ve uploaded Shashin 3.1.3 to wordpress.org. Several people have complained of error messages that start with &#8220;Invalid data property __get for&#8230;&#8221; when updating to 3.1.x. These messages relate [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> Shashin 3.1.4 takes care of the activation issue &#8211; you no longer need to click the &#8220;deactivate&#8221; and &#8220;activate&#8221; links in the plugin panel when upgrading.</p>
<hr />
<p>I&#8217;ve uploaded <a href="http://wordpress.org/extend/plugins/shashin">Shashin 3.1.3 to wordpress.org</a>. Several people have complained of error messages that start with &#8220;Invalid data property __get for&#8230;&#8221; when updating to 3.1.x. These messages relate to new settings that are added during activation, but they were not actually being added. This puzzled me because the WordPress automatic updater shows a message saying it is deactivating and reactivating the plugin when it upgrades. The problem is, it&#8217;s not actually doing it &#8211; here is the WordPress defect ticket: <a href="http://core.trac.wordpress.org/ticket/17833">Auto update plugins does not activate activation hooks</a>.</p>
<p>Apparently this behavior is an intentional choice. I&#8217;ve submitted a patch that corrects the wording (so at the very least, plugin authors like me don&#8217;t misunderstand what it means). In the future I will make sure to work around this, but with 3.1.3, you will need to deactivate and reactivate Shashin one more time yourself from the plugin menu after upgrading. </p>
<p>My apologies if you&#8217;ve had other difficulties with the recent Fancybox changes. I&#8217;ve included Highslide with Shashin since 2008, and I gradually added features and made improvements as I learned the capabilities and quirks of Highslide. Due to a licensing conflict I was alerted to, I had to rip Highslide out of Shashin immediately and switch to a different viewer with a GPL compatible license (Shashin was temporarily removed from the wordpress.org plugin repository because of this). Some of the other great viewers, like PrettyPhoto, are also not GPL compatible, so I went with Fancybox. I had only a short period of time to add it, and I&#8217;ve spent many hours recently working through some of the intricate issues involved with making it work with Shashin.</p>
<p>Version 3.1.3 makes the following improvements:</p>
<ul>
<li>Added automatic timed slideshows</li>
<li>Improved captions for photos shown after clicking an album thumbnail (this also fixes the bug with then &#8220;return&#8221; link for albums)</li>
<li>In FancyBox caption, show exif data if requested, even if there is no photo caption text</li>
<li>Bug fix: show correct FancyBox captions on photos shown after clicking an album thumbnail, on pages that have a mix of photo groups and album thumbnails</li>
<li>Possible bug fix: add a 30 second buffer to the time check when synchronizing albums, in case there is a delay between synchronizing the album&#8217;s meta data and the album&#8217;s photos (this is to try addressing occasional reports of photo ID numbers changing, which means they are being deleted and re-added).</li>
</ul>
<p>Also, its worth highlighting that in 3.1.2 I resolved the problem of the Fancybox slideshow navigation controls overlaying controls for videos. The video controls are accessible now. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/shashin-3-1-3-and-why-all-the-recent-changes/feed/</wfw:commentRss>
		<slash:comments>46</slash:comments>
		</item>
		<item>
		<title>Plugin support post 3</title>
		<link>http://www.toppa.com/2012/plugin-support-post-3/</link>
		<comments>http://www.toppa.com/2012/plugin-support-post-3/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 13:10:37 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Support]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=3888</guid>
		<description><![CDATA[Update 3/9: I&#8217;ve uploaded version 3.1.2 of Shashin, which makes two improvements: the code for handling the FancyBox captions is now cleaner (no HTML embedded in the title attribute) and the navigation controls in slideshows now don&#8217;t overlay controls for videos (so you can use the video controls now). Update 3/7: I&#8217;ve uploaded new versions [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update 3/9:</strong> I&#8217;ve uploaded version 3.1.2 of Shashin, which makes two improvements: the code for handling the FancyBox captions is now cleaner (no HTML embedded in the title attribute) and the navigation controls in slideshows now don&#8217;t overlay controls for videos (so you can use the video controls now).</p>
<p><strong>Update 3/7:</strong> I&#8217;ve uploaded new versions of Shashin and Toppa Plugin Libraries that corrects the installation bug in Shashin 3.1 that was affecting new installations. You will need to update both plugins.</p>
<hr />
<p>You can use the comments below for any support questions about my plugins. Please read <a href="http://www.toppa.com/2012/shashin-3-1-with-fancybox/" title="Shashin 3.1, with Fancybox">the Shashin 3.1 release announcement post</a>, as it explains the replacement of Highslide with Shahsin, and explains some of the limitations of Fancybox.</p>
<p>A couple other things to note when installing Shashin 3.1:</p>
<ul>
<li>You&#8217;ll also need to latest update of <a href="http://wordpress.org/extend/plugins/toppa-plugin-libraries-for-wordpress/">Toppa Plugin Libraries for WordPress</a></li>
<li>On my own site I got an error on the Shashin settings page after doing the automatic upgrade. Deactivating and reactivating Shashin will solve this problem. Deactivation and reactivation should happen as part of the automatic upgrade, but it didn&#8217;t seem to happen for me (the automatic upgrade process is handled through WordPress itself, so I can&#8217;t modify it).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/plugin-support-post-3/feed/</wfw:commentRss>
		<slash:comments>68</slash:comments>
		</item>
		<item>
		<title>Shashin 3.1, with Fancybox</title>
		<link>http://www.toppa.com/2012/shashin-3-1-with-fancybox/</link>
		<comments>http://www.toppa.com/2012/shashin-3-1-with-fancybox/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 12:55:32 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[WordPress plugins]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=3876</guid>
		<description><![CDATA[Update 3/9: I&#8217;ve uploaded version 3.1.2 of Shashin, which makes two improvements: the code for handling the FancyBox captions is now cleaner (no HTML embedded in the title attribute) and the navigation controls in slideshows now don&#8217;t overlay controls for videos (so you can use the video controls now). Update 3/7: I&#8217;ve uploaded new versions [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update 3/9:</strong> I&#8217;ve uploaded version 3.1.2 of Shashin, which makes two improvements: the code for handling the FancyBox captions is now cleaner (no HTML embedded in the title attribute) and the navigation controls in slideshows now don&#8217;t overlay controls for videos (so you can use the video controls now).</p>
<p><strong>Update 3/7:</strong> I&#8217;ve uploaded new versions of Shashin and Toppa Plugin Libraries that corrects the installation bug in Shashin 3.1 that was affecting new installations. You will need to update both plugins.</p>
<hr />
<p><a href="http://wordpress.org/extend/plugins/shashin">Shashin 3.1</a> is now available for download at wordpress.org. I&#8217;ve added support for WordPress multi-site installation, and improved error reporting when there are problems with album synchronization. But the biggest change is that, due to a licensing conflict, I have removed Highslide and replaced it with <a href="http://fancybox.net/">Fancybox 1.3.4</a>. Highslide uses a Creative Commons license, which is not compatible with the <a href="http://www.gnu.org/licenses/gpl-2.0.html">GPL</a>, and all code in the wordpress.org plugin repository must be GPL compatible.</p>
<p>While the visual style of Fancybox is different from Highslide, the functionality is mostly the same. However, there are a few limitations with Fancybox:</p>
<ul>
<li>Loading Twitpic photos may be slow. Twitpic URLs for photos redirect to cloudfront.net, and Fancybox is unable to resolve redirects. I added my own code that resolves the redirect before passing the link to Fancybox, but this means two calls for loading every photo.</li>
<li>Fancybox requires <a href="http://groups.google.com/group/fancybox/browse_thread/thread/8c50659a082f9272">this approach to the code when mixing videos in groups with photos</a>, and <a href="http://groups.google.com/group/fancybox/browse_thread/thread/22843096d7870691">this approach if you want to dynamically set the dimensions of a video</a>, and the two are not compatible. I decided including videos in groups was more important, so video dimensions are fixed for all videos (you can set your desired video size in the Shashin settings page).</li>
<li><del datetime="2012-03-11T15:08:37+00:00">A related issue is that the Fancybox overlay for navigating videos in groups overlaps the video controls, which means you can&#8217;t pause, adjust volume, etc with videos if they are in groups. This is simply an unfortunate limitation of Fancybox.</del> As of Shashin 3.1.2 this is no longer a problem.</li>
</ul>
<p>So why Fancybox? Despite these issues it is still one of the more robust viewers available, and it is GPL compliant. Highslide, PrettyPhoto, and even the just released version of Fancybox (2.0) all use GPL incompatible Creative Commons licenses.</p>
<p>Making the transition to Fancybox was a huge effort. I&#8217;ll be willing to entertain including another GPL compatible viewer if you can recommend one that doesn&#8217;t have these technical limitations, but not right now <img src='http://www.toppa.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/shashin-3-1-with-fancybox/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
		<item>
		<title>Plugin support post 2, and where is Shashin?</title>
		<link>http://www.toppa.com/2012/plugin-support-post-2-and-where-is-shashin/</link>
		<comments>http://www.toppa.com/2012/plugin-support-post-2-and-where-is-shashin/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 02:55:05 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Support]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=3846</guid>
		<description><![CDATA[It&#8217;s time for a new plugin support post &#8211; please use the comments section for any questions about my plugins. Also, to my surprise, Shashin was removed from the wordpress.org plugin repository yesterday. The reason is a perfectly good one &#8211; Shashin comes with Highslide, which has a license that is not compatible with the [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s time for a new plugin support post &#8211; please use the comments section for any questions about my plugins.</p>
<p>Also, to my surprise, Shashin was removed from the wordpress.org plugin repository yesterday. The reason is a perfectly good one &#8211; Shashin comes with Highslide, which has a license that is not compatible with the <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>, and all code in the wordpress.org plugin repository must be GPL compatible. I&#8217;ve packaged Highslide with Shashin for 4 years, and this issue had simply not crossed my mind.</p>
<p>I will replace Highslide with <a href="http://fancybox.net/">Fancybox</a>, which is GPL compatible, and then I can make Shashin available again at wordpress.org. I would like to continue supporting Highslide, as neither Fancybox nor most other viewers have the same range of features. But since I can no longer include Highslide with Shashin at wordpress.org, I need to determine if there is an alternate solution that will not cause concern for the wordpress.org folks, and will not make life complicated for Shashin users.</p>
<p>My next week or so is very busy but I will work on transitioning to Fancybox as quickly as I can. <del datetime="2012-03-03T02:08:38+00:00">In the meantime, <a href="https://github.com/toppa/Shashin/">Shashin is still available at GitHub</a>. Make sure to read the appropriately named README_GITHUB_IMPORTANT file that contains specific installation instructions when downloading from GitHub.</del> </p>
<p><strong>Update</strong>:<del datetime="2012-03-06T04:05:44+00:00"> by request I now have Shashin available for download here as a zip file, with no special steps needed for installation (except that you still need to have Toppa Plugin Libraries installed first). <a href='http://www.toppa.com/wp-content/uploads/shashin_3.0.9.zip'>Download Shashin 3.0.9</del></a>.</p>
<p><strong>Update II:</strong> The GitHub version no longer works with Highslide &#8211; I&#8217;m phasing in Fancybox. <del datetime="2012-03-06T04:05:44+00:00">Use the link above for Shashin 3.0.9, which is the current stable release (with Highslide).</del></p>
<p><strong>Update III:</strong> I&#8217;ve submitted a revised version of Shashin for review to wordpress.org. I have therefore removed the old version of Shashin from my site, as it does not meet wordpress.org&#8217;s license requirements.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/plugin-support-post-2-and-where-is-shashin/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Toppa Plugin Libraries 1.2 simplifies making plugins compatible with WordPress multi-site</title>
		<link>http://www.toppa.com/2012/toppa-plugin-libraries-1-2-simplifies-making-plugins-compatible-with-wordpress-multi-site/</link>
		<comments>http://www.toppa.com/2012/toppa-plugin-libraries-1-2-simplifies-making-plugins-compatible-with-wordpress-multi-site/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 02:26:03 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[WordPress plugins]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=3834</guid>
		<description><![CDATA[In my new position at WebDevStudios, I&#8217;m wading deep into the world of WordPress multi-site functionality. In version 1.2 of Toppa Plugin Libraries, there&#8217;s a new method which makes it easy for plugin authors to make their plugins WordPress multi-site compatible. It is based on the excellent code Shibashake made available for doing this. I [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://webdevstudios.com/team/michael-toppa/">my new position at WebDevStudios</a>, I&#8217;m wading deep into the world of WordPress multi-site functionality. In <a href="http://wordpress.org/extend/plugins/toppa-plugin-libraries-for-wordpress/">version 1.2 of Toppa Plugin Libraries</a>, there&#8217;s a new method which makes it easy for plugin authors to make their plugins WordPress multi-site compatible. It is based on <a href="http://shibashake.com/wordpress-theme/write-a-plugin-for-wordpress-multi-site">the excellent code Shibashake made available for doing this</a>. I took that articles&#8217;s 3 separate (but almost identical) functions for activating, deactivating, and uninstalling a plugin, and abstracted them into a single method. Why? Because &#8220;<a href="http://www.informit.com/articles/article.aspx?p=1313447">duplicate code is the root of all evil in software design</a>.&#8221;</p>
<p>As a plugin author, all you need to do is write your activation or deactivation function as you normally would, and then:</p>
<pre>$functionsFacade = new ToppaFunctionsFacadeWp();
$functionsFacade->callFunctionForNetworkSites('yourActivationFunction');</pre>
<p>This will call your activation (or deactivation) function for every site in the network, including the parent site. </p>
<p>Or in an object context, after passing the FunctionsFacade to your object:</p>
<pre>$this->functionsFacade->callFunctionForNetworkSites(array($this, 'yourActivationMethod'));</pre>
<p>For uninstalling, you need to pass a 2nd argument, which indicates that the &#8220;networkwide&#8221; flag should not be checked (for some reason, WordPress multisite uses this flag for activating and deactivating plugins, but not for uninstalling).</p>
<pre>$this->functionsFacade->callFunctionForNetworkSites(array($this, 'yourUninstallMethod'), false);</pre>
<p>I&#8217;m going to release the next version of Shashin soon, which uses this method to make it multi-site compatible, so I wanted to get this Toppa Plugin Libaries release out first. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/toppa-plugin-libraries-1-2-simplifies-making-plugins-compatible-with-wordpress-multi-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress plugins: does size matter? Applying the Single Responsiblity Principle</title>
		<link>http://www.toppa.com/2012/wordpress-plugins-does-size-matter-applying-the-single-responsiblity-principle/</link>
		<comments>http://www.toppa.com/2012/wordpress-plugins-does-size-matter-applying-the-single-responsiblity-principle/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 18:45:08 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[WordPress plugins]]></category>

		<guid isPermaLink="false">http://www.toppa.com/?p=3783</guid>
		<description><![CDATA[In the last episode of WP Late Night, there was a brief debate about plugin size. Ryan expressed a preference for smaller plugins with tightly focused functionality. It&#8217;s natural to worry that, as the number of lines of code increases, so does the likelihood of bugs, and performance slowdowns. This concern makes sense if you&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://wpcandy.com/broadcasts/wp-late-night/002-the-usual-suspects?wt=4">the last episode of WP Late Night</a>, there was a brief debate about plugin size. Ryan expressed a preference for smaller plugins with tightly focused functionality. It&#8217;s natural to worry that, as the number of lines of code increases, so does the likelihood of bugs, and performance slowdowns. </p>
<p>This concern makes sense if you&#8217;re assuming plugin code is not very well organized and not very well tested. Unfortunately, that&#8217;s a safe assumption with many plugins. As plugin authors, we should have higher standards for our work. There are two things that come to mind:</p>
<ol>
<li>Optimizing the readability and maintainability of our code. This means writing &#8220;clean code&#8221; (the subject of <a href="http://www.toppa.com/2011/clean-code-for-wordpress-at-wordcamp-philly/" title="Clean code for WordPress at WordCamp Philly">my Philly WordCamp presentation</a>). It reduces the likelihood of bugs, and makes our plugins easier to enhance and adapt to changing needs. It also makes it more likely that others will contribute to the project, or learn from it, and start writing better plugins themselves. These are some one of the main attractions for participating in the WordPress open source community, right?</li>
<li>Optimizing for performance: one aspect of the &#8220;clean code&#8221; philosophy is to not prematurely optimize code for performance, especially when our guesses about how to do that are often wrong.<br />
<blockquote><p>
More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason &#8211; including blind stupidity.</p>
<p>Wulf, W. A. &#8220;A Case Against the GOTO,&#8221; Proceedings of the 25th National ACM Conference, August 1972, pp. 791-97.
</p></blockquote>
</li>
</ol>
<p>The rule of thumb is to optimize for readability and maintainability first. If a performance problem comes up, it is likely stemming from a small area of the code, and you can focus your performance optimization efforts there. As <a href="http://www.velocityreviews.com/forums/t282966-clean-code-vs-efficiency.html">one person put it</a>: &#8220;There is far, far more money wasted on fixing and customizing and maintaining hard-to-read code than there is lost on inefficient code.&#8221;</p>
<p>There are many techniques involved with writing clean code. A foundational one is following the  <a href="http://en.wikipedia.org/wiki/Single_responsibility_principle">Single Responsibility Principle (SRP)</a>. Bob Martin has a very succinct definition of the SRP: &#8220;a class should have only one reason to change.&#8221; In his book <em>Agile Software Development</em>, he explains further:</p>
<blockquote><p>If a class has more than one responsibility [more than one reason to change], then the responsibilities become coupled.  Changes to one responsibility may impair or inhibit the ability of the class to meet the others. This kind of coupling leads to fragile designs that break in unexpected ways when changed.</p></blockquote>
<p>If you follow the SRP, then it doesn&#8217;t matter how big your plugin is. What matters is how you use it.</p>
<p>The trick, of course, is figuring out what it means to have a single responsibility. WordPress itself helps you figure this out. When you call a WordPress hook or filter, it&#8217;s likely that you will want to create a class that implements what you intend to do for that hook or filter call. For example, if you call <code>add_shortcode</code>, then you should have it instantiate a class that implements your shortcode. If that class needs to change, it will be only because your needs for the shortcode have changed. The shortcode logic is not tightly coupled to other parts of the code. Removing that coupling is an important step towards also removing that sinking feeling of fear when you start monkeying with the innards of some gigantic application.</p>
<p>Not every hook and filter call deserves its own class. Some are merely stepping stones to others and do not need their own class. For example, if you call <code>admin_menu</code> simply for the sake of calling <code>add_options_page</code>, one class is enough. Others may need more than one class to support them. But for getting your feet wet, having a class per hook or filter is a good place to start.</p>
<p>My <a href="http://www.toppa.com/shashin-wordpress-plugin/" title="Shashin - a WordPress plugin for displaying photos and videos from Picasa, YouTube, and Twitpic">Shashin plugin</a> has a total of 55 classes and subclasses (you can see the code on <a href="https://github.com/toppa/Shashin">GitHub</a>). How can you find what you&#8217;re looking for in all those classes? It sounds horribly bloated for a WordPress plugin, right? It&#8217;s actually the opposite. </p>
<p>A coding habit that goes hand in hand with the SRP is the use of <a href="http://www.chrisshayan.com/my/index.php?option=com_content&#038;view=article&#038;id=262:meaningful-names&#038;catid=48:clean-code&#038;Itemid=65">meaningful names</a>. Each class in Shashin serves a specific purpose, and has a name that tells me what it does. If I need to make a change to the settings, I go to the Settings class; if I need to make a change to how album synchronizing is done with Picasa, I go to the PicasaSynchronizer class, etc. The majority of the classes are less than a couple hundred lines. With small, well-named classes and methods with clear purposes, when there is a bug, it&#8217;s usually not hard to find. And if I need to change something, I can make that change in one place with a greatly reduced fear of breaking something unrelated.</p>
<p>By using a class autoloader, such as <a href="http://www.toppa.com/toppa-plugin-libraries-for-wordpress/" title="Toppa Plugin Libraries for WordPress">mine</a>, you can also save yourself the trouble of figuring out where to put <code>require_once</code> statements, for loading your class files. With an autoloader, a class file is loaded only when &#8220;new&#8221; is called (so if you are worrying about performance with so many objects, they are only loaded when they are actually needed). How you keep track of object dependencies, and when and how you instantiate your classes, are what I&#8217;ll write about in my next post, which will cover using an injection container.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toppa.com/2012/wordpress-plugins-does-size-matter-applying-the-single-responsiblity-principle/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

