<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On 2011-12-24, at 5:00 AM, Jordan K. Hubbard wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Dec 24, 2011, at 5:01 AM, Mark Rada wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: 'Helvetica Neue'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-tab-span" style="white-space: pre; ">      </span>"Do we want to front end all the AppKit classes?" No, not unless it can be justified, and I don't think it can. Also, while AppKit may have been the original motivation for mappings, any class in any framework can have a mapping added. Mappings are justified if they make using the class flow more nicely/succinctly with the rest of the code you write, or if it advantageous to get a feature like block based delegation. Even if a mapping would not be useful in general, you can still write it and load mappings yourself.<br><br><span class="Apple-tab-span" style="white-space: pre; ">  </span>"...provide convenience functions if and only when a certain conciseness (as expressed in percentage of code saved) is achievable?" This is similar to what I said above, except it gives a specific heuristic, percentage of code saved, which I think is not quite accurate. It is about making things easier to code/understand/maintain, which isn't always the smallest amount of code. For instance, masking in HotCocoa is just an array of symbols which I think is a bit more verbose looking than a chain of XOR'd constants; though since the symbols don't include the Cocoa prefix (i.e. NSAnnoyingPrefix) it ends up looking shorter than the equivalent Objective-C code.<br></span></blockquote></div><br><div>That seems like a pretty reasonable mission statement to me - thanks for the thoughtful elaboration.  "Make Cocoa programming Ruby-ish", in a nutshell?</div><div><br></div><div>If that's the case, I think it might be reasonable to suggest that HotCocoa should not be positioned <i>against</i> Interface Builder so much as offered as an alternative for certain types of applications with UI.  Microsoft's XAML, for example, allows for extremely concise interfaces to be constructed (as well as describing some of the more simple runtime behaviors) without necessarily saying that it is a replacement for C#.  To be sure, this (from an online XAML tutorial):</div><div><br></div><div><span class="Apple-style-span" style="color: rgb(68, 68, 68); font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; line-height: 18px; "><pre class="xaml xaml" style="margin-top: -8px; margin-right: -8px; margin-bottom: -20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'courier new', courier, monospace; font-size: 13px; "><span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "><StackPanel<span style="color: rgb(128, 0, 0); ">></span></span></span>
    <span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "><TextBlock</span> <span style="color: rgb(255, 0, 0); ">Margin</span>=<span style="color: rgb(0, 0, 255); ">"20"</span><span style="color: rgb(128, 0, 0); ">></span></span>Welcome to the World of XAML<span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "></TextBlock<span style="color: rgb(128, 0, 0); ">></span></span></span>
    <span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "><Button</span> <span style="color: rgb(255, 0, 0); ">Margin</span>=<span style="color: rgb(0, 0, 255); ">"10"</span> <span style="color: rgb(255, 0, 0); ">HorizontalAlignment</span>=<span style="color: rgb(0, 0, 255); ">"Right"</span><span style="color: rgb(128, 0, 0); ">></span></span>OK<span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "></Button<span style="color: rgb(128, 0, 0); ">></span></span></span>
<span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "></StackPanel<span style="color: rgb(128, 0, 0); ">></span></span></span>
</pre><div><span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "><br></span></span></span></div><div><span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "><span style="color: rgb(128, 0, 0); "><br></span></span></span></div></span><div>Is far more concise than this:</div><div><br></div><div><span class="Apple-style-span" style="color: rgb(68, 68, 68); font-family: 'Segoe UI', Arial, sans-serif; font-size: 13px; line-height: 18px; "><pre class="csharp csharp" style="margin-top: -8px; margin-right: -8px; margin-bottom: -20px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'courier new', courier, monospace; font-size: 13px; "><span style="color: rgb(0, 128, 0); ">// Create the StackPanel</span>
StackPanel stackPanel <span style="color: rgb(0, 128, 0); ">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com" style="text-decoration: none; color: rgb(168, 149, 101); "><span style="color: rgb(0, 0, 255); font-weight: bold; ">new</span></a> StackPanel<span style="color: rgb(0, 0, 0); ">(</span><span style="color: rgb(0, 0, 0); ">)</span>;
<span style="color: rgb(6, 0, 255); font-weight: bold; ">this</span>.<span style="color: rgb(0, 0, 255); ">Content</span> <span style="color: rgb(0, 128, 0); ">=</span> stackPanel;
 
