<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>sebthom.de &#187; Development</title>
	<atom:link href="http://sebthom.de/category/it/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://sebthom.de</link>
	<description>IT Freelancer - Java, J2EE, IBM WebSphere Portal, Lotus Notes/Domino</description>
	<lastBuildDate>Sun, 14 Mar 2010 14:10:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Installing Tomcat 6 on Debian Squeeze</title>
		<link>http://sebthom.de/142-installing-tomcat-6-debian-squeeze/</link>
		<comments>http://sebthom.de/142-installing-tomcat-6-debian-squeeze/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 16:07:35 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[port 80]]></category>
		<category><![CDATA[port forwarding]]></category>
		<category><![CDATA[quercus]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[vhost]]></category>
		<category><![CDATA[virtual servers]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[xinetd]]></category>

		<guid isPermaLink="false">http://sebthom.de/?p=142</guid>
		<description><![CDATA[     <link rel="alternate" type="application/atom+xml" title="sebthom.de Category: Java" href="http://sebthom.de/category/it/development/java-coding/feed/" />
     <link rel="alternate" type="application/atom+xml" title="sebthom.de Category: Linux" href="http://sebthom.de/category/it/linux/feed/" />
This post describes how to setup Tomcat 6 on Debian Squeeze. The configured Tomcat serves requests on port 80 without the need of an additional web server. This is especially good for virtual servers (VPS) providing limit memory. It also has multiple virtual hosts configured, each with it&#8217;s own webapp with context root / and [...]]]></description>
			<content:encoded><![CDATA[<p>This post describes how to setup Tomcat 6 on Debian Squeeze. The configured Tomcat serves requests on port 80 without the need of an additional web server. This is especially good for virtual servers (VPS) providing limit memory. It also has multiple virtual hosts configured, each with it&#8217;s own webapp with context root / and optional support for PHP via the Quercus PHP implementation.</p>
<h3>Installing Sun Java 6</h3>
<p>Ensure the non-free section is enabled for the APT repository configuration in /etc/apt/sources.list, e.g. &#8220;deb http://ftp.de.debian.org/debian testing main contrib non-free&#8221;</p>
<pre name="code" class="php">
apt-get update
apt-get install sun-java6-jdk
echo 'JAVA_HOME="/usr/lib/jvm/java-6-sun"' >> /etc/environment
echo 'JRE_HOME="/usr/lib/jvm/java-6-sun/jre"' >> /etc/environment
</pre>
<h3>Installing Tomcat 6</h3>
<pre  name="code" class="php">
apt-get install tomcat6 tomcat6-admin
/etc/init.d/tomcat6 stop
</pre>
<h3>Creating standard Tomcat directory layout</h3>
<pre name="code" class="php">
mkdir /opt/tomcat
cd /opt/tomcat
ln -s /etc/tomcat6/ conf
ln -s /usr/share/tomcat6/bin/ bin
ln -s /usr/share/tomcat6/lib/ lib
ln -s /var/lib/tomcat6/webapps webapps
ln -s /var/log/tomcat6/ logs
</pre>
<h3>Creating a Tomcat admin user</h3>
<p>In /opt/tomcat/conf/tomcat-users.xml add an entry like:</p>
<pre name="code" class="xml">
&lt;user name="ADMIN_USERNAME" password="ADMIN_PASSWORD" roles="admin,manager" /&gt;
</pre>
<h3>Setting up virtual hosts</h3>
<p>For each virtual host execute the following command. Replace &#8220;mydomain.com&#8221; with the desired virtual host name, but omit the &#8220;www.&#8221; part.</p>
<pre name="code" class="php">
mkdir -p /opt/tomcat/webapps.mydomain.com/ROOT
</pre>
<p>In the &lt;Engine&gt; tag of &#8220;/opt/tomcat/conf/server.xml&#8221; add one host entry for each virtual host.</p>
<pre name="code" class="xml">
&lt;Host name="mydomain.com" appBase="/opt/tomcat/webapps.mydomain.com"&gt;
    &lt;Alias&gt;www.mydomain.com&gt;/Alias&gt;
    &lt;Valve className="org.apache.catalina.valves.AccessLogValve" prefix="mydomain_access_log." suffix=".txt" pattern="common"/&gt;
&lt;/Host&gt;
</pre>
<p>The &lt;Alias&gt; tag tells Tomcat to redirect from www.mydomain.com to mydomain.com.<br />
The &lt;Valve&gt; tag enables access logging in the standard logging format.</p>
<h3>Using xinetd to configure port 80 for Tomcat</h3>
<p>Binding a service on port 80 requires root permissions. Thus we use port forwarding to &#8220;bind&#8221; Tomcat to port 80. My VPS does not support the use of &#8220;iptables -j REDIRECT&#8221; therefore I am using xinetd as a web proxy.<br />
Ensure that no other service is listening on port 80/443:</p>
<pre name="code" class="php">
netstat -pan | grep ":80\|:443"
</pre>
<p>Register the required xinetd services:</p>
<pre name="code" class="php">
echo echo "
service www
{
        socket_type     = stream
        protocol        = tcp
        user            = root
        wait            = no
        bind            = 88.80.198.181
        port            = 80
        redirect        = localhost 8080
        disable         = no
        flags           = REUSE
        log_type        = FILE /var/log/wwwaccess.log
        log_on_success  -= PID HOST DURATION EXIT

        per_source      = UNLIMITED
        instances       = UNLIMITED
}

service https
{
        socket_type     = stream
        protocol        = tcp
        user            = root
        wait            = no
        bind            = 88.80.198.181
        port            = 443
        redirect        = localhost 8443
        disable         = no
        flags           = REUSE
        log_type        = FILE /var/log/httpsaccess.log
        log_on_success  -= PID HOST DURATION EXIT

        per_source      = UNLIMITED
        instances       = UNLIMITED
}
" > /etc/init.d/tomcat
/etc/init.d/xinetd restart
</pre>
<p>If you want to use a different service name, e.g. &#8220;tomcat&#8221; instead of &#8220;www&#8221; you must add this service to /var/services, e.g. &#8220;tomcat 80/tcp&#8221;<br />
In /opt/tomcat/conf/server.xml modify the &lt;Connector&gt; as follows:</p>
<pre name="code" class="xml">
&lt;Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" proxyPort="80" address="127.0.0.1" /&gt;
</pre>
<p>This binds Tomcat to localhost. It also tells Tomcat that port 80 is the proxy port which is necessary for correct URL generation.<br />
From now on the Tomcat admin applications are only accessible via localhost. You can use SSH port forwarding to still access the applications from your workstation&#8217;s web browser. E.g. if you are using <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" rel="nofollow" >PuTTY</a> you can use this command line option &#8220;-L 8080:localhost:8080&#8243; to forward the server&#8217;s local 8080 port to your workstation&#8217;s local 8080 port. On your workstation&#8217;s browser you then simply enter <a href="http://localhost:8080/manager/html" rel="nofollow" >http://localhost:8080/manager/html</a> and are connected to the server&#8217;s Tomcat admin application.</p>
<h3>Enabling PHP support (optional)</h3>
<p>Download <a href="http://quercus.caucho.com/" rel="nofollow" >Quercus</a>.</p>
<pre name="code" class="php">
mkdir -p /opt/downloads
wget -o /opt/downloads/quercus-4.0.3.war http://caucho.com/download/quercus-4.0.3.war
</pre>
<p>Install Quercus as a shared library.</p>
<pre name="code" class="php">
unzip -j /opt/downloads/quercus-4.0.3.war \*.jar -d /opt/tomcat/lib
</pre>
<p>Enable PHP support for the virtual hosts by installing the quercus web.xml. For each virtual host execute:</p>
<pre name="code" class="php">
unzip /opt/downloads/quercus-4.0.3.war *web.xml -d /opt/tomcat/webapps.mydomain.com/ROOT
</pre>
<h3>Starting Tomcat</h3>
<pre name="code" class="php">
/etc/init.d/tomcat start
</pre>
<h3>References</h3>
<ul>
<li><a href="http://www.ibm.com/developerworks/java/library/l-secjav.html#h5" rel="nofollow" >Securing Linux for Java services: The port dilemma</a>
<li><a href="http://ruleoftech.com/journal/redirecting-http-and-https-traffic-to-tomcats-ports" rel="nofollow" >Redirect HTTP and HTTPS traffic to Tomcat&#8217;s ports</a>
<li><a href="http://tomcat.apache.org/tomcat-6.0-doc/virtual-hosting-howto.html" rel="nofollow" >Tomcat 6: Virtual Hosting How To</a>
<li><a href="http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html" rel="nofollow" >Tomcat 6: Classloader How To</a>
<li><a href="http://www.ex-parrot.com/pete/tomcat-vhost.html" rel="nofollow" >Virtual Hosting with Tomcat</a>
<li><a href="http://wiki.caucho.com/Quercus:_Tomcat" rel="nofollow" >Quercus: Tomcat</a>
<li><a href="http://www.ubuntugeek.com/how-to-install-tomcat-6-on-ubuntu-9-04-jaunty.html" rel="nofollow" >How to install Tomcat 6 on Ubuntu 9.04 (Jaunty)</a>
</ul>
 <img src="http://sebthom.de/wp-content/plugins/feed-statistics.php?view=1&post_id=142" width="1" height="1" style="display: none;" /><hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2010. |
<a href="http://sebthom.de/142-installing-tomcat-6-debian-squeeze/">Permalink</a> |
<a href="http://sebthom.de/142-installing-tomcat-6-debian-squeeze/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/142-installing-tomcat-6-debian-squeeze/&amp;title=Installing Tomcat 6 on Debian Squeeze">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/java/" rel="nofollow tag">Java</a>, <a href="http://sebthom.de/tag/php/" rel="nofollow tag">PHP</a>, <a href="http://sebthom.de/tag/port-80/" rel="nofollow tag">port 80</a>, <a href="http://sebthom.de/tag/port-forwarding/" rel="nofollow tag">port forwarding</a>, <a href="http://sebthom.de/tag/quercus/" rel="nofollow tag">quercus</a>, <a href="http://sebthom.de/tag/tomcat/" rel="nofollow tag">tomcat</a>, <a href="http://sebthom.de/tag/vhost/" rel="nofollow tag">vhost</a>, <a href="http://sebthom.de/tag/virtual-servers/" rel="nofollow tag">virtual servers</a>, <a href="http://sebthom.de/tag/vps/" rel="nofollow tag">VPS</a>, <a href="http://sebthom.de/tag/xinetd/" rel="nofollow tag">xinetd</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/142-installing-tomcat-6-debian-squeeze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leveraging PyDev&#8217;s auto completion for indirectly created objects</title>
		<link>http://sebthom.de/140-leveraging-pydevs-auto-completion-indirectly-created-objects/</link>
		<comments>http://sebthom.de/140-leveraging-pydevs-auto-completion-indirectly-created-objects/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 23:29:00 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Jython]]></category>
		<category><![CDATA[pydev]]></category>
		<category><![CDATA[pydoc]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rtype]]></category>

		<guid isPermaLink="false">http://sebthom.de/?p=140</guid>
		<description><![CDATA[This is just a quick tip how to enable auto completion in PyDev for indirectly created objects. 
By default, PyDev has no problems in presenting you the possible object attributes and methods on a variable if that variable gets a new object instance assigned directly in the code. 
For example, when you first type &#8230;
mybook [...]]]></description>
			<content:encoded><![CDATA[<p>This is just a quick tip how to enable auto completion in <a href="http://pydev.org" rel="nofollow" >PyDev</a> for indirectly created objects. </p>
<p>By default, PyDev has no problems in presenting you the possible object attributes and methods on a variable if that variable gets a new object instance assigned directly in the code. </p>
<p>For example, when you first type &#8230;</p>
<pre name="code" class="python">mybook = Book()</pre>
<p>&#8230; and in the next line you enter &#8230;</p>
<pre name="code" class="python">mybook.</pre>
<p>&#8230; PyDev will dutifully present you the statically declared features for the Book class in a popup.</p>
<p>If you however get that Book instance as the result of another method, e.g. &#8230;</p>
<pre name="code" class="python">mybook = bookstore.findBook("foobar")</pre>
<p>&#8230; PyDev currently seems to be helpless. </p>
<p>Because of Python&#8217;s dynamic nature it is of course a bit harder for an IDE to figure out what kind of objects may a method. But PyDev could for example honor the @return / @rtype <a href="http://epydoc.sourceforge.net/manual-epytext.html" rel="nofollow" >PyDoc</a> annotations (which you can add to the findBook&#8217;s method declaration) but currently it just does not.</p>
<p>To still have autocompletion you have two options:</p>
<ol>
<li> Temporarily instantiate a Book object in the code.
<pre name="code" class="python">
mybook = Book()
mybook = bookstore.findBook("foobar")
mybook. #--> now you have auto completion
</pre>
<p>This has the drawback, that if you forget to remove the first line before you finish coding an unneccessary Book instance will be created on every execution during runtime.</p>
<li> Use an assertion to ensure that the mybook variable contains an object of type Book
<pre name="code" class="python">
mybook = bookstore.findBook("foobar")
assert isinstance(mybook, Book)
mybook. #--> now you have auto completion
</pre>
</ol>
 <img src="http://sebthom.de/wp-content/plugins/feed-statistics.php?view=1&post_id=140" width="1" height="1" style="display: none;" /><hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2010. |
<a href="http://sebthom.de/140-leveraging-pydevs-auto-completion-indirectly-created-objects/">Permalink</a> |
<a href="http://sebthom.de/140-leveraging-pydevs-auto-completion-indirectly-created-objects/#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/140-leveraging-pydevs-auto-completion-indirectly-created-objects/&amp;title=Leveraging PyDev&#8217;s auto completion for indirectly created objects">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/jython/" rel="nofollow tag">Jython</a>, <a href="http://sebthom.de/tag/pydev/" rel="nofollow tag">pydev</a>, <a href="http://sebthom.de/tag/pydoc/" rel="nofollow tag">pydoc</a>, <a href="http://sebthom.de/tag/python/" rel="nofollow tag">python</a>, <a href="http://sebthom.de/tag/rtype/" rel="nofollow tag">rtype</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/140-leveraging-pydevs-auto-completion-indirectly-created-objects/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OVal 1.40 released</title>
		<link>http://sebthom.de/139-oval-140-released/</link>
		<comments>http://sebthom.de/139-oval-140-released/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 20:42:38 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://sebthom.de/?p=139</guid>
		<description><![CDATA[I am happy to announce the immediate availability of Version 1.40 OVal the Object Validation Framework for Java. This release fixes some minor issues and provides the following two new features:
1. Enabling/disabling constraints based on the object state:
Using the newly introduced when attribute for constraints it is possible to specify under which circumstances the constraint [...]]]></description>
			<content:encoded><![CDATA[<p>I am happy to announce the immediate availability of Version 1.40 OVal the Object Validation Framework for Java. This release fixes some minor issues and provides the following two new features:</p>
<p><b>1. Enabling/disabling constraints based on the object state:</b><br />
Using the newly introduced <i>when</i> attribute for constraints it is possible to specify under which circumstances the constraint will be considered during object validation. The <i>when</i> attribute holds a formula in one of the supported scripting languages. If the formula returns true, the constraint will be activated for the current validation cycle otherwise it is ignored. In the following example the alias attribute must have a value only when the name attribute is not set.</p>
<pre name="code" class="java">
public class User {
   private String name;

   @NotNull(when = "groovy:_this.name == null")
   private String alias;

   // . . .
}
</pre>
<p><b>2. Fine grain control over how constraints are applied on arrays, maps, collections and their elements</b><br />
The newly introduced attribute <i>appliesTo</i> allows you to specify if and how a constraint declared for a map, a collection or an array is applied to their elements as well or exclusively. See the following example how this works:</p>
<pre name="code" class="java">
public class BusinessObject {

   // the ids field may be null, but if it is not null
   // none of it's items must be null
   @NotNull(appliesTo = { ConstraintTarget.VALUES })
   private String[] ids;

   // only the field itself must not be null,
   // the list can contain null values
   @NotNull(appliesTo = { ConstraintTarget.CONTAINER })
   private List items;

   // the field must not be null as well as all keys
   // and values of the map
   @NotNull(appliesTo = { ConstraintTarget.CONTAINER, ConstraintTarget.KEYS, ConstraintTarget.VALUES })
   private Map itemsByGroup;

   // . . .
}
</pre>
<p><b>Download</b><br />
You can get the lates binaries and source files of OVal from here: http://sourceforge.net/projects/oval/files/</p>
 <img src="http://sebthom.de/wp-content/plugins/feed-statistics.php?view=1&post_id=139" width="1" height="1" style="display: none;" /><hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2009. |
<a href="http://sebthom.de/139-oval-140-released/">Permalink</a> |
<a href="http://sebthom.de/139-oval-140-released/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/139-oval-140-released/&amp;title=OVal 1.40 released">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/139-oval-140-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comparing version numbers in Jython / Python</title>
		<link>http://sebthom.de/136-comparing-version-numbers-in-jython-pytho/</link>
		<comments>http://sebthom.de/136-comparing-version-numbers-in-jython-pytho/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 23:03:57 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Jython]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://sebthom.de/?p=136</guid>
		<description><![CDATA[Here comes a function to compare version numbers of e.g. Maven artifacts in Jython / Python.

import re

def cmpver(vA, vB):
    """
    Compares two version number strings
    @param vA: first version string to compare
    @param vB: second version string to compare
    @author [...]]]></description>
			<content:encoded><![CDATA[<p>Here comes a function to compare version numbers of e.g. Maven artifacts in Jython / Python.</p>
<pre name="code" class="python">
import re

def cmpver(vA, vB):
    """
    Compares two version number strings
    @param vA: first version string to compare
    @param vB: second version string to compare
    @author <a href="http://sebthom.de/">Sebastian Thomschke</a>
    @return negative if vA < vB, zero if vA == vB, positive if vA > vB.

    Examples:
    >>> cmpver("0", "1")
    -1
    >>> cmpver("1", "0")
    1
    >>> cmpver("1", "1")
    0
    >>> cmpver("1.0", "1.0")
    0
    >>> cmpver("1.0", "1")
    0
    >>> cmpver("1", "1.0")
    0
    >>> cmpver("1.1.0", "1.0.1")
    1
    >>> cmpver("1.0.1", "1.1.1")
    -1
    >>> cmpver("0.3-SNAPSHOT", "0.3")
    -1
    >>> cmpver("0.3", "0.3-SNAPSHOT")
    1
    >>> cmpver("1.3b", "1.3c")
    -1
    >>> cmpver("1.14b", "1.3c")
    1
    """
    if vA == vB: return 0

    def num(s):
        if s.isdigit(): return int(s)
        return s

    seqA = map(num, re.findall('\d+|\w+', vA.replace('-SNAPSHOT', '')))
    seqB = map(num, re.findall('\d+|\w+', vB.replace('-SNAPSHOT', '')))

    # this is to ensure that 1.0 == 1.0.0 in cmp(..)
    lenA, lenB = len(seqA), len(seqB)
    for i in range(lenA, lenB): seqA += (0,)
    for i in range(lenB, lenA): seqB += (0,)

    rc = cmp(seqA, seqB)

    if rc == 0:
        if vA.endswith('-SNAPSHOT'): return -1
        if vB.endswith('-SNAPSHOT'): return 1
    return rc
</pre>
<p>Theoretically lines 43 &#8211; 49 could be written in a more compact way but using the short circuit evaluations (as below) lead to wrong results &#8211; at least in Jython 2.1:</p>
<pre name="code" class="python">
    seqa = map(lambda s: s.isdigit() and int(s) or s, re.findall('\d+|\w+', vA.replace('-SNAPSHOT', '')))
    seqb = map(lambda s: s.isdigit() and int(s) or s, re.findall('\d+|\w+', vB.replace('-SNAPSHOT', '')))
</pre>
 <img src="http://sebthom.de/wp-content/plugins/feed-statistics.php?view=1&post_id=136" width="1" height="1" style="display: none;" /><hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2009. |
<a href="http://sebthom.de/136-comparing-version-numbers-in-jython-pytho/">Permalink</a> |
<a href="http://sebthom.de/136-comparing-version-numbers-in-jython-pytho/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/136-comparing-version-numbers-in-jython-pytho/&amp;title=Comparing version numbers in Jython / Python">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/jython/" rel="nofollow tag">Jython</a>, <a href="http://sebthom.de/tag/python/" rel="nofollow tag">python</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/136-comparing-version-numbers-in-jython-pytho/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running TomCat 6 in Debug Mode under Windows</title>
		<link>http://sebthom.de/135-running-tomcat-6-debug-mode-windows/</link>
		<comments>http://sebthom.de/135-running-tomcat-6-debug-mode-windows/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 21:55:02 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://sebthom.de/?p=135</guid>
		<description><![CDATA[While tracing some problems in one of my grails applications I had the need to do step debugging on a remote Tomcat server. Eventually I came up with the following lines to launch TomCat in debug mode:

@echo off
set JPDA_TRANSPORT="dt_socket"
set JPDA_ADDRESS="8000"
set JPDA_SUSPEND="y"
catalina.bat jpda start

Simply create a debug.bat file in TomCat&#8217;s bin directory and add these lines.
 [...]]]></description>
			<content:encoded><![CDATA[<p>While tracing some problems in one of my grails applications I had the need to do step debugging on a remote Tomcat server. Eventually I came up with the following lines to launch TomCat in debug mode:</p>
<pre>
@echo off
set JPDA_TRANSPORT="dt_socket"
set JPDA_ADDRESS="8000"
set JPDA_SUSPEND="y"
catalina.bat jpda start
</pre>
<p>Simply create a <b>debug.bat</b> file in TomCat&#8217;s <b>bin</b> directory and add these lines.</p>
 <img src="http://sebthom.de/wp-content/plugins/feed-statistics.php?view=1&post_id=135" width="1" height="1" style="display: none;" /><hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2009. |
<a href="http://sebthom.de/135-running-tomcat-6-debug-mode-windows/">Permalink</a> |
<a href="http://sebthom.de/135-running-tomcat-6-debug-mode-windows/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/135-running-tomcat-6-debug-mode-windows/&amp;title=Running TomCat 6 in Debug Mode under Windows">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/135-running-tomcat-6-debug-mode-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lotus Notes&#8217; [Send only] and [Send and File] buttons for Outlook 2003</title>
		<link>http://sebthom.de/119-lotus-notes-send-only-send-and-file-buttons-for-outlook-2003/</link>
		<comments>http://sebthom.de/119-lotus-notes-send-only-send-and-file-buttons-for-outlook-2003/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 18:13:08 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[VBA]]></category>

		<guid isPermaLink="false">http://sebthom.de/?p=119</guid>
		<description><![CDATA[You can say what you want about Lotus Notes, if you have used it for a while and switched e.g. to Outlook, you&#8217;ll find yourself missing one or the other nifty Notes function.
Already two of my customers &#8220;forced&#8221; me to use MS Outlook 2003 and since this isn&#8217;t likely to change in the near future, [...]]]></description>
			<content:encoded><![CDATA[<p>You can say what you want about Lotus Notes, if you have used it for a while and switched e.g. to Outlook, you&#8217;ll find yourself missing one or the other nifty Notes function.</p>
<p>Already two of my customers &#8220;forced&#8221; me to use MS Outlook 2003 and since this isn&#8217;t likely to change in the near future, I implemented two of these handy Notes functions for Outlook 2003:</p>
<ol>
<li>The button <b>[Send only]</b> sends e-mails without storing a copy of it in the local mailbox.</li>
<li>The button <b>[Send and File...]</b> prompts you for the folder where to store the e-mail being send.</li>
</ol>
<p>Installation:</p>
<ol>
<li>Download the Visual Basic module in the favored language.<br />
Note: There is a file embedded within this post, please visit this post to download the file.</p>
<p>Note: There is a file embedded within this post, please visit this post to download the file.<br />

</li>
<li>In Outlook open the Visual Basic editor.<br />
<a href="http://sebthom.de/wp-content/uploads/2009/02/01_outlook_open_vbe.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/01_outlook_open_vbe-150x150.png" alt="open VBE from within outlook" title="open VBE from within outlook" class="alignnone size-thumbnail wp-image-121" height="150" width="150" /></a></li>
<li>Import the Visual Basic module.<br />
<a href="http://sebthom.de/wp-content/uploads/2009/02/02_vbe_import.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/02_vbe_import-150x150.png" alt="Import the VBE module" title="Import the VBE module" class="alignnone size-thumbnail wp-image-122" height="150" width="150" /></a> <a href="http://sebthom.de/wp-content/uploads/2009/02/03_vbe_select_file.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/03_vbe_select_file-150x150.png" alt="Select the VBE module" title="Select the VBE module" class="alignnone size-thumbnail wp-image-123" height="150" width="150" /></a> <a href="http://sebthom.de/wp-content/uploads/2009/02/04_vbe_module_imported.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/04_vbe_module_imported-150x150.png" alt="The VBE module was imported." title="The VBE module was imported." class="alignnone size-thumbnail wp-image-124" height="150" width="150" /></a>
</li>
<li>Save the project.<br />
<a href="http://sebthom.de/wp-content/uploads/2009/02/05_vbe_save_module.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/05_vbe_save_module-150x150.png" alt="Save the VBE project" title="Save the VBE project" class="alignnone size-thumbnail wp-image-125" height="150" width="150" /></a>
</li>
<li>Install the buttons in the toolbar.<br />
<a href="http://sebthom.de/wp-content/uploads/2009/02/06_outlook_open_markos.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/06_outlook_open_markos-150x150.png" alt="Open the Macros dialog" title="Open the Macros dialog" class="alignnone size-thumbnail wp-image-126" height="150" width="150" /></a> <a href="http://sebthom.de/wp-content/uploads/2009/02/07_marco_select_install_sendandfile.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/07_marco_select_install_sendandfile-150x150.png" alt="Installing the button [Send and File...]" title="Installing the button [Send and File...]" class="alignnone size-thumbnail wp-image-127" height="150" width="150" /></a> <a href="http://sebthom.de/wp-content/uploads/2009/02/08_msg_sendandfile_installed.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/08_msg_sendandfile_installed-150x120.png" alt="Button [Send and File...] installed" title="Button [Send and File...] installed" class="alignnone size-thumbnail wp-image-128" height="120" width="150" /></a> <a href="http://sebthom.de/wp-content/uploads/2009/02/09_marco_select_install_sendonly.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/09_marco_select_install_sendonly-150x150.png" alt="Installing the button [Send only]" title="Installing the button [Send only]" class="alignnone size-thumbnail wp-image-129" height="150" width="150" /></a> <a href="http://sebthom.de/wp-content/uploads/2009/02/10_msg_sendonly_installed.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/10_msg_sendonly_installed-150x120.png" alt="Button [Send only] installed" title="Button [Send only] installed" class="alignnone size-thumbnail wp-image-130" height="120" width="150" /></a>
</li>
<li>When composing a new e-mail the additional buttons should appear in the toolbar.<br />
<a href="http://sebthom.de/wp-content/uploads/2009/02/11_new_buttons_in_toolbar.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/11_new_buttons_in_toolbar-150x150.png" alt="New buttons in the toolbar" title="New buttons in the toolbar" class="alignnone size-thumbnail wp-image-131" height="150" width="150" /></a>
</li>
<li>When clicking &#8220;Send and File&#8230;&#8221; the folder dialog is displayed before the e-mail is send.<br />
<a href="http://sebthom.de/wp-content/uploads/2009/02/12_sendandfile_select_folder.png" rel="lightbox[119]"><img src="http://sebthom.de/wp-content/uploads/2009/02/12_sendandfile_select_folder-150x150.png" alt="Selecting the target folder" title="Selecting the target folder" class="alignnone size-thumbnail wp-image-120" height="150" width="150" /></a></li>
</ol>
 <img src="http://sebthom.de/wp-content/plugins/feed-statistics.php?view=1&post_id=119" width="1" height="1" style="display: none;" /><hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2009. |
<a href="http://sebthom.de/119-lotus-notes-send-only-send-and-file-buttons-for-outlook-2003/">Permalink</a> |
<a href="http://sebthom.de/119-lotus-notes-send-only-send-and-file-buttons-for-outlook-2003/#comments">9 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/119-lotus-notes-send-only-send-and-file-buttons-for-outlook-2003/&amp;title=Lotus Notes&#8217; [Send only] and [Send and File] buttons for Outlook 2003">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/outlook/" rel="nofollow tag">Outlook</a>, <a href="http://sebthom.de/tag/productivity/" rel="nofollow tag">Productivity</a>, <a href="http://sebthom.de/tag/vba/" rel="nofollow tag">VBA</a>, <a href="http://sebthom.de/tag/visual-basic/" rel="nofollow tag">Visual Basic</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/119-lotus-notes-send-only-send-and-file-buttons-for-outlook-2003/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>getpass for Jython</title>
		<link>http://sebthom.de/70-getpass-jython/</link>
		<comments>http://sebthom.de/70-getpass-jython/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 00:02:15 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Jython]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://sebthom.de/?p=70</guid>
		<description><![CDATA[In my current project I am developing some Jython based command line tools and had the need for masking passwords entered in the command shell. Python provides the getpass module for this purpose. Unfortunately this module has not been made available for Jython.
Here comes a module I wrote to provide this kind of functionality. It [...]]]></description>
			<content:encoded><![CDATA[<p>In my current project I am developing some Jython based command line tools and had the need for masking passwords entered in the command shell. Python provides the <a href="http://www.python.org/doc/lib/module-getpass.html" rel="nofollow" >getpass </a>module for this purpose. Unfortunately this module has not been made available for Jython.</p>
<p>Here comes a module I wrote to provide this kind of functionality. It uses the mechanism described here <a href="http://java.sun.com/developer/technicalArticles/Security/pwordmask/" rel="nofollow" >http://java.sun.com/developer/technicalArticles/Security/pwordmask/</a> to mask characters entered at the command prompt. Additionally if Java 6 or higher is running Jython the module will instead use the new <a href="http://java.sun.com/javase/6/docs/api/java/io/Console.html#readPassword%28%29" rel="nofollow" >Console.readPassword()</a> method. In case the module is running in an environment where the getpass module is available it will delegate to the corresponding methods of this module instead of using its own implementations.</p>
<pre class="python" name="code"># ext_getpass.py
# @author Sebastian Thomschke, http://sebthom.de/
import thread, sys, time, os

# exposed methods:
__all__ = ["getpass","getuser"]

def __doMasking(stream):
    __doMasking.stop = 0
    while not __doMasking.stop:
        stream.write("b*")
        stream.flush()
        time.sleep(0.01)

def generic_getpass(prompt="Password: ", stream=None):
    if not stream:
        stream = sys.stderr
    prompt = str(prompt)
    if prompt:
        stream.write(prompt)
        stream.flush()
    thread.start_new_thread(__doMasking, (stream,))
    password = raw_input()
    __doMasking.stop = 1
    return password

def generic_getuser():
    for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
        usr = os.environ.get(name)
        if usr: return usr

def java6_getpass(prompt="Password: ", stream=None):
    if not stream:
        stream = sys.stderr
    prompt = str(prompt)
    if prompt:
        stream.write(prompt)
        stream.flush()

    from java.lang import System
    console = System.console()
    if console == None:
	    return generic_getpass(prompt, stream)
    else:
        return "".join(console.readPassword())

try:
    # trying to use Python's getpass implementation
    import getpass
    getpass = getpass.getpass
    getuser = getpass.getuser
except ImportError, e:
    getuser = generic_getuser

    # trying to use Java 6's Console.readPassword() implementation
    try:
        from java.io import Console
        getpass = java6_getpass
    except ImportError, e:
        # use the generic getpass implementation
        getpass = generic_getpass
</pre>
<p>Here is an usage example:</p>
<pre class="python" name="code">
import ext_getpass as getpass

pw = getpass.getpass("Please enter your password:")
print "The entered password was: " + pw
</pre>
 <img src="http://sebthom.de/wp-content/plugins/feed-statistics.php?view=1&post_id=70" width="1" height="1" style="display: none;" /><hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2008. |
<a href="http://sebthom.de/70-getpass-jython/">Permalink</a> |
<a href="http://sebthom.de/70-getpass-jython/#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/70-getpass-jython/&amp;title=getpass for Jython">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/java/" rel="nofollow tag">Java</a>, <a href="http://sebthom.de/tag/jython/" rel="nofollow tag">Jython</a>, <a href="http://sebthom.de/tag/password/" rel="nofollow tag">password</a>, <a href="http://sebthom.de/tag/python/" rel="nofollow tag">python</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/70-getpass-jython/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sun JDK5/6 compilers broken when linking overloaded methods with variable arguments</title>
		<link>http://sebthom.de/56-sun_jdk5_6_compilers_broken_when_linking_overloaded_methods_with_variable_arguments/</link>
		<comments>http://sebthom.de/56-sun_jdk5_6_compilers_broken_when_linking_overloaded_methods_with_variable_arguments/#comments</comments>
		<pubDate>Thu, 15 May 2008 23:23:44 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[jdk]]></category>

		<guid isPermaLink="false">http://sebthom.de/56-sun_jdk5_6_compilers_broken_when_linking_overloaded_methods_with_variable_arguments/</guid>
		<description><![CDATA[We are currently switching the build system of OVal from custom Ant scripts to Maven 2. During that process we accidentally compiled the project using the Java compiler of the Sun JDK 5 instead of the AspectJ compiler. Surprisingly javac did not complain about the missing aspect class files. Instead it already aborted while compiling [...]]]></description>
			<content:encoded><![CDATA[<p>We are currently switching the build system of <a href="http://oval.sourceforge.net/" rel="nofollow" title="OVal - the object validation framework for Java 5 or later"  target="_blank">OVal</a> from custom Ant scripts to Maven 2. During that process we accidentally compiled the project using the Java compiler of the Sun JDK 5 instead of the AspectJ compiler. Surprisingly javac did not complain about the missing aspect class files. Instead it already aborted while compiling an ordinary Java class which only referenced other non-AspectJ related classes. This is the original error message:</p>
<pre>[INFO] [compiler:compile]
[INFO] Compiling 180 source files to C:\projects\oval\src\trunk\target\classes
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
C:\projects\oval\src\trunk\src\main\java\net\sf\oval\Validator.java:[373,58]
addMethodParameterChecks(java.lang.reflect.Method,int,java.lang.Object)
has private access in net.sf.oval.internal.ClassChecks </pre>
<p>There exist multiple methods named <strong>addMethodParameterChecks</strong> in the class <strong>ClassChecks</strong> with different signatures. The problem is that javac tries to link against the wrong method when compiling the class calling one of the methods. </p>
<p>(...)<br/>Read the rest of <a href="http://sebthom.de/56-sun_jdk5_6_compilers_broken_when_linking_overloaded_methods_with_variable_arguments/">Sun JDK5/6 compilers broken when linking overloaded methods with variable arguments</a> (284 words)</p>
<hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2008. |
<a href="http://sebthom.de/56-sun_jdk5_6_compilers_broken_when_linking_overloaded_methods_with_variable_arguments/">Permalink</a> |
<a href="http://sebthom.de/56-sun_jdk5_6_compilers_broken_when_linking_overloaded_methods_with_variable_arguments/#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/56-sun_jdk5_6_compilers_broken_when_linking_overloaded_methods_with_variable_arguments/&amp;title=Sun JDK5/6 compilers broken when linking overloaded methods with variable arguments">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/bug/" rel="nofollow tag">bug</a>, <a href="http://sebthom.de/tag/compiler/" rel="nofollow tag">compiler</a>, <a href="http://sebthom.de/tag/java/" rel="nofollow tag">Java</a>, <a href="http://sebthom.de/tag/jdk/" rel="nofollow tag">jdk</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/56-sun_jdk5_6_compilers_broken_when_linking_overloaded_methods_with_variable_arguments/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OVal 1.0 released!</title>
		<link>http://sebthom.de/42-oval-java-validation-framework-released/</link>
		<comments>http://sebthom.de/42-oval-java-validation-framework-released/#comments</comments>
		<pubDate>Sun, 22 Jul 2007 12:10:22 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[oval]]></category>

		<guid isPermaLink="false">http://sebthom.de/2007/07/oval-java-validation-framework-released/</guid>
		<description><![CDATA[OVal is a pragmatic and extensible validation framework for any kind of Java objects (not only JavaBeans). Constraints can be configured with annotations, POJOs or XML. Custom constraints can be expressed in pure Java or by using scripting languages such as JavaScript, Groovy, BeanShell, OGNL or MVEL. Besides simple object validation OVal implements Programming by [...]]]></description>
			<content:encoded><![CDATA[<p>OVal is a pragmatic and extensible validation framework for any kind of Java objects (not only JavaBeans). Constraints can be configured with annotations, POJOs or XML. Custom constraints can be expressed in pure Java or by using scripting languages such as JavaScript, Groovy, BeanShell, OGNL or MVEL. Besides simple object validation OVal implements Programming by Contract features by utilizing AspectJ based aspects. </p>
<p>Visit the project page at <a href="http://sourceforge.net/projects/oval/" rel="nofollow" >http://sourceforge.net/projects/oval/</a></p>
 <img src="http://sebthom.de/wp-content/plugins/feed-statistics.php?view=1&post_id=42" width="1" height="1" style="display: none;" /><hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2007. |
<a href="http://sebthom.de/42-oval-java-validation-framework-released/">Permalink</a> |
<a href="http://sebthom.de/42-oval-java-validation-framework-released/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/42-oval-java-validation-framework-released/&amp;title=OVal 1.0 released!">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/java/" rel="nofollow tag">Java</a>, <a href="http://sebthom.de/tag/oval/" rel="nofollow tag">oval</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/42-oval-java-validation-framework-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MyPad v1.1.6 &#8211; a PHP Editor</title>
		<link>http://sebthom.de/23-mypad-php-editor/</link>
		<comments>http://sebthom.de/23-mypad-php-editor/#comments</comments>
		<pubDate>Mon, 26 Jul 2004 19:26:49 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[My Freeware]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://sebthom.de/2007/09/mypad-v116-langenalangenlangdeeinlangde-php-editor-03072004/</guid>
		<description><![CDATA[MyPad is a very compact PHP Editor. I developed this editor because I could not find a suitable PHP Editor with a Single Document Interface.
The Editor I was searching for should look and behave like Notepad, but should be able to colorize PHP source code.
Such a small Editor can be perfectly used in conjunction with [...]]]></description>
			<content:encoded><![CDATA[<p>MyPad is a very compact PHP Editor. I developed this editor because I could not find a suitable PHP Editor with a Single Document Interface.<br />
The Editor I was searching for should look and behave like Notepad, but should be able to colorize PHP source code.<br />
Such a small Editor can be perfectly used in conjunction with a norton commander like filemanager.</p>
<p>(...)<br/>Read the rest of <a href="http://sebthom.de/23-mypad-php-editor/">MyPad v1.1.6 &#8211; a PHP Editor</a> (123 words)</p>
<hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2004. |
<a href="http://sebthom.de/23-mypad-php-editor/">Permalink</a> |
<a href="http://sebthom.de/23-mypad-php-editor/#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/23-mypad-php-editor/&amp;title=MyPad v1.1.6 &#8211; a PHP Editor">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/bug/" rel="nofollow tag">bug</a>, <a href="http://sebthom.de/tag/freeware/" rel="nofollow tag">My Freeware</a>, <a href="http://sebthom.de/tag/php/" rel="nofollow tag">PHP</a>, <a href="http://sebthom.de/tag/visual-basic/" rel="nofollow tag">Visual Basic</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/23-mypad-php-editor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Basic &#8211; Multiple Undos Class v2.04</title>
		<link>http://sebthom.de/30-visual-basic-multiple-undos-class/</link>
		<comments>http://sebthom.de/30-visual-basic-multiple-undos-class/#comments</comments>
		<pubDate>Sun, 09 Mar 2003 19:06:05 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://sebthom.de/2007/09/visual-basic-multiple-undos-class-v204-released-05092003/lang/de</guid>
		<description><![CDATA[I tried a lot of differnet multi undo solutions, but every had at least one draw back. So I had to write my on solution and I think my one is quite smart.
If you want to use it, you don&#8217;t have to clutter your code by pasting in lots of undo-related subs, functions and variables. [...]]]></description>
			<content:encoded><![CDATA[<p>I tried a lot of differnet multi undo solutions, but every had at least one draw back. So I had to write my on solution and I think my one is quite smart.</p>
<p>If you want to use it, you don&#8217;t have to clutter your code by pasting in lots of undo-related subs, functions and variables. Everything comes within two small class files.</p>
<p>(...)<br/>Read the rest of <a href="http://sebthom.de/30-visual-basic-multiple-undos-class/">Visual Basic &#8211; Multiple Undos Class v2.04</a> (116 words)</p>
<hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2003. |
<a href="http://sebthom.de/30-visual-basic-multiple-undos-class/">Permalink</a> |
<a href="http://sebthom.de/30-visual-basic-multiple-undos-class/#comments">2 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/30-visual-basic-multiple-undos-class/&amp;title=Visual Basic &#8211; Multiple Undos Class v2.04">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/visual-basic/" rel="nofollow tag">Visual Basic</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/30-visual-basic-multiple-undos-class/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Visual Basic &#8211; High Precision Timer v1.20</title>
		<link>http://sebthom.de/32-visual-basic-high-precision-timer/</link>
		<comments>http://sebthom.de/32-visual-basic-high-precision-timer/#comments</comments>
		<pubDate>Mon, 05 Aug 2002 19:12:41 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://sebthom.de/2007/09/visual-basic-high-precision-timer-v120-05082002/lang/de</guid>
		<description><![CDATA[This code is a VB implementation of the high precision multimedia timer which can be found in the winmm.dll.
I wrote this code because of the same reason I developed the multiple undo class: I wanted to have a smart solution that can be easily added to different VB projects, that doesn&#8217;t clutter the code, that [...]]]></description>
			<content:encoded><![CDATA[<p>This code is a VB implementation of the high precision multimedia timer which can be found in the winmm.dll.</p>
<p>I wrote this code because of the same reason I developed the multiple undo class: I wanted to have a smart solution that can be easily added to different VB projects, that doesn&#8217;t clutter the code, that doesn&#8217;t let depend my project on another custom OCX or DLL file and that is object oriented as much as possible.<br />
(...)<br/>Read the rest of <a href="http://sebthom.de/32-visual-basic-high-precision-timer/">Visual Basic &#8211; High Precision Timer v1.20</a> (171 words)</p>
<hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2002. |
<a href="http://sebthom.de/32-visual-basic-high-precision-timer/">Permalink</a> |
<a href="http://sebthom.de/32-visual-basic-high-precision-timer/#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/32-visual-basic-high-precision-timer/&amp;title=Visual Basic &#8211; High Precision Timer v1.20">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/visual-basic/" rel="nofollow tag">Visual Basic</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/32-visual-basic-high-precision-timer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Excel &#8211; VBA Timer Example v1.00</title>
		<link>http://sebthom.de/28-excel-vba-timer/</link>
		<comments>http://sebthom.de/28-excel-vba-timer/#comments</comments>
		<pubDate>Sat, 06 Apr 2002 18:52:07 +0000</pubDate>
		<dc:creator>Sebastian Thomschke</dc:creator>
				<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[VBA]]></category>

		<guid isPermaLink="false">http://sebthom.de/2007/09/excel-vba-timer/lang/de</guid>
		<description><![CDATA[A friend of mine asked me about how to let excel periodically update some worksheets.
So the first thing I did was searching the web for a solution in Visual Basic for Applications. But the only one I found was to use a 3rd party ActiveX timer control which you have to place onto a userform. [...]]]></description>
			<content:encoded><![CDATA[<p>A friend of mine asked me about how to let excel periodically update some worksheets.<br />
So the first thing I did was searching the web for a solution in Visual Basic for Applications. But the only one I found was to use a 3rd party ActiveX timer control which you have to place onto a userform. Then I found the VBA command &#8220;Application.onTime&#8221; and had an idea.</p>
<p>Here is my solution only utilizing the VBA onTime command. No need for ActiveX control or any other 3rd party module.</p>
<p>(...)<br/>Read the rest of <a href="http://sebthom.de/28-excel-vba-timer/">Excel &#8211; VBA Timer Example v1.00</a> (2 words)</p>
<hr />
<p><small>&copy; sebthom for <a href="http://sebthom.de">sebthom.de</a>, 2002. |
<a href="http://sebthom.de/28-excel-vba-timer/">Permalink</a> |
<a href="http://sebthom.de/28-excel-vba-timer/#comments">10 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://sebthom.de/28-excel-vba-timer/&amp;title=Excel &#8211; VBA Timer Example v1.00">del.icio.us</a>
<br/>
Post tags: <a href="http://sebthom.de/tag/excel/" rel="nofollow tag">Excel</a>, <a href="http://sebthom.de/tag/vba/" rel="nofollow tag">VBA</a>, <a href="http://sebthom.de/tag/visual-basic/" rel="nofollow tag">Visual Basic</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://sebthom.de/28-excel-vba-timer/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
