<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Soronthar&apos;s Software Development Diary</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/" />
    <link rel="self" type="application/atom+xml" href="http://tech.soronthar.com/atom.xml" />
    <id>tag:tech.soronthar.com,2009-02-09://3</id>
    <updated>2010-02-25T15:32:27Z</updated>
    <subtitle>Collection of Random Thoughts and Essays on Software Development</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.23-en</generator>

<entry>
    <title>What does Agile means? (My point of view)</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2010/02/what-does-agile-means-my-point.html" />
    <id>tag:tech.soronthar.com,2010://3.62</id>

    <published>2010-02-25T15:02:41Z</published>
    <updated>2010-02-25T15:32:27Z</updated>

    <summary>As I said somewhere else in this site, I&apos;m passionate when it comes to programming, seeing it as a craft to be perfected. It is no surprise, then, that I became a confessed Agilist. Something happened today that made me...</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
        <category term="Agile" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[As I said <a href="http://soronthar.com/2007/11/time-for-an-introduction-who-a.html">somewhere else in this site</a>, I'm passionate when it comes to programming, seeing it as a craft to be perfected. It is no surprise, then, that I became a confessed Agilist. <br /><br />Something happened today that made me think about what I think is the meaning to be Agile. The quick answer would be "To value the <a href="http://agilemanifesto.org/">Agile Manifesto</a>", but somehow I felt that there is more to Agile than that. This is the end result of my musings<br /><br />]]>
        <![CDATA[Being Agile is more than follow a strict set of practices religiously,
that span over all the software development life cycle. It more than
trying to go faster, or trying to work better.<br /><br />
Being Agile means to embrace uncertainty, accept change. It means to
work on what is actually needed, to produce actual value. It is not
measured by the number of practices being followed, or by tagging your
process with a methodology. It can be measured by how much we value the
manifesto, but the best measure should be the smiles in our users and
our team.<br />
<br />Being Agile is more than having a tag or following a procedure. It
is a way of thinking, a professional lifestyle, that must be ingrained
in the core of the corporate culture, from the C level to the
developers, including all the departments.<br />
<br />
To become Agile you must be ready to break some paradigms, to challenge the status quo.<br /><br />Are you ready?<br /><br /><br />
]]>
    </content>
</entry>

<entry>
    <title>TWiki/Foswiki Facts</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2009/11/twikifoswiki-facts.html" />
    <id>tag:tech.soronthar.com,2009://3.61</id>

    <published>2009-11-14T03:47:25Z</published>
    <updated>2009-11-14T15:06:34Z</updated>

    <summary>Lately there has been a lot of buzz in twitter about TWiki vs Foswiki. Given that there are some inacuracies in both sides, I would like to put some facts so you can form an opinion by yourself.The main point...</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
    <category term="twikifoswiki" label="twiki foswiki" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[Lately there has been a lot of buzz in twitter about <a href="http://twiki.org/">TWiki </a>vs <a href="http://foswiki.org/">Foswiki</a>. Given that there are some inacuracies in both sides, I would like to put some facts so you can form an opinion by yourself.<br /><br />The main point is that Peter Thoeny, on behalf of TWIKI.NET, imposed a governance model on the TWiki project that was already rejected by the active community[1]. I say imposed because, just minutes before a Release Meeting, everybody was locked down from editing TWiki.org (and I think svn privileges were locked too, but didn't check at the time) and the only way to regain the right of editing or commit was to accept the new governance model.<br /><br />This offered those that didn't agree with the goverance model a "my way or the highway" scenario. The result is that most members of the active community (80%? 90%?) decided the highway option, and thus Foswiki was born. As a sidenote, several members of the TWiki CoreTeam moved to Foswiki, too. The only remaining member of the CoreTeam as it was in 2008 is Peter Thoeny.<br /><br />Now, notice that I said "active community". To work with the current number TWiki has a community of about 46,000 registered users[2] . Of those, around 20 where active core developers, and about 20 active plugin developers not beloging to the previous group [3]. This is the group that formed Foswiki. From other 45,000+ users, around 6500 have accepted the governance model. And if you dig enough[4] you'll find that the big majority of them are new users. And almost none of them are now active in twiki.org.<br /><br />You can compare both communities by checking the following:<br /><ul><li>Number of people commiting changes to the core code. ( <a href="http://svn.twiki.org/svn/twiki/">TWiki </a>/ <a href="http://svn.foswiki.org/">Foswiki </a>)<br /></li><li>Number of people commiting changes to the plugins area. ( <a href="http://svn.twiki.org/svn/twiki/">TWiki </a>/ <a href="http://svn.foswiki.org/">Foswiki </a>)</li><li>Number of people editing and commenting on development topics <a href="http://twiki.org/cgi-bin/view/Codev/WebChanges">(TWiki Codev Web</a> [5] / <a href="http://foswiki.org/Development/WebChanges">Foswiki Development Web</a></li><li>Activity in the corresponding issue tracker ( <a href="http://develop.twiki.org/%7Etwiki4/cgi-bin/view/Bugs/WebChanges">TWiki Bugs Web</a> / <a href="http://foswiki.org/Tasks/WebChanges">Foswiki Tasks Web</a> )</li></ul>For more information check both sides of the story (<a href="http://twiki.org/cgi-bin/view/Codev/RelaunchTWikiOrgProject">the relaunch of TWiki.org</a>[6] and <a href="http://foswiki.org/About/WhyThisFork">Why Foswiki was created</a>)<br /><br />Update: It seems that I got some figures regarding registered users wrong. Fixed that and added more references. Thanks gmc.<br /><br />[1] By active community I mean those that actively commit patches, participate in discussions about TWiki on twiki.org or helped make TWiki a better product.<br />[2] Estimated from <a href="http://twiki.org/cgi-bin/view/Main/WebTopicList?skin=text">here</a> . Around 47,000 topics, minus 1,000 assuming they are bogus or non-users topics. <br />[3] These figure are offhand estimates. the accurate number can be found by looking the commit history of TWiki in 2008. In the whole TWiki history, only around 50 developers have more than 20 commits.<br />[4] Use this search in a topic in the Sandbox web: %SEARCH{"META.*?AgreeToTermsOfUse.*?Yes" type="regex" web="Main"}%<br />[5] Before Foswiki, the top contributors table&nbsp; in the Codev home topic would only have contributors with at least 20 contribution that month, and the table would be full (10 entries) top contributors reaching at much as 100 edits a month.<br />[6] You got to love the "And it is important to note that the governance model isn't democratic" part.<br /><br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Java Quirks: When a Collection is a String (using JSP Tags)</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2009/11/java-quirks-when-a-collection.html" />
    <id>tag:tech.soronthar.com,2009://3.60</id>

    <published>2009-11-09T04:55:24Z</published>
    <updated>2009-11-09T05:06:51Z</updated>

    <summary> Today I was trying to create an equivalent of displaytag. During the exercise I found out few things a didn&apos;t know about the behavior of JSP tag files....</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
        <category term="Java Quirks" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[

Today I was trying to create an equivalent of <a href="http://displaytag.sourceforge.net/1.2/">displaytag</a>. During the exercise I found out few things a didn't know about the behavior of JSP tag files.
]]>
        <![CDATA[My code was as follows:
<br /><br />
The jsp:
<pre>&lt;mdisplay:table collection="${requestScope.mycollection}"&gt;
   &lt;mdisplay:column property="id"&gt;
   &lt;/mdisplay:column&gt;
&lt;/mdisplay:table&gt;
</pre>

The table.tag file:
<pre>&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;
&lt;%@ attribute name="collection" required="true" rtexprvalue="true"%&gt;
&lt;%@ variable name-given="item" scope="NESTED" declare="true" %&gt;

&lt;c:foreach items="${collection}" var="item"&gt;
    &lt;jsp:dobody&gt;
&lt;/jsp:dobody&gt;

&lt;/c:foreach&gt;
</pre>

The column.tag file:
<pre>&lt;%@ attribute name="property" required="true" %&gt;
${item[property]} 
</pre>

Result: didn't work.<br /><br />&nbsp;I thought that it was just that I didn't understand the whole "variable" thing in tag files (which was likely), so I change my code the following way:
<br /><br />
The table.tag file:
<pre>&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;
&lt;%@ attribute name="collection" required="true" rtexprvalue="true"%&gt;
&lt;%@ variable name-given="item" scope="NESTED" declare="true" %&gt;

&lt;c:foreach items="${collection}" var="item"&gt;
    &lt;c:set var="item" value="${a}" scope="request"&gt;
        &lt;jsp:dobody&gt;
        &lt;/jsp:dobody&gt;
    &lt;/c:set&gt;
&lt;/c:foreach&gt;
</pre>

The column.tag file:
<pre>&lt;%@ attribute name="property" required="true" %&gt;
${requestScope.item[property]} 
</pre>

It didn't work either, throwing an exception stating " cannot find property id in class String"... WTH?

It ends up that if you don't specify the type of a tag attribute, it is assumed to be "String". By stating that "collection" is in fact a java.util.Collection, everything worked fine:

The table.tag file:
<pre>&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;
&lt;%@ attribute name="collection" required="true" rtexprvalue="true" type="java.util.Collection"%&gt;
&lt;%@ variable name-given="item" scope="NESTED" declare="true" %&gt;

&lt;c:foreach items="${collection}" var="item"&gt;
    &lt;c:set var="item" value="${a}" scope="request"&gt;
        &lt;jsp:dobody&gt;
        &lt;/jsp:dobody&gt;
    &lt;/c:set&gt;
&lt;/c:foreach&gt;
</pre>

It would have been nice that the JSP processor had the capability to infer the type of the parameter, but things are the way they are.

Happy Coding!]]>
    </content>
</entry>

<entry>
    <title>Comparable vs. Comparator: A response</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2009/08/comparable-vs-comparator-a-res.html" />
    <id>tag:tech.soronthar.com,2009://3.58</id>

    <published>2009-08-31T14:22:18Z</published>
    <updated>2009-08-31T14:36:57Z</updated>

    <summary>While getting my daily fix of feed, I found this post on javablogs, describing a &quot;bug&quot; that crawled into the code because a design decision.The problem they actually had was conceptual one, more than technical. The Comparable interface is meant...</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[While getting my daily fix of feed, I found <a href="http://www.javablogging.com/comparable-vs-comparator">this post</a> on javablogs, describing a "bug" that crawled into the code because a design decision.<br /><br />The problem they actually had was conceptual one, more than technical. The Comparable interface is meant to be implemented if there is an ordering that inherent to the class (ie, numbers, words, days of week, months, seasons). In their case, ordering by name is not inherent to the SelectablePerson class (you may want to sort by any other field in the future).

<br /><br /><br />I'll follow with another Java quirk in my next post.<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Java Quirks: JLabel.setBackground() don&apos;t &quot;work&quot; by default</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2008/01/java-quirks-jlabelsetbackgroun.html" />
    <id>tag:tech.soronthar.com,2008://3.48</id>

    <published>2008-01-14T16:41:48Z</published>
    <updated>2009-02-10T04:15:47Z</updated>

    <summary>I was working in the same application where I found the previous quirk. This time I tried to make a cell renderer put a background color in the cell, to no avail. I even tried to explicitly return a JLabel...</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Java Quirks" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[I was working in the same application where I found the previous quirk. This time I tried to make a cell renderer put a background color in the cell, to no avail. I even tried to explicitly return a <code>JLabel</code> as the cell renderer, with the proper background color set. Nothing.<br /><br />The answer to the mystery is the fact that <code>JLabel</code> is transparent by default, transparent components don't render their background, and <code>DefaultTreeCellRenderer</code> extends <code>JLabel.</code> <br /><br />]]>
        <![CDATA[ 

After  some <a href="http://www.google.co.ve/search?q=JLabel+setbackground+not+working&amp;hl=en&amp;safe=off&amp;client=firefox-a&amp;rls=org.mozilla:en-US:official&amp;start=20&amp;sa=N">googling </a>again I found out that I'm not alone. There is even a  <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4421165">bug</a> raised, and closed as "not a bug".

From the <code>JComponent.setOpaque()</code>  javadocs:<br /><br />
<pre>    /**<br />     * If true the component paints every pixel within its bounds. <br />     * Otherwise, the component may not paint some or all of its<br />     * pixels, allowing the underlying pixels to show through.<br />     * <p><br />     * The default value of this property is false for <code>JComponent</code>.<br />     * However, the default value for this property on most standard<br />     * <code>JComponent</code> subclasses (such as <code>JButton</code> and<br />     * <code>JTree</code>) is look-and-feel dependent.<br />     *<br />     * @param isOpaque  true if this component should be opaque<br />     * @see #isOpaque<br />     * @beaninfo<br />     *        bound: true<br />     *       expert: true<br />     *  description: The component's opacity<br />     */<br /></p></pre>

The workaround? Add <code>this.setOpaque(true)</code> in the overriden <code>getTreeCellRendererComponent()</code> method:

<pre>public class BagroundColorEnabledRenderer extends DefaultTreeCellRenderer {<br />    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {<br />	super.getTreeCellRendererComponent(tree,value,sel,expanded,leaf,row);<br />	this.setOpaque(true);<br />	return this;<br />    }<br />}<br /></pre>

Happy Coding!]]>
    </content>
</entry>

<entry>
    <title>Java Quirks: ListSelectionListener is always called more than once</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2008/01/java-quirks-listselectionliste.html" />
    <id>tag:tech.soronthar.com,2008://3.47</id>

    <published>2008-01-06T18:40:00Z</published>
    <updated>2009-02-10T04:15:21Z</updated>

    <summary>I have been bitten. ListSelectionListener.valueChanged is called more than once when a selection in a List/Tree/Table is changed. After some googling, I found out that I&apos;m not alone....</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Java Quirks" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[I have been bitten. <i>ListSelectionListener.valueChanged </i>is called more than once when a selection in a List/Tree/Table is changed. After <a href="http://www.google.co.ve/search?q=ListSelectionListener+called+twice&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;aq=t&amp;amp;rls=org.mozilla:en-US:official&amp;gt;">some googling</a>, I found out that I'm not alone. <br /><br />]]>
        <![CDATA[The fix is quick enough, but I was curious about why was happening, so I hacked up the following test program:<br /><br />
<pre>package org.soronthar.spikes;<br /><br />import javax.swing.*;<br />import javax.swing.event.ListSelectionListener;<br />import javax.swing.event.ListSelectionEvent;<br /><br />public class ListSelectionSpike extends JFrame {<br /><br />    public static void main(String[] args) {<br />        ListSelectionSpike spike = new ListSelectionSpike();<br />        spike.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />        JList jList = new JList(new String[]{"One", "Two", "Three"});<br />        jList.getSelectionModel().addListSelectionListener(new ListSelectionListener() {<br />            public void valueChanged(ListSelectionEvent e) {<br />                if (e.getValueIsAdjusting()) {<br />                    System.out.print("Adjusting ");<br />                }<br />                System.out.println("f:" + e.getFirstIndex() + " l:" + e.getLastIndex());<br />            }<br />        });<br />        spike.getContentPane().add(jList);<br />        spike.pack();<br />        spike.setVisible(true);<br />    }<br />}<br /></pre>

After some toying, I found out that <i>valueChanged </i>is
called once each time the mouse is pressed and the selection changes
without releasing the mouse, and once more when the mouse is released.
That means that if you press the mouse, move over all the elements of a
list and then release the mouse, <i>valueChanged </i>will be called once for each element plus once at the end (n+1 calls).  <br /><br />If you change the selection using the keyboard, then it gets called once.

<br /><br />I checked the javadocs for ListSelectionListener and the Swing tutorial, and it seems that this behavior is not documented. <br /><br />After some more digging, I found out that it was even <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4323107">reported as a bug</a> <http: bugs.sun.com="" bugdatabase="" view_bug.do?bug_id="4323107"> long time ago, and it was closed as "not a bug".
<br />
The workaround? Implement your valueChanged method as follows:
</http:><pre>           public void valueChanged(ListSelectionEvent e) {<br />                if (!e.getValueIsAdjusting()) {<br />                    //do my stuff<br />                }<br />            }<br /></pre>
The key is that while the mouse is pressed, all the ListSelectionEvents
will return true for the e.getValueIsAdjusting() call, and will only
return false when the mouse is released. For keyboard operations, it
always returns false.
<br /><br />Hope this helps someone. Happy coding!
]]>
    </content>
</entry>

<entry>
    <title>Java Quirks: java.lang.IllegalArgumentException: Illegal group reference in matcher.appendReplacement and how to solve it</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2007/12/javalangillegalargumentexcepti.html" />
    <id>tag:tech.soronthar.com,2007://3.46</id>

    <published>2007-12-29T22:38:07Z</published>
    <updated>2011-08-01T02:15:05Z</updated>

    <summary><![CDATA[I was doing some regexp work on one of my projects, when suddenly this well-known and hundred-of-times implemented code right from the javadoc, failed:&nbsp;&nbsp;&nbsp;StringBuffer result = new StringBuffer(text.length());&nbsp;&nbsp;&nbsp;while (includeMatcher.find()) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String includeFile = includeMatcher.group(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s = readTemplate(includeFile, area,topic,skins,false);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;includeMatcher.appendReplacement(result, s);&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;includeMatcher.appendTail(result);&nbsp;&nbsp;&nbsp;text = result.toString();A...]]></summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Java Quirks" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javaregexp" label="java regexp" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[I was doing some regexp work on one of my projects, when suddenly this well-known and hundred-of-times implemented code right from the javadoc, failed:<br /><code><br />&nbsp;&nbsp;&nbsp;StringBuffer result = new StringBuffer(text.length());<br />&nbsp;&nbsp;&nbsp;while (includeMatcher.find()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String includeFile = includeMatcher.group(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s = readTemplate(includeFile, area,topic,skins,false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;includeMatcher.appendReplacement(result, s);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;includeMatcher.appendTail(result);<br />&nbsp;&nbsp;&nbsp;text = result.toString();<br /></code><br /><br />A java.lang.IllegalArgumentException was thrown.<br /><br />Thanks to <a href="http://cephas.net/blog/2006/02/09/javalangillegalargumentexception-illegal-group-reference-replaceall-and-dollar-signs/">google</a>, I found out what happened: There was a $ sign in the replacement string. <br />Now, of course this was mentioned in the Matcher javadoc but nowhere in the documentation is stated that an IllegalArgumentException will be thrown.<br /><br />Just for the record: the solution I implemented was to insert the following line just before the appendReplacement call:<br /><br /><code><br />s=s.replaceAll("\\$","\\\\\\$")<br /></code><br /><br />Hope this post helps someone in the future.<br /><br /><b>Update:</b> One commenter gave another solution:<br /><br /><p>Since Java 1.5 you can do</p>

<p>s = Matcher.quoteReplacement(s)</p><br />]]>
        
    </content>
</entry>

<entry>
    <title>Newbie ScribeFire tip</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2007/11/newbie-scribefire-tip.html" />
    <id>tag:tech.soronthar.com,2007://3.43</id>

    <published>2007-11-24T17:10:56Z</published>
    <updated>2007-11-24T17:12:49Z</updated>

    <summary>The first post I made with ScribeFire, had &quot;Powere by ScribeFire&quot; appended at the end. I wanted to turn that down, so I started to browse the site. In one Comment for the release note i found this tip:To disable...</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
    <category term="scribefire" label="ScribeFire" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[The first post I made with ScribeFire, had "Powere by ScribeFire"
appended at the end. I wanted to turn that down, so I started to browse
the site. In one Comment for the release note i found this tip:<br /><br />To
disable the "Powered by ScribeFire" message, click on the &lt;&lt;
simbol at the top left of the ScribeFire panel, go to "Settings" and
uncheck the "Automatically insert Powered by ScribeFire" setting.<br /><br />Happy blogging. ]]>
        
    </content>
</entry>

<entry>
    <title>Posting to MT using ScribeFire or W.Bloggar</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2007/11/posting-to-mt-using-scribefire.html" />
    <id>tag:tech.soronthar.com,2007://3.37</id>

    <published>2007-11-12T01:28:59Z</published>
    <updated>2007-11-12T01:28:59Z</updated>

    <summary>Just in case someone else got bitten by this, the password to be used to post from a blogging client is not the same password used to login into the MT installation. Thankfully, everything is explained in the SixApart site....</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[Just in case someone else got bitten by this, the password to be used to post from a blogging client is not the same password used to login into the MT installation.

Thankfully, everything is explained <a href="http://www.sixapart.com/movabletype/beta/2005/07/xml-rpc_and_ato.html">in the SixApart site</a>. Just a note: the setting to change is "WebServices password", not "API Password".

Happy blogging!

<p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>XmlGridLayout 0.4 Manual</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2007/11/xmlgridlayout-04-manual.html" />
    <id>tag:tech.soronthar.com,2007://3.34</id>

    <published>2007-11-07T04:02:25Z</published>
    <updated>2009-02-10T04:14:22Z</updated>

    <summary>XmlGridLayout is a LayoutManager that seeks to provide all the power ofGridBagLayout with the simplicity of an HTML table. Also, it tries to bea way to separate the layout declaration from the component declaration....</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
        <category term="Article" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[XmlGridLayout is a LayoutManager that seeks to provide all the power of<br />GridBagLayout with the simplicity of an HTML table. Also, it tries to be<br />a way to separate the layout declaration from the component declaration.<br /><br />]]>
        <![CDATA[Let see an example with Layout and Component declared together:<br /><br />JPanel panel=new JPanel(new BorderLayout());<br />panel.add(new JLabel(),BorderLayout.SOUTH);<br />panel.add(new JPanel(),BorderLayout.CENTER);<br /><br />If we want to change the layout of this panel (be it change the manager<br />or change the placement) we would need to modify 3 lines of code.<br /><br />Now let's see an example with Layout and Components declared separately:<br /><br />JPanel panel=new JPanel(new XmlGridLayout(layout);<br />panel.add("mainPanel",new JPanel());<br />panel.add("statusLabel",new JLabel());<br /><br />The layout variable could be a declared variable with the layout string,<br />or the readed content of a file.<br /><br />Now,if we want to change the layout we just need to change the content<br />of the layout variable (or the file with the layout definition). This<br />means that the same layout coud be used by several components (just pass<br />the same layout variable to all the XmlGridLayout instances). Also,<br />notice that each component is given a descriptive name in the layout.<br /><br /><br />&nbsp;&nbsp;&nbsp; 2. Requirements<br /><br />XmlGridLayout has been tested with the JRE 1.4.0+. I think that it could<br />work in previous versions if the org.apache.crimson.parser.XMLReaderImpl<br />class and supporting classes are omewhere in the classpath, but haven't<br />test it so I can't guarantee it.<br /><br /><br />&nbsp;&nbsp;&nbsp; 3. Directory Structure<br /><br />The XmlGridLayout package has several directories in it:<br /><br />src&nbsp;&nbsp;&nbsp;&nbsp; XmlGridLayout sources. These are the only sources you need to<br />rebuild the project<br />demo&nbsp;&nbsp;&nbsp;&nbsp; Source of the demo classes<br />tests&nbsp;&nbsp;&nbsp;&nbsp; Sources of the tests<br />doc&nbsp;&nbsp;&nbsp;&nbsp; Javadocs<br />out&nbsp;&nbsp;&nbsp;&nbsp; where all the compiled classes are stored.<br /><br /><br />&nbsp;&nbsp;&nbsp; 4. Rebuilding from the sources<br /><br />To recompile, check the build.xml file and provide the path to all the<br />libraries needed (basically, JUnit) and run the main target. At some<br />future time a package with all the required libraries will also be<br />provided.<br /><br /><br />&nbsp;&nbsp;&nbsp; 5. Layout Sintaxis<br /><br />A layout is defined using an xml document which has a sintax that is<br />very similar to that of an HTML table. Currently a DTD is not provided,<br />and the idea is that layout documents wont be checked against a DTD but<br />the parsing process will check for errors.<br /><br />Tags and Attributes are case sensitive. Attribute values are/NOT/ case<br />sensitive. Following the list of recognized tags:<br /><br />/Tag/&nbsp;&nbsp;&nbsp;&nbsp; /Attribute/&nbsp;&nbsp;&nbsp;&nbsp; /Description/<br />table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Specify the begining of layout declaration<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellpadding&nbsp;&nbsp;&nbsp;&nbsp; This attribute specifies the internal padding of the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; component, that is, how much to add to both minimun <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width and height of the component. (default=0)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cellspacing&nbsp;&nbsp;&nbsp;&nbsp; This attribute specifies the external padding of the<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; component, the minimum amount of space between the <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; component and the edges of the cell (default=0)<br /><br />tr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Specify that a row of compoenents is being defined.<br /><br />td&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Specify a cell.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fill&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Specify whether and how the component must grow to <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fit the cell (if needed) Valid values are: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Both, Horizontal, Vertical and None (default: None).<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; align&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Specify the horizontal alignment of the component <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inside the cell. Valid values are: Left, Right and <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Center (default: Center)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; valign&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Specify the vertical alignment of the component inside <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the cell. Valud values are: Top, Bottom, Middle <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (default: Middle).<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; colspan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Specify how many columns this cell will take as a display<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; area (default: 1).<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The percentage of the row thar this cell will use. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last cell will have all the remaining space. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Valid values: from 1% to 100%. Defaults to an even <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; distribution of space among cells.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The percentage of the column that this cell will use. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last cell will have all the remaining space. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Valid values: from 1% to 100%.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Defaults to an even distribution of space among cells.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The style this cell will use (see below)<br /><br />styles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Opening element to group all the defined cell styles.<br /><br />style&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Defines an style. It accepts all the td tag attributes <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plus the attribute id<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Defines the id of this style, to be referenced by the class <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; atribute of the td tag<br /><br />Let's see an example:<br /><br />&nbsp; 1 &lt;table cellpadding='2' cellspacing='1'&gt;<br />&nbsp; 2&nbsp;&nbsp;&nbsp; &lt;styles&gt;<br />&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;style id='fillall' fill='BOTH' width='100%' height='50%' /&gt;<br />&nbsp; 4&nbsp;&nbsp;&nbsp; &lt;/styles&gt;<br />&nbsp; 5&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align='right' width='50%' height='50%'&gt;component1&lt;/td&gt;<br />&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align='left' width=50%' height=50%' valign='top'&gt;component2&lt;/td&gt;<br />&nbsp; 8&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />&nbsp; 9&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan='2' class='fillall'&gt;component3&lt;/td&gt;<br />&nbsp;11&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />&nbsp;12 &lt;/table&gt;<br />&nbsp;13 <br />&nbsp;14<br /><br />Let's explain it, line by line:<br /><br />&lt;table cellpadding='2' cellspacing='1'&gt;<br /><br />Here it's declaring a layout that has an internal padding of 2 pixels,<br />with 1 pixel separation between cells.<br /><br />&nbsp; &lt;styles&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;style id='fillall' fill='BOTH' width='100%' height='50%' /&gt;<br />&nbsp;&nbsp; &lt;/styles&gt;<br /><br />Now it's defining the styles to be used in the layout. Specifically,<br />it's creating a style named "fillall", Cells that use this style will<br />have the 100% of the remaining horizontal space, 50% of the remaining<br />vertical space and the component will stretch in both directions to fill it.<br /><br />&nbsp;&nbsp; &lt;tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align='right' width='50%' height='50%'&gt;component1&lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td align='left' width=50%' height=50%' valign='top'&gt;component2&lt;/td&gt;<br />&nbsp;&nbsp; &lt;/tr&gt;<br /><br />Defines a row with two cells. The first cell will have its content<br />aligned to the right (align='right'), will receive 50% of the remaining<br />horizontal space (width='50%'), 50% of the remaining vertical space<br />(height='50%') and is associated to the name component1. The second cell<br />will have its content aligned to the left (align='left') and to the top<br />(valign='top'), will receive 50% of the remaining horizontal space<br />(width='50%'), 50% of the remaining vertical space (height='50%') and is<br />associated to the name component2.<br /><br />&nbsp;&nbsp; &lt;tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan='2' class='fillall'&gt;component3&lt;/td&gt;<br />&nbsp;&nbsp; &lt;/tr&gt;<br /><br />On the second row, there is only one cell that will span over 2 columns<br />(colspan='2'). Note that because the cell was associated to the class<br />"fillall" then it will have the properties as specified in the style<br />"fillall". This cell is associated to the name component3<br /><br /><br />&nbsp;&nbsp;&nbsp; 6. How to layout components?<br /><br />After you build your XML specifying the layout, you must create an<br />XMLGridLayout instance with that layout, and then add component to the<br />container using the same names used in the XML. Example:<br /><br />&nbsp;&nbsp;&nbsp; JFrame frame=new JFrame();<br />&nbsp;&nbsp;&nbsp; Container panel = frame.getContentPane();<br />&nbsp;&nbsp;&nbsp; panel.setLayout(new XMLGridLayout(xmlLayout));<br /><br />Now, you must create as many components as declared in the layout:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JLabel label=new JLabel("This is a label");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTextField textField=new JTextField("This is a textField");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTextArea textArea=new JTextArea("This is a textArea");<br /><br />And now add them to the container, using as the name of the component<br />the name used in the cell you want it to be:<br /><br />panel.add("component1",label);<br />panel.add("component2",textField);<br />panel.add("component3",textArea);<br /><br />To see the result, run the class/org.soronthar.layout.ReadmeExample/. In<br />the top-left corner of the screen you should see the frame configured<br />using XMLGridLayout, and in the center of the screen the one configured<br />with the GridBagLayout. Play with both and try to find any difference.<br /><br />Just for the sake of comparison, here are the equivalent constraints<br />with GridBagLayout, as used in the example class:<br /><br />panel.add(label, new GridBagConstraints(0, 0, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1, 1, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.5, 0.5, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridBagConstraints.EAST,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridBagConstraints.NONE, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Insets(1, 1, 1, 1), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2, 2));<br /><br />panel.add(textField, new GridBagConstraints(1, 0, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1, 1, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.5, 0.5, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridBagConstraints.NORTHWEST,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridBagConstraints.NONE, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Insets(1, 1, 1, 1), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2, 2));<br /><br />panel.add(textArea, new GridBagConstraints(0, 1, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2, 1, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1, 0.5, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridBagConstraints.CENTER,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GridBagConstraints.BOTH, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Insets(1, 1, 1, 1), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2, 2));<br /><br /><br />&nbsp;&nbsp;&nbsp; 7. Demo Classes<br /><br />org.soronthar.layout.ReadmeExample&nbsp;&nbsp;&nbsp;&nbsp; The class with the example in this<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document<br /><br />org.soronthar.layout.DemoFrame&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A very crude demo. Toy with it commenting and <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; decomenting the "LabelC" component.<br /><br />org.soronthar.layout.BigDemoFrame&nbsp;&nbsp;&nbsp;&nbsp; A performance demo. After the frame in shown, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; check the console to see the time spend parsing <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the layout from the XML. Toy with it changing the&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number of component, but be careful to maintain <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the number of columns on sync<br /><br /><br /><br />*Copyright 2004 Rafael Alvarez (Soronthar)*<br /><br />]]>
    </content>
</entry>

<entry>
    <title>A XML Based Swing Layout Manager</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2007/11/a-xml-based-swing-layout-manag.html" />
    <id>tag:tech.soronthar.com,2007://3.33</id>

    <published>2007-11-07T03:23:49Z</published>
    <updated>2007-11-07T03:54:26Z</updated>

    <summary>(reposted from a long-forgotten blog)There used to be a movement to promote the creation of complex GUI using XML. This seems like a good idea, if you can find a nice way to express what you want.IMO, the flaw in...</summary>
    <author>
        <name>Soronthar</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=2</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="swing" label="swing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="xml" label="xml" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[(reposted from a long-forgotten blog)<br /><br />There used to be a movement to promote the creation of complex GUI using XML. This seems like a good idea, if you can find a nice way to express what you want.<br /><br />IMO, the flaw in the implementations I have found so far is that all of them seems to mix up both definition of the component (properties, etc), the behavior of the component (Listener registration) and the Layout. Everything is thrown in the same bag and shaked. It's just a way to express things with XML instead of Java, so there is no true advantage to that approach unless you want to cut down the compilation process (see [1]).<br /><br />So, why would I want to represent a GUI as XML?... I can see two reasons:<br />&nbsp;* Ease the GUI manipulation by tools<br />&nbsp;* Tackle the complexity of GUI building with Awt/Swing<br /><br />The first one is pretty much straightforward: It's easier to maintain a script that has a well known (albeit rigid) semantic than to maintain a class that the programmer will try to modify to bend it to it's will.<br />The second point raises an interesting question: Is really that complex to create a GUI? If so, why?<br /><br />Most Java&nbsp; programmers I know tremble at the mention of two dreaded words: SWING and AWT. Those few braves who don't tremble, but are willing and sometimes eager to dive in the complexity of building, GUI start to shake at the mention of one "simple" class: GridBagLayout. This layout is famed for it's flexibility and complexity... Add this to the fact that struggling with the layout managers, preferred sizes, layout hints and so on to make the components be displayed the way we want can be one of the most titanical and time-consuming task in the GUI development and you can see that making a good GUI in Swing can be daunting to some people.<br /><br />But what if laying out the GUI were a task as simple as building an HTML table? Perhaps this first barrier would be lifted and the programmer can concentrate in what he knows best: To program logic.<br /><br />]]>
        <![CDATA[I'm willing to bet (I'm betting some spare time, for sure) that this
can be done using GridBagLayout. How so? Well, my hypothesis is that
most elements of the GridBagConstraint can be mapped to a standard HTML
tag for tables.<br />
<br />
Here is the match I'm thinking of:<br />
<br />
<br />
GridBagConstraints field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HTML equivalent<br />&nbsp;&nbsp;&nbsp;&nbsp; gridx, gridy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The correspond to the cell where the component is placed <br />&nbsp;&nbsp;&nbsp;&nbsp; gridwidth=N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan="N"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; gridheight=N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td rowspan="N"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; gridheight=N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td rowspan="N"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; ipadx=N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table cellpadding="N"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; ipadx=N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table cellpadding="N"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; ipadx=N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table cellpadding="N"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; ipadx=N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table cellpadding="N"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; insets(N,N,N,N)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table cellspacing="N"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; anchor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a combination of align and valign in either the td or tr tags&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; weightx=N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width=N&gt;<br />
<br />
Of course, GridBagLayout is more powerful in it's ways than an HTML
table (for example, specify the x padding and y padding individually
and finer control over the insets), but the above table is a start.<br />
<br />
The HTML syntax could be extended to provide the features that
GridBagLayout has and then it would be possible to specify the layout
using an XML document. The key point here is that only the layout will
be expressed. This could lead to a clean separation between component
declaration and component layout, thus leading to cleaner code.<br />
<br />
An example: Having 4 components and adding them to a container using GridBagLayout could be something like this:<br />
<br />
add(component1,new GridBagConstraints(1,1,1,2,0,0,CENTER,NONE,new Insets(0,0,0,0), 2,2)<br />
add(component2,new GridBagConstraints(1,2,1,1,0,0,CENTER,NONE,new Insets(0,0,0,0), 2,2)<br />
add(component3,new GridBagConstraints(2,2,2,1,0,0,CENTER,NONE,new Insets(0,0,0,0), 2,2)<br />
add(component4,new GridBagConstraints(1,3,3,1,0,0,CENTER,NONE,new Insets(0,0,0,0), 2,2)<br />
<br />
(CENTER and NONE are short of GridBagConstraints.CENTER and GridBagConstraints.NONE)<br />
<br />
In my proposed, but not yet mature, XML syntax it would be like this:<br />
<br />
&lt;table cellpadding=2 cellspacing=0&gt;<br />
&lt;row&gt;&lt;cell rowspan=2&gt;component1&lt;/cell&gt;&lt;cell&gt;component2&lt;/cell&gt;&lt;/row&gt;<br />
&lt;row&gt;&lt;cell colspan=2&gt;component3&lt;/cell&gt;&lt;/row&gt;<br />
&lt;row&gt;&lt;cell colspan=3&gt;component4&lt;/cell&gt;&lt;/row&gt;<br />
&lt;/table&gt;<br />
<br />
I think I'll bet more of my spare time and implement this. We'll see what happen.<br />
<br />
Related Links:<br />
<br /><a href="http://www.xulplanet.com/">XUL Planet</a><br /><br />
<a href="http://jakarta.apache.org/commons/sandbox/jelly/tutorial.html#jellyswing">Jelly Swing Example</a><br /><br />
<a href="https://packer.dev.java.net/">Packer: Simplifying the GridBagLayout</a><br /><br />
<a href="http://www.trcinc.com/knowledge/articles.asp">Some articles about Xmltalk</a><br /><br /><a href="http://swingml.sourceforge.net/">SwingML</a><br /><br />
<br />
Author's Note: This was posted long ago. I put my code where my mouth was, and created <a href="http://sourceforge.net/projects/xmlgridlayout/">XMLGridLayout</a><br />. Sadly, due Sourceforge change in policy, the TWikI installation where the docs were just stopped working. I'll put them back in this site.<br /><br />
[1] XUL, on itself, is not a bad idea if you want to develop
client-side GUI in the Mozilla platform. That would not be my first
choice, but is a least it's a choice.<br />
<br />
 <div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div>]]>
    </content>
</entry>

<entry>
    <title>Playing with MT</title>
    <link rel="alternate" type="text/html" href="http://tech.soronthar.com/2007/11/playing-with-mt.html" />
    <id>tag:tech.soronthar.com,2007://3.12</id>

    <published>2007-11-04T18:41:02Z</published>
    <updated>2007-11-04T18:44:11Z</updated>

    <summary>Currently I&apos;m playing with MoveableType, to learn how to use the templating system to create a beautiful website. Thus, this particular blog is set to &quot;dynamically publish all templates&quot; so I don&apos;t need to republish everything each time I do...</summary>
    <author>
        <name>Pyros</name>
        <uri>http://tech.soronthar.com/mt/mt-cp.cgi?__mode=view&amp;blog_id=3&amp;id=1</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://tech.soronthar.com/">
        <![CDATA[Currently I'm playing with MoveableType, to learn how to use the templating system to create a beautiful website. Thus, this particular blog is set to "dynamically publish all templates" so I don't need to republish everything each time I do a change.<br /><br />After I manage to learn how to do things, I'll put it back to "statically publish all templates". I like having the generated html around (being burned one to many times with dynamic content generation in other blog/wiki/content management systems).<br />]]>
        
    </content>
</entry>

</feed>


