<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5717343927600530546</id><updated>2011-11-27T18:47:12.934-08:00</updated><category term='Architect'/><category term='Python'/><category term='Macintosh'/><category term='Architecture'/><category term='Modeling language'/><category term='OmniOutliner'/><category term='Advertising'/><category term='Java'/><category term='Apple'/><category term='NetBeans'/><category term='Web 2.0'/><category term='Unified Modeling Language'/><category term='Modeling Languages'/><category term='Programming'/><category term='C++'/><category term='Operating system'/><category term='Class diagram'/><category term='Linux'/><category term='Mac OS'/><category term='Objective-C'/><category term='Use case'/><category term='Cocoa'/><category term='Mac OS X'/><category term='design'/><category term='Programming language'/><category term='Social network'/><category term='Methodologies'/><category term='Interface Builder'/><category term='Blog'/><category term='Computer programming'/><category term='Object Management Group'/><title type='text'>Software Architecture</title><subtitle type='html'>The art of software design</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://clancy-software-architecture.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://clancy-software-architecture.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Thomas Clancy</name><uri>https://profiles.google.com/107961605644636368081</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-4HoaDOtwrhw/AAAAAAAAAAI/AAAAAAAAB_I/Sw4XlNhYnmo/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5717343927600530546.post-4007940160033698275</id><published>2010-04-03T08:13:00.000-07:00</published><updated>2010-04-03T08:19:37.628-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interface Builder'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='OmniOutliner'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><category scheme='http://www.blogger.com/atom/ns#' term='NetBeans'/><title type='text'>Learning How to Program My Mac</title><content type='html'>The interesting thing about writing &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Macintosh" rel="wikipedia nofollow" title="Macintosh"&gt;Mac&lt;/a&gt; apps using &lt;a class="zem_slink" href="http://developer.apple.com/documentation/Cocoa/Cocoa.html" rel="homepage nofollow" title="Cocoa (API)"&gt;Cocoa&lt;/a&gt; is that I don't really have to write much code at all to do something interesting.&amp;nbsp; Apparently it's the Mac Developer's motto.&amp;nbsp; A lot of the complexity is hidden by &lt;a class="zem_slink" href="http://www.apple.com/" rel="homepage nofollow" title="Interface Builder"&gt;Interface Builder&lt;/a&gt; and nib/xib files.&amp;nbsp; Part of the problem for me, however, is that I am so used to writing lots of code in &lt;a class="zem_slink" href="http://java.sun.com/" rel="homepage nofollow" title="Java (programming language)"&gt;Java&lt;/a&gt; in order to do anything useful.&amp;nbsp; I don't use any Microsoft crap, so I have no access to Visual Studio, and finding a decent &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Graphical_user_interface" rel="wikipedia nofollow" title="Graphical user interface"&gt;GUI&lt;/a&gt; builder like Mac's Interface Builder for creating Java SWING or &lt;a class="zem_slink" href="http://www.eclipse.org/swt/" rel="homepage nofollow" title="Standard Widget Toolkit"&gt;SWT&lt;/a&gt; apps has proven to be difficult.&lt;br /&gt;&lt;br /&gt;NetBeans has a very nice &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Swing_%28Java%29" rel="wikipedia nofollow" title="Swing (Java)"&gt;Swing&lt;/a&gt; GUI builder, but no matter how I try to optimize NetBeans for my Mac, tweaking stack and heap numbers, it's slower than a pig trying to swim in quicksand.&amp;nbsp; And while the performance in the latest Java 6 SE &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Software_development_kit" rel="wikipedia nofollow" title="Software development kit"&gt;SDK&lt;/a&gt; is apparently remarkable, &lt;a class="zem_slink" href="http://www.apple.com/" rel="homepage nofollow" title="Apple"&gt;Apple&lt;/a&gt; is always behind when it comes to supporting Java.&amp;nbsp; It's like they wait six months or more before catching up.&amp;nbsp; True, Apple is only one revision behind, but it is very frustrating waiting.&lt;br /&gt;&lt;br /&gt;So back to Cocoa...&amp;nbsp; Cocoa makes heavy use of the MVC pattern, and you have to understand things like bindings, outlets, actions, etc.&amp;nbsp; I keep looking at example source code, and it is confusing.&amp;nbsp; Some people do more work than is apparently necessary--I think this is older code.&amp;nbsp; And I am always trying to find a way to code something when I don't really have to.&amp;nbsp; The documentation isn't bad, but it's dense and it seems that there are so many things you have to understand first, so I am constantly going from one document to the next, or looking up &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Application_programming_interface" rel="wikipedia nofollow" title="Application programming interface"&gt;API&lt;/a&gt; references, etc.&amp;nbsp; I try to do entirely too much at once rather than just taking my time.&amp;nbsp; No patients I guess.&lt;br /&gt;&lt;br /&gt;The first app I was trying to make was something similar to, albeit far less complex than, &lt;a href="http://www.omnigroup.com/products/omnioutliner/"&gt;OmniOutliner&lt;/a&gt;.&amp;nbsp; I always seem to take on too much as once.&amp;nbsp; But unless it holds some interest, I just can't be bothered.&amp;nbsp; Anyway, I will post my progress on this project.&amp;nbsp; I'd post now, but I've already trashed my last three attempts and haven't learned much in the process.&lt;br /&gt;&lt;br /&gt;Oh yes.&amp;nbsp; One more thing.&amp;nbsp; The book "&lt;a href="http://www.amazon.com/Cocoa-Programming-Developers-Handbook-Chisnall/dp/0321639634/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1270307038&amp;amp;sr=1-1"&gt;Cocoa Programming Developer's Handbook&lt;/a&gt;" by David Chisnall, which I have mentioned before, has been wonderful.&amp;nbsp; I can't recommend it enough.&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/5caf6260-b0be-475d-8524-1814c5cf2136/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=5caf6260-b0be-475d-8524-1814c5cf2136" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related more-info pretty-attribution paragraph-reblog"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5717343927600530546-4007940160033698275?l=clancy-software-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clancy-software-architecture.blogspot.com/feeds/4007940160033698275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clancy-software-architecture.blogspot.com/2010/04/learning-how-to-program-my-mac.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/4007940160033698275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/4007940160033698275'/><link rel='alternate' type='text/html' href='http://clancy-software-architecture.blogspot.com/2010/04/learning-how-to-program-my-mac.html' title='Learning How to Program My Mac'/><author><name>Thomas Clancy</name><uri>https://profiles.google.com/107961605644636368081</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-4HoaDOtwrhw/AAAAAAAAAAI/AAAAAAAAB_I/Sw4XlNhYnmo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5717343927600530546.post-6650438995693491577</id><published>2010-03-17T13:47:00.000-07:00</published><updated>2010-03-17T13:47:50.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS'/><category scheme='http://www.blogger.com/atom/ns#' term='Macintosh'/><category scheme='http://www.blogger.com/atom/ns#' term='Objective-C'/><category scheme='http://www.blogger.com/atom/ns#' term='Cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Objective-C Programming</title><content type='html'>I'm learning how to program in &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Objective-C" rel="wikipedia nofollow" title="Objective-C"&gt;Objective-C&lt;/a&gt; and the &lt;a class="zem_slink" href="http://developer.apple.com/documentation/Cocoa/Cocoa.html" rel="homepage nofollow" title="Cocoa (API)"&gt;Cocoa&lt;/a&gt; &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Framework" rel="wikipedia nofollow" title="Framework"&gt;framework&lt;/a&gt; so that I can write &lt;a class="zem_slink" href="http://apple.com/macosx/" rel="homepage nofollow" title="Mac OS X"&gt;Mac OS X&lt;/a&gt; applications.&amp;nbsp; I purchased a book by David Chisnall called "Cocoa Programming Developer's Handbook" that is turning out to be an excellent book.&amp;nbsp; I'm a long time &lt;a class="zem_slink" href="http://java.sun.com/" rel="homepage nofollow" title="Java (programming language)"&gt;Java&lt;/a&gt; developer and prior to that I wrote &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Computer_software" rel="wikipedia nofollow" title="Computer software"&gt;software&lt;/a&gt; in &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/C%2B%2B" rel="wikipedia nofollow" title="C++"&gt;C++&lt;/a&gt; and C.&amp;nbsp; Objective-C is a very interesting language and odd.&amp;nbsp; There are things to me that don't make much sense.&amp;nbsp; But when I found &lt;a href="http://www.informit.com/articles/article.aspx?p=1568732"&gt;this article&lt;/a&gt; by Chisnall, things became clearer.&amp;nbsp; I'll definitely have more to write about once I get really into it.&amp;nbsp; But if you're interested in writing apps for OS X, definitely check out Chisnall's &lt;a href="http://www.informit.com/authors/bio.aspx?a=79C6E6EC-5BC6-49A8-8D5D-0FCCD04B1A7B"&gt;book&lt;/a&gt;.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/4e09b98a-f716-4827-b624-90d259186ac8/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=4e09b98a-f716-4827-b624-90d259186ac8" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution paragraph-reblog"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5717343927600530546-6650438995693491577?l=clancy-software-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clancy-software-architecture.blogspot.com/feeds/6650438995693491577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clancy-software-architecture.blogspot.com/2010/03/objective-c-programming.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/6650438995693491577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/6650438995693491577'/><link rel='alternate' type='text/html' href='http://clancy-software-architecture.blogspot.com/2010/03/objective-c-programming.html' title='Objective-C Programming'/><author><name>Thomas Clancy</name><uri>https://profiles.google.com/107961605644636368081</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-4HoaDOtwrhw/AAAAAAAAAAI/AAAAAAAAB_I/Sw4XlNhYnmo/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5717343927600530546.post-1753533901332034179</id><published>2010-02-22T11:23:00.000-08:00</published><updated>2010-02-22T11:24:16.093-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Operating system'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Eclipse RCP and Python</title><content type='html'>The two have nothing to do with each other in this post.&amp;nbsp; But I felt like griping about something.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/f/fc/Vista-eclipse.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/f/fc/Vista-eclipse.png" /&gt;&lt;/a&gt;&lt;/div&gt;So with the &lt;a class="zem_slink" href="http://www.eclipse.org/" rel="homepage" title="Eclipse (software)"&gt;Eclipse RCP&lt;/a&gt; (&lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Rich_Client_Platform" rel="wikipedia" title="Rich Client Platform"&gt;rich client platform&lt;/a&gt;) technology, in theory one can create an eclipse-based application and run it on any OS that has a compliant &lt;a class="zem_slink" href="http://java.sun.com/" rel="homepage" title="Java (programming language)"&gt;Java&lt;/a&gt; runtime.&amp;nbsp; So why do I find that there are many Eclipse RCP applications designed to work on only certain &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Operating_system" rel="wikipedia" title="Operating system"&gt;operating systems&lt;/a&gt; (mostly Windows and &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Linux" rel="wikipedia" title="Linux"&gt;Linux&lt;/a&gt;)?&amp;nbsp; I just don't understand.&amp;nbsp; These same apps should work on OS X, too.&amp;nbsp; It doesn't make any sense to me.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/en/thumb/0/06/Python_logo.svg/200px-Python_logo.svg.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/en/thumb/0/06/Python_logo.svg/200px-Python_logo.svg.png" /&gt;&lt;/a&gt;&lt;/div&gt;Now for python.&amp;nbsp; I'm not sure why this is the case, the documentation is no help, either, but why when defining a class and its methods do you have to put for its first argument the keyword 'self'.&amp;nbsp; Huh?&amp;nbsp; Can't it just be implied?&amp;nbsp; I mean look at this code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Bag&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;addtwice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&lt;br /&gt;        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;What's with all of the 'self' parameters?&amp;nbsp; Is this not just like a waste of bytes?&amp;nbsp; This is from the python tutorial:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Often, the first argument of a method is called &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;self&lt;/span&gt;&lt;/tt&gt;.  This is nothing more than a convention: the name &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;self&lt;/span&gt;&lt;/tt&gt; has absolutely no special meaning to &lt;a class="zem_slink" href="http://www.python.org/" rel="homepage" title="Python (programming language)"&gt;Python&lt;/a&gt;.  Note, however, that by not following the convention your code  may be less readable to other Python programmers, and it is also conceivable  that a &lt;i&gt;class browser&lt;/i&gt; program might be written that relies upon such a  convention.&lt;/blockquote&gt;&lt;br /&gt;No special meaning?&amp;nbsp; Just a convention?&amp;nbsp; Huh?&amp;nbsp; WTF?&amp;nbsp; It just seems ugly and stupid to me.&amp;nbsp; No doubt there is some underlying reason for this convention.&amp;nbsp; It had to come from somewhere.&amp;nbsp; I just don't get it.&amp;nbsp; Yuck.&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/057baa66-0725-40c0-85db-6d46a260de85/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=057baa66-0725-40c0-85db-6d46a260de85" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5717343927600530546-1753533901332034179?l=clancy-software-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clancy-software-architecture.blogspot.com/feeds/1753533901332034179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clancy-software-architecture.blogspot.com/2010/02/eclipse-rcp-and-python.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/1753533901332034179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/1753533901332034179'/><link rel='alternate' type='text/html' href='http://clancy-software-architecture.blogspot.com/2010/02/eclipse-rcp-and-python.html' title='Eclipse RCP and Python'/><author><name>Thomas Clancy</name><uri>https://profiles.google.com/107961605644636368081</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-4HoaDOtwrhw/AAAAAAAAAAI/AAAAAAAAB_I/Sw4XlNhYnmo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5717343927600530546.post-192581097350310159</id><published>2010-01-07T10:35:00.000-08:00</published><updated>2010-01-07T10:35:11.583-08:00</updated><title type='text'>Thinking About Candy</title><content type='html'>So the other day I was thinking about candy and was messing around with MagicDraw and figured what the hell.&amp;nbsp; Here is a model of candy.&amp;nbsp; In my humble opinion of course.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_WwraMgReU6c/S0YowC0bWrI/AAAAAAAAB28/pSedautgUp0/s1600-h/Candy.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_WwraMgReU6c/S0YowC0bWrI/AAAAAAAAB28/pSedautgUp0/s400/Candy.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;And here is the use case.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_WwraMgReU6c/S0YpVQW4KYI/AAAAAAAAB3E/sPKz0OLvkiw/s1600-h/Eating%20Candy.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_WwraMgReU6c/S0YpVQW4KYI/AAAAAAAAB3E/sPKz0OLvkiw/s400/Eating%20Candy.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5717343927600530546-192581097350310159?l=clancy-software-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clancy-software-architecture.blogspot.com/feeds/192581097350310159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clancy-software-architecture.blogspot.com/2010/01/thinking-about-candy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/192581097350310159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/192581097350310159'/><link rel='alternate' type='text/html' href='http://clancy-software-architecture.blogspot.com/2010/01/thinking-about-candy.html' title='Thinking About Candy'/><author><name>Thomas Clancy</name><uri>https://profiles.google.com/107961605644636368081</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-4HoaDOtwrhw/AAAAAAAAAAI/AAAAAAAAB_I/Sw4XlNhYnmo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WwraMgReU6c/S0YowC0bWrI/AAAAAAAAB28/pSedautgUp0/s72-c/Candy.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5717343927600530546.post-5893545743147295982</id><published>2009-11-09T15:32:00.000-08:00</published><updated>2009-11-12T20:25:40.589-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Modeling language'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Management Group'/><category scheme='http://www.blogger.com/atom/ns#' term='Unified Modeling Language'/><category scheme='http://www.blogger.com/atom/ns#' term='Methodologies'/><category scheme='http://www.blogger.com/atom/ns#' term='Use case'/><category scheme='http://www.blogger.com/atom/ns#' term='Modeling Languages'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Class diagram'/><category scheme='http://www.blogger.com/atom/ns#' term='Social network'/><title type='text'>A Social Network</title><content type='html'>&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Social-network.svg/430px-Social-network.svg.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Social-network.svg/430px-Social-network.svg.png" width="200" /&gt;&lt;/a&gt;I am modeling a &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Social_network" rel="wikipedia" title="Social network"&gt;social network&lt;/a&gt; using &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" rel="wikipedia" title="Unified Modeling Language"&gt;UML&lt;/a&gt;.&amp;nbsp; I call my new web 2.0 social network &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Computer_software" rel="wikipedia" title="Computer software"&gt;software&lt;/a&gt;... get ready for it... Social Network&amp;nbsp; Okay so it needs work, and besides this model is all theoretical as I try to distill what I believe are the components of any kind of social network as it is understood today.&amp;nbsp; Perhaps later I will prognosticate and design the social network of tomorrow... just not quite sure what that might be yet.&lt;br /&gt;&lt;br /&gt;Okay, so I'll start with some &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Use_case" rel="wikipedia" title="Use case"&gt;use cases&lt;/a&gt; and a couple &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Class_diagram" rel="wikipedia" title="Class diagram"&gt;class diagrams&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_WwraMgReU6c/Svil1qo2xOI/AAAAAAAABzU/b2rncFUoQHk/s1600-h/Create+Account+Use+Case.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_WwraMgReU6c/Svil1qo2xOI/AAAAAAAABzU/b2rncFUoQHk/s400/Create+Account+Use+Case.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_WwraMgReU6c/Svil9wNGN3I/AAAAAAAABzc/eiLbBOVRAL4/s1600-h/Update+Profile+Use+Case.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_WwraMgReU6c/Svil9wNGN3I/AAAAAAAABzc/eiLbBOVRAL4/s400/Update+Profile+Use+Case.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_WwraMgReU6c/SvimBwfRl-I/AAAAAAAABzk/HJDdY4mLUNw/s1600-h/Social+Network+Class.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_WwraMgReU6c/SvimBwfRl-I/AAAAAAAABzk/HJDdY4mLUNw/s400/Social+Network+Class.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_WwraMgReU6c/SvimHDlSnjI/AAAAAAAABzs/ma_FeucwSyI/s1600-h/Member+Profile+Classes.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_WwraMgReU6c/SvimHDlSnjI/AAAAAAAABzs/ma_FeucwSyI/s400/Member+Profile+Classes.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So I use UML, despite where software architecture is heading (e.g. &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Domain-specific_modeling" rel="wikipedia" title="Domain-specific modeling"&gt;Domain-Specific Modeling&lt;/a&gt;), because I've been doing it for a long time and I think it is a great &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Modeling_language" rel="wikipedia" title="Modeling language"&gt;modeling language&lt;/a&gt;.&amp;nbsp; It's general, robust, perhaps a little complex (have you read the &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Object_Management_Group" rel="wikipedia" title="Object Management Group"&gt;OMG&lt;/a&gt; UML 2.x specs) and it's what I like.&amp;nbsp; I've noticed that you can use UML to model a lot of things that aren't software.&amp;nbsp; You can model anything that is a process and that has parts, which makes sense since a process that has nothing to process or process by is not a very interesting process.&amp;nbsp; But more on this later.&lt;br /&gt;&lt;br /&gt;The first use cases (I am doing this design in no particular order) are the simple member account creation and the member profile update.&amp;nbsp; Note that the Account subsystem (it is assumed that Account is a subsystem of Social Network) contains the Profile subsystem.&lt;br /&gt;&lt;br /&gt;The classes are simple. We have the Social Network class and show that it contains 0 or more members.&amp;nbsp; And we show a member class that contains a profile class that itself contains some sample classes (Photo, Interest and Bio).&amp;nbsp; Obviously none of this is concrete, but the names are informative and are good enough for this purpose.&lt;br /&gt;&lt;br /&gt;Okay.&amp;nbsp; More later.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/0e48960d-5569-47c7-8d32-a8ed49a2ed98/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=0e48960d-5569-47c7-8d32-a8ed49a2ed98" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5717343927600530546-5893545743147295982?l=clancy-software-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clancy-software-architecture.blogspot.com/feeds/5893545743147295982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clancy-software-architecture.blogspot.com/2009/11/social-network.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/5893545743147295982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/5893545743147295982'/><link rel='alternate' type='text/html' href='http://clancy-software-architecture.blogspot.com/2009/11/social-network.html' title='A Social Network'/><author><name>Thomas Clancy</name><uri>https://profiles.google.com/107961605644636368081</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-4HoaDOtwrhw/AAAAAAAAAAI/AAAAAAAAB_I/Sw4XlNhYnmo/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WwraMgReU6c/Svil1qo2xOI/AAAAAAAABzU/b2rncFUoQHk/s72-c/Create+Account+Use+Case.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5717343927600530546.post-5669617778508574637</id><published>2009-10-17T12:29:00.000-07:00</published><updated>2009-10-17T12:29:55.940-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming language'/><category scheme='http://www.blogger.com/atom/ns#' term='Computer programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Architect'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Software Architecture: What is it?</title><content type='html'>&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/3/39/Crystal_128_kivio.png" /&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/3/39/Crystal_128_kivio.png" imageanchor="1" linkindex="147" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This is hardly an introduction to the subject, but it might serve to give the non-technical some idea about the nature of this blog and what it means to design and build software. At least that's the plan. So onward we go.&lt;br /&gt;&lt;br /&gt;I am very proud to say that I am a &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Software_architect" linkindex="148" rel="wikipedia" title="Software architect"&gt;software architect&lt;/a&gt;.&amp;nbsp; And when asked to explain just what it is that I do I answer with something like: "Well, a little bit of this, a little bit of that.&amp;nbsp; I draw pictures, write papers, build prototypes...&amp;nbsp; Oh, and I get paid a ridiculous amount of money." Rarely does anyone probe further, but sometimes I'll be asked just how much money does a software architect make, to which I answer: "quite a bit more than one might think," which of course is really not an answer, but for some reason it works to redirect the conversation on to something else, which most of the time becomes mundane; it is at this point that I tune out the noise and enjoy the pleasure of thinking about software.&lt;br /&gt;&lt;br /&gt;But what is a software architect and what is &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Software_architecture" linkindex="149" rel="wikipedia" title="Software architecture"&gt;software architecture&lt;/a&gt;? There are very few people not in the software industry who have heard these terms, and fewer still who think they know what these mean--in fact not many (if any) software architects know what software architecture is, including myself.&amp;nbsp; But I suppose one answer is that a software architect designs software by building models using an arcane language called a modeling language to describe the intended behavior of the software. This is then read by &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Computer_programming" linkindex="150" rel="wikipedia" title="Computer programming"&gt;programmers&lt;/a&gt; and &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Software_engineering" linkindex="151" rel="wikipedia" title="Software engineering"&gt;software engineers&lt;/a&gt; who use their own arcane language called a &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Programming_language" linkindex="152" rel="wikipedia" title="Programming language"&gt;programming language&lt;/a&gt; to create, ideally, software that behaves as the software architect's design dictates.&lt;br /&gt;&lt;br /&gt;This blog, then, is intended to inform the interested about the pleasures and pitfalls of &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Software_design" linkindex="153" rel="wikipedia" title="Software design"&gt;software design&lt;/a&gt;.&amp;nbsp; Certainly the nature of this blog is technical, but not so much so that the intelligent layman won't be able to grasp the general concepts.&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/fe84f401-42e6-4950-b51d-f3db4f11bc80/" linkindex="154" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=fe84f401-42e6-4950-b51d-f3db4f11bc80" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5717343927600530546-5669617778508574637?l=clancy-software-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clancy-software-architecture.blogspot.com/feeds/5669617778508574637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clancy-software-architecture.blogspot.com/2009/10/software-architecture-what-is-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/5669617778508574637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/5669617778508574637'/><link rel='alternate' type='text/html' href='http://clancy-software-architecture.blogspot.com/2009/10/software-architecture-what-is-it.html' title='Software Architecture: What is it?'/><author><name>Thomas Clancy</name><uri>https://profiles.google.com/107961605644636368081</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-4HoaDOtwrhw/AAAAAAAAAAI/AAAAAAAAB_I/Sw4XlNhYnmo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5717343927600530546.post-9049745560601874992</id><published>2009-10-13T05:30:00.001-07:00</published><updated>2009-10-13T05:30:41.603-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Advertising'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Disclosure Policy</title><content type='html'>This policy is valid from 11 November 2008&lt;br /&gt;&lt;br /&gt;&amp;nbsp;This blog is a &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Blog" linkindex="44" rel="wikipedia" title="Blog"&gt;personal blog&lt;/a&gt; written and edited by me. For questions about this blog, please contact&amp;nbsp; Thomas Clancy (thomas.clancy@mac.com).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;This blog accepts forms of cash advertising, sponsorship, paid insertions or other forms of compensation.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;This blog abides by word of mouth marketing standards. We believe in honesty of relationship, opinion and identity. The compensation received may influence the advertising content, topics or posts made in this blog. That content, advertising space or post will be clearly identified as paid or sponsored content.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;The owner(s) of this blog is compensated to provide opinion on products, services, websites and various other topics. Even though the owner(s) of this blog receives compensation for our posts or advertisements, we always give our honest opinions, findings, beliefs, or experiences on those topics or products. The views and opinions expressed on this blog are purely the bloggers' own. Any product claim, statistic, quote or other representation about a product or service should be verified with the manufacturer, provider or party in question.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;This blog does not contain any content which might present a conflict of interest.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To get your own policy, go to &lt;a href="http://disclosurepolicy.org/" linkindex="45"&gt;DisclosurePolicy.org&lt;/a&gt;.&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/fa512cd6-41b3-4fda-aa63-02e5b264f5ad/" linkindex="46" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=fa512cd6-41b3-4fda-aa63-02e5b264f5ad" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5717343927600530546-9049745560601874992?l=clancy-software-architecture.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://clancy-software-architecture.blogspot.com/feeds/9049745560601874992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://clancy-software-architecture.blogspot.com/2009/10/disclosure-policy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/9049745560601874992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5717343927600530546/posts/default/9049745560601874992'/><link rel='alternate' type='text/html' href='http://clancy-software-architecture.blogspot.com/2009/10/disclosure-policy.html' title='Disclosure Policy'/><author><name>Thomas Clancy</name><uri>https://profiles.google.com/107961605644636368081</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-4HoaDOtwrhw/AAAAAAAAAAI/AAAAAAAAB_I/Sw4XlNhYnmo/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
