<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>IIrrelevant - Mac OS X</title>
    <link>http://www.milkcarton.com/blog/</link>
    <description>Irrelevant musings about software development</description>
    <language>en-us</language>
    <copyright>Dan Morphis</copyright>
    <lastBuildDate>Wed, 28 Jul 2010 06:53:29 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>blog@milkcarton.com</managingEditor>
    <webMaster>blog@milkcarton.com</webMaster>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=50ca5ba0-f5bf-48d8-a3ad-501b0521db2f</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,50ca5ba0-f5bf-48d8-a3ad-501b0521db2f.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,50ca5ba0-f5bf-48d8-a3ad-501b0521db2f.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=50ca5ba0-f5bf-48d8-a3ad-501b0521db2f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Tonight, I did a presentation on "Developing a .NET application onMac OS X using MonoMac"
at the <a href="http://akdotnet.ning.com/">Alaska .NET Users Group</a> meeting. I
hope everyone enjoyed my presentation and learned something from it! I'd appreciate
any feedback anyone has to offer!
</p>
        <p>
        </p>
        <p>
The download link is at the end of this blog post. If you download the source, you
will probably want to review all the <a href="http://www.milkcarton.com/blog/CategoryView,category,MonoMac.aspx">posts
I've written on MonoMac</a> as well.
</p>
        <p>
          <img src="http://www.milkcarton.com/blog/content/binary/MovieTimes_screenshot.png" />
        </p>
        <h3>Source Code
</h3>
        <p>
          <a href="http://www.milkcarton.com/blog/content/binary/MovieTimes2.zip">
            <img src="http://www.milkcarton.com/blog/content/binary/Zip.png" />
            <br />
MovieTimes source code</a>
        </p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=50ca5ba0-f5bf-48d8-a3ad-501b0521db2f" />
      </body>
      <title>Source code for the MonoMac presentation</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,50ca5ba0-f5bf-48d8-a3ad-501b0521db2f.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/28/Source+Code+For+The+MonoMac+Presentation.aspx</link>
      <pubDate>Wed, 28 Jul 2010 06:53:29 GMT</pubDate>
      <description>&lt;p&gt;
Tonight, I did a presentation on "Developing a .NET application onMac OS X using MonoMac"
at the &lt;a href="http://akdotnet.ning.com/"&gt;Alaska .NET Users Group&lt;/a&gt; meeting. I
hope everyone enjoyed my presentation and learned something from it! I'd appreciate
any feedback anyone has to offer!&lt;p&gt;
&lt;p&gt;
The download link is at the end of this blog post. If you download the source, you
will probably want to review all the &lt;a href="http://www.milkcarton.com/blog/CategoryView,category,MonoMac.aspx"&gt;posts
I've written on MonoMac&lt;/a&gt; as well.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.milkcarton.com/blog/content/binary/MovieTimes_screenshot.png" /&gt;
&lt;/p&gt;
&lt;h3&gt;Source Code
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://www.milkcarton.com/blog/content/binary/MovieTimes2.zip"&gt;&lt;img src="http://www.milkcarton.com/blog/content/binary/Zip.png"&gt;
&lt;br /&gt;
MovieTimes source code&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=50ca5ba0-f5bf-48d8-a3ad-501b0521db2f" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,50ca5ba0-f5bf-48d8-a3ad-501b0521db2f.aspx</comments>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=a2958363-9978-4231-8889-11f1d92dd33c</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,a2958363-9978-4231-8889-11f1d92dd33c.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,a2958363-9978-4231-8889-11f1d92dd33c.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a2958363-9978-4231-8889-11f1d92dd33c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I use and enjoy my Microsoft 4000 keyboard very much. Its the best keyboard I found
since the original Microsoft Natural Keyboard. Key placement makes sense, is comfortable
to type on, I love the media keys (but honestly, why no love for next and previous
track?).
</p>
        <p>
The one thing I don't like however, is how Mac OSX handles PC keyboards. Why does
home/end move me to the beginning and end of my document? Everybody knows they are
supposed to move the cursor to the beginning and end of the current line. Thankfully,
we have <a href="http://doublecommand.sourceforge.net/">Double Command</a> to help
fix the issues! If only it could make the page up/down keys function like on the PC...
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=a2958363-9978-4231-8889-11f1d92dd33c" />
      </body>
      <title>Make a PC keyboard on a Mac function like it should</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,a2958363-9978-4231-8889-11f1d92dd33c.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/09/Make+A+PC+Keyboard+On+A+Mac+Function+Like+It+Should.aspx</link>
      <pubDate>Fri, 09 Jul 2010 02:54:57 GMT</pubDate>
      <description>&lt;p&gt;
I use and enjoy my Microsoft 4000 keyboard very much. Its the best keyboard I found
since the original Microsoft Natural Keyboard. Key placement makes sense, is comfortable
to type on, I love the media keys (but honestly, why no love for next and previous
track?).
&lt;/p&gt;
&lt;p&gt;
The one thing I don't like however, is how Mac OSX handles PC keyboards. Why does
home/end move me to the beginning and end of my document? Everybody knows they are
supposed to move the cursor to the beginning and end of the current line. Thankfully,
we have &lt;a href="http://doublecommand.sourceforge.net/"&gt;Double Command&lt;/a&gt; to help
fix the issues! If only it could make the page up/down keys function like on the PC...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=a2958363-9978-4231-8889-11f1d92dd33c" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,a2958363-9978-4231-8889-11f1d92dd33c.aspx</comments>
      <category>Mac OS X</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=4cab2fa5-e0f3-476a-8668-3f3f857c01ea</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,4cab2fa5-e0f3-476a-8668-3f3f857c01ea.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,4cab2fa5-e0f3-476a-8668-3f3f857c01ea.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4cab2fa5-e0f3-476a-8668-3f3f857c01ea</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After I finished creating a sample application to test out the capabilities of Mono
on the Mac, I figured I should create the same application in Objective-C to have
an accurate understanding of what the pain points are in each technology.
</p>
        <p>
The first big pain point I've come across is creating the bindings to call a web service
in Objective-C. Apple provides a utility called WSMakeStubs. The utility makes creating
the stubs easy and painless, or so it would seem. Out of the box the code doesn't
compile.
</p>
        <p>
For reasons unknown to me, WSMakeStubs utility makes duplicate method names. The issues
people have with WSMakeStubs are so bad, almost every article I've read, everyone
advocates using NSUrlConnection and NSXMLParser and rolling your own service calls.
</p>
        <p>
Its 2010 Apple, how about coming up with a viable solution to making web service calls?
Even PHP has a good web services proxy generator.
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=4cab2fa5-e0f3-476a-8668-3f3f857c01ea" />
      </body>
      <title>Whats up with the state of web services in objective-c?</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,4cab2fa5-e0f3-476a-8668-3f3f857c01ea.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/07/Whats+Up+With+The+State+Of+Web+Services+In+Objectivec.aspx</link>
      <pubDate>Wed, 07 Jul 2010 07:15:56 GMT</pubDate>
      <description>&lt;p&gt;
