<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Mike&#039;s Dev Blog</title>
	<atom:link href="http://mikebluestein.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikebluestein.wordpress.com</link>
	<description>You know you have worked at home too long when your 4 year old says, &#34;picking up toys is an implementation detail.&#34;</description>
	<lastBuildDate>Fri, 18 Jan 2013 23:14:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mikebluestein.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Mike&#039;s Dev Blog</title>
		<link>http://mikebluestein.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mikebluestein.wordpress.com/osd.xml" title="Mike&#039;s Dev Blog" />
	<atom:link rel='hub' href='http://mikebluestein.wordpress.com/?pushpress=hub'/>
		<item>
		<title>UISplitViewController and UICollectionView</title>
		<link>http://mikebluestein.wordpress.com/2012/10/21/uisplitviewcontroller-and-uicollectionview/</link>
		<comments>http://mikebluestein.wordpress.com/2012/10/21/uisplitviewcontroller-and-uicollectionview/#comments</comments>
		<pubDate>Sun, 21 Oct 2012 17:06:55 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[monotouch]]></category>
		<category><![CDATA[MonoTouch]]></category>
		<category><![CDATA[UICollectionView]]></category>
		<category><![CDATA[UISplitViewController]]></category>

		<guid isPermaLink="false">http://mikebluestein.wordpress.com/?p=504</guid>
		<description><![CDATA[Continuing from the previous post that used a UICollectionView to display a grid of images from Bing, the following example adds a UICollectionView to a UISplitViewController. When the row is selected, a new search is issued and the resulting images are updated in the UICollectionView. To connect the selection in the UISplitViewController&#8217;s master controller, which [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=504&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Continuing from the previous post that used a UICollectionView to display a grid of images from Bing, the following example adds a UICollectionView to a UISplitViewController.</p>
<p><a href="http://mikebluestein.files.wordpress.com/2012/10/animals.png"><img class="alignnone  wp-image-519" title="animals" alt="" src="http://mikebluestein.files.wordpress.com/2012/10/animals.png?w=574&#038;h=455" height="455" width="574" /></a></p>
<p>When the row is selected, a new search is issued and the resulting images are updated in the UICollectionView. To connect the selection in the UISplitViewController&#8217;s master controller, which is an MT.D DialogViewController in this case, to the UICollectionViewController contained in the UISplitViewController&#8217;s detail controller, an event is raised when a row is selected:</p>
<p><pre class="brush: csharp;">
public AnimalsController () : base (null)
{
    Root = new RootElement (&quot;Animals&quot;) {
        new Section () {
            from animal in animals
            select (Element) new StringElement(animal, () =&gt; {
            if(AnimalSelected != null)
                AnimalSelected(this, new AnimalSelectedEventArgs{Animal = animal});
            })
         }};
 }
</pre></p>
<p>Then the UISplitViewController&#8217;s implementation handles this event to communicate to the UICollectionViewController:</p>
<p><pre class="brush: csharp;">
animalImageController = new BingImageGridViewController (layout);

animalsController.AnimalSelected += (sender, e) =&gt; {
    animalImageController.LoadImages (e.Animal);
};
</pre></p>
<p>In the LoadImages method, the UICollectionViewController calls Bing for the selected item and uploads the UICollectionView when the data is returned by calling ReloadData:</p>
<p><pre class="brush: csharp;">

public void LoadImages (string search)
{
    UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;

    bing = new Bing ((results) =&gt; {
        InvokeOnMainThread (delegate {
            imageUrls = results;
            CollectionView.ReloadData ();
            UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
        });
    });

    bing.ImageSearch (search);
}
</pre></p>
<p>The sample is available at <a href="https://github.com/mikebluestein/BingImageGrid/tree/master/BingImageGridSplit" target="_blank">https://github.com/mikebluestein/BingImageGrid/tree/master/BingImageGridSplit</a></p>
<p>Note: you&#8217;ll need a Bing API key, which you can get at <a href="http://datamarket.azure.com" target="_blank">http://datamarket.azure.com</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/504/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/504/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=504&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2012/10/21/uisplitviewcontroller-and-uicollectionview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>

		<media:content url="http://mikebluestein.files.wordpress.com/2012/10/animals.png?w=1024" medium="image">
			<media:title type="html">animals</media:title>
		</media:content>
	</item>
		<item>
		<title>Using Azure Marketplace&#8217;s Bing Image Search on iOS with UICollectionView in C#</title>
		<link>http://mikebluestein.wordpress.com/2012/10/07/using-azure-marketplaces-bing-image-search-on-ios-with-uicollectionview-in-c/</link>
		<comments>http://mikebluestein.wordpress.com/2012/10/07/using-azure-marketplaces-bing-image-search-on-ios-with-uicollectionview-in-c/#comments</comments>
		<pubDate>Sun, 07 Oct 2012 15:36:09 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[monotouch]]></category>
		<category><![CDATA[Xamarin]]></category>

		<guid isPermaLink="false">http://mikebluestein.wordpress.com/?p=487</guid>
		<description><![CDATA[The Windows Azure Marketplace now includes the Bing web service. Using the image search feature, combined with a UICollectionView, can be used to display images in a grid on iOS like this: Consuming the Bing service with Xamarin on iOS can be accomplished just like anywhere else C# is available.  The UI here consists of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=487&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The Windows Azure Marketplace now includes the Bing web service. Using the image search feature, combined with a UICollectionView, can be used to display images in a grid on iOS like this:</p>
<p><img class="alignnone size-medium wp-image-488" title="ImageGrid" src="http://mikebluestein.files.wordpress.com/2012/10/imagegrid.png?w=184&#038;h=300" alt="" width="184" height="300" /></p>
<p>Consuming the Bing service with Xamarin on iOS can be accomplished just like anywhere else C# is available.  The UI here consists of a UICollectionView, using a UICollectionViewFlowLayout to achieve the grid display. Programming against a UICollectionView is very similar to using a UITableView, the big difference being that UICollectionView works with a layout class to achieve any layout you desire. iOS provides a very flexible UICollectionViewFlowLayout class that can be used  when a line-based layout is needed. Also, you can subclass UICollectionViewLayout directly as well to implement layouts that aren&#8217;t line-based.</p>
<p>You can get the code for this example here: <a href="https://github.com/mikebluestein/BingImageGrid" target="_blank">https://github.com/mikebluestein/BingImageGrid</a></p>
<p>To run the exmaple, you need to sign up for an API key from the <a href="https://datamarket.azure.com" target="_blank">Windows Azure Marketplace</a>.</p>
<p>For more information on using Collection Views, see this article in Xamarin&#8217;s Developer Center:</p>
<p><a href="http://docs.xamarin.com/ios/tutorials/Introduction_to_CollectionViews" target="_blank">http://docs.xamarin.com/ios/tutorials/Introduction_to_CollectionViews</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/487/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/487/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=487&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2012/10/07/using-azure-marketplaces-bing-image-search-on-ios-with-uicollectionview-in-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>

		<media:content url="http://mikebluestein.files.wordpress.com/2012/10/imagegrid.png?w=184" medium="image">
			<media:title type="html">ImageGrid</media:title>
		</media:content>
	</item>
		<item>
		<title>NY State User Group Tour</title>
		<link>http://mikebluestein.wordpress.com/2012/06/26/ny-state-user-group-tour/</link>
		<comments>http://mikebluestein.wordpress.com/2012/06/26/ny-state-user-group-tour/#comments</comments>
		<pubDate>Tue, 26 Jun 2012 12:45:13 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Xamarin]]></category>

		<guid isPermaLink="false">https://mikebluestein.wordpress.com/?p=440</guid>
		<description><![CDATA[I&#8217;ll be in NY state this week speaking on Xamarin&#8217;s MonoTouch and Mono for Android. 6/26 &#8211; Buffalo http://www.meetup.com/MSDevWNY/events/67359302/ 6/27 &#8211; Rochester http://vduny.org/FutureMeetings.aspx 6/28 &#8211; Syracuse http://www.cnydevelopers.net/<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=440&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ll be in NY state this week speaking on Xamarin&#8217;s MonoTouch and Mono for Android.</p>
<p>6/26 &#8211; Buffalo <a href="http://www.meetup.com/MSDevWNY/events/67359302/" target="_blank">http://www.meetup.com/MSDevWNY/events/67359302/</a></p>
<p>6/27 &#8211; Rochester <a href="http://vduny.org/FutureMeetings.aspx" target="_blank">http://vduny.org/FutureMeetings.aspx</a></p>
<p>6/28 &#8211; Syracuse <a href="http://www.cnydevelopers.net/" target="_blank">http://www.cnydevelopers.net/</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/440/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/440/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=440&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2012/06/26/ny-state-user-group-tour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>
	</item>
		<item>
		<title>Xamarin.Mobile API Code Camp Session</title>
		<link>http://mikebluestein.wordpress.com/2012/03/17/xamarin-mobile-api-code-camp-session/</link>
		<comments>http://mikebluestein.wordpress.com/2012/03/17/xamarin-mobile-api-code-camp-session/#comments</comments>
		<pubDate>Sat, 17 Mar 2012 15:09:22 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[Mono for Android]]></category>
		<category><![CDATA[monotouch]]></category>
		<category><![CDATA[WindowsPhone7]]></category>
		<category><![CDATA[Xamarin]]></category>

		<guid isPermaLink="false">http://mikebluestein.wordpress.com/?p=414</guid>
		<description><![CDATA[I&#8217;ll be giving a presentation on using the Xamarin.Mobile API for cross platform, native mobile development with MonoTouch, Mono for Android and Windows Phone at New England Code Camp 17 on March 31.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=414&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://mikebluestein.files.wordpress.com/2012/03/cc17logo.png"><img class="alignnone size-full wp-image-417" title="Code Camp 17" src="http://mikebluestein.files.wordpress.com/2012/03/cc17logo.png?w=720" alt=""   /></a></p>
<p>I&#8217;ll be giving a presentation on using the <a href="http://xamarin.com/mobileapi" target="_blank">Xamarin.Mobile</a> API for cross platform, native mobile development with MonoTouch, Mono for Android and Windows Phone at <a href="http://necodecamp17.eventbrite.com/" target="_blank">New England Code Camp 17</a> on March 31.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/414/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/414/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=414&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2012/03/17/xamarin-mobile-api-code-camp-session/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>

		<media:content url="http://mikebluestein.files.wordpress.com/2012/03/cc17logo.png" medium="image">
			<media:title type="html">Code Camp 17</media:title>
		</media:content>
	</item>
		<item>
		<title>Voices That Matter: iOS Conference discount code</title>
		<link>http://mikebluestein.wordpress.com/2011/08/12/voices-that-matter-ios-conference-discount-code/</link>
		<comments>http://mikebluestein.wordpress.com/2011/08/12/voices-that-matter-ios-conference-discount-code/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 01:50:41 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[monotouch]]></category>

		<guid isPermaLink="false">http://mikebluestein.wordpress.com/?p=372</guid>
		<description><![CDATA[Update: 10 people registered with my speaker code, for which I received $500 that I am donating to the Jimmy Fund. Thanks to everyone who attended and to Pearson for hosting the conference. I&#8217;m honored to be speaking at the Voices That Matter: iOS Developers Conference in Boston November 12-13. The conference organizers sent me [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=372&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em><strong>Update: 10 people registered with my speaker code, for which I received $500 that I am donating to the Jimmy Fund. Thanks to everyone who attended and to Pearson for hosting the conference.</strong></em></p>
<p>I&#8217;m honored to be speaking at the <a title="Voices That Matter iOS Developers Conference" href="http://ios2011.voicesthatmatter.com/" target="_blank">Voices That Matter: iOS Developers Conference</a> in Boston November 12-13. The conference organizers sent me a speaker&#8217;s priority code to pass along, which is good for $150 discount off the price of the core conference. The discount even applies in addition to the early bird pricing. My code is BSTSPK6. Also, I&#8217;ll receive $50 for every person that registers with my code, the proceeds of which I will be donating to the <a title="Jimmy Fund" href="http://www.jimmyfund.org/" target="_blank">Jimmy Fund</a>. I hope to see you at the conference in November.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/372/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/372/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=372&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2011/08/12/voices-that-matter-ios-conference-discount-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>
	</item>
		<item>
		<title>Learning MonoTouch: Common iOS Classes</title>
		<link>http://mikebluestein.wordpress.com/2011/07/17/informit-learning-monotouch-a-hands-on-guide-to-building-ios-applications-with-c-and-net-common-ios-classes-user-interface-views-and-controls/</link>
		<comments>http://mikebluestein.wordpress.com/2011/07/17/informit-learning-monotouch-a-hands-on-guide-to-building-ios-applications-with-c-and-net-common-ios-classes-user-interface-views-and-controls/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 00:56:40 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[monotouch]]></category>

		<guid isPermaLink="false">http://mikebluestein.wordpress.com/?p=358</guid>
		<description><![CDATA[An excerpt from my MonoTouch book (it&#8217;s from the rough cuts version) is available as an article at InformIT: Learning MonoTouch: A Hands-On Guide to Building iOS Applications with C# and .NET &#8211; Common iOS Classes.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=358&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>An excerpt from my MonoTouch book (it&#8217;s from the rough cuts version) is available as an article at <a href="http://www.informit.com/articles/article.aspx?p=1723412">InformIT: Learning MonoTouch: A Hands-On Guide to Building iOS Applications with C# and .NET &#8211; Common iOS Classes</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/358/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/358/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=358&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2011/07/17/informit-learning-monotouch-a-hands-on-guide-to-building-ios-applications-with-c-and-net-common-ios-classes-user-interface-views-and-controls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>
	</item>
		<item>
		<title>Thoughts on MonoTouch</title>
		<link>http://mikebluestein.wordpress.com/2011/05/24/thoughts-on-monotouch/</link>
		<comments>http://mikebluestein.wordpress.com/2011/05/24/thoughts-on-monotouch/#comments</comments>
		<pubDate>Tue, 24 May 2011 12:53:21 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[monotouch]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mikebluestein.wordpress.com/?p=341</guid>
		<description><![CDATA[As you likely have heard, Attachmate let go of the entire Mono team recently, including all the outstanding people that created and supported MonoTouch. This came as a shock to many, including me, for a variety if reasons: • There are many existing customers of MonoTouch. • The community around MonoTouch loves the product. • [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=341&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>    As you likely have heard, Attachmate let go of the entire Mono team recently, including all the outstanding people that created and supported MonoTouch. This came as a shock to many, including me, for a variety if reasons:</p>
<p>•	There are many existing customers of MonoTouch.<br />
•	The community around MonoTouch loves the product.<br />
•	There have been some nice success stories recently of apps built with MonoTouch.<br />
•	The team that developed MonoTouch and Mono for Android are top-shelf developers.<br />
•	Several new books were near release for MonoTouch and Mono for Android.</p>
<p>    I got involved with MonoTouch at the beginning of the first beta. I had already been doing some iPhone work with Apple’s tool chain and was (and still am) quite happy with it, but since I have always liked the C# language and .NET, I thought this would be an interesting technology to try out. Initially I was mainly intrigued with the fact that they could even create such a product from outside of Apple. As I learned more about it, I was nothing but impressed with how nicely they blended the C# language with CocoaTouch. All the knowledge I had from the Objective-C side was totally applicable, but I suddenly could bring other technologies to the table, such as being able to take advantage of nice C# language features like Linq, the ability to reuse non-UI code and additional library support via Mono’s implementation of the .NET framework class libraries.</p>
<p>    As the technology builds on Apple’s stack, I didn’t have to trade away platform capabilities in any way. At the same time, I found a vibrant community of like-minded developers both from the Mono team as well as outside. I was having such a good time with the technology and the community that I decided to take some time to write about it a little bit on this blog, which eventually led to a book project with Addison-Wesley. I couldn’t have been more excited.</p>
<p>    Then, in April of last year, Apple introduced licensing changes that effectively prohibited the use of technologies such as MonoTouch. Although in practice nothing ever got rejected for being built with MonoTouch, the looming threat of this resulted in my book project being placed on hold. I kept doing MonoTouch on my own, because I truly enjoy using it and participating in the community. However, business interests that I was doing MonoTouch development for, quite reasonably, could not proceed with such ambiguity, resulting in my moving some work over to Objective-C.</p>
<p>    As you may imagine, I was pretty disappointed by all this, but then late in the summer, Apple changed the licensing again and everything was set back in motion. Excited as ever, I turned my attention back to reworking the parts of the book I had already written for the changes that came out over the time I was in limbo, and proceeded working on the remainder of the book. This work took me up to the end of last year, with the technical review following earlier this year. The book has entered the production process with my publisher and I’m proud of the result and grateful for all the fine people that helped me along the way. My publisher was planning a summer release, which would put the book out around the time of the upcoming Monospace conference. Things were looking great.</p>
<p>    Then all these great Mono developers got laid off. First and foremost, I feel awful for any of the great people on the Mono team. They do spectacular work and provide amazing passion with everything they do. Such a team should have a better fate. As it turns out they just may.</p>
<p>    Never one to give up so easily, not in the face of licensing issues and not even now with the entire team being dismissed, Miguel and his team are spinning up a new company, Xamarin, to continue what they started.  He announced, among other things, that they would be bringing a new iOS product to the market that will be compatible with MonoTouch. This leads me to the current plan for my book.</p>
<p><strong>UPDATE: My publisher has decided to send the book to print. It will be in available in bookstores by late July.</strong></p>
<p>    <del datetime="2011-06-15T21:32:42+00:00">After discussing all the options with my publisher we have decided to go forward with the book in electronic form for now. We will be holding back from doing a print copy until more details emerge regarding Xamarin’s new offering. If we were to go ahead and print the book now it would be, well, printed. By sticking with an eBook we can make the information available to the many existing people using MonoTouch and still potentially offer an updated version for the new product in the future.</del> I’m personally looking forward with great excitement to see what Miguel and his team create next.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/341/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/341/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=341&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2011/05/24/thoughts-on-monotouch/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>
	</item>
		<item>
		<title>MonoTouch book on Safari Books Online</title>
		<link>http://mikebluestein.wordpress.com/2011/05/21/monotouch-book-on-safari-books-online/</link>
		<comments>http://mikebluestein.wordpress.com/2011/05/21/monotouch-book-on-safari-books-online/#comments</comments>
		<pubDate>Sat, 21 May 2011 21:56:14 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mikebluestein.wordpress.com/?p=327</guid>
		<description><![CDATA[The rough cuts version of my book is available now on Safari Books Online. I have a separate article about the book and my thoughts on the current situation with MonoTouch coming out soon. Preview&#160;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=327&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The rough cuts version of my book is available now on Safari Books Online. I have a separate article about the book and my thoughts on the current situation with MonoTouch coming out soon.</p>
<p><a href="http://my.safaribooksonline.com/9780131388291/firstsection?portal=informit&amp;uicode=&amp;__hideTop=true&amp;__readerfullscreen=1&amp;__readerleftmenu=1&amp;flashzoom=0&amp;cid=shareWidgetUse" title="undefined" style="text-align:center;display:block;width:76px;height:98px;" target="newwin">Preview<br /><img src="http://my.safaribooksonline.com/images/9780131388291/9780131388291_xs.jpg" border="0" width="76" height="98" /></a></br>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/327/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=327&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2011/05/21/monotouch-book-on-safari-books-online/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>

		<media:content url="http://my.safaribooksonline.com/images/9780131388291/9780131388291_xs.jpg" medium="image" />
	</item>
		<item>
		<title>Bonjour with MonoTouch</title>
		<link>http://mikebluestein.wordpress.com/2010/11/23/bonjour-with-monotouch/</link>
		<comments>http://mikebluestein.wordpress.com/2010/11/23/bonjour-with-monotouch/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 23:03:57 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[monotouch]]></category>

		<guid isPermaLink="false">http://mikebluestein.wordpress.com/?p=270</guid>
		<description><![CDATA[Someone was asking about Bonjour examples in MonoTouch in irc yesterday so I threw this quick and dirty sample together. If you&#8217;re not familiar, Bonjour is Apple&#8217;s zeroconf networking implementation. It is open-source and even includes a version for Windows. Bonjour allows you to publish and discover services without needing pre-configured information. It&#8217;s all about [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=270&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Someone was asking about Bonjour examples in MonoTouch in irc yesterday so I threw this quick and dirty sample together. If you&#8217;re not familiar, Bonjour is Apple&#8217;s zeroconf networking implementation. It is open-source and even includes a version for Windows. Bonjour allows you to publish and discover services without needing pre-configured information. It&#8217;s all about the discovery of services. The actual implementation of the server and client networking code is up to you (I haven&#8217;t included that in this example however).</p>
<p>To use Bonjour with MonoTouch, you deal primarily with two classes, NSNetService and NSNetServiceBrowser. NSNetService is used to publish and resolve services. NSNetServiceBrowser, as the name suggests, allows you to browse for services. Once you have discovered a service via a browse, you resolve it in a separate operation, after which you can implement whatever networking code you like to communicate with the service.</p>
<p>In this simple example I publish a service when the application finishes launching and browse from a view controller that includes a table and a text view. The table displays each service as it is discovered. Selecting the row in the table associated with a particular service calls resolve on the service. Adding, removing and resolution of services is logged in the text view. </p>
<p>Here&#8217;s the relevant code that does the service publication:</p>
<p><pre class="brush: csharp;">
        NetDelegate _netDel;
        NSNetService _ns;

        void InitNetService ()
        {
            _ns = new NSNetService (&quot;&quot;, &quot;_testservice._tcp&quot;, UIDevice.CurrentDevice.Name, 9999);
            _netDel = new NetDelegate ();
            _ns.Delegate = _netDel;
            _ns.Publish ();
        }

        class NetDelegate : NSNetServiceDelegate
        {
            public override void Published (NSNetService sender)
            {
                Console.WriteLine (&quot;published {0}&quot;, sender.Name);
            }

            public override void PublishFailure (NSNetService sender, NSDictionary errors)
            {
                Console.WriteLine (&quot;publish failure {0},&quot; + sender.Name);
            }
        }
</pre></p>
<p>The browsing is done by calling the NSNetServiceBrowser&#8217;s SearchForServices method. I keep a list of NSNetServices as they are discovered in the FoundService callback and register for the AddressResolved event. Similarly, I remove them from the list via ServiceRemoved. Each service is registered to an AddressResolved handler as it is found. The resolve call, something you would do when you want perform actual networking calls with the service, is made here in the UITableViewSource&#8217;s RowSelected implementation. When the callback to ServiceAddressResolved happens, you&#8217;ll have an NSNetService complete with information that you can use to perform networking as you see fit.</p>
<p>Here&#8217;s the code for the controller with the service browsing and resolution:</p>
<p><pre class="brush: csharp;">
    public partial class TestViewController : UIViewController
    {
        List _serviceList;
        NSNetServiceBrowser _netBrowser;
        ServicesTableSource _source;

        // constructors omitted for brevity …

        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();
            
            InitNetBrowser ();
        }

        internal void InitNetBrowser ()
        {
            _serviceList = new List ();
            _netBrowser = new NSNetServiceBrowser ();
            
            _source = new ServicesTableSource (this);
            servicesTable.Source = _source;
            
            _netBrowser.SearchForServices (&quot;_testservice._tcp&quot;, &quot;&quot;);
            
            _netBrowser.FoundService += delegate(object sender, NSNetServiceEventArgs e) {
                
                servicesTextView.Text += &quot;\r\n&quot; + e.Service.Name + &quot; added&quot;;
                
                _serviceList.Add (e.Service);                
                e.Service.AddressResolved += ServiceAddressResolved;
                
                //NOTE: could also insert and remove rows in a more fine grained fashion here as well
                servicesTable.ReloadData ();
            };
            
            _netBrowser.ServiceRemoved += delegate(object sender, NSNetServiceEventArgs e) {
                
                servicesTextView.Text += &quot;\r\n&quot; + e.Service.Name + &quot; removed&quot;;
                
                var nsService = _serviceList.Single (s =&gt; s.Name.Equals (e.Service.Name));
                _serviceList.Remove (nsService);
                servicesTable.ReloadData ();
            };
        }

        void ServiceAddressResolved (object sender, EventArgs e)
        {
            NSNetService ns = sender as NSNetService;
            
            if(ns != null)
                servicesTextView.Text += &quot;\r\n&quot; + ns.Name + &quot; resolved&quot;;
            
            // at this point you could use any networking code you like to communicate with the service
        }

        class ServicesTableSource : UITableViewSource
        {
            TestViewController _controller;
            const string SERVICE_CELL_ID = &quot;servicecell&quot;;

            public ServicesTableSource (TestViewController controller)
            {
                _controller = controller;
            }

            public override int RowsInSection (UITableView tableview, int section)
            {
                return _controller._serviceList.Count;
            }

            public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
            {
                var serviceCell = tableView.DequeueReusableCell (SERVICE_CELL_ID) ?? new UITableViewCell (UITableViewCellStyle.Value1, SERVICE_CELL_ID);
                
                NSNetService ns = _controller._serviceList[indexPath.Row];
                
                serviceCell.TextLabel.Text = ns.Name;
                
                return serviceCell;
            }
            
            public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
            {
               NSNetService ns = _controller._serviceList[indexPath.Row];
               ns.Resolve(60);
            }
        }
    }
</pre></p>
<p>Here&#8217;s the app running on the device while another instance is running in the simulator:</p>
<p><a href="http://mikebluestein.files.wordpress.com/2010/11/bonjour.png"><img src="http://mikebluestein.files.wordpress.com/2010/11/bonjour.png?w=208&#038;h=300" alt="" title="bonjour" width="208" height="300" class="aligncenter size-medium wp-image-275" /></a></p>
<p>You can download the sample project <a href="https://docs.google.com/leaf?id=0B4a6jzbuiwbeNmQwZDliOGUtOTE0Yy00NDU3LWFiNzMtZDc0NTMwMDI5OTQz&amp;hl=en">here</a>. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=270&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2010/11/23/bonjour-with-monotouch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>

		<media:content url="http://mikebluestein.files.wordpress.com/2010/11/bonjour.png?w=208" medium="image">
			<media:title type="html">bonjour</media:title>
		</media:content>
	</item>
		<item>
		<title>Congress 411 is Live in Windows Phone 7 Marketplace</title>
		<link>http://mikebluestein.wordpress.com/2010/10/19/congress-411-is-live-in-windows-phone-7-marketplace/</link>
		<comments>http://mikebluestein.wordpress.com/2010/10/19/congress-411-is-live-in-windows-phone-7-marketplace/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 01:09:32 +0000</pubDate>
		<dc:creator>mikebluestein</dc:creator>
				<category><![CDATA[WindowsPhone7]]></category>

		<guid isPermaLink="false">http://mikebluestein.wordpress.com/?p=262</guid>
		<description><![CDATA[<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=262&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://social.zune.net/redirect?type=phoneApp&amp;id=f044a64d-3dd7-df11-a844-00237de2db9e"><img src="http://mikebluestein.files.wordpress.com/2010/10/panorama.png?w=300&#038;h=240" alt="" title="Congress 411" width="300" height="240" class="aligncenter size-medium wp-image-263" /></a><a href="http://social.zune.net/redirect?type=phoneApp&amp;id=f044a64d-3dd7-df11-a844-00237de2db9e"><img src="http://mikebluestein.files.wordpress.com/2010/10/wp7_english_320x50_green.png?w=300&#038;h=46" alt="" title="Congress 411" width="300" height="46" class="aligncenter size-medium wp-image-264" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mikebluestein.wordpress.com/262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mikebluestein.wordpress.com/262/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mikebluestein.wordpress.com&#038;blog=1173741&#038;post=262&#038;subd=mikebluestein&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mikebluestein.wordpress.com/2010/10/19/congress-411-is-live-in-windows-phone-7-marketplace/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/3243e131abbbcd72f1e909d56439b53e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mikebluestein</media:title>
		</media:content>

		<media:content url="http://mikebluestein.files.wordpress.com/2010/10/panorama.png?w=300" medium="image">
			<media:title type="html">Congress 411</media:title>
		</media:content>

		<media:content url="http://mikebluestein.files.wordpress.com/2010/10/wp7_english_320x50_green.png?w=300" medium="image">
			<media:title type="html">Congress 411</media:title>
		</media:content>
	</item>
	</channel>
</rss>
