<?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-16995443</id><updated>2011-04-22T05:15:21.379+08:00</updated><title type='text'>Hall of self-destruction (Hopefuly not)</title><subtitle type='html'>Uhh... this is my first blog and there's not much I know about that can be done... Gimme time to figure it out.

When things get better, here would be a place to share about my not-so-socially-accepted interests... or whatever that comes in my mind...

Ah.. oh yes, and for educational purpose as well.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16995443.post-114477561658872673</id><published>2006-04-12T00:58:00.000+08:00</published><updated>2006-04-12T01:13:36.626+08:00</updated><title type='text'>Software Design Patterns: How much do you understand?</title><content type='html'>referenced from: &lt;a href="http://my.execpc.com/%7Egopalan/design/structural.html"&gt;http://my.execpc.com/~gopalan/design/structural.html&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;The Adapter Design Pattern is a type of design pattern that is used for converting the interface of a class into an interface that its clients expect to see. This pattern allows incompatible interfaces to work together.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    The Bridge Design Pattern separates an abstract interface from its implementation so that both the interface and its implementation can change without any dependancy between each other.      &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    The Composite Design Pattern is used to compose objects so that they can be represented in part-whole hierarchies in tree-structures. This pattern allows clients to treat individual objects equally.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    The Facade Design Pattern is used to provide a high-level interface that makes the subsystem easier to use. It helps create a unified interface to a set of interfaces in the subsystem.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;    The Proxy Design Pattern is used is used &lt;/span&gt;&lt;span style="font-family:Arial;font-size:100%;"&gt;when it is required to use another object as a substitute         to control access to this object.&lt;br /&gt;&lt;br /&gt;Referenced from: &lt;a href="http://en.wikipedia.org/wiki/Observer_pattern"&gt;http://en.wikipedia.org/wiki/Observer_pattern&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Observer Pattern:&lt;br /&gt;&lt;/span&gt;&lt;p&gt;The typical usages of the observer pattern:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Listening for an &lt;a href="http://en.wikipedia.org/w/index.php?title=External_event&amp;action=edit" class="new" title="External event"&gt;external event&lt;/a&gt; (such as a &lt;a href="http://en.wikipedia.org/w/index.php?title=User_action&amp;amp;action=edit" class="new" title="User action"&gt;user action&lt;/a&gt;). See &lt;a href="http://en.wikipedia.org/wiki/Event-driven_programming" title="Event-driven programming"&gt;Event-driven programming&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;Listening for changes of the value of a property of an object. Note that often callbacks called in response of a property value change also change values of some properties, so sometimes causing an &lt;a href="http://en.wikipedia.org/wiki/Event_cascade" title="Event cascade"&gt;event cascade&lt;/a&gt;. See &lt;a href="http://ex-code.com/articles/binding-properties.html" class="external text" title="http://ex-code.com/articles/binding-properties.html"&gt;this article&lt;/a&gt; for a discussion about using observer pattern for watching over changes of properties and updating other properties accordingly.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The observer pattern is also very often associated with the &lt;a href="http://en.wikipedia.org/wiki/Model-view-controller" title="Model-view-controller"&gt;Model-view-controller&lt;/a&gt; (MVC) paradigm. In MVC, the observer pattern is used to create a loose coupling between the model and the view. Typically, a modification in the model triggers the notification of model observers which are actually the views.&lt;/p&gt;                        &lt;!-- start content --&gt;    &lt;p&gt;In computer programming, the &lt;b&gt;strategy pattern&lt;/b&gt; is a particular software design pattern, whereby algorithms can be selected on-the-fly at runtime depending on conditions, like strategies in a war situation.&lt;/p&gt; &lt;p&gt;The strategy pattern is useful for situations where it is necessary to dynamically swap the algorithms used in an application. The strategy pattern is intended to provide a means to define a family of algorithms, encapsulate each one as an object, and make them interchangeable. The strategy pattern lets the algorithms vary independently from clients that use them.&lt;/p&gt;Uses of the Command Pattern:&lt;br /&gt;&lt;p&gt;Command objects are useful for implementing:&lt;/p&gt; &lt;p&gt;&lt;b&gt;Multi-level &lt;a href="http://en.wikipedia.org/wiki/Undo" title="Undo"&gt;undo&lt;/a&gt;.&lt;/b&gt; If all user actions in a program are implemented as command objects, the program can keep a stack of the most recently executed commands. When the user wants to undo a command, the program simply pops the most recent command object and executes its &lt;tt&gt;undo()&lt;/tt&gt; method.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Database_transaction" title="Database transaction"&gt;Transactional&lt;/a&gt; behavior.&lt;/b&gt; Undo is perhaps even more essential when it's called &lt;i&gt;rollback&lt;/i&gt; and happens automatically when an operation fails partway through. &lt;a href="http://en.wikipedia.org/wiki/Installer" title="Installer"&gt;Installers&lt;/a&gt; need this. So do databases. Command objects can also be used to implement &lt;a href="http://en.wikipedia.org/wiki/Two-phase_commit" title="Two-phase commit"&gt;two-phase commit&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Progress_bar" title="Progress bar"&gt;Progress bars&lt;/a&gt;.&lt;/b&gt; Suppose a program has a sequence of commands that it executes in order. If each command object has a &lt;tt&gt;getEstimatedDuration()&lt;/tt&gt; method, the program can easily estimate the total duration. It can show a progress bar that meaningfully reflects how close the program is to completing all the tasks.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Wizard_%28software%29" title="Wizard (software)"&gt;Wizards&lt;/a&gt;.&lt;/b&gt; Often a wizard presents several pages of configuration for a single action that happens only when the user clicks the "Finish" button on the last page. In these cases, a natural way to separate user interface code from application code is to implement the wizard using a command object. The command object is created when the wizard is first displayed. Each wizard page stores its GUI changes in the command object, so the object is populated as the user progresses. "Finish" simply triggers a call to &lt;tt&gt;execute()&lt;/tt&gt;. This way, the command class contains no user interface code.&lt;/p&gt; &lt;p&gt;&lt;b&gt;GUI buttons and menu items.&lt;/b&gt; In &lt;a href="http://en.wikipedia.org/wiki/Swing_%28Java%29" title="Swing (Java)"&gt;Swing&lt;/a&gt; programming, an &lt;code&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/Action.html" class="external text" title="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/Action.html"&gt;Action&lt;/a&gt;&lt;/code&gt; is a command object. In addition to the ability to perform the desired command, an &lt;code&gt;Action&lt;/code&gt; may have an associated icon, keyboard shortcut, tooltip text, and so on. A toolbar button or menu item component may be completely initialized using only the &lt;code&gt;Action&lt;/code&gt; object.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Thread_pool" title="Thread pool"&gt;Thread pools&lt;/a&gt;.&lt;/b&gt; A typical, general-purpose thread pool class might have a public &lt;code&gt;addTask()&lt;/code&gt; method that adds a work item to an internal queue of tasks waiting to be done. It maintains a pool of threads that execute commands from the queue. The items in the queue are command objects. Typically these objects implement a common interface such as &lt;code&gt;java.lang.Runnable&lt;/code&gt; that allows the thread pool to execute the command even though the thread pool class itself was written without any knowledge of the specific tasks for which it would be used.&lt;/p&gt; &lt;p&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Macro" title="Macro"&gt;Macro&lt;/a&gt; recording.&lt;/b&gt; If all user actions are represented by command objects, a program can record a sequence of actions simply by keeping a list of the command objects as they are executed. It can then "play back" the same actions by executing the same command objects again in sequence. If the program embeds a scripting engine, each command object can implement a &lt;tt&gt;toScript()&lt;/tt&gt; method, and user actions can then be easily recorded as scripts.&lt;/p&gt;Abstract Factory Pattern:&lt;br /&gt;&lt;br /&gt;    The &lt;b&gt;Abstract Factory Pattern&lt;/b&gt; provides a way to encapsulate a group of individual &lt;a href="http://en.wikipedia.org/wiki/Factory_method_pattern" title="Factory method pattern"&gt;factories&lt;/a&gt; that have a common theme. In normal usage, the client software would create a concrete implementation of the &lt;a href="http://en.wikipedia.org/wiki/Abstract_factory" title="Abstract factory"&gt;abstract factory&lt;/a&gt; and then use the generic &lt;a href="http://en.wikipedia.org/wiki/Interface_%28computer_science%29" title="Interface (computer science)"&gt;interfaces&lt;/a&gt; to create the concrete &lt;a href="http://en.wikipedia.org/wiki/Object_%28computer_science%29" title="Object (computer science)"&gt;objects&lt;/a&gt; that are part of the theme. The &lt;a href="http://en.wikipedia.org/wiki/Client_%28computing%29" title="Client (computing)"&gt;client&lt;/a&gt; does not know (nor care) about which concrete objects it gets from each of these internal factories since it uses only the generic interfaces of their products. This pattern separates the details of implementation of a set of objects from its general usage.&lt;br /&gt;&lt;br /&gt;Builder Pattern:&lt;br /&gt;&lt;br /&gt;    The &lt;b&gt;builder pattern&lt;/b&gt; is used to enable the &lt;a href="http://en.wikipedia.org/wiki/Creation" title="Creation"&gt;creation&lt;/a&gt; of a variety of complex objects from one &lt;a href="http://en.wikipedia.org/w/index.php?title=Source_object&amp;action=edit" class="new" title="Source object"&gt;source object&lt;/a&gt;. The source object may consist of a variety of parts that contribute individually to the creation of each complex object through a set of common &lt;a href="http://en.wikipedia.org/w/index.php?title=Interface_call&amp;amp;action=edit" class="new" title="Interface call"&gt;interface calls&lt;/a&gt; of the Abstract Builder class.&lt;br /&gt;&lt;br /&gt;Comments: I have the general idea of how each pattern works, but have to spend more time to the textbook and web contents to familiarize them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16995443-114477561658872673?l=karleguarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/114477561658872673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16995443&amp;postID=114477561658872673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114477561658872673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114477561658872673'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/2006/04/software-design-patterns-how-much-do.html' title='Software Design Patterns: How much do you understand?'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16995443.post-114477457582308709</id><published>2006-04-12T00:49:00.000+08:00</published><updated>2006-04-12T00:56:15.836+08:00</updated><title type='text'>Why do software projects fail so often?</title><content type='html'>&lt;p align="justify"&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;Referenced from : &lt;a href="http://members.cox.net/johnsuzuki/softfail.htm"&gt;http://members.cox.net/johnsuzuki/softfail.htm&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;The &lt;strong&gt;predictable&lt;/strong&gt; findings from the various projects included (2) :&lt;/span&gt;&lt;/p&gt;  &lt;blockquote&gt; &lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;  &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;  &lt;!--msthemelist--&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;Many of the runaway projects are (or were) "overly       ambitious." It is well known in the field that large projects are problematic.&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;tr&gt;&lt;td valign="baseline" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;Most of the projects failed from a multiplicity of causes. There       may or may not have been a dominant cause, but there were several problems contributing to       many of the runaways.&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;tr&gt;&lt;td valign="baseline" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;Management problems were more frequently a dominant cause than       technical problems. But see the list of surprising findings below.&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;tr&gt;&lt;td valign="baseline" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;Schedule overruns were more common (89 percent) than cost       overruns (62 percent).&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt; &lt;/span&gt;&lt;/blockquote&gt;  &lt;p align="justify"&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;The &lt;strong&gt;surprising&lt;/strong&gt; findings from the study included (2) :&lt;/span&gt;&lt;/p&gt;   &lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;  &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;  &lt;!--msthemelist--&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;Survey respondents thought that there would be more runaways in       the government and financial sectors, and fewer in service and manufacturing. But the       survey findings found all such sectors equally susceptible.&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;tr&gt;&lt;td valign="baseline" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;Respondents were optimistic about the trend in runaways; 42       percent believed they would decrease in number, while only 8 percent felt they would       increase.&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;tr&gt;&lt;td valign="baseline" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;The use of packaged software did not help in reducing the       incidence of runaways. Of the runaway projects studied, 47 percent consisted of mixed       custom and packaged software; 24 percent were custom software; and 22 percent were       packaged software.&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;tr&gt;&lt;td valign="baseline" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;Runaway projects showed their true colors early in the project       history. More than half started showing symptoms during system development, and 25 percent       showed those symptoms during initial planning.&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;tr&gt;&lt;td valign="baseline" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;In spite of the above, visibility into the existence of a runaway       came first of all from the project team (72 percent); only 19 percent were spotted       initially at the senior management level.&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;tr&gt;&lt;td valign="baseline" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;p align="justify"&gt;&lt;em&gt;Technology is dramatically increasing as a cause of runaways.       "Technology new to the organization" was the fourth most common problem in the       runaway projects.&lt;/em&gt;&lt;/p&gt;     &lt;!--mstheme--&gt;&lt;/span&gt;&lt;!--msthemelist--&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;!--msthemelist--&gt;&lt;tr&gt;&lt;td valign="baseline" width="42"&gt;&lt;img src="http://members.cox.net/johnsuzuki/_themes/jksblends/blebul1a.gif" alt="bullet" height="15" hspace="13" width="15" /&gt;&lt;/td&gt;&lt;td valign="top" width="100%"&gt;&lt;!--mstheme--&gt;&lt;p align="justify"&gt;&lt;span style="font-family:Trebuchet MS, Arial, Helvetica;"&gt;&lt;em&gt;Risk management appears more and more frequently in the software       management literature. But 55 percent of the runaway projects had not performed any risk       management, and of those 38 percent who did (some respondees did not know whether it was       used or not), half of them did not use the risk findings once the project was underway.&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;    To prevent the predictable causes to happen, a good management before the actual work of the project starts is a must, outcomes should be predicted and prepared so that the chance of sudden change to the project can be handled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16995443-114477457582308709?l=karleguarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/114477457582308709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16995443&amp;postID=114477457582308709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114477457582308709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114477457582308709'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/2006/04/why-do-software-projects-fail-so-often.html' title='Why do software projects fail so often?'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16995443.post-114477409209995455</id><published>2006-04-12T00:40:00.000+08:00</published><updated>2006-04-12T00:49:00.560+08:00</updated><title type='text'>What is test-driven development?</title><content type='html'>&lt;p style="font-family: lucida grande;"&gt;&lt;b&gt;Referenced from: wikipedia&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="font-family: lucida grande;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style="font-family: lucida grande;"&gt;&lt;b&gt;Test-Driven Development&lt;/b&gt; (TDD) is a computer programming technique that involves writing test cases first and then implementing the code necessary to pass the tests. The goal of test-driven development is to achieve rapid feedback and implements the "illustrate the main line" approach to constructing a program. This technique is heavily emphasized in extreme programmning.&lt;/p&gt; &lt;p style="font-family: lucida grande;"&gt;Practitioners emphasize that test-driven development is primarily a method of designing software, not just a method of testing. The method is also used for removal of software defects&lt;/p&gt;&lt;p style="font-family: lucida grande;"&gt;Test-driven development can provide great value to building software better and faster. It offers more than just simple validation of correctness, but can also drive the design of a program. By focusing on the test cases first, one must imagine how the functionality will be used by clients (in this case, the test cases). Therefore, the programmer is only concerned with the interface and not the implementation. This benefit is complementary to Design by contract as approaches it through test cases rather than mathematical assertions..&lt;/p&gt;&lt;p style="font-family: lucida grande;"&gt;A TDD cycle wuold look like this:&lt;/p&gt;&lt;p style="font-family: lucida grande;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/2413/1628/1600/TDDCycle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/2413/1628/320/TDDCycle.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16995443-114477409209995455?l=karleguarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/114477409209995455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16995443&amp;postID=114477409209995455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114477409209995455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114477409209995455'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/2006/04/what-is-test-driven-development.html' title='What is test-driven development?'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16995443.post-114475665257081423</id><published>2006-04-11T19:53:00.000+08:00</published><updated>2006-04-11T19:57:32.586+08:00</updated><title type='text'>How Internet email works</title><content type='html'>The article reminds me of how HTTP works with DNS.&lt;br /&gt;Both requires query to the DNS to obtain the actual destination address and handled by propriate protocols.&lt;br /&gt;&lt;br /&gt;However, it would be nice to know more about the architecture of how email works, as well as the definition of POP3, IMAP4 etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16995443-114475665257081423?l=karleguarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/114475665257081423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16995443&amp;postID=114475665257081423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114475665257081423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114475665257081423'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/2006/04/how-internet-email-works.html' title='How Internet email works'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16995443.post-114296226961585410</id><published>2006-03-22T01:26:00.000+08:00</published><updated>2006-03-22T01:31:09.630+08:00</updated><title type='text'>Software quality: What makes a program code good?</title><content type='html'>Besides running speed, resources requirement, a program code should also be "developer-friendly" in order to be defined as a good program code.&lt;br /&gt;&lt;br /&gt;Imagine a source code in a company, which is handled by a whole new team as the former team(the original code author) is gone, having totally no idea for what the code is about and yet fails to understand it by read the source code. It wont be considered as a good program code as it hinders the future process of the company.&lt;br /&gt;&lt;br /&gt;Therefore, in my opinion, a good  program code should also be easy to understand as well as  functioning well and properly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16995443-114296226961585410?l=karleguarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/114296226961585410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16995443&amp;postID=114296226961585410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114296226961585410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114296226961585410'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/2006/03/software-quality-what-makes-program.html' title='Software quality: What makes a program code good?'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16995443.post-114296184980740286</id><published>2006-03-22T01:18:00.000+08:00</published><updated>2006-03-22T01:26:00.586+08:00</updated><title type='text'>Stuff that lets agile software developers show off what they believe in</title><content type='html'>Born to refactor:&lt;br /&gt;From www.cs.utu.fi/kurssit/Programming-III/Refactoring.pdf&lt;br /&gt;&lt;br /&gt;• Two definitions, the object and act of change in software– A change made to the internal structure of software to make iteasier to understand and cheaper to modify without changing itsobservable behavior.– To restructure software by applying a series of refactoringns&lt;br /&gt;&lt;br /&gt;– The design of software will decay – as changes aredone the code (and design) loses its originalstructure. The self-documenting property of the codevanishes, the design is not any more readable in thecode.&lt;br /&gt;– Refactoring does the opposite, it creates design in theexisting code.&lt;br /&gt;– Regular refactoring adjusts the design piece by pieceto changing functionality&lt;br /&gt;&lt;br /&gt;YAGNI - "You Aint Gonna Need It":&lt;br /&gt;From &lt;a href="http://c2.com/cgi/wiki?YouArentGonnaNeedIt"&gt;http://c2.com/cgi/wiki?YouArentGonnaNeedIt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Refers to implementing stuff only you need in a program.&lt;br /&gt;&lt;br /&gt;There are two main reasons to practise &lt;a href="http://c2.com/cgi/wiki?YagNi"&gt;YagNi&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You save time, because you avoid writing code that you turn out not to need. &lt;/li&gt;&lt;li&gt;Your code is better, because you avoid polluting it with 'guesses' that turn out to be more or less wrong but stick around anyway. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16995443-114296184980740286?l=karleguarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/114296184980740286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16995443&amp;postID=114296184980740286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114296184980740286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114296184980740286'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/2006/03/stuff-that-lets-agile-software.html' title='Stuff that lets agile software developers show off what they believe in'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16995443.post-114296135305753178</id><published>2006-03-22T01:11:00.000+08:00</published><updated>2006-03-22T01:15:53.086+08:00</updated><title type='text'>Software Engineering Certification Programs: What Can You Learn from Them?</title><content type='html'>&lt;a href="http://www.computer.org/portal/site/ieeecs/menuitem.c5efb9b8ade9096b8a9ca0108bcd45f3/index.jsp?&amp;pName=ieeecs_level1&amp;amp;path=ieeecs/education/certification&amp;file=Specifications.xml&amp;amp;xsl=generic.xsl&amp;#IV"&gt;IV. Software Construction&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.computer.org/portal/site/ieeecs/menuitem.c5efb9b8ade9096b8a9ca0108bcd45f3/index.jsp?&amp;amp;pName=ieeecs_level1&amp;path=ieeecs/education/certification&amp;amp;file=Specifications.xml&amp;xsl=generic.xsl&amp;amp;#XI"&gt;XI. Software Quality&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;These are the 2 topics which I think is not included in the course.&lt;br /&gt;&lt;br /&gt;Software Construction involves skills such as code design &amp; error processing&lt;br /&gt;which doesnt suit the goal of the course in my opinion&lt;br /&gt;&lt;br /&gt;Whereas software quality.. I dont really have an idea why it is not included...&lt;br /&gt;A possible reason can to this, it is too complicated for us to handle without a clear knowledge on what we're learning right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16995443-114296135305753178?l=karleguarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/114296135305753178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16995443&amp;postID=114296135305753178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114296135305753178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/114296135305753178'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/2006/03/software-engineering-certification.html' title='Software Engineering Certification Programs: What Can You Learn from Them?'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16995443.post-113014581736563516</id><published>2005-10-24T17:19:00.000+08:00</published><updated>2005-10-24T17:23:49.443+08:00</updated><title type='text'>UML Tools</title><content type='html'>So far it's really hard to make a decision for which UML tool is the most suitable one. At the current progress, I'm still unfamiliar with the actual process in building an UML diagram for a real project, so there might be functions in the different UML tools that are overlooked.&lt;br /&gt;&lt;br /&gt;However, the &lt;a href="http://gentleware.com/"&gt;Poseidon for UML Community Edition&lt;/a&gt; which was used in the tutorial class had a good interface, but somehow I have a belief in my mind that a good interface often means the program is lacking of in depth functions... So.. I probably need more time to determine which UML tool is the best for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16995443-113014581736563516?l=karleguarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/113014581736563516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16995443&amp;postID=113014581736563516' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/113014581736563516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/113014581736563516'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/2005/10/uml-tools.html' title='UML Tools'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16995443.post-112805873724246633</id><published>2005-09-30T12:57:00.000+08:00</published><updated>2005-09-30T13:38:57.246+08:00</updated><title type='text'>Essential Software Engineering skills</title><content type='html'>So... this is the post to share my opinion on which software engineering skills are the most important. Here we go:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Communication with clients and team crew&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;This is probably the most crucial step to set up the objectives and task of a project. Without a clear communication with the clients, effort and time can be wasted on tasks which does not fit the requirement of the clients, while bad communication in between team crew, also creates the problem of bad quality of task management.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Analytical mind&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;To every engineers this is a must in order to provide solutions to problem which may be existed in a project. It also helps to create a task schedule so that the flow of work can become time saving and effective.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And uhh... here's a link to &lt;a href="http://www.knowledgeisfun.com/S/So/Software-engineering.php"&gt;knowledgeisfun.com&lt;/a&gt;, which provides an article about software engineering. There're also other nice articles on other topics as well.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/16995443-112805873724246633?l=karleguarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://karleguarth.blogspot.com/feeds/112805873724246633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=16995443&amp;postID=112805873724246633' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/112805873724246633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/16995443/posts/default/112805873724246633'/><link rel='alternate' type='text/html' href='http://karleguarth.blogspot.com/2005/09/essential-software-engineering-skills.html' title='Essential Software Engineering skills'/><author><name>Karleguarth</name><uri>http://www.blogger.com/profile/17033338388348395021</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