After I finished creating a sample application to test out the capabilities of Mono
on the Mac, I figured I should create the same application in Objective-C to have
an accurate understanding of what the pain points are in each technology.
&lt;/p&gt;
&lt;p&gt;
The first big pain point I've come across is creating the bindings to call a web service
in Objective-C. Apple provides a utility called WSMakeStubs. The utility makes creating
the stubs easy and painless, or so it would seem. Out of the box the code doesn't
compile.
&lt;/p&gt;
&lt;p&gt;
For reasons unknown to me, WSMakeStubs utility makes duplicate method names. The issues
people have with WSMakeStubs are so bad, almost every article I've read, everyone
advocates using NSUrlConnection and NSXMLParser and rolling your own service calls.
&lt;/p&gt;
&lt;p&gt;
Its 2010 Apple, how about coming up with a viable solution to making web service calls?
Even PHP has a good web services proxy generator.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=4cab2fa5-e0f3-476a-8668-3f3f857c01ea" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,4cab2fa5-e0f3-476a-8668-3f3f857c01ea.aspx</comments>
      <category>Mac OS X</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=334639e4-7e22-4df6-8239-e7d5a4433b65</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,334639e4-7e22-4df6-8239-e7d5a4433b65.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,334639e4-7e22-4df6-8239-e7d5a4433b65.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=334639e4-7e22-4df6-8239-e7d5a4433b65</wfw:commentRss>
      <title>Databinding to an NSTableView with a MonoMac app</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,334639e4-7e22-4df6-8239-e7d5a4433b65.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx</link>
      <pubDate>Mon, 05 Jul 2010 16:00:00 GMT</pubDate>
      <description>&lt;p&gt;