<span style="color: rgb(0, 128, 0); ">// Create the TextBlock</span>
TextBlock textBlock <span style="color: rgb(0, 128, 0); ">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com" style="text-decoration: none; color: rgb(168, 149, 101); "><span style="color: rgb(0, 0, 255); font-weight: bold; ">new</span></a> TextBlock<span style="color: rgb(0, 0, 0); ">(</span><span style="color: rgb(0, 0, 0); ">)</span>;
textBlock.<span style="color: rgb(0, 0, 255); ">Margin</span> <span style="color: rgb(0, 128, 0); ">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com" style="text-decoration: none; color: rgb(168, 149, 101); "><span style="color: rgb(0, 0, 255); font-weight: bold; ">new</span></a> Thickness<span style="color: rgb(0, 0, 0); ">(</span><span style="color: rgb(255, 0, 0); ">10</span><span style="color: rgb(0, 0, 0); ">)</span>;
textBlock.<span style="color: rgb(0, 0, 255); ">Text</span> <span style="color: rgb(0, 128, 0); ">=</span> <span style="color: rgb(102, 102, 102); ">"Welcome to the World of XAML"</span>;
stackPanel.<span style="color: rgb(0, 0, 255); ">Children</span>.<span style="color: rgb(0, 0, 255); ">Add</span><span style="color: rgb(0, 0, 0); ">(</span>textBlock<span style="color: rgb(0, 0, 0); ">)</span>;
 
<span style="color: rgb(0, 128, 0); ">// Create the Button</span>
Button button <span style="color: rgb(0, 128, 0); ">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com" style="text-decoration: none; color: rgb(168, 149, 101); "><span style="color: rgb(0, 0, 255); font-weight: bold; ">new</span></a> Button<span style="color: rgb(0, 0, 0); ">(</span><span style="color: rgb(0, 0, 0); ">)</span>;
button.<span style="color: rgb(0, 0, 255); ">Margin</span><span style="color: rgb(0, 128, 0); ">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com" style="text-decoration: none; color: rgb(168, 149, 101); "><span style="color: rgb(0, 0, 255); font-weight: bold; ">new</span></a> Thickness<span style="color: rgb(0, 0, 0); ">(</span><span style="color: rgb(255, 0, 0); ">20</span><span style="color: rgb(0, 0, 0); ">)</span>;
button.<span style="color: rgb(0, 0, 255); ">Content</span> <span style="color: rgb(0, 128, 0); ">=</span> <span style="color: rgb(102, 102, 102); ">"OK"</span>;
stackPanel.<span style="color: rgb(0, 0, 255); ">Children</span>.<span style="color: rgb(0, 0, 255); ">Add</span><span style="color: rgb(0, 0, 0); ">(</span>button<span style="color: rgb(0, 0, 0); ">)</span>;
</pre><div><br></div><div><br></div></span><div>But I can also see a number of situations where a serialized object (XIB) file is even more "concise" given that it encapsulates all of the UI in one easy-to-update file, with a nice graphical tool for doing so, in which case it's really the code which interacts with that interface that needs to be "Rubyish" and easy to write.</div></div></div></div></blockquote><div><br></div><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>In short, I think Interface Builder actually fits within the HotCocoa mission statement for its easy creation and maintenance of interfaces beyond a certain (fairly minimal) amount of complexity.  That leaves the "minimal interfaces" and UI snippets / compound UI elements as one natural fit for HotCocoa, along with other mappings which reduce the complexity of doing audio, video and animation, perhaps?   I'm just thinking out loud here, but I would be curious to know if this is how others see it.</div><div><br></div></div></div></blockquote><br><div><div>I see what you mean. HotCocoa can be used in conjunction with IB. The application builder supports this, and in the examples directory the "round_transparent_window" example uses a nib. It is possible to mix HotCocoa and nibs; for instance, you could create a button using the HotCocoa constructor and put it in a window created from a nib.</div><div><br></div><div>I don't see IB as a competitor, but I do sometimes look at Xcode for ideas how to make HotCocoa better.</div><div><br></div><div>--</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Mark</div><div><br></div><div><br></div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div></div></div></blockquote></div></div></body></html>