<?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-2321586334599661330</id><updated>2012-02-11T10:11:05.040+07:00</updated><category term='mootools'/><category term='uml'/><category term='hack'/><category term='javascript'/><category term='java'/><category term='ajax'/><category term='CaseStudy'/><category term='Concept'/><category term='netbeans'/><category term='DesignPattern'/><category term='tutorial'/><category term='gwtext'/><title type='text'>another aL</title><subtitle type='html'>Some knowledge that i learn before and i want to share it.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></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-2321586334599661330.post-442542112907647455</id><published>2009-05-29T11:15:00.042+07:00</published><updated>2009-06-02T13:15:52.492+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='mootools'/><title type='text'>Mootools: Introduction of 'Element'</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mootools.net/assets/images/mootools.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 184px; height: 46px;" src="http://mootools.net/assets/images/mootools.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After almost one year i haven't touch GWT-Ext, and i almost forgot about how to use it, for 4 months now i play with &lt;a href="http://mootools.net/"&gt;Mootools&lt;/a&gt; for building dynamic web site (an online store with new way ordering system). I think it is a fun way to build interactive website with Mootools, since i avoid code using Java (my team mainly use PHP for it's developing language). Since i have learn it, maybe i can share my experience about Mootools.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mootools.net/"&gt;Mootools 1.2&lt;/a&gt; (there are many Mootools version, and it is incompatibility between version. Mootools 1.2 is the newest one), is a javascript framework that make you ease to build interactive, dynamic, and rich website. Actually, in beginning i was forced to use it since Joomla/Virtuemart use it (and i don't know that they use Mootools 1.11 when i use Mootools 1.2). I found it quite interesting, well because when I can't get component / widget / something that ready to use for my requirement, I can easily make it by myself. And many components in my project was built by me.&lt;br /&gt;&lt;br /&gt;Hmm.. maybe the first thing to introduce Mootools is the &lt;a href="http://mootools.net/docs/core/Element/Element"&gt;Element&lt;/a&gt;. Why do i choose this, it's because from Element we can do many thing in advance.&lt;br /&gt;&lt;br /&gt;What is Element? maybe it will be easier when we look its example first.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;html:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;div id="somepartofwebpage"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;javascript:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var somepart = $('somepartofwebpage');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, what we've got in here. Firstly, Element is an HTML element, which is also same as the HTML's object, such as &lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;&amp;lt;table&amp;gt;&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;&lt;/span&gt;, etc. The example above describe a 'div' element with id property '&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;somepartofwebpage&lt;/span&gt;&lt;/span&gt;' to be stored in &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;somepart&lt;/span&gt;&lt;/span&gt; variable. With Mootools, we can do some awesome thing with this Element, like creating new element, change, delete, add events, add effects, and many more. Okay, let's look another example:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;html:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;div id="somepartofwebpage"&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;javascript:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var somepart = $('somepartofwebpage');&lt;br /&gt;var newinnerpart = new Element('div',{'id': 'newinnerpart', 'text':'This is new element created with javascript'});&lt;br /&gt;newinnerpart.inject(somepart);&lt;br /&gt;var anotherinnerpart = new Element('a', {'id': 'newinnerpart', 'html': 'this is another element that created with javascript', 'href': 'http://jonif.blogspot.com'});&lt;br /&gt;anotherinnerpart.inject(somepart, 'top');&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This example show how to create new element and fill it in another element (&lt;span style=";font-family:courier new;font-size:85%;"  &gt;somepart&lt;/span&gt; element). &lt;span style=";font-family:arial;font-size:85%;"  &gt;newinnerpart&lt;/span&gt; and &lt;span style=";font-family:courier new;font-size:85%;"  &gt;anotherinnerpart&lt;/span&gt; is just a same way how to create an element. &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;newinnerpart&lt;/span&gt;&lt;/span&gt; create div element with its content defined in &lt;span style=";font-family:courier new;font-size:85%;"  &gt;text&lt;/span&gt; property. And &lt;span style=";font-family:courier new;font-size:85%;"  &gt;anotherinnerpart&lt;/span&gt; create a link with its text defined in &lt;span style=";font-family:courier new;font-size:85%;"  &gt;html&lt;/span&gt;  property and its target to &lt;span style=";font-family:courier new;font-size:85%;"  &gt;jonif.blogspot.com&lt;/span&gt;. There several way to insert the element into another element besides using inject, there are grab, wrap, adopt, and appendText. For each of its function please take a look its API.&lt;br /&gt;&lt;br /&gt;From example above, it is showed that the constructor of Element are two parameters, the type of element as a string, and the properties. Its properties can be the attribute of the element (such as 'id', 'class', 'style', etc), 'text' which is the text inside the element, 'html' which is the HTML inside the element, events, or something else (try to look the &lt;a href="http://mootools.net/docs/core/Element/Element"&gt;API&lt;/a&gt; to be more detail).&lt;br /&gt;&lt;br /&gt;Now, take a look at this:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;html:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;div id="'somepartofwebpage'"&amp;gt;Hai&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;input type='button' id='showtextbutton' value='Show Text'/&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;javascript:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var initializeJS = function() {&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var showtextbutton = $('showtextbutton');&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;showtextbutton.addEvent('click', function(e) {&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;e.stop();&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;$('somepartofwebpage').set('html',"&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;strong&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Hello World!&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;/strong&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;");&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;});&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;window.addEvent('domready', initializeJS);&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This example explain how to add an event and change the text (or the property of the Element). &lt;span style=";font-family:courier new;font-size:85%;"  &gt;initializeJS&lt;/span&gt; function made to be called after the all DOM ready, this is because Mootools need all DOM to be ready. By using method &lt;span style=";font-family:courier new;font-size:85%;"  &gt;set()&lt;/span&gt; we can change any properties of the element. And of course with method &lt;span style=";font-family:courier new;font-size:85%;"  &gt;get()&lt;/span&gt; we can get the property's value of the element. For other event type please take a look of the API documentation.&lt;br /&gt;&lt;br /&gt;Another example:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;html:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;div id="somepartofwebpage"&amp;gt;Hai&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;input type='button' id='emptybutton' value='Empty the div'/&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;input type='button' id='destroybutton' value='Destroy the div'/&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;javascript:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var initializeJS = function() {&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;empty&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;button = $('emptybutton');&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;destroy&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;button = $('&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;destroy&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;button');&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;empty&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;button.addEvent('click', function(e) {&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;e.stop();&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;$('somepartofwebpage').&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;empty();&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;});&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;destroy&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;button.addEvent('click', function(e) {&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;e.stop();&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;$('somepartofwebpage').destroy&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;});&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;};&lt;br /&gt;&lt;br /&gt;window.addEvent('domready', initializeJS);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This example show us how to empty the content of the element and how to destroy / remove the element. Make the element empty means all of elements inside the element will be removed, but the element itself and its properties still exist.&lt;br /&gt;&lt;br /&gt;Okay, I think that is all the basic about how to use Element of Mootools. There are also called Elements, that consist of elements that match with the condition given. Elements is array of Element. Example:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;html:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;div&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; class="dummyclass"&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; style="width:300px;height:40px;background-color:yellow;"&amp;gt;Panel 1&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;div class="dummyclass" style="width:300px;height:40px;background-color:red;"&amp;gt;Panel 2&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);font-size:85%;" &gt;javascript:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var initializeJS = function() {&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var somepart = $$('div.dummyclass&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;');&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;somepart&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;.addEvents('mouseenter': function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.set('tween', {duration: 1000}).tween('height', '200px');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'mouseleave': function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.set('tween', {}).tween('height', '40px');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;window.addEvent('domready', initializeJS);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This example show you about adding an effect when the event occur. But i'm afraid i don't want to discuss about the effect, and it will have its time later. The example show about using Elements. The story is like this, there are two div element that have same class property and at the javascript all of these div grabbed into an array of Element by using $$ (which is the symbol of Elements). By using Elements, we can add events to all of its member.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2321586334599661330-442542112907647455?l=jonif.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/442542112907647455/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2321586334599661330&amp;postID=442542112907647455' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/442542112907647455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/442542112907647455'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/2009/05/mootools-introduction-of-element.html' title='Mootools: Introduction of &apos;Element&apos;'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2321586334599661330.post-3012779056878604573</id><published>2008-12-12T10:02:00.000+07:00</published><updated>2008-12-12T10:45:57.410+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>Netbeans UML Plugin Just Got Better</title><content type='html'>I download and install Netbeans 6.5, and use Netbeans to make UML diagrams for documenting our system. I've realized that it just got better. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Floating toolbar&lt;/strong&gt;&lt;br /&gt;At the first time I'm surprised that there is no pallets for relation symbol. But I quickly found it when I choose one of the object.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/_9mzL6lUqXLs/SUHVp4ZomCI/AAAAAAAAAJI/G3t5a2kaOlc/Screenshot.png"&gt;&lt;img style="cursor: pointer; width: 269px; height: 177px;" src="http://lh5.ggpht.com/_9mzL6lUqXLs/SUHVp4ZomCI/AAAAAAAAAJI/G3t5a2kaOlc/Screenshot.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;it just like toolbay-axis mouse position and it is too small.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Snapping Object Location&lt;/strong&gt;&lt;br /&gt;Now, when you move object, it will try to snap its location according to other objects. This way, I can arrange objects more neat easily than before, except that it is snapping according only to the edge of others object, not the center of it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_9mzL6lUqXLs/SUHb9mIkztI/AAAAAAAAAJQ/Uj9fX3ULhq8/Screenshot-2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 263px; height: 192px;" src="http://lh4.ggpht.com/_9mzL6lUqXLs/SUHb9mIkztI/AAAAAAAAAJQ/Uj9fX3ULhq8/Screenshot-2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope Netbeans will improve it more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2321586334599661330-3012779056878604573?l=jonif.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/3012779056878604573/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2321586334599661330&amp;postID=3012779056878604573' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/3012779056878604573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/3012779056878604573'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/2008/12/netbeans-uml-plugin-just-got-better.html' title='Netbeans UML Plugin Just Got Better'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_9mzL6lUqXLs/SUHVp4ZomCI/AAAAAAAAAJI/G3t5a2kaOlc/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2321586334599661330.post-3072654879746075121</id><published>2008-07-03T07:50:00.000+07:00</published><updated>2008-12-12T10:56:09.714+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='gwtext'/><title type='text'>[TUTORIAL] Simple Insert data GWT-Ext and Servlet</title><content type='html'>After making simple form with GWT-Ext in my previous blog, now I'll try to make an example how to submit its form to a server. I use simple servlet web server to start with so I can focus on explaining how interaction happens.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Activate Submit Function&lt;/strong&gt;&lt;br /&gt;Now reopen the GWT module class that you've made before so we can activate 'Save' button to submit the form onto the server. Change these statement:&lt;br /&gt;&lt;pre style="font-size:85%;font-family:courier new;"&gt;Button saveButton = new Button("Save");&lt;/pre&gt;&lt;br /&gt;to:&lt;br /&gt;&lt;pre style="font-size:85%;font-family:courier new;"&gt;&lt;br /&gt;Button saveButton = new Button("Save", new ButtonListenerAdapter(){&lt;br /&gt;   public void onClick(Button button, EventObject event) {&lt;br /&gt;      UrlParam[] params = new UrlParam[1];&lt;br /&gt;      params[0] = new UrlParam("mode","add");&lt;br /&gt;&lt;br /&gt;      form.getForm().submit("&lt;span style="color: rgb(255, 255, 255);"&gt;/JourneySimpleServlet/journey&lt;/span&gt;",params,&lt;br /&gt;         Connection.POST, "Saving...", true);&lt;br /&gt;   }&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;By doing this, we define the act for button's &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;onClick &lt;/span&gt;&lt;/span&gt;event. All fields inside &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;FormPanel &lt;/span&gt;&lt;/span&gt;will be automatically included as request parameter. &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;UrlParam &lt;/span&gt;&lt;/span&gt;is an object that we can use for defining additional parameter. &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;submit()&lt;/span&gt;&lt;/span&gt; method will submit to given servlet url (in this case is "&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/JourneySimpleServlet/journey&lt;/span&gt;&lt;/span&gt;"). Please change the white text (servlet url) to your own servlet. In the last parameter of submit method is for whether the form needs to be validate or not.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Servlet&lt;/strong&gt;&lt;br /&gt;When the form submitted, it will send request just like ordinary form, so handling the GWT-Ext form request is not much different. The different is the response. Actually event it is fine if there is no response, but of course this is bad idea to do with it. There are two types of responses, success response and failed response. Success response only tell client that the request has successfully processed. And failed response tell to client that request has failed to processed, and it also can tell which field is invalid.&lt;br /&gt;Let's see the code:&lt;br /&gt;&lt;pre style="font-size:85%; font-family:courier new;"&gt;&lt;br /&gt;protected void doPost(HttpServletRequest request, HttpServletResponse response)&lt;br /&gt;throws ServletException, IOException {&lt;br /&gt;   String mode = request.getParameter("mode");&lt;br /&gt;&lt;br /&gt;   if (mode.equals("add")) {&lt;br /&gt;      add(request, response);&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;"mode" parameter that has been added as request parameter when submitting form is used to tell what kind of operation needs to be done.&lt;br /&gt;&lt;pre style="font-size:85%; font-family:courier new;"&gt;&lt;br /&gt;private void add(HttpServletRequest request, HttpServletResponse response)&lt;br /&gt;throws ServletException, IOException {&lt;br /&gt;String title = request.getParameter("title");&lt;br /&gt;String startDate = request.getParameter("startDate");&lt;br /&gt;String endDate = request.getParameter("endDate");&lt;br /&gt;String story = request.getParameter("story");&lt;br /&gt;&lt;br /&gt;SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");&lt;br /&gt;boolean valid = true;&lt;br /&gt;String failedMessages = "";&lt;br /&gt;Date startD = null;&lt;br /&gt;Date endD = null;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;   startD = format.parse(startDate);&lt;br /&gt;} catch (ParseException ex) {&lt;br /&gt;   Logger.getLogger(JourneySimpleServlet.class.getName()).log(&lt;br /&gt;   Level.SEVERE, null, ex);&lt;br /&gt;&lt;br /&gt;   failedMessages += "&amp;lt;field&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;id&amp;gt;startDate&amp;lt;/id&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;msg&amp;gt;&amp;lt;![CDATA[" +&lt;br /&gt;      "Invalid date format.]]&amp;gt;" +&lt;br /&gt;   "&amp;lt;/msg&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;/field&amp;gt;\n";&lt;br /&gt;   valid = false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;   endD = format.parse(endDate);&lt;br /&gt;} catch (ParseException ex) {&lt;br /&gt;   Logger.getLogger(JourneySimpleServlet.class.getName()).log(&lt;br /&gt;     Level.SEVERE, null, ex);&lt;br /&gt;&lt;br /&gt;   failedMessages += "&amp;lt;field&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;id&amp;gt;endDate&amp;lt;/id&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;msg&amp;gt;&amp;lt;![CDATA[" +&lt;br /&gt;     "Invalid date format.]]&amp;gt;" +&lt;br /&gt;     "&amp;lt;/msg&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;/field&amp;gt;\n";&lt;br /&gt;   valid = false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (startD != null &amp;amp;&amp;amp; new Date().before(startD)) {&lt;br /&gt;   failedMessages += "&amp;lt;field&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;id&amp;gt;startDate&amp;lt;/id&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;msg&amp;gt;&amp;lt;![CDATA[" +&lt;br /&gt;      "&amp;lt;b&amp;gt;It can't be.&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;" +&lt;br /&gt;      "&amp;lt;i&amp;gt;You can't tell what gonna happen tommorrow right?&amp;lt;/i&amp;gt;]]&amp;gt;" +&lt;br /&gt;      "&amp;lt;/msg&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;/field&amp;gt;\n";&lt;br /&gt;   valid = false;&lt;br /&gt;}&lt;br /&gt;if (startD != null &amp;amp;&amp;amp; endD != null &amp;amp;&amp;amp; startD.after(endD)) {&lt;br /&gt;   failedMessages += "&amp;lt;field&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;id&amp;gt;endDate&amp;lt;/id&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;msg&amp;gt;&amp;lt;![CDATA[" +&lt;br /&gt;      "&amp;lt;b&amp;gt;Invalid date range.&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;" +&lt;br /&gt;      "&amp;lt;i&amp;gt;Start date must before end date.&amp;lt;/i&amp;gt;]]&amp;gt;" +&lt;br /&gt;      "&amp;lt;/msg&amp;gt;\n";&lt;br /&gt;   failedMessages += "&amp;lt;/field&amp;gt;\n";&lt;br /&gt;   valid = false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;response.setContentType("application/xml");&lt;br /&gt;PrintWriter out = response.getWriter();&lt;br /&gt;if (valid) {&lt;br /&gt;   Journey journey = new Journey();&lt;br /&gt;   journey.setTitle(title);&lt;br /&gt;   journey.setStartdate(startD);&lt;br /&gt;   journey.setEnddate(endD);&lt;br /&gt;   journey.setStory(story);&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(255, 255, 255);"&gt;journeyService&lt;/span&gt;.createJourney(journey);&lt;br /&gt;   valid = true;&lt;br /&gt;&lt;br /&gt;   out.println("&amp;lt;trip success='true'&amp;gt;");&lt;br /&gt;   out.println("&amp;lt;/trip&amp;gt;");&lt;br /&gt;} else {&lt;br /&gt;   out.println("&amp;lt;trip success='false'&amp;gt;");&lt;br /&gt;   out.println(failedMessages);&lt;br /&gt;   out.println("&amp;lt;/trip&amp;gt;");&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;When the process is running smoothly then there is nothing to worry about. But when it is failed, then we can tell client which fields is invalid. success attribute in trip tag is to determine whether process is failed or success.&lt;br /&gt;When we define error reader for &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;FormPanel &lt;/span&gt;&lt;/span&gt;in previous GWT-Ext module, we define &amp;lt;field&amp;gt; that have two tags, &amp;lt;id&amp;gt; tag to define which field is invalid, and &amp;lt;msg&amp;gt; as an error message. Put &amp;lt;field&amp;gt; inside root tag so it can be read by client.&lt;br /&gt;If you wonder what is &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;journeyService &lt;/span&gt;&lt;/span&gt;class is, then it is just a class that will handle the process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2321586334599661330-3072654879746075121?l=jonif.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/3072654879746075121/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2321586334599661330&amp;postID=3072654879746075121' title='1 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/3072654879746075121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/3072654879746075121'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/2008/07/simple-insert-data-gwt-ext-and-servlet.html' title='[TUTORIAL] Simple Insert data GWT-Ext and Servlet'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2321586334599661330.post-4798047538724498153</id><published>2008-06-25T06:00:00.000+07:00</published><updated>2008-07-03T09:48:35.153+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='gwtext'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>Hacking GWT Compiler to Compile Only for Specific Browser</title><content type='html'>When you want to compile your GWT module for only specific browser, you can hack &lt;span style="font-style: italic;"&gt;UserAgent.gwt.xml&lt;/span&gt; inside &lt;span style="font-style: italic;"&gt;gwt-user.jar&lt;/span&gt; in package &lt;span style="font-style: italic;"&gt;com.google.gwt.user&lt;/span&gt;. Find this text and change it as you wish:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;define-property name="user.agent" values="ie6,gecko,gecko1_8,safari,opera"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;I want to compile for only IE and mozilla, then I change it into&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;define-property name="user.agent" values="ie6,gecko,gecko1_8"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;I want to do this because we limit specification of browser for our application, and by doing this we can get more space up to 20% :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2321586334599661330-4798047538724498153?l=jonif.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/4798047538724498153/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2321586334599661330&amp;postID=4798047538724498153' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/4798047538724498153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/4798047538724498153'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/2008/06/hacking-gwt-compiler-to-compile-only.html' title='Hacking GWT Compiler to Compile Only for Specific Browser'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2321586334599661330.post-2287547475193877127</id><published>2008-06-24T22:30:00.000+07:00</published><updated>2008-07-03T09:49:00.928+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='gwtext'/><title type='text'>[TUTORIAL] GWT-EXT 2.0...An Introduction Study Case</title><content type='html'>&lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit (GWT)&lt;/a&gt; is a compiler of your java code into optimized javascript and make it easier to use AJAX. I, Java programmer, who have a problem with javascript, found GWT as a very useful tools to build such an interactive user interface. And also I found GWT-RPC as a great tool for communicating between clients and server, and its I18N capabilities. GWT will compile your java code into several files javascript, html, xml, and sometime .rpc files. It is because GWT will compile for each popular browser, so there will be javascript file for Firefox, for Internet Explorer, etc.&lt;br /&gt;&lt;a href="http://extjs.com/"&gt;Ext-Js&lt;/a&gt; is quite popular javascript library with sophisticated looks and feels. Even its license become GPL from LGPL, which is it indicate that Ext-Js become more popular and its developer wants to give more service to the clients, of course by paying them.&lt;br /&gt;&lt;a href="http://gwt-ext.com/"&gt;GWT-Ext&lt;/a&gt; is the combination of those two library. While Ext is library for user interface, the GWT will compile java code into javascript that use Ext-Js capabilities. So GWT-Ext is a library, that needs GWT library and Ext-Js library. IMHO, GWT-Ext can produce a very nice user interface that looks alike with desktop application, and if you use this library then I would like to recommend that your web application doesn't have many page, so I think one page can handle many job, since downloading needed Ext-Js library can be more than 600Kb.&lt;br /&gt;Okay, now I try to show you how to make a web page form using GWT-Ext. Make sure you have downloaded all 3 libraries that we needed GWT, Ext-Js, and GWT-Ext. If you want Ext-Js LGPL license version then you can download &lt;a href="http://yogurtearl.com/ext-2.0.2.zip"&gt;ext-2.0.2&lt;/a&gt;. Also if you use Firefox 3, then you should download the latest GWT-Ext. I use Netbeans 6.1 for IDE, and &lt;a href="https://gwt4nb.dev.java.net/"&gt;gwt4nb&lt;/a&gt; plugin for Netbeans to ease building a GWT application. So if you want to start with GWT, I recommend you Netbeans and gwt4nb plugin :D&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Create New Project&lt;/strong&gt;&lt;br /&gt;First of all, let's make a new project with GWT-ready. Create a new Web Application project, and for the frameworks add Google Web Toolkit as your frameworks. Point &lt;span style="font-weight: bold;"&gt;GWT installation folder&lt;/span&gt; field to your GWT library folder. You can add other frameworks that you like, since it will not causing special treatment when you combine frameworks. GWT Module is a name for your package that act as a module, for this I give a package of &lt;span style="font-style: italic;"&gt;net.arenaling.java.mygwtextapp&lt;/span&gt;.&lt;br /&gt;When you finish create new project, then there will be several java code and package generated. There will be client package and server package under module package, &lt;span style="font-style: italic;"&gt;mygwtextapp.gwt.xml&lt;/span&gt; under module package, and &lt;span style="font-style: italic;"&gt;MainEntryPoint.java&lt;/span&gt; under client package.&lt;br /&gt;GWT will search any java source code to be compiled into javascript under &lt;span style="font-style: italic;"&gt;client&lt;/span&gt; package, and compile java source code under &lt;span style="font-style: italic;"&gt;server&lt;/span&gt; package to be a servlet (but of course you must configure by yourself &lt;span style="font-style: italic;"&gt;web.xml&lt;/span&gt; configuration for the servlet).&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/arenaling/SGBT_8gzGgI/AAAAAAAAAE0/mo7SbeHbxQU/%5B01%5D%20project.JPG" align="center" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You can run it now. And it will show:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/arenaling/SGBT_5snwNI/AAAAAAAAAE8/1P39O-DGap4/%5B02%5Dgwt-sample.JPG" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;mygwtextapp.gwt.xml&lt;/span&gt; file is used to define module and should be reside in roots of module package. Inside of it, there is &amp;lt;entry-point&amp;gt; tag which is stands for to locate your main module class, just like a class that have &lt;span style="font-style: italic;"&gt;public static void main(String[] args)&lt;/span&gt; method to run a desktop/console application. Entry-point class must implements &lt;span style="font-style: italic;"&gt;com.google.gwt.core.client.EntryPoint&lt;/span&gt; interface and override &lt;span style="font-style: italic;"&gt;onModuleLoad()&lt;/span&gt; method.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Building GWT-Ext Application&lt;/span&gt;&lt;br /&gt;So far, we have built a GWT Application and this is not what we expected. We need to add Ext-Js library and GWT-Ext library. Open project properties, in Libraries add gwtext.jar file. To add Ext-Js, make a new package under GWT module package, name it with &lt;span style="font-style: italic;"&gt;public&lt;/span&gt;. And then copy the Ext-Js folder into it. So my package will become like this:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/arenaling/SGBeyJ0gruI/AAAAAAAAAFE/-WdFMWPFGrQ/extjspackage.jpg" /&gt;&lt;/div&gt;&lt;br /&gt;Reconfigure mygwtextapp.xml file so we can use GWT-Ext library and Ext-Js library. Open it and add these lines:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;module&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;inherits name="com.google.gwt.user.User"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 255);font-family:courier new;" &gt;        &amp;lt;inherits name='com.gwtext.GwtExt' /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;entry-point class="net.arenaling.java.client.mygwtextappEntryPoint"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &amp;lt;!-- Do not define servlets here, use web.xml --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;        &lt;span style="color: rgb(255, 255, 255);"&gt;&amp;lt;stylesheet src="js/ext/resources/css/ext-all.css" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 255);font-family:courier new;" &gt;        &amp;lt;script src="js/ext/adapter/ext/ext-base.js" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 255, 255);font-family:courier new;" &gt;        &amp;lt;script src="js/ext/ext-all.js" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;/module&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Case Study: Journey Input Form&lt;/span&gt;&lt;br /&gt;For this tutorial, I choose a simple case study that use some input fields and html editor.&lt;br /&gt;We can define what kind of data for the form. Using RecordDef object to define fields data type:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;        &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;FieldDef[] formFieldDef = new FieldDef[]{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            new StringFieldDef("title"),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            new DateFieldDef("startDate","startDate","d/m/Y"),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            new DateFieldDef("endDate","endDate","d/m/Y"),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            new StringFieldDef("story")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        };&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        RecordDef formDef = new RecordDef(formFieldDef);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        XmlReader formReader = new XmlReader("trip", formDef);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        formReader.setSuccess("@success");&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;FieldDef is used for define the name of a field. Because we will have 4 fields, which is title field, start date field, end date field, and story field, then I define String type for title and story, and date for startDate and endDate. This name of field not only reflect the structure of the form, but also the data structure of XML or JSon when there is a communication with server. In this case, I choose XML as its data communication with server.&lt;br /&gt;We can also define an error data type message. I'll give an example for using it later, but for now I'll just give you its code:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;        XmlReader errorReader = new XmlReader("field", errorRecordDef);  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        errorReader.setSuccess("@success");&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Programming GWT is much more like desktop/Swing programming. There will be a panel that will host components. Panel can have layout to arrange components, and panel can have another panel inside. There is also a specialized panelt that we will be use, and that is &lt;span style="font-style: italic;"&gt;FormPanel&lt;/span&gt;. It is a panel that will collect any fields and can be used to load and submit data. I will give another example of form communication with server. Here is the example of building panel and its components:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;        final FormPanel form = new FormPanel();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.setFrame(false);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.setLabelAlign(Position.TOP);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.setBorder(false);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.setWidth(700);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.setAutoHeight(true);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.setErrorReader(errorReader);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.setReader(formReader);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        TextField titleField = new TextField("Title","title");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        titleField.setAllowBlank(false);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        DateField startDateField = new DateField("Start Date","startDate",150);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        startDateField.setFormat("d/m/Y"); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        startDateField.setAllowBlank(false);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        DateField endDateField = new DateField("End Date","endDate",150);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        endDateField.setFormat("d/m/Y"); &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        HtmlEditor storyEditor = new HtmlEditor("Story","story");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        storyEditor.setWidth(600);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        storyEditor.setHeight(400);&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DateField&lt;/span&gt; is a specialized field for date input, and &lt;span style="font-style: italic;"&gt;HtmlEditor&lt;/span&gt; is similar with text area that have a toolbar for formatting like rich text editor. After defining each components, then add into panel:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;        MultiFieldPanel oneRowPanel = new MultiFieldPanel();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        oneRowPanel.setBorder(false);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        oneRowPanel.setAutoHeight(true);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        oneRowPanel.addToRow(startDateField,200);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        oneRowPanel.addToRow(endDateField,200);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.add(titleField, new AnchorLayoutData("90%"));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.add(oneRowPanel);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.add(storyEditor, new AnchorLayoutData("90%"));&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;For start date and end date I want to put it in one line, so I use &lt;span style="font-style: italic;"&gt;MultiFieldPanel&lt;/span&gt; and then put it in &lt;span style="font-style: italic;"&gt;FormPanel&lt;/span&gt;.&lt;br /&gt;Form usually have a button or more. Panel have its own layout for buttons, by using addButton() method. We must handle click event on button by using &lt;span style="font-style: italic;"&gt;ButtonListener&lt;/span&gt; interface or &lt;span style="font-style: italic;"&gt;ButtonListenerAdapter&lt;/span&gt; abstract class.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;        Button saveButton = new Button("Save");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        Button resetButton = new Button("Reset", new ButtonListenerAdapter(){&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            public void onClick(Button button, EventObject event) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                form.getForm().reset();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        });&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.addButton(saveButton);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        form.addButton(resetButton);&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Okay, now we have a form with its fields. Next step is to add the panel into the browser. There are several way to show GWT-Ext components onto browser. We can &lt;span style="font-style: italic;"&gt;RootPanel.get().add(component)&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;RootPanel.get("idchosendiv").add(component)&lt;/span&gt;, or by using &lt;span style="font-style: italic;"&gt;Viewport&lt;/span&gt;. I don't know who have the bug, but when we use HtmlEditor and then we use RootPanel, then it has a bug that disable formatting toolbar, so we need to use &lt;span style="font-style: italic;"&gt;Viewport&lt;/span&gt;. So far I still don't know how to handle it without &lt;span style="font-style: italic;"&gt;Viewport&lt;/span&gt;.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;        Viewport viewport = new Viewport(form);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        viewport.doLayout();&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Now, let's run it and see the result:&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;img src="http://lh5.ggpht.com/arenaling/SGCcX7PhQmI/AAAAAAAAAFM/-vj7W3K6WG8/journey.jpg?imgmax=512" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I think that's all for now. In near future I'll make more tutorial for GWT-Ext. Thanks ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2321586334599661330-2287547475193877127?l=jonif.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/2287547475193877127/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2321586334599661330&amp;postID=2287547475193877127' title='8 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/2287547475193877127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/2287547475193877127'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/2008/06/tutorial-gwt-ext-20an-introduction.html' title='[TUTORIAL] GWT-EXT 2.0...An Introduction Study Case'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/arenaling/SGBT_8gzGgI/AAAAAAAAAE0/mo7SbeHbxQU/s72-c/%5B01%5D%20project.JPG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2321586334599661330.post-5032126752103884665</id><published>2008-06-18T15:36:00.000+07:00</published><updated>2008-06-18T16:00:50.730+07:00</updated><title type='text'>Can't Leave Java Coding</title><content type='html'>&lt;img src="http://2.bp.blogspot.com/_9mzL6lUqXLs/SFjN31HotlI/AAAAAAAAADg/rS1xGOTwlZ0/s1600/spd_with_netbeans_work_together.jpg" alt=""  /&gt;Eventhough now I've been assigned in Microsoft Office Sharepoint Server to maintain web site content by doing some CSS and ASP.NET programming, but still, my body want to move by itself and my mind thinking by its own to code Java app.&lt;br /&gt;I'm always trying to use my time to continue my experiment with Java. Even when changing ASP.NET or HTML I'll use Netbeans for my editor, and then copied it to Sharepoint Designer to publish it.&lt;br /&gt;Hope assigment for this project will be finish or maybe I wish to be assigned to another Java project. fiuhh&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2321586334599661330-5032126752103884665?l=jonif.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/5032126752103884665/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2321586334599661330&amp;postID=5032126752103884665' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/5032126752103884665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/5032126752103884665'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/2008/06/cant-leave-java-coding.html' title='Can&apos;t Leave Java Coding'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9mzL6lUqXLs/SFjN31HotlI/AAAAAAAAADg/rS1xGOTwlZ0/s72-c/spd_with_netbeans_work_together.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2321586334599661330.post-2432137764197600369</id><published>2008-02-17T11:30:00.000+07:00</published><updated>2008-12-12T10:57:53.236+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='CaseStudy'/><title type='text'>[Case Studies] Create JawaPos News's Crawler</title><content type='html'>&lt;p class="mobile-photo"&gt;&lt;a href="http://4.bp.blogspot.com/_9mzL6lUqXLs/R7e3XzmnVCI/AAAAAAAAAAo/1l57jG0U4n0/s1600-h/untitled-767518.GIF"&gt;&lt;img src="http://4.bp.blogspot.com/_9mzL6lUqXLs/R7e3XzmnVCI/AAAAAAAAAAo/1l57jG0U4n0/s320/untitled-767518.GIF"  border="0" alt="" id="BLOGGER_PHOTO_ID_5167800717047976994" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=Section1&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt; font-family:Arial'&gt;When I bore with my training, sometimes I open JawaPos news in pdf format. Others like to do it too. So I think if many of us often open it, then it would made the office&amp;#8217;s internet speed slowdown. I create a crawler for JawaPos news and share it to all, so the others don&amp;#8217;t have to access the sites to read the news. And I start to create it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;b&gt;&lt;u&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt; font-family:Arial;font-weight:bold'&gt;December 29&lt;sup&gt;th&lt;/sup&gt;, 2007&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt; font-family:Arial'&gt;When we want to create a crawler, then things that we must do are:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;ol style='margin-top:0cm' start=1 type=1&gt;  &lt;li class=MsoNormal style='mso-list:l1 level1 lfo3'&gt;&lt;font size=2 face=Arial&gt;&lt;span      style='font-size:10.0pt;font-family:Arial'&gt;Find the patterns of address      that we have to download / get the information. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-list:l1 level1 lfo3'&gt;&lt;font size=2 face=Arial&gt;&lt;span      style='font-size:10.0pt;font-family:Arial'&gt;Make the method to process the      pages / files.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt; font-family:Arial'&gt;For advanced crawler, maybe we must create an AI to find the pattern or can be an agent, but for simple crawler, it can be a statement that contains the URL or a piece of information that can be composed with other information. For this case (JawaPos Crawler), I only need to make a simple crawler, that search &lt;/span&gt;&lt;/font&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:Arial'&gt;the page ID of each page, make compose the URL, grab the pages, and save it to .pdf file.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt; font-family:Arial'&gt;To read JawaPos online in pdf format, you can go to &lt;a href="http://versipdf.jawapos.co.id/"&gt;http://versipdf.jawapos.co.id/&lt;/a&gt; . The information that contain which URL i supposed to grab the file must be found first. To find it, I read its source file (just go to &amp;#8220;View Page Source&amp;#8221; in Mozilla Firefox or &amp;#8220;View Source&amp;#8221; in Internet Explorer. Well, when looking for pattern, for human, can use intuition which one will be the pattern, but there is a step for it. Firstly, just go to one of the news pages, look for its URL, and then make a notes what kind of URL that differ to other news pages, and that will be the pattern. After knowing the pattern, search in previous page source, find information that contain the pattern. And that would be step one.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt; font-family:Arial'&gt;For getting the pages source as well as download the pdf file, you can use : &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt; font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected StringBuffer getPage(String url) throws MalformedURLException, IOException {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuffer ret = new StringBuffer();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; URL site = new URL(url);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InputStream in = site.openStream();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] buffer = new byte[1024];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int len = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((len = in.read(buffer))&amp;gt;0) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret.append(new String(buffer,0,len));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in.close();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt; font-family:Arial'&gt;Just pass its URL, and it will retrieve the page source. To find the pattern, I use Regex. After getting information, I dont use getPage() method, but create other method that download and save it to whatever file : &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt; font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void saveURL2File(String urlString, File file) throws MalformedURLException, IOException {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; java.net.URL url = new URL(urlString);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InputStream in = url.openStream();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OutputStream out = new FileOutputStream(file);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] buffer = new byte[1024];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int length = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((length = in.read(buffer)) &amp;gt; 0) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out.write(buffer,0,length);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out.flush();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;in.close();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out.close();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 color=blue face="Courier New"&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:"Courier New";color:blue'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt; font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt; font-family:Arial'&gt;Well, it is very simple right. With this crawler i can download all the pages and share it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt; font-family:Arial'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;b&gt;&lt;u&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:Arial;font-weight:bold'&gt;December 31&lt;sup&gt;st&lt;/sup&gt;, 2008&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt; font-family:Arial'&gt;My crawler produces many files, which is every file only contain one page. Well, it can be tiresome to open each file. Even my friend complain it. It makes me want to develop once more of my crawler, How about after I download all the pages, I combined it into one file that contain all pages. And I start to search a library that can manipulate pdf file. I use &lt;a href="http://www.lowagie.com/iText/"&gt;iText&lt;/a&gt; for its library to combine all pages and it needs &lt;/span&gt;&lt;/font&gt;bcprov and bcmail that you can get from &lt;a href="http://www.bouncycastle.org/"&gt;BouncyCastle&lt;/a&gt;.&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:Arial'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2321586334599661330-2432137764197600369?l=jonif.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/2432137764197600369/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2321586334599661330&amp;postID=2432137764197600369' title='1 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/2432137764197600369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/2432137764197600369'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/2008/02/case-studies-create-jawapos-newss.html' title='[Case Studies] Create JawaPos News&apos;s Crawler'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9mzL6lUqXLs/R7e3XzmnVCI/AAAAAAAAAAo/1l57jG0U4n0/s72-c/untitled-767518.GIF' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2321586334599661330.post-2729279900859746792</id><published>2008-02-10T13:02:00.000+07:00</published><updated>2008-12-12T10:58:24.271+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Concept'/><category scheme='http://www.blogger.com/atom/ns#' term='DesignPattern'/><title type='text'>Architectural Pattern : Introduction</title><content type='html'>&lt;div class=Section1&gt;  &lt;p class=MsoNormal&gt;&lt;font size=2 face=Arial&gt;&lt;span style='font-size:10.0pt; font-family:Arial'&gt;See &lt;a href="http://en.wikipedia.org/wiki/Architectural_pattern_%28software_engineering%29"&gt;http://en.wikipedia.org/wiki/Architectural_pattern_%28software_engineering%29&lt;/a&gt; for the concept. Architectural pattern was become more popular since Martin Fowler publishes his book, which is his book is &lt;/span&gt;&lt;/font&gt;&lt;cite&gt;&lt;i&gt;&lt;font face="Times New Roman"&gt;Patterns of Enterprise Application Architecture&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;cite&gt;&lt;i&gt;&lt;font face="Times New Roman"&gt;&lt;span style='font-style:normal'&gt;. Addison-Wesley published in 2002. Even though the concept like &lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;cite&gt;&lt;i&gt;&lt;font face="Times New Roman"&gt;Model-View-Controller&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;cite&gt;&lt;i&gt;&lt;font face="Times New Roman"&gt;&lt;span style='font-style:normal'&gt; (MVC) itself is already founded in 1979 with Smalltalk as its development language, but Fowler named many architecture concept into one that called as &lt;b&gt;&lt;span style='font-weight:bold'&gt;Architectural Pattern&lt;/span&gt;&lt;/b&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;b&gt;&lt;i&gt;&lt;u&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-weight:bold;font-style:normal'&gt;Introduction &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;i&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-style:normal'&gt;When developing a system, having good system architecture is an advantage so it has reliability and maintainability for longer period. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;i&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-style:normal'&gt;The architecture itself is depending on business flow and its people, so we cannot assume that there is an architecture that can be implemented in any system. Architectural Pattern is a guide of designing an architect of a system, not the architecture itself. With these guides, we can make the architect of a system, which has specific requirements, specific environments, and specific resources, with suggested pattern to provide more scalability, reliability, and maintainability. An architectural pattern is important for an big and enterprise system, since it takes many of sub system and integrates/communicate with other system.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;i&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-style:normal'&gt;Nowadays, many frameworks that offer implemented architectural pattern. We can choose one of them, or by combining some framework take all the advantages and eliminate the disadvantages. Also many tools that ease framework usage, any configuration and generate needed file can be done by wizard.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;i&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-style:normal'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;b&gt;&lt;i&gt;&lt;u&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-weight:bold;font-style:normal'&gt;Challenges&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;i&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-style:normal'&gt;Like design patterns, each of architectural patterns have their own advantages and disadvantages, and its purpose. Choosing architectural patterns can be a stressful. Many architectural pattern offer similar purpose and advantages, but we hardly decide which one is suit with our system. That is why implementation of architectural patterns depends on its people who develop the system. Any architectural patterns with similar purpose can be use, as long as the people who involves with system design and development are agree and understand the patterns.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;i&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-style:normal'&gt;Implementing architectural patterns can be painful at first. There are many things to do even just for one task. Sometimes we need to do configuration, make new 1-3 files, and splitting codes into several class/procedure. Starting to learn architectural patterns also takes time and many efforts to do. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;i&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-style:normal'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;b&gt;&lt;i&gt;&lt;u&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-weight:bold;font-style:normal'&gt;Example&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;i&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-style:normal'&gt;MVC is the most popular architectural patterns. Until now, there are many improvement patterns that based on MVC. In this &lt;a href="http://ctrl-shift-b.blogspot.com/2007/08/interactive-application-architecture.html"&gt;article&lt;/a&gt; you can see similar patterns with MVC. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;cite&gt;&lt;i&gt;&lt;font size=3 face="Times New Roman"&gt;&lt;span style='font-size:12.0pt;font-style:normal'&gt;In Java, Struts framework is most popular for its MVC pattern. Microsoft makes framework too that implement &lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;cite&gt;&lt;i&gt;&lt;font face="Times New Roman"&gt;Model-View-Presenter&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;cite&gt;&lt;i&gt;&lt;font face="Times New Roman"&gt;&lt;span style='font-style:normal'&gt; (MVP), called Web Client Software Factory (WCSF), integrated with Microsoft Visual Studio and needs .NET 2.0 Framework. There are also many implemented MVC patterns in other framework, such as Ruby on Rails, MonoRails, etc.&lt;/span&gt;&lt;/font&gt;&lt;/i&gt;&lt;/cite&gt;&lt;font size=2 face=Arial&gt;&lt;span lang=IN style='font-size:10.0pt;font-family:Arial'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2321586334599661330-2729279900859746792?l=jonif.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/2729279900859746792/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2321586334599661330&amp;postID=2729279900859746792' title='0 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/2729279900859746792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/2729279900859746792'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/2008/02/architectural-pattern-introduction.html' title='Architectural Pattern : Introduction'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2321586334599661330.post-1753997937955764875</id><published>2008-01-23T14:22:00.000+07:00</published><updated>2008-01-23T14:29:31.308+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Concept'/><category scheme='http://www.blogger.com/atom/ns#' term='DesignPattern'/><title type='text'>Design Pattern : The Introduction</title><content type='html'>&lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Design Patterns&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;Design pattern is a general repeatable solution to a commonly occuring problem in software design [Wikipedia.org - Design pattern (computer science)]. Design patterns are class- and method-level solutions to common problems in object-oriented design. [Design Patterns In Java - Steven John Metsker,W.C. Wake]. Design patterns can help developer to achieve building such a complex system with sets of small classes. Design patterns can make codes easily read by other developers and makes them a tool to communicate programming technique.&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;What&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;A design pattern is:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;A standard solution to a common programming problem&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;A technique for making code more flexible by making      it meet certain criteria&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;A design or implementation structure that achieves      a particular purpose&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;Shorthand for describing certain aspects of program      organization&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;Connections among program components&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Why&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;Benefits using design patterns:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Reduce      Development Time:&lt;/b&gt; a good design pattern helps conceptually to      breakdown a complex system into manageable tasks. This allows developers      to individually code parts of the web application they are best suited      for. It also allows individual components to be built and replaced without      harming the existing code base.&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Reduced      Maintenance Time:&lt;/b&gt; the majority of projects involve maintenance of an      already existing system. Maintenance can be a nightmare should a system be      hacked together when it was initially built. Good design plans ahead to      simplify future maintenance concerns.&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Collaboration:&lt;/b&gt;      not all developers share the same expertise. Often a mixed group of      developers is assigned to a task especially in the case of a larger      project. A good design can successfully enforce separation of a project’s      functionality into areas that collaborating developers are most familiar,      and ensure separate parts of a project seamlessly fit together.&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Scalability:&lt;/b&gt;      the importance of having design patterns grows with the size of a project.&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;When&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;When not to use design pattern:&lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Speed of      development time:&lt;/b&gt; if the project uses Agile or XP programming, then      it’s really not recommended for using any design pattern since it will be      delay its development time.&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Small scope      and scalability: &lt;/b&gt;when the project’s product only used in short time      and will not be developed anymore than it’s no use to use design pattern.&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Not an OOP language:&lt;/b&gt;      because of design pattern use the concept and advantages of      Object-Oriented Programming, then there is no one any design pattern that      don’t use object philosophy.&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;Who&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;The one who should be use design pattern is any project team that involves many people. Software developer should be the one who make which design pattern that will be used, but each person in team can choose their own design pattern and distribute it to each other.&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;&lt;b style=""&gt;How&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="line-height: 150%;"&gt;It will be good if design pattern planned from design phase of project, but it also depends of the understandability of the designer itself. &lt;/p&gt;  &lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;If the domain and problem is fully understood by      the team, then it may make sense to use design patterns from the start.&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;If the domain and problem is not fully understudied,      or even it is a new one for them, then it may be best to first implement      something and ensure that it works, and then use the design patterns to      improve its weaknesses.&lt;/li&gt;&lt;li class="MsoNormal" style="line-height: 150%;"&gt;Experienced developers know what design pattern      will be used to solve their problem, but the inexperienced one must know      that design pattern can solve several programming problem.&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Summary&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Programmers are encouraged to use Design Patterns for developing systems. Even though it needs more efforts to do it, but it will be worth to you to be a good coder.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2321586334599661330-1753997937955764875?l=jonif.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jonif.blogspot.com/feeds/1753997937955764875/comments/default' title='Poskan Komentar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2321586334599661330&amp;postID=1753997937955764875' title='1 Komentar'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/1753997937955764875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2321586334599661330/posts/default/1753997937955764875'/><link rel='alternate' type='text/html' href='http://jonif.blogspot.com/2008/01/design-pattern-introduction.html' title='Design Pattern : The Introduction'/><author><name>Joni Farizal</name><uri>https://profiles.google.com/105403804605243601693</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-28IyklJ-jMQ/AAAAAAAAAAI/AAAAAAAAAcs/28UpcoBYVNg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry></feed>
