<?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-5610328616502847896</id><updated>2011-07-08T03:56:57.546-07:00</updated><title type='text'>Visual Patterns</title><subtitle type='html'>A blog site to discuss various software engineer concepts, specific programming tools, languages and frameworks (e.g. rails, flex, mysql, linux) and related stuff.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://visualpatterns.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://visualpatterns.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>anil</name><uri>http://www.blogger.com/profile/00736915119487655471</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_JrpJW_GQyxs/SoTr1zbbTSI/AAAAAAAAIJY/4U7QJd8OCCE/S220/anil2.jpg.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5610328616502847896.post-6528331085667186605</id><published>2009-08-13T21:56:00.000-07:00</published><updated>2009-08-13T21:58:05.230-07:00</updated><title type='text'>Personal Opinion: UML Diagrams</title><content type='html'>Over the years, I have used several types of UML diagrams, including the essential class diagram, package diagrams (my favorite) and the less often seen, deployment diagram.&lt;br /&gt;&lt;br /&gt;Then, there are ones that I am not a fan of, such as the popular sequence diagram diagrams. I don't like this diagram because I find it gets complex and cumbersome quickly. However, I'll be the first to tell you that I do not have better/alternative ways to do what some of these diagrams do (at least not yet anyways but eventually I hope to as I'm currently conducting some research in better ways to model/diagram -- check this website for updates periodically, if you are interested).&lt;br /&gt;&lt;br /&gt;Meanwhile, I do use UML diagrams when appropriate because I do think they add value when used in the right place and at the right time. In fact, I feel UML diagrams are most useful when generated using reverse engineering tools to document the system already built (perhaps during a system handover).&lt;br /&gt;&lt;br /&gt;I hope I don’t come across as being dismissive about UML, because this isn't quite my intention, especially since it took a lot of work over a number of years from some intelligent people to make a standard such as UML even possible (in fact, this is precisely why I'm basing all my research on work that has already been done instead of simply trying to reinvent the wheel).&lt;br /&gt;&lt;br /&gt;My main complaint about UML is that it requires special tools, which can be expensive for an organization due to software licensing costs. In addition, some of these tools can have a steep learning curve and hence require potential training for the people using these tools (one common example being Rational Rose), resulting in additional cost to the organization.&lt;br /&gt;&lt;br /&gt;Furthermore, simpler tools such as OpenOffice.org, Microsoft PowerPoint, Microsoft Visio and other similar tools provide the ability to connect a variety of shapes (rectangles, for example) using connectors, which are essentially straight or curved lines that connect two objects and stay tied to those objects when you move them around. This is a powerful feature since it enables you to create flowchart-like diagrams. I use connectors extensively as you will see in many free-form diagrams in my work (books, articles, etc.).&lt;br /&gt;&lt;br /&gt;Also, I tend to follow practices recommended by Agile Modeling such as modeling with a purpose and producing good enough artifacts. Furthermore, I only update these when it hurts, since many artifacts can be thrown away after they have served their purpose – after implementing a design in code, you already have your documentation… yes, the code (as I mentioned earlier, code can be reverse engineered to produce pretty class and other diagrams).&lt;br /&gt;&lt;br /&gt;What makes the idea of heavy documentation seem like sheer madness, is the fact that I cannot recall one software development project where the documentation was maintained till the very end and matched the end product. This is the case because we live in a fast-paced world with sometimes unrealistic software delivery deadlines and it becomes a difficult task to keep the documentation up to date.&lt;br /&gt;&lt;br /&gt;In summary, use UML diagrams when appropriate but don't be shy or hesitant about using simple yet effective, free-form diagrams. Let me end by providing the same blurb from the agilemodeling.com website, "your goal is to build a shared understanding, it isn’t to write detailed documentation".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5610328616502847896-6528331085667186605?l=visualpatterns.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://visualpatterns.blogspot.com/feeds/6528331085667186605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5610328616502847896&amp;postID=6528331085667186605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/6528331085667186605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/6528331085667186605'/><link rel='alternate' type='text/html' href='http://visualpatterns.blogspot.com/2009/08/personal-opinion-uml-diagrams.html' title='Personal Opinion: UML Diagrams'/><author><name>anil</name><uri>http://www.blogger.com/profile/00736915119487655471</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_JrpJW_GQyxs/SoTr1zbbTSI/AAAAAAAAIJY/4U7QJd8OCCE/S220/anil2.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5610328616502847896.post-1784155999115938618</id><published>2009-08-13T21:53:00.000-07:00</published><updated>2009-08-13T21:54:07.585-07:00</updated><title type='text'>From Java to Ruby... and Back</title><content type='html'>&lt;a href="http://visualpatterns.com/presentations/presentation-hemrajani-javaone-may2008-v5.pdf"&gt;View a presentation&lt;/a&gt; from JavaOne 2008 (PDF; 8.4 MB), titled "From Java to Ruby... and Back." Learn how and why Java and Ruby work so well together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5610328616502847896-1784155999115938618?l=visualpatterns.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://visualpatterns.blogspot.com/feeds/1784155999115938618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5610328616502847896&amp;postID=1784155999115938618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/1784155999115938618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/1784155999115938618'/><link rel='alternate' type='text/html' href='http://visualpatterns.blogspot.com/2009/08/from-java-to-ruby-and-back.html' title='From Java to Ruby... and Back'/><author><name>anil</name><uri>http://www.blogger.com/profile/00736915119487655471</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_JrpJW_GQyxs/SoTr1zbbTSI/AAAAAAAAIJY/4U7QJd8OCCE/S220/anil2.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5610328616502847896.post-5257668795894840360</id><published>2009-08-13T21:51:00.000-07:00</published><updated>2009-08-13T21:55:04.378-07:00</updated><title type='text'>AMDD using Comic Illustrations</title><content type='html'>&lt;a href="http://visualpatterns.com/comics.php"&gt;See&lt;/a&gt; an Agile Model Driven Development (AMDD) 8-week project illustrated using comics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5610328616502847896-5257668795894840360?l=visualpatterns.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://visualpatterns.blogspot.com/feeds/5257668795894840360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5610328616502847896&amp;postID=5257668795894840360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/5257668795894840360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/5257668795894840360'/><link rel='alternate' type='text/html' href='http://visualpatterns.blogspot.com/2009/08/ammd-using-comic-illustrations.html' title='AMDD using Comic Illustrations'/><author><name>anil</name><uri>http://www.blogger.com/profile/00736915119487655471</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_JrpJW_GQyxs/SoTr1zbbTSI/AAAAAAAAIJY/4U7QJd8OCCE/S220/anil2.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5610328616502847896.post-7900588973776869846</id><published>2009-08-13T21:49:00.001-07:00</published><updated>2009-08-13T21:50:47.637-07:00</updated><title type='text'>Concept: Agile Draw</title><content type='html'>&lt;a href="http://agiledraw.org/"&gt;Agile Draw&lt;/a&gt; - A virtually notation-less freeform technique for conceptual modeling and marketing your design to others. Highly complementary to UML and Agile methods.&lt;br /&gt;&lt;br /&gt;(Disclaimer: I probably could have picked a better name than Agile Draw since the word "Agile" is so hyped.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5610328616502847896-7900588973776869846?l=visualpatterns.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://visualpatterns.blogspot.com/feeds/7900588973776869846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5610328616502847896&amp;postID=7900588973776869846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/7900588973776869846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/7900588973776869846'/><link rel='alternate' type='text/html' href='http://visualpatterns.blogspot.com/2009/08/concept-agile-draw.html' title='Concept: Agile Draw'/><author><name>anil</name><uri>http://www.blogger.com/profile/00736915119487655471</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_JrpJW_GQyxs/SoTr1zbbTSI/AAAAAAAAIJY/4U7QJd8OCCE/S220/anil2.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5610328616502847896.post-6212985329642627879</id><published>2009-08-13T21:47:00.000-07:00</published><updated>2009-08-13T21:48:35.236-07:00</updated><title type='text'>Effectively Developing Software</title><content type='html'>&lt;a href="http://visualpatterns.com/presentations/visualpatterns-agile-process.pdf"&gt;View a 24-slide presentation&lt;/a&gt; (14MB PDF) on how to effectively develop software using agile processes and models.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5610328616502847896-6212985329642627879?l=visualpatterns.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://visualpatterns.blogspot.com/feeds/6212985329642627879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5610328616502847896&amp;postID=6212985329642627879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/6212985329642627879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/6212985329642627879'/><link rel='alternate' type='text/html' href='http://visualpatterns.blogspot.com/2009/08/effectively-developing-software.html' title='Effectively Developing Software'/><author><name>anil</name><uri>http://www.blogger.com/profile/00736915119487655471</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_JrpJW_GQyxs/SoTr1zbbTSI/AAAAAAAAIJY/4U7QJd8OCCE/S220/anil2.jpg.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5610328616502847896.post-5472536050390659492</id><published>2009-08-13T21:35:00.000-07:00</published><updated>2009-08-13T21:41:45.857-07:00</updated><title type='text'>Concept: Continuous Software Construction Snapshot</title><content type='html'>&lt;p align="center"&gt;&lt;img src="http://visualpatterns.com/concepts/continuous-snapshot-package2class2code.gif" width="762" height="150" border="0"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In my opinion, the Unified Modeling Language (UML) is best suited for physical/detailed modeling of a system (i.e. blueprint style; for conceptual modeling, I prefer something along the lines of &lt;a href="http://agiledraw.org/" target="_blank" class="style1"&gt;Agile Draw&lt;/a&gt;). I believe UML particuarly shines  for reverse engineering diagrams for an existing system, such as the UML package and class diagrams. Recently, I have been thinking of a concept I call &lt;em&gt;Continuous Software Construction Snapshot&lt;/em&gt;. This concept is closely tied (and highly complementary) to the Continuous Integration concept described by Martin Fowler and  Matthew Foemmel at &lt;a href="http://www.martinfowler.com/articles/continuousIntegration.html" target="_blank"&gt;http://www.martinfowler.com/articles/continuousIntegration.html&lt;/a&gt; -- this new concept is described next. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;UML diagrams can be reverse engineered typically using a UML diagramming tool such as Rational Rose, Borland Together, Poseidon, OmniGraffle, or a variety of other tools -- this is done manually by a person. However, in the past I have  used a tool that generated UML diagrams automatically (e.g. on the server side). In the late 90s, I had launched a site called &lt;em&gt;isavix.net &lt;/em&gt;(now developerhub.com), which grew to over 100,000 registered Java developers and won several awards. This site focused on providing free and unique tools versus content. Among other things, we provided a tool called &amp;quot;My UML Diagrams&amp;quot;. This tool enabled users to upload .java and/or .jar files and automatically generated a class diagram on the server side using these file(s) as input. &lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;img src="http://visualpatterns.com/concepts/continuous-snapshot-building.jpg" width="400" height="269"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Given the manual and automatic server-side UML diagram generation I just described, leads us to the notion of &lt;em&gt;Continuous Software Construction Snapshot&lt;/em&gt;. The idea behind this is to show people (e.g. project leads, developers) continuous progress of a software being constructed (developed); it also allows developers to see where their piece fits into the big picture. Similar to how one can see a building or home being constructed, we should be able to get a view of the software under construction. This can be done as follows.&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt;Each time a build (continuous integration) happens, a package diagram and class diagrams are also generated. &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Alternatively, these diagrams can be generated at the time they are needed (e.g. when goes to a web site to see the state of a software application). &lt;/li&gt;&lt;br /&gt;  &lt;/ol&gt;&lt;br /&gt;&lt;p&gt;For example, these generated diagrams could be viewed via a web browser. The first view (presumably after some sort of a welcome screen) a person would see is a package diagram, as shown next.&lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;img src="http://visualpatterns.com/concepts/continuous-snapshot-packagediagram.gif" width="400" height="256" border="1"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;From the package diagram, the user could drill down into a specific package (e.g. web in above diagram) to see a class diagram (shown next) for the classes within that package. &lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;img src="http://visualpatterns.com/concepts/continuous-snapshot-classdiagram.gif" width="399" height="267" border="1"&gt;&lt;/p&gt;&lt;br /&gt;&lt;table border="1" align="center" cellpadding="4" cellspacing="0"&gt;&lt;br /&gt;  &lt;tr&gt;&lt;br /&gt;    &lt;td bgcolor="#DFE4F0"&gt;Note: It is important to keep the level of detail in the generated diagrams to a minimum, in order to make this concept useful. &lt;/td&gt;&lt;br /&gt;  &lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;p align="left"&gt;The next level of detail could be the source code (e.g. actual code, revisions, unit test coverage), perhaps using web-based view of a CVS repository, as shown next. &lt;/p&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;img src="http://visualpatterns.com/concepts/continuous-snapshot-cvs.gif" width="486" height="359" border="1"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p align="left"&gt;Some benefits of this continuous snapshot approach could include:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;Ability for developers to get a &amp;quot;big picture&amp;quot; view of the entire application being coded by multiple developers. &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Getting a birds eye view of how much of the coding (construction) has been completed.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Determining average lines of code produced per developer (e.g. to determine Mythical Man-Month type stuff). &lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Measuring percentage of unit test coverage by comparing unit test code to actual code.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Comparing project velocity to lines of code coded for each iteration.&lt;/li&gt;&lt;br /&gt;  &lt;/ul&gt;&lt;br /&gt;&lt;p align="left"&gt;In summary, &lt;em&gt;Continuous Software Construction Snapshot&lt;/em&gt; can give a project lead, developer or other, a high level view of the application, while enabling them to drill down to details - using this combination of a big picture and low-level details can provide an in-depth understanding of the status and overview of a software application... as it is being built. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5610328616502847896-5472536050390659492?l=visualpatterns.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://visualpatterns.blogspot.com/feeds/5472536050390659492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5610328616502847896&amp;postID=5472536050390659492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/5472536050390659492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5610328616502847896/posts/default/5472536050390659492'/><link rel='alternate' type='text/html' href='http://visualpatterns.blogspot.com/2009/08/concept-continuous-software.html' title='Concept: Continuous Software Construction Snapshot'/><author><name>anil</name><uri>http://www.blogger.com/profile/00736915119487655471</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_JrpJW_GQyxs/SoTr1zbbTSI/AAAAAAAAIJY/4U7QJd8OCCE/S220/anil2.jpg.png'/></author><thr:total>0</thr:total></entry></feed>