I’m working on my presentation for the &lt;a href="http://akdotnet.ning.com/"&gt;Alaska
.NET Users Group&lt;/a&gt;. My goal is to build an app that consumes a web service, and
displays the data. After getting the web service piece going, the next step was to
display that data in a NSTableView.
&lt;/p&gt;
&lt;p&gt;
I battled for hours and hours trying to figure out how to create a NSTableViewDataSource,
and it turns out I was making things way to complicated. I did some searching on the
web, but couldn’t really find anything except a &lt;a href="http://lists.ximian.com/pipermail/mono-osx/2010-June/002965.html"&gt;post&lt;/a&gt; by &lt;a href="http://twitter.com/moshakis"&gt;John
Moshakis&lt;/a&gt; on the Mono-osx mailing list which gave me some hope that someone had
figured it out.
&lt;/p&gt;
&lt;p&gt;
I emailed John, and he was gracious enough to send me some source code to work from.
It turns out, I what I had wasn’t far off the mark, I just needed a few pointers.
&lt;/p&gt;
&lt;h3&gt;The DataSource Code
&lt;/h3&gt;
&lt;div style="font-family: consolas,; font-size: small" class="csharp" #ffffff;?="#ffffff;?" background-color:="background-color:" monospace;="monospace;" courier,="courier," New?,="New?," Courier="Courier"&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;System&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;System.Collections&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;MonoMac.Foundation&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;MonoMac.AppKit&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;MovieTimes.BusinessLogic&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;System.Collections.Generic&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;[&lt;/span&gt;Register&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;quot;MyItemDataSource&amp;quot;&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;class&lt;/span&gt; MyItemDataSource &lt;span style="color: #008000"&gt;:&lt;/span&gt; NSTableViewDataSource
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; List&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;MyItem&lt;span style="color: #008000"&gt;&amp;gt;&lt;/span&gt; MyItems &lt;span style="color: #008000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;static&lt;/span&gt; MyItemDataSource &lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;[&lt;/span&gt;Export&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;quot;numberOfRowsInTableView:&amp;quot;&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;int&lt;/span&gt; numberOfRowsInTableView &lt;span style="color: #008000"&gt;(&lt;/span&gt;NSTableView
aTableView&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;if&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItems &lt;span style="color: #008000"&gt;==&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;null&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;return&lt;/span&gt; &lt;span style="color: #ff0000"&gt;0&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;return&lt;/span&gt; MyItems&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Count&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;[&lt;/span&gt;Export&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;quot;tableView:objectValueForTableColumn:row:&amp;quot;&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; NSObject
objectValueForTableColumn &lt;span style="color: #008000"&gt;(&lt;/span&gt;NSTableView aTableView,
NSTableColumn aTableColumn, &lt;span style="color: #6666cc; font-weight: bold"&gt;int&lt;/span&gt; rowIndex&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;return&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span style="color: #008000"&gt;new&lt;/span&gt;&lt;/a&gt; NSString&lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItems&lt;span style="color: #008000"&gt;[&lt;/span&gt;rowIndex&lt;span style="color: #008000"&gt;]&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Name&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;void&lt;/span&gt; Items&lt;span style="color: #008000"&gt;(&lt;/span&gt;List&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;MyItem&lt;span style="color: #008000"&gt;&amp;gt;&lt;/span&gt; items&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
MyItems &lt;span style="color: #008000"&gt;=&lt;/span&gt; items&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;class&lt;/span&gt; MyItemDataSourceDelegate &lt;span style="color: #008000"&gt;:&lt;/span&gt; NSTableViewDelegate &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;event&lt;/span&gt; EventHandler&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;MyItemChangedEventArgs&lt;span style="color: #008000"&gt;&amp;gt;&lt;/span&gt; MyItemChanged&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; MyItemDataSourceDelegate &lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;:&lt;/span&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;base&lt;/span&gt;&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&amp;#160; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;override&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;void&lt;/span&gt; SelectionDidChange&lt;span style="color: #008000"&gt;(&lt;/span&gt;NSNotification
notification&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
var table &lt;span style="color: #008000"&gt;=&lt;/span&gt; notification&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #6666cc; font-weight: bold"&gt;Object&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;as&lt;/span&gt; NSTableView&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
var ds &lt;span style="color: #008000"&gt;=&lt;/span&gt; table&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;DataSource&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;as&lt;/span&gt; MyItemDataSource&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
var rowNum &lt;span style="color: #008000"&gt;=&lt;/span&gt; table&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;SelectedRow&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;if&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;rowNum &lt;span style="color: #008000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #ff0000"&gt;0&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; rowNum &lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt; ds&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;MyItems&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Count&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
OnMyItemChanged&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span style="color: #008000"&gt;new&lt;/span&gt;&lt;/a&gt; MyItemChangedEventArgs&lt;span style="color: #008000"&gt;(&lt;/span&gt;ds&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;MyItems&lt;/span&gt;&lt;span style="color: #008000"&gt;[&lt;/span&gt;rowNum&lt;span style="color: #008000"&gt;]&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;protected&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;void&lt;/span&gt; OnMyItemChanged&lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItemChangedEventArgs
e&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;if&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItemChanged &lt;span style="color: #008000"&gt;!=&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;null&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
MyItemChanged&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;this&lt;/span&gt;,
e&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;class&lt;/span&gt; MyItemChangedEventArgs &lt;span style="color: #008000"&gt;:&lt;/span&gt; EventArgs &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; MyItem
MyItem &lt;span style="color: #008000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; MyItemChangedEventArgs&lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItem
i&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
MyItem &lt;span style="color: #008000"&gt;=&lt;/span&gt; i&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The code is kind of long, and I’ve removed all the normal guard code you would use
for the sake of brevity. But lets dissect the code. The first part, lines 8 – 31 is
the actual data source. It simply listens for a few messages (numberOfRowsInTableView
and objectValueForTableColumn) and allows items to be added to the data source (line
28). The next part, lines 33 – 54 fire off an event when the selected item has changed
in the NSTableView instance.
&lt;/p&gt;
&lt;h3&gt;The Window Code
&lt;/h3&gt;
&lt;div style="font-family: consolas,; font-size: small" class="csharp" #ffffff;?="#ffffff;?" background-color:="background-color:" monospace;="monospace;" courier,="courier," New?,="New?," Courier="Courier"&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;override&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;void&lt;/span&gt; WindowDidLoad &lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;base&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WindowDidLoad&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;
var myDel &lt;span style="color: #008000"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span style="color: #008000"&gt;new&lt;/span&gt;&lt;/a&gt; MyItemDataSourceDelegate&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;
myDel&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ItemChanged&lt;/span&gt; &lt;span style="color: #008000"&gt;+=&lt;/span&gt; ItemChanged&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;this&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;someTable&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #6666cc; font-weight: bold"&gt;Delegate&lt;/span&gt; &lt;span style="color: #008000"&gt;=&lt;/span&gt; myDel&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;this&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;someTable&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;DataSource&lt;/span&gt; &lt;span style="color: #008000"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span style="color: #008000"&gt;new&lt;/span&gt;&lt;/a&gt; MyItemDataSource&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;
In the window controller, paste the above code to have code run when you window loads.
For WinForms people, public override void WindowDidLoad is the equivilent of protected
override void OnLoad().
&lt;/p&gt;
&lt;p&gt;
So what does the window controller code do? First off, we create our delegate (note,
delegates in Cocoa are &lt;strong&gt;not&lt;/strong&gt; the same thing as in C#), and wire up
to the changed event, then we assign the newly created delegate and a data source
to our table.
&lt;/p&gt;
&lt;p&gt;
Any questions, thoughts or feedback? Hit me up in the comments, or &lt;a href="http://twitter.com/akcoder"&gt;follow
me on twitter&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=334639e4-7e22-4df6-8239-e7d5a4433b65" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,334639e4-7e22-4df6-8239-e7d5a4433b65.aspx</comments>
      <category>C#</category>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=e31f3ad6-343d-4a2e-98a4-0e38a159b4c5</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,e31f3ad6-343d-4a2e-98a4-0e38a159b4c5.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,e31f3ad6-343d-4a2e-98a4-0e38a159b4c5.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e31f3ad6-343d-4a2e-98a4-0e38a159b4c5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For the past week or so, I've been developing a couple of sample apps in <a href="http://www.mono-project.com/">Mono</a> with
Cocoa on my Mac. In that time, I've struggled quite a bit, and learned quite a bit.
One of the biggest things I've learned is things are much harder when you try and
mix-in paradimes for which things were not designed.
</p>
        <p>
Take for example <a href="http://www.cocoadev.com/index.pl?NSTableViewTutorial">NSTableView</a>.
Because <a href="http://en.wikipedia.org/wiki/Objective-C">Objective-C</a> is <a href="http://en.wikipedia.org/wiki/Duck_typing">duck
typed</a>, you set Delegate property of your table to <em>this</em> (<em>self</em> in
Objective-C) and implement the selectionDidChange method and you will get notified
when a row is selected.
</p>
        <p>
Because C# is not <a href="http://en.wikipedia.org/wiki/Duck_typing">duck typed</a>,
you have to <a href="http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx">write
a whole lot of ceremony code</a> to get notified when a row is selected. And figuring
out that ceremony was a huge battle. I wouldn't have won the war without the help
of <a href="http://twitter.com/moshakis"> John Moshakis</a>. Another thing thats not
supported is <em>Register</em>ing a generic type, or setting a generic .NET type the
property of a Cocoa widget.
</p>
        <p>
That means the ceremony code has to be duplicated every time, for every different
type of object. I actually tried to make a generic version of my <a href="http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx">Databinding
to an NSTableView</a> blog post, but I was thwarted by an "Invalid IL exception."
Hopefully this is just a defect, and not a limitation when dealing with Cocoa.
</p>
        <p>
I would file a defect on this issue with the mono project, but Novell requires you
to create an account to add a defect to their bug tracker. I can understand why they
want you to do this, but its not a very good way to encourage participation from the
community. But I guess it is a particularly good way to discourage drive-by defect
reports.
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=e31f3ad6-343d-4a2e-98a4-0e38a159b4c5" />
      </body>
      <title>Some thoughts on mono and Cocoa</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,e31f3ad6-343d-4a2e-98a4-0e38a159b4c5.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/05/Some+Thoughts+On+Mono+And+Cocoa.aspx</link>
      <pubDate>Mon, 05 Jul 2010 09:28:36 GMT</pubDate>
      <description>&lt;p&gt;
For the past week or so, I've been developing a couple of sample apps in &lt;a href="http://www.mono-project.com/"&gt;Mono&lt;/a&gt; with
Cocoa on my Mac. In that time, I've struggled quite a bit, and learned quite a bit.
One of the biggest things I've learned is things are much harder when you try and
mix-in paradimes for which things were not designed.
&lt;/p&gt;
&lt;p&gt;
Take for example &lt;a href="http://www.cocoadev.com/index.pl?NSTableViewTutorial"&gt;NSTableView&lt;/a&gt;.
Because &lt;a href="http://en.wikipedia.org/wiki/Objective-C"&gt;Objective-C&lt;/a&gt; is &lt;a href="http://en.wikipedia.org/wiki/Duck_typing"&gt;duck
typed&lt;/a&gt;, you set Delegate property of your table to &lt;em&gt;this&lt;/em&gt; (&lt;em&gt;self&lt;/em&gt; in
Objective-C) and implement the selectionDidChange method and you will get notified
when a row is selected.
&lt;/p&gt;
&lt;p&gt;
Because C# is not &lt;a href="http://en.wikipedia.org/wiki/Duck_typing"&gt;duck typed&lt;/a&gt;,
you have to &lt;a href="http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx"&gt;write
a whole lot of ceremony code&lt;/a&gt; to get notified when a row is selected. And figuring
out that ceremony was a huge battle. I wouldn't have won the war without the help
of &lt;a href="http://twitter.com/moshakis"&gt; John Moshakis&lt;/a&gt;. Another thing thats not
supported is &lt;em&gt;Register&lt;/em&gt;ing a generic type, or setting a generic .NET type the
property of a Cocoa widget.
&lt;/p&gt;
&lt;p&gt;
That means the ceremony code has to be duplicated every time, for every different
type of object. I actually tried to make a generic version of my &lt;a href="http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx"&gt;Databinding
to an NSTableView&lt;/a&gt; blog post, but I was thwarted by an "Invalid IL exception."
Hopefully this is just a defect, and not a limitation when dealing with Cocoa.
&lt;/p&gt;
&lt;p&gt;
I would file a defect on this issue with the mono project, but Novell requires you
to create an account to add a defect to their bug tracker. I can understand why they
want you to do this, but its not a very good way to encourage participation from the
community. But I guess it is a particularly good way to discourage drive-by defect
reports.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=e31f3ad6-343d-4a2e-98a4-0e38a159b4c5" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,e31f3ad6-343d-4a2e-98a4-0e38a159b4c5.aspx</comments>
      <category>.NET</category>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=b5f4237b-5013-42b6-801f-1497bf066699</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,b5f4237b-5013-42b6-801f-1497bf066699.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,b5f4237b-5013-42b6-801f-1497bf066699.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b5f4237b-5013-42b6-801f-1497bf066699</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It took me quite a bit of battling tonight, and some of it turned out to be an OS
caching issue but I managed to set the application icon for my test MonoMac app.
</p>
        <p>
Take your favorite image and convert it to a .icns file, I used the <a href="http://iconverticons.com/">http://iconverticons.com/</a> website.
Drop the output of that into the root of your MonoDevelop project. Next, right click
on the file and set the “Build Action” to content.
</p>
        <p>
Double click on “Info.plist” in the root of your project, add a new item and set its
key to “Icon File”, and value to “icon” or what ever you named your icon file. Note,
you do not need to put the .icns extension in the value field to make things work.
</p>
        <p>
          <a href="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/HowtosettheapplicationiconforyourMonoMac_150D3/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/HowtosettheapplicationiconforyourMonoMac_150D3/image_thumb.png" width="244" height="95" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=b5f4237b-5013-42b6-801f-1497bf066699" />
      </body>
      <title>Setting the application icon for your MonoMac app</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,b5f4237b-5013-42b6-801f-1497bf066699.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/04/Setting+The+Application+Icon+For+Your+MonoMac+App.aspx</link>
      <pubDate>Sun, 04 Jul 2010 16:00:00 GMT</pubDate>
      <description>&lt;p&gt;
It took me quite a bit of battling tonight, and some of it turned out to be an OS
caching issue but I managed to set the application icon for my test MonoMac app.
&lt;/p&gt;
&lt;p&gt;
Take your favorite image and convert it to a .icns file, I used the &lt;a href="http://iconverticons.com/"&gt;http://iconverticons.com/&lt;/a&gt; website.
Drop the output of that into the root of your MonoDevelop project. Next, right click
on the file and set the “Build Action” to content.
&lt;/p&gt;
&lt;p&gt;
Double click on “Info.plist” in the root of your project, add a new item and set its
key to “Icon File”, and value to “icon” or what ever you named your icon file. Note,
you do not need to put the .icns extension in the value field to make things work.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/HowtosettheapplicationiconforyourMonoMac_150D3/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/HowtosettheapplicationiconforyourMonoMac_150D3/image_thumb.png" width="244" height="95" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=b5f4237b-5013-42b6-801f-1497bf066699" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,b5f4237b-5013-42b6-801f-1497bf066699.aspx</comments>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=454b3531-266d-40ee-821d-f86b18758acc</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,454b3531-266d-40ee-821d-f86b18758acc.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,454b3531-266d-40ee-821d-f86b18758acc.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=454b3531-266d-40ee-821d-f86b18758acc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When Miguel De Icaza <a href="http://tirania.org/blog/archive/2010/Apr-19.html">first
announced MonoMac</a> back in April I was pretty excited! Its been my goal for the
past two years to write a half-decent, <strong>native</strong> looking, Mac OSX application
with .NET. I’ve looked at the various Cocoa binding strategies for Mono and always
found them lacking. Some like <a href="http://www.mono-project.com/CocoaSharp">CocoaSharp</a> haven’t
been updated in ages, and the WinForms stuff on Mac looked plain fugly. Like Windows
95 fugly.
</p>
        <p>
I found <a href="http://mjhutchinson.com/journal/2010/06/09/monomac_in_monodevelop">Michael
Hutchinson’s quick-start post</a> on writing a simple .NET app using MonoMac. Because
I had previous experience using Interface Builder, I was able to muddle my way through
building his simple app. But at the end, I wanted something more. “Hello World” is
great to show you the most basic syntax of a language, and maybe how to use the compiler,
but it honestly does nothing for me.
</p>
        <p>
So, I set out to write real, although somewhat contrived image viewing application.
Having an extensive background writing WinForms, ASP.NET and some WPF apps, the hardest
part for me was trying to figure out the Cocoa equivalent to things like PictureBox,
and FolderBrowserDialog. But Google as always was my friend.
</p>
        <p>
I’m not going to dive into how to write the app tonight, but I will post a screen
shot, and the <a href="http://www.milkcarton.com/blog/content/binary/ImageViewer.zip">ImageViewer
source!</a><br /><a href="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/MyfirstMonoMacapplicationanditsnotHelloW_144FC/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/MyfirstMonoMacapplicationanditsnotHelloW_144FC/image_thumb.png" width="458" height="439" /></a></p>
        <h4>Nits
</h4>
        <p>
Yes Cocoa is based on an MVC architecture, and yes I should have put some of the code
into a business class, but I didn’t. 
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=454b3531-266d-40ee-821d-f86b18758acc" />
      </body>
      <title>My first MonoMac application, and its not “Hello World”</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,454b3531-266d-40ee-821d-f86b18758acc.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/02/My+First+MonoMac+Application+And+Its+Not+Hello+World.aspx</link>
      <pubDate>Fri, 02 Jul 2010 15:22:00 GMT</pubDate>
      <description>&lt;p&gt;
When Miguel De Icaza &lt;a href="http://tirania.org/blog/archive/2010/Apr-19.html"&gt;first
announced MonoMac&lt;/a&gt; back in April I was pretty excited! Its been my goal for the
past two years to write a half-decent, &lt;strong&gt;native&lt;/strong&gt; looking, Mac OSX application
with .NET. I’ve looked at the various Cocoa binding strategies for Mono and always
found them lacking. Some like &lt;a href="http://www.mono-project.com/CocoaSharp"&gt;CocoaSharp&lt;/a&gt; haven’t
been updated in ages, and the WinForms stuff on Mac looked plain fugly. Like Windows
95 fugly.
&lt;/p&gt;
&lt;p&gt;
I found &lt;a href="http://mjhutchinson.com/journal/2010/06/09/monomac_in_monodevelop"&gt;Michael
Hutchinson’s quick-start post&lt;/a&gt; on writing a simple .NET app using MonoMac. Because
I had previous experience using Interface Builder, I was able to muddle my way through
building his simple app. But at the end, I wanted something more. “Hello World” is
great to show you the most basic syntax of a language, and maybe how to use the compiler,
but it honestly does nothing for me.
&lt;/p&gt;
&lt;p&gt;
So, I set out to write real, although somewhat contrived image viewing application.
Having an extensive background writing WinForms, ASP.NET and some WPF apps, the hardest
part for me was trying to figure out the Cocoa equivalent to things like PictureBox,
and FolderBrowserDialog. But Google as always was my friend.
&lt;/p&gt;
&lt;p&gt;
I’m not going to dive into how to write the app tonight, but I will post a screen
shot, and the &lt;a href="http://www.milkcarton.com/blog/content/binary/ImageViewer.zip"&gt;ImageViewer
source!&lt;/a&gt; 
&lt;br /&gt;
&lt;a href="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/MyfirstMonoMacapplicationanditsnotHelloW_144FC/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/MyfirstMonoMacapplicationanditsnotHelloW_144FC/image_thumb.png" width="458" height="439" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h4&gt;Nits
&lt;/h4&gt;
&lt;p&gt;
Yes Cocoa is based on an MVC architecture, and yes I should have put some of the code
into a business class, but I didn’t. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=454b3531-266d-40ee-821d-f86b18758acc" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,454b3531-266d-40ee-821d-f86b18758acc.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=876021fc-a22b-44d6-9468-0ecf3a59d0bc</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,876021fc-a22b-44d6-9468-0ecf3a59d0bc.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,876021fc-a22b-44d6-9468-0ecf3a59d0bc.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=876021fc-a22b-44d6-9468-0ecf3a59d0bc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When I started blogging 3+ years ago, I found Windows Live Writer and really loved
it. Since I’ve started blogging again, I’ve switched from blogging on my PC to my
Mac. Mainly because I’m trying to use and understand Mono on the Mac. Unfortunately
I’ve been unable to find any decent free blogging software on the Mac.
</p>
        <p>
Switching back and forth to my PC to write blog posts isn’t my idea of fun. So, I
decided to fire up my Windows VM, installed WLW, and put VMware into Unity mode. I
must say, I’m pretty impressed. I was able to write a blog post in WLW, take a screen
capture on my Mac, and paste it into WLW with absolutely no issues. Consider me sold
:)
</p>
        <p>
Now, if only I could figure out how to get the link that WLW opens after making a
post to open in Chrome on my Mac instead of Chrome on my VM :)
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=876021fc-a22b-44d6-9468-0ecf3a59d0bc" />
      </body>
      <title>OS X and Windows, better together?</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,876021fc-a22b-44d6-9468-0ecf3a59d0bc.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/01/OS+X+And+Windows+Better+Together.aspx</link>
      <pubDate>Thu, 01 Jul 2010 16:25:00 GMT</pubDate>
      <description>&lt;p&gt;
When I started blogging 3+ years ago, I found Windows Live Writer and really loved
it. Since I’ve started blogging again, I’ve switched from blogging on my PC to my
Mac. Mainly because I’m trying to use and understand Mono on the Mac. Unfortunately
I’ve been unable to find any decent free blogging software on the Mac.
&lt;/p&gt;
&lt;p&gt;
Switching back and forth to my PC to write blog posts isn’t my idea of fun. So, I
decided to fire up my Windows VM, installed WLW, and put VMware into Unity mode. I
must say, I’m pretty impressed. I was able to write a blog post in WLW, take a screen
capture on my Mac, and paste it into WLW with absolutely no issues. Consider me sold
:)
&lt;/p&gt;
&lt;p&gt;
Now, if only I could figure out how to get the link that WLW opens after making a
post to open in Chrome on my Mac instead of Chrome on my VM :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=876021fc-a22b-44d6-9468-0ecf3a59d0bc" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,876021fc-a22b-44d6-9468-0ecf3a59d0bc.aspx</comments>
      <category>Mac OS X</category>
      <category>VMware</category>
      <category>Windows</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=0d33fdd7-7525-475a-8f8c-a31bd43faadb</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,0d33fdd7-7525-475a-8f8c-a31bd43faadb.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,0d33fdd7-7525-475a-8f8c-a31bd43faadb.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0d33fdd7-7525-475a-8f8c-a31bd43faadb</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This morning I thought I would sit down with my Mac and play with doing .NET development
for OS X. I had previously tried, but always found things to be really frustrating.
All the Cocoa bindings were out of date, and the WinForms stuff looked terrible, etc.
But <a href="http://tirania.org/blog/archive/2010/Apr-19.html">Miguel wrote a blog
post</a> a while back indicating they are getting serious about developing a <b>native</b> solution
for OS X.
</p>
        <p>
I <a href="http://mjhutchinson.com/files/md/MonoDevelop-MonoMac-Experimental-2010-06-08.dmg">downloaded
the experimental version</a> of <a href="http://monodevelop.com/Download">MonoDevelop
2.4</a> from <a href="http://mjhutchinson.com/journal/2010/06/09/">Michael Hutchinson
blog</a> but quickly found out the experimental version of MonoDevelop (based on 2.4
RC 4) was out dated. So I upgraded to MonoDevelop 2.4, opened it, and noticed that
MonoMac wasn't an available add-in in the RTM version of MonoDevelop.
</p>
        <p>
So I did what any self respecting geek would do, I started digging around inside the
bundle for the experimental version of MonoDevelop from Michael Hutchinson, and found
the MonoMac addin hidden inside at the path MonoDevelop.app/Contents/MacOS/lib/monodevelop/Addins/MonoDevelop.MonoMac.
I copied the folder to the appropriate place of the RTM version of MonoDevelop 2.4
and everything works as expected! 
</p>
        <h3>Download it
</h3>
        <p>
          <a href="http://monodevelop.com/files/MacOSX/releases/MonoDevelop-2.4.dmg">Download
MonoDevelop</a>, copy it to your Applications folder. then open the contents of MonoDevelop.app,
and extract <a href="http://www.milkcarton.com/blog/content/binary/MonoDevelop.MonoMac.zip" style="text-decoration: line-through;">MonoDevelop.MonoMac</a> to
Contents/MacOS/lib/monodevelop/Addins/. Restart MonoDevelop, and now you should be
able to create a new MonoMac project!
</p>
        <h3>Update
</h3>
        <p>
I missed two other files that updated in MonoDevelop.IPhone, <a href="http://www.milkcarton.com/blog/content/binary/MonoDevelop.Addins.zip">download
the new MonoDevelop.Addins.zip (490.49 KB)</a> and extract it to the same place.
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=0d33fdd7-7525-475a-8f8c-a31bd43faadb" />
      </body>
      <title>Use the new MonoMac addin in the latest version of MonoDevelop</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,0d33fdd7-7525-475a-8f8c-a31bd43faadb.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/06/26/Use+The+New+MonoMac+Addin+In+The+Latest+Version+Of+MonoDevelop.aspx</link>
      <pubDate>Sat, 26 Jun 2010 23:02:05 GMT</pubDate>
      <description>&lt;p&gt;
This morning I thought I would sit down with my Mac and play with doing .NET development
for OS X. I had previously tried, but always found things to be really frustrating.
All the Cocoa bindings were out of date, and the WinForms stuff looked terrible, etc.
But &lt;a href="http://tirania.org/blog/archive/2010/Apr-19.html"&gt;Miguel wrote a blog
post&lt;/a&gt; a while back indicating they are getting serious about developing a &lt;b&gt;native&lt;/b&gt; solution
for OS X.
&lt;/p&gt;
&lt;p&gt;
I &lt;a href="http://mjhutchinson.com/files/md/MonoDevelop-MonoMac-Experimental-2010-06-08.dmg"&gt;downloaded
the experimental version&lt;/a&gt; of &lt;a href="http://monodevelop.com/Download"&gt;MonoDevelop
2.4&lt;/a&gt; from &lt;a href="http://mjhutchinson.com/journal/2010/06/09/"&gt;Michael Hutchinson
blog&lt;/a&gt; but quickly found out the experimental version of MonoDevelop (based on 2.4
RC 4) was out dated. So I upgraded to MonoDevelop 2.4, opened it, and noticed that
MonoMac wasn't an available add-in in the RTM version of MonoDevelop.
&lt;/p&gt;
&lt;p&gt;
So I did what any self respecting geek would do, I started digging around inside the
bundle for the experimental version of MonoDevelop from Michael Hutchinson, and found
the MonoMac addin hidden inside at the path MonoDevelop.app/Contents/MacOS/lib/monodevelop/Addins/MonoDevelop.MonoMac.
I copied the folder to the appropriate place of the RTM version of MonoDevelop 2.4
and everything works as expected! 
&lt;h3&gt;Download it
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://monodevelop.com/files/MacOSX/releases/MonoDevelop-2.4.dmg"&gt;Download
MonoDevelop&lt;/a&gt;, copy it to your Applications folder. then open the contents of MonoDevelop.app,
and extract &lt;a href="http://www.milkcarton.com/blog/content/binary/MonoDevelop.MonoMac.zip" style="text-decoration: line-through;"&gt;MonoDevelop.MonoMac&lt;/a&gt; to
Contents/MacOS/lib/monodevelop/Addins/. Restart MonoDevelop, and now you should be
able to create a new MonoMac project!
&lt;/p&gt;
&lt;h3&gt;Update
&lt;/h3&gt;
&lt;p&gt;
I missed two other files that updated in MonoDevelop.IPhone, &lt;a href="http://www.milkcarton.com/blog/content/binary/MonoDevelop.Addins.zip"&gt;download
the new MonoDevelop.Addins.zip (490.49 KB)&lt;/a&gt; and extract it to the same place.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=0d33fdd7-7525-475a-8f8c-a31bd43faadb" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,0d33fdd7-7525-475a-8f8c-a31bd43faadb.aspx</comments>
      <category>Mac OS X</category>
      <category>Mono</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=6c15c80c-974b-4f73-b3c5-a8406f582566</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,6c15c80c-974b-4f73-b3c5-a8406f582566.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,6c15c80c-974b-4f73-b3c5-a8406f582566.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6c15c80c-974b-4f73-b3c5-a8406f582566</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p style="clear: both">
A few weeks back, <a href="http://www.milkcarton.com/blog/2009/01/22/Mac+Blogging+Software.aspx" target="_blank">I
wrote about Mac blogging software</a>. Since then, I've removed Ecto. It was way to
clunky, and not a joy to use at all. I've downloaded <a href="http://www.drinkbrainjuice.com/blogo" target="_blank">Blogo</a> and
figured I'd give it a whirl. So far, its pretty good. But none of these are like Windows
Live Writer, which is really what I want. Oh well, can't have it all unless you write
it yourself.
</p>
        <br class="final-break" style="clear: both" />
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=6c15c80c-974b-4f73-b3c5-a8406f582566" />
      </body>
      <title>Update on Mac blogging software</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,6c15c80c-974b-4f73-b3c5-a8406f582566.aspx</guid>
      <link>http://www.milkcarton.com/blog/2009/02/08/Update+On+Mac+Blogging+Software.aspx</link>
      <pubDate>Sun, 08 Feb 2009 21:11:01 GMT</pubDate>
      <description>&lt;p style="clear: both"&gt;
A few weeks back, &lt;a href="http://www.milkcarton.com/blog/2009/01/22/Mac+Blogging+Software.aspx" target="_blank"&gt;I
wrote about Mac blogging software&lt;/a&gt;. Since then, I've removed Ecto. It was way to
clunky, and not a joy to use at all. I've downloaded &lt;a href="http://www.drinkbrainjuice.com/blogo" target="_blank"&gt;Blogo&lt;/a&gt; and
figured I'd give it a whirl. So far, its pretty good. But none of these are like Windows
Live Writer, which is really what I want. Oh well, can't have it all unless you write
it yourself.
&lt;/p&gt;
&lt;br class='final-break' style='clear: both' /&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=6c15c80c-974b-4f73-b3c5-a8406f582566" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,6c15c80c-974b-4f73-b3c5-a8406f582566.aspx</comments>
      <category>Mac OS X</category>
      <category>Non-Tech</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=11135e07-6332-4c64-a883-61810d48b80c</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,11135e07-6332-4c64-a883-61810d48b80c.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,11135e07-6332-4c64-a883-61810d48b80c.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=11135e07-6332-4c64-a883-61810d48b80c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h3>Background
</h3>
        <p>
Call me a control freak, but I like to see all the shared volumes on my Mac. I could
open Terminal and cd to the Volumes folder, or I could use Finder and Go -&gt; Go
to Folder to see everything that OS X has mounted in my Volumes folder. But thats
kind of a pain.
</p>
        <h3>Solution
</h3>
        <p>
After a little bit of digging around, I found out about SetFile. SetFile is a command
line utility that allows you to set the file attributes on files in an HFS+ directory.
After figuring out the parameters for it, I came up with this little ditty to make
the Volumes folder show up under "Macintosh HD." Run this in Terminal:
</p>
        <blockquote>sudo SetFile -a v /Volumes</blockquote>
        <p>
With this command, you are setting the visibility attribute on the Volumes folder
to visible. To reverse the process, change -a v to -a <strong>V</strong>. Now open
up "Macintosh HD" and you should now see all the volumes mounted on your Mac!
</p>
        <img src="http://www.milkcarton.com/blog/content/binary/VolumesScreenShot.png" height="111" width="192" border="1" hspace="4" vspace="4" alt="Screenshot" title="Screenshot" />
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=11135e07-6332-4c64-a883-61810d48b80c" />
      </body>
      <title>How to make the OS X Volumes folder visible</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,11135e07-6332-4c64-a883-61810d48b80c.aspx</guid>
      <link>http://www.milkcarton.com/blog/2009/01/25/How+To+Make+The+OS+X+Volumes+Folder+Visible.aspx</link>
      <pubDate>Sun, 25 Jan 2009 05:59:00 GMT</pubDate>
      <description>&lt;h3&gt;Background
&lt;/h3&gt;
&lt;p&gt;
Call me a control freak, but I like to see all the shared volumes on my Mac. I could
open Terminal and cd to the Volumes folder, or I could use Finder and Go -&amp;gt; Go
to Folder to see everything that OS X has mounted in my Volumes folder. But thats
kind of a pain.
&lt;/p&gt;
&lt;h3&gt;Solution
&lt;/h3&gt;
&lt;p&gt;
After a little bit of digging around, I found out about SetFile. SetFile is a command
line utility that allows you to set the file attributes on files in an HFS+ directory.
After figuring out the parameters for it, I came up with this little ditty to make
the Volumes folder show up under "Macintosh HD." Run this in Terminal:
&lt;/p&gt;
&lt;blockquote&gt;sudo SetFile -a v /Volumes&lt;/blockquote&gt; 
&lt;p&gt;
With this command, you are setting the visibility attribute on the Volumes folder
to visible. To reverse the process, change -a v to -a &lt;strong&gt;V&lt;/strong&gt;. Now open
up "Macintosh HD" and you should now see all the volumes mounted on your Mac!
&lt;/p&gt;
&lt;img src="http://www.milkcarton.com/blog/content/binary/VolumesScreenShot.png" height="111" width="192" border="1" hspace="4" vspace="4" alt="Screenshot" title="Screenshot" /&gt; &lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=11135e07-6332-4c64-a883-61810d48b80c" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,11135e07-6332-4c64-a883-61810d48b80c.aspx</comments>
      <category>HowTo</category>
      <category>Mac OS X</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=9ca26879-f4aa-4bd9-ae5a-c083bb91cf3b</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,9ca26879-f4aa-4bd9-ae5a-c083bb91cf3b.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,9ca26879-f4aa-4bd9-ae5a-c083bb91cf3b.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9ca26879-f4aa-4bd9-ae5a-c083bb91cf3b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h3>Background
</h3>
        <p>
When I originally got Mac Mini, Mac OS X 10.5.1 was out. I did a quick google search
and found simple steps to follow to get Time Machine to backup to a network volume
on my Linux server. Everything worked great!
</p>
        <p>
When Mac OS X 10.5.2 was released a few weeks later, Time Machine would no longer
backup to my file server. I did a lot of googling and found I wasn't the only one
with the problem, but couldn't find any solutions. I've given it the old collage try
a few times since then trying to get it working again, as recently as mid December
2008, but to no avail.
</p>
        <p>
I don't know what possessed me to try and get it working again this time, but I did.
And I won! It wasn't an easy battle, nor was it an epic battle. But it was a battle
none the less.
</p>
        <h3>Problem
</h3>
        <p>
I found the various postings on the net about how to everything working, including <a href="http://hupio.wordpress.com/2008/04/27/osx-timemachine-and-sambawindows-share/">Hupio's
OSX Timemachine and Samba/Windows share</a>. But nothing really worked. I kept getting
the error message "the backup disk image could not be mounted."
</p>
        <p>
I almost gave up again, but decided to google the error message. And came across a
few more sites, but they didn't have anything of interest. I don't know why, but I
tried to create my sparse bundle on the network share itself, instead of on the Mini
and moving it to the network share. That got me the error message "hdiutil: create
failed - Operation not supported".
</p>
        <p>
Googling that error message led me to <a href="http://www.viraj.org/b2evolution/blogs/index.php/2008/05/26/">Viraj's
post about Time machine + AFP + Ubuntu - Samba.</a> Viraj got everything working by
installing the AFP service on his Linux (Ubuntu) server. He linked to <a href="http://blog.damontimm.com/how-to-install-netatalk-afp-on-ubuntu-with-encrypted-authentication/">How
to: Install Netatalk (AFP) on Ubuntu with Encrypted Authentication</a> which was perfect
because I happen to be running an Ubuntu server.
</p>
        <h3>Solution
</h3>
        <p>
If your using a Linux file server like I am, and want to backup your Mac using Time
Machine to your file server, follow these steps:
</p>
        <p>
1. <a href="http://blog.damontimm.com/how-to-install-netatalk-afp-on-ubuntu-with-encrypted-authentication/">Install
AFP on your Linux server</a></p>
        <p>
2. Figure out where you are going to store the backups on your file server. I stored
mine in /media/backup/TimeMachine. You will need to edit your /etc/netatalk/AppleVolumes.default
file and point it to the directory: 
</p>
        <blockquote> sudo echo "/media/backup/TimeMachine \"Time Machines\"" &gt;&gt;
/etc/netatalk/AppleVolumes.default </blockquote>
        <p>
3. Restart netatalk 
</p>
        <blockquote> sudo /etc/init.d/netatalk restart </blockquote>
        <p>
4. Mount your "Time Machines" volume. Finder -&gt; Go -&gt; Connect to Server and enter
afp://IPADDRESS/Time Machines
</p>
        <p>
5. <a href="http://hupio.wordpress.com/2008/04/27/osx-timemachine-and-sambawindows-share/">Create
a sparse bundle</a>. If your OS volume is case-sensitive like mine, run this in terminal: 
</p>
        <blockquote> hdiutil create -library SPUD -size 50g -fs "Case-sensitive Journaled
HFS+" -type SPARSEBUNDLE -volname "TimeMachine for YOURNAME" "YOURMACSNAME_MACADDRESS.sparsebundle" </blockquote> this
will create a 50 GB sparse bundle for Time Machine. If your OS volume is <strong>not</strong> case-sensitive
(the default) use this command: <blockquote> hdiutil create -library SPUD -size 50g
-fs "Journaled HFS+" -type SPARSEBUNDLE -volname "TimeMachine for YOURNAME" "YOURMACSNAME_MACADDRESS.sparsebundle" </blockquote><p>
I'm not going to go into the details about the command line, the link above goes into
greater detail. You will need to read the article so you can plug the correct values
in.
</p><p>
6. Move your newly created sparsebundle to your "Time Machines" share: 
</p><blockquote> mv mini_MACADDRESS.sparsebundle /Volumes/Time\ Machines/ </blockquote><p>
7. Configure your Mac to allow backing up to a network share: 
</p><blockquote> defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes
1 </blockquote><p>
8. Finally, open Time Machine, click "Change Disk" and point to your "Time Machines"
volume. In 2 minutes, Time Machine will start to backup your data to your Linux network
file system!
</p><p>
A quick note about the conventions used above 
</p><blockquote>all commands blockquote are supposed to be run in Terminal. All commands
that start with a sudo (items 2 and 3) are supposed to be run on your Linux server </blockquote><img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=9ca26879-f4aa-4bd9-ae5a-c083bb91cf3b" /></body>
      <title>Getting Time Machine to backup to a network volume</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,9ca26879-f4aa-4bd9-ae5a-c083bb91cf3b.aspx</guid>
      <link>http://www.milkcarton.com/blog/2009/01/24/Getting+Time+Machine+To+Backup+To+A+Network+Volume.aspx</link>
      <pubDate>Sat, 24 Jan 2009 07:42:58 GMT</pubDate>
      <description>&lt;h3&gt;Background
&lt;/h3&gt;
&lt;p&gt;
When I originally got Mac Mini, Mac OS X 10.5.1 was out. I did a quick google search
and found simple steps to follow to get Time Machine to backup to a network volume
on my Linux server. Everything worked great!
&lt;/p&gt;
&lt;p&gt;
When Mac OS X 10.5.2 was released a few weeks later, Time Machine would no longer
backup to my file server. I did a lot of googling and found I wasn't the only one
with the problem, but couldn't find any solutions. I've given it the old collage try
a few times since then trying to get it working again, as recently as mid December
2008, but to no avail.
&lt;/p&gt;
&lt;p&gt;
I don't know what possessed me to try and get it working again this time, but I did.
And I won! It wasn't an easy battle, nor was it an epic battle. But it was a battle
none the less.
&lt;/p&gt;
&lt;h3&gt;Problem
&lt;/h3&gt;
&lt;p&gt;
I found the various postings on the net about how to everything working, including &lt;a href="http://hupio.wordpress.com/2008/04/27/osx-timemachine-and-sambawindows-share/"&gt;Hupio's
OSX Timemachine and Samba/Windows share&lt;/a&gt;. But nothing really worked. I kept getting
the error message "the backup disk image could not be mounted."
&lt;/p&gt;
&lt;p&gt;
I almost gave up again, but decided to google the error message. And came across a
few more sites, but they didn't have anything of interest. I don't know why, but I
tried to create my sparse bundle on the network share itself, instead of on the Mini
and moving it to the network share. That got me the error message "hdiutil: create
failed - Operation not supported".
&lt;/p&gt;
&lt;p&gt;
Googling that error message led me to &lt;a href="http://www.viraj.org/b2evolution/blogs/index.php/2008/05/26/"&gt;Viraj's
post about Time machine + AFP + Ubuntu - Samba.&lt;/a&gt; Viraj got everything working by
installing the AFP service on his Linux (Ubuntu) server. He linked to &lt;a href="http://blog.damontimm.com/how-to-install-netatalk-afp-on-ubuntu-with-encrypted-authentication/"&gt;How
to: Install Netatalk (AFP) on Ubuntu with Encrypted Authentication&lt;/a&gt; which was perfect
because I happen to be running an Ubuntu server.
&lt;/p&gt;
&lt;h3&gt;Solution
&lt;/h3&gt;
&lt;p&gt;
If your using a Linux file server like I am, and want to backup your Mac using Time
Machine to your file server, follow these steps:
&lt;/p&gt;
&lt;p&gt;
1. &lt;a href="http://blog.damontimm.com/how-to-install-netatalk-afp-on-ubuntu-with-encrypted-authentication/"&gt;Install
AFP on your Linux server&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
2. Figure out where you are going to store the backups on your file server. I stored
mine in /media/backup/TimeMachine. You will need to edit your /etc/netatalk/AppleVolumes.default
file and point it to the directory: &lt;blockquote&gt; sudo echo "/media/backup/TimeMachine
\"Time Machines\"" &amp;gt;&amp;gt; /etc/netatalk/AppleVolumes.default &lt;/blockquote&gt;&gt;
&lt;p&gt;
3. Restart netatalk &lt;blockquote&gt; sudo /etc/init.d/netatalk restart &lt;/blockquote&gt;&gt;
&lt;p&gt;
4. Mount your "Time Machines" volume. Finder -&gt; Go -&gt; Connect to Server and enter
afp://IPADDRESS/Time Machines
&lt;/p&gt;
&lt;p&gt;
5. &lt;a href="http://hupio.wordpress.com/2008/04/27/osx-timemachine-and-sambawindows-share/"&gt;Create
a sparse bundle&lt;/a&gt;. If your OS volume is case-sensitive like mine, run this in terminal: &lt;blockquote&gt; hdiutil
create -library SPUD -size 50g -fs "Case-sensitive Journaled HFS+" -type SPARSEBUNDLE
-volname "TimeMachine for YOURNAME" "YOURMACSNAME_MACADDRESS.sparsebundle" &lt;/blockquote&gt; this
will create a 50 GB sparse bundle for Time Machine. If your OS volume is &lt;strong&gt;not&lt;/strong&gt; case-sensitive
(the default) use this command: &lt;blockquote&gt; hdiutil create -library SPUD -size 50g
-fs "Journaled HFS+" -type SPARSEBUNDLE -volname "TimeMachine for YOURNAME" "YOURMACSNAME_MACADDRESS.sparsebundle" &lt;/blockquote&gt;&gt;
&lt;p&gt;
I'm not going to go into the details about the command line, the link above goes into
greater detail. You will need to read the article so you can plug the correct values
in.
&lt;/p&gt;
&lt;p&gt;
6. Move your newly created sparsebundle to your "Time Machines" share: &lt;blockquote&gt; mv
mini_MACADDRESS.sparsebundle /Volumes/Time\ Machines/ &lt;/blockquote&gt;&gt;
&lt;p&gt;
7. Configure your Mac to allow backing up to a network share: &lt;blockquote&gt; defaults
write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1 &lt;/blockquote&gt;&gt;
&lt;p&gt;
8. Finally, open Time Machine, click "Change Disk" and point to your "Time Machines"
volume. In 2 minutes, Time Machine will start to backup your data to your Linux network
file system!
&lt;/p&gt;
&lt;p&gt;
A quick note about the conventions used above &lt;blockquote&gt;all commands blockquote
are supposed to be run in Terminal. All commands that start with a sudo (items 2 and
3) are supposed to be run on your Linux server &lt;/blockquote&gt;&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=9ca26879-f4aa-4bd9-ae5a-c083bb91cf3b" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,9ca26879-f4aa-4bd9-ae5a-c083bb91cf3b.aspx</comments>
      <category>HowTo</category>
      <category>Mac OS X</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=09297991-285a-4510-84d4-5f2323be7350</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,09297991-285a-4510-84d4-5f2323be7350.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,09297991-285a-4510-84d4-5f2323be7350.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=09297991-285a-4510-84d4-5f2323be7350</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p style="clear: both">
I'm trying out blog editing software on my Mac Mini. So far, I've used <a href="http://www.red-sweater.com/marsedit/">MarsEdit</a> and <a href="http://illuminex.com/ecto/">Ecto</a>.
I'm honestly not very impressed with either of them. MarsEdit doesn't support (that
I've found) rich text editing from within its editor. It only supports raw HTML editing,
but will shell out to other editors to do the rich text editing.
</p>
        <p style="clear: both">
Ecto, took me quite a few tries to find a good link to download it. When I finally
got it downloaded, isn't to terrible. The UI isn't very clean IMHO. Its interface
for adding links is sub-par, and NOT discoverable. At least it supports a rich text
editor out of the box.
</p>
        <p style="clear: both">
        </p>
        <p style="clear: both">
I wish Microsoft would make a version of Windows Live Writer for the Mac :) 
<!-- technorati tags start --></p>
        <p style="clear: both; text-align:right;">
Technorati Tags: <a href="http://www.technorati.com/tag/Non-tech" rel="tag">Non-tech</a></p>
        <p style="clear: both">
          <!-- technorati tags end -->
        </p>
        <p style="clear: both">
        </p>
        <br class="final-break" style="clear: both" />
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=09297991-285a-4510-84d4-5f2323be7350" />
      </body>
      <title>Mac blogging software</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,09297991-285a-4510-84d4-5f2323be7350.aspx</guid>
      <link>http://www.milkcarton.com/blog/2009/01/22/Mac+Blogging+Software.aspx</link>
      <pubDate>Thu, 22 Jan 2009 06:48:12 GMT</pubDate>
      <description>&lt;p style="clear: both"&gt;
I'm trying out blog editing software on my Mac Mini. So far, I've used &lt;a href="http://www.red-sweater.com/marsedit/"&gt;MarsEdit&lt;/a&gt; and &lt;a href="http://illuminex.com/ecto/"&gt;Ecto&lt;/a&gt;.
I'm honestly not very impressed with either of them. MarsEdit doesn't support (that
I've found) rich text editing from within its editor. It only supports raw HTML editing,
but will shell out to other editors to do the rich text editing.
&lt;/p&gt;
&lt;p style="clear: both"&gt;
Ecto, took me quite a few tries to find a good link to download it. When I finally
got it downloaded, isn't to terrible. The UI isn't very clean IMHO. Its interface
for adding links is sub-par, and NOT discoverable. At least it supports a rich text
editor out of the box.
&lt;/p&gt;
&lt;p style="clear: both"&gt;
&lt;/p&gt;
&lt;p style="clear: both"&gt;
I wish Microsoft would make a version of Windows Live Writer for the Mac :) 
&lt;!-- technorati tags start --&gt;
&lt;/p&gt;
&lt;p style="clear: both; text-align:right;"&gt;
Technorati Tags: &lt;a href="http://www.technorati.com/tag/Non-tech" rel="tag"&gt;Non-tech&lt;/a&gt;
&lt;/p&gt;
&lt;p style="clear: both"&gt;
&lt;!-- technorati tags end --&gt;
&lt;/p&gt;
&lt;p style="clear: both"&gt;
&lt;/p&gt;
&lt;br class='final-break' style='clear: both' /&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=09297991-285a-4510-84d4-5f2323be7350" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,09297991-285a-4510-84d4-5f2323be7350.aspx</comments>
      <category>Mac OS X</category>
      <category>Non-Tech</category>
    </item>
  </channel>
</rss>